//+------------------------------------------------------------------+ //| ID.mq4 | //| Copyright © 2006, Oasis | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Oasis" extern double Lots = 1; extern double MaxLots = 10; extern double UnitLot = 1000; extern bool Reinvest = false; extern int StopLoss = 0; extern int TakeProfit = 0; extern int TotalOrders = 1; extern int AlligatorMode = 1; // 2 - RedLine (íå ïðîâåðåíî) 1 - All (ïðîâåðåíî) // --- --- --- extern bool Buy = true; // - ïðîâåðåíî extern bool Sell = true; // - ïðîâåðåíî extern bool TwoPosition = false; // - ïðîâåðåíî extern bool ACCross = false; // - ïðîâåðåíî extern bool AC2 = false; // - ïðîâåðåíî extern bool AC3 = false; // - ïðîâåðåíî extern bool AOCross = false; // - ïðîâåðåíî extern bool AOSaucer = false; // - ïðîâåðåíî extern bool AO2Peak = false; // - îøèáêà extern bool FractalsSignal = false; // - ïðîâåðåíî extern bool Ang = false; // - íå ïðîâåðåíî extern bool CloseZone = false; // - ïðîâåðåíî extern bool CloseFractal = false; // - ïðîâåðåíî extern bool CloseAlligator = false; // - ïðîâåðåíî //extern bool TradingZone = false; // - íå ðàáîòàåò // Ãëîáàëüíûå ïåðåìåííûå datetime TimeOpen, TimeID, Time1, Time2, TimeOpenFra; datetime TimePeak, PreTimePeak; double Peak, PrePeak, Lot; double FractalUpper, FractalLower; double SL, TP; int Ticket; // --- ïåðåìåííûå Zone bool BarsGreen, BarsRed; double PriceZone; // Èíèöèàëèçàòîð âûïîëíåíèÿ íà öåíå îòêðûòèÿ bool StartProgram() { if(TimeOpen != Time[0]) { TimeOpen = Time[0]; return(true); }else return(false); } void init() { // --- Ïåðâè÷íàÿ ïðîâåðêà (50 ïîñëåäíèõ áàðîâ) for(int a = 50; a >= 1; a--) { Fractal(a); AOModel(a); FiveBars(a); // --- îòêðûòèå ôðàêòàëîì BUY if(OrdersTotal() < TotalOrders && FractalsSignal == true && High[a] >= FractalUpper && TimeID != Time1 && High[a] > AlligatorMax(a)) TimeID = Time1; // --- îòêðûòèå ôðàêòàëîì SELL if(OrdersTotal() < TotalOrders && FractalsSignal == true && Low[a] <= FractalLower && TimeID != Time2 && Low[a] < AlligatorMin(a)) TimeID = Time2; } Print("Ïåðâè÷íàÿ ïðîâåðêà çàêîí÷åíà."); } // Çàâåðøåíèå êîäà íà init() void start() { // --- --- --- --- --- ÒÎÐÃÎÂÎÅ ßÄÐÎ --- --- --- --- --- // çàêðûòèå â çîíå if(BarsGreen == true) { if(Bid < PriceZone) { BarsGreen = false; if(CloseZone) CloseAll(); } } if(BarsRed == true) { if(Bid > PriceZone) { BarsRed = false; if(CloseZone) CloseAll(); } } // --- // --- îòêðûòèå ôðàêòàëîì BUY if(FractalsSignal == true && Buy == true && Bid >= FractalUpper && TimeID != Time1 && ( (AlligatorMode == 2 && Bid > AlligatorRed()) || (AlligatorMode == 1 && Bid > AlligatorMax()) )) { if(TwoPosition == true && OrdersTotal() != 0) { if(_OrderType() == OP_SELL) CloseAll(); } if(OrdersTotal() < TotalOrders) Buy(); TimeID = Time1; TimeOpenFra = Time[0]; } // --- îòêðûòèå ôðàêòàëîì SELL if(FractalsSignal == true && Sell == true && Bid <= FractalLower && TimeID != Time2 && ( (AlligatorMode == 2 && Bid < AlligatorRed()) || (AlligatorMode == 1 && Bid < AlligatorMin()) )) { if(TwoPosition == true && OrdersTotal() != 0) { if(_OrderType() == OP_BUY) CloseAll(); } if(OrdersTotal() < TotalOrders) Sell(); TimeID = Time2; TimeOpenFra = Time[0]; } // --- îòêðûòèå àíãóëÿöèåé BUY if(Ang == true && OrdersTotal() < TotalOrders && Low[1] < Low[2] && Low[1] < Low[3] && High[1] < AlligatorMin() && Bid > High[1]) Buy(); // --- îòêðûòèå àíãóëÿöèåé SELL if(Ang == true && OrdersTotal() < TotalOrders && High[1] > High[2] && High[1] > High[3] && Low[1] > AlligatorMax() && Bid < Low[1]) Sell(); if(StartProgram()) // --- êîä íà öåíå îòêðûòèÿ { // Âûïîëíåíèå ôóíêöèé AOModel(); Fractal(); FiveBars(); // BUY if(OrdersTotal() < TotalOrders && ((AC2 == true && ACBuy1()) || (AC3 == true && ACBuy2()) || (ACCross == true && ACBuy3()) || (AOCross == true && AOBuy1()) || (AOSaucer == true && AOBuy2()) || (AO2Peak == true && AOModel() == 1)) && Bid > AlligatorMax()) Buy(); // SELL if(OrdersTotal() < TotalOrders && ((AC2 == true && ACSell1()) || (AC3 == true && ACSell2()) || (ACCross == true && ACSell3()) || (AOCross == true && AOSell1()) || (AOSaucer == true && AOSell2()) || (AO2Peak == true && AOModel() == 2)) && Bid < AlligatorMin()) Sell(); // Çàêðûòèå ôðàêòàëîì (ïîääåðæêà îäíîãî îðäåðà) --- íà öåíå îòêðûòèÿ if(OrdersTotal() != 0 && CloseFractal == true) { if(OrderSelect(Ticket, SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && iFractals(NULL, 0, MODE_UPPER, 3) != 0 && Ask > OrderOpenPrice() + (Ask - Bid) + 1*Point) OrderClose(Ticket, Lots, Bid, 3, Orange); if(OrderType() == OP_SELL && iFractals(NULL, 0, MODE_LOWER, 3) != 0 && Bid < OrderOpenPrice() - (Ask - Bid) - 1*Point) OrderClose(Ticket, Lots, Ask, 3, Orange); } } // Çàêðûòèå Àëëèãàòîðîì (Çóáû Àëëèãàòîðà) --- íà öåíå îòêðûòèÿ !! íå çàáûòü ïîääåðæêà îäíîãî îðäåðà if(OrdersTotal() != 0 && CloseAlligator == true) { if(OrderSelect(Ticket, SELECT_BY_TICKET)) { if(OrderType() == OP_BUY && Close[1] < AlligatorRed() && TimeOpenFra != Time[0]) CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange); if(OrderType() == OP_SELL && Close[1] > AlligatorRed() && TimeOpenFra != Time[0]) CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange); } } } // îêîí÷àíèå êîäà íà StartProgram() // --- ÎÊÎÍ×ÀÍÈÅ ÒÎÐÃÎÂÎÃÎ ßÄÐÀ --- // --- --- --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ // !!ÎÊÎÍ×ÀÍÈÅ!! --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ } // Çàâåðøåíèå êîäà íà Start() // Ôóíêöèîíàë // Ñèãíàëû AC --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ // --- Buy bool ACBuy1() // Äâà çåëåíûõ ñòîëáöà âûøå 0 { if(AC(1) > AC(2) && AC(2) > AC(3) && AC(3) < AC(4) && AC(3) > 0) return(true); else return(false); } bool ACBuy2() // Òðè çåëåíûõ ñòîëáöà íèøå 0 { if(AC(1) > AC(2) && AC(2) > AC(3) && AC(3) > AC(4) && AC(4) < AC(5) && ((AC(1) < 0) || (AC(1) > 0 && AC(2) < 0))) return(true); else return(false); } bool ACBuy3() // Äâà çåëåíûõ ñòîëáöà ïðè ïåðåñå÷åíèè { if(AC(1) > AC(2) && AC(2) > AC(3) && AC(3) < AC(4) && AC(1) > 0 && AC(2) < 0) return(true); else return(false); } // --- Sell bool ACSell1() // Äâà êðàñíûõ ñòîëáöà íèæå 0 { if(AC(1) < AC(2) && AC(2) < AC(3) && AC(3) > AC(4) && AC(3) < 0) return(true); else return(false); } bool ACSell2() // Òðè êðàñíûõ ñòîëáöà âûøå 0 { if(AC(1) < AC(2) && AC(2) < AC(3) && AC(3) < AC(4) && AC(4) > AC(5) && ((AC(1) > 0) || (AC(1) < 0 && AC(2) > 0))) return(true); else return(false); } bool ACSell3() // Äâà êðàñíûõ ñòîëáöà ïðè ïåðåñå÷åíèè { if(AC(1) < AC(2) && AC(2) < AC(3) && AC(3) > AC(4) && AC(1) < 0 && AC(2) > 0) return(true); else return(false); } // Ñèãíàëû AO --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ // --- Buy bool AOBuy1() // Ïåðåñå÷åíèå { if(AO(1) > 0 && AO(2) < 0) return(true); else return(false); } bool AOBuy2() // Áëþäöå { if(AO(1) > AO(2) && AO(2) < AO(3) && AO(2) > 0) return(true); else return(false); } // --- Sell bool AOSell1() // Ïåðåñå÷åíèå { if(AO(1) < 0 && AO(2) > 0) return(true); else return(false); } bool AOSell2() // Áëþäöå { if(AO(1) < AO(2) && AO(2) > AO(3) && AO(2) < 0) return(true); else return(false); } // --- --- --- Ìîäåëü äâå âåðøèíû AO! Bull - 1; Bear - 2; N/A - 0 int AOModel(int Shift = 0) { int a = 0; if(AO(Shift + 1) > 0 && Peak < 0) {Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;} if(AO(Shift + 1) < 0 && Peak > 0) {Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;} /*if(Peak < 0 && // --- Bull (AO(Shift + 1) > AO(Shift + 2) && AO(Shift + 2) < AO(Shift + 3) && AO(Shift + 1) < 0 && AO(Shift + 3) < 0) && AO(Shift + 2) > Peak) a = 1; else a = 3; if(Peak > 0 && // --- Bear (AO(Shift + 1) < AO(Shift + 2) && AO(Shift + 2) > AO(Shift + 3) && AO(Shift + 1) > 0 && AO(Shift + 3) > 0) && AO(Shift + 2) < Peak) a = 2; else {if(a != 1) a = 3;}*/ if((AO(Shift + 1) > AO(Shift + 2) && // --- Âåðøèíà ìåíüøå íóëÿ AO(Shift + 2) < AO(Shift + 3) && AO(Shift + 1) < 0 && AO(Shift + 3) < 0/* && AO(Shift + 2) < Peak*/) || (AO(Shift + 1) < AO(Shift + 2) && // --- Âåðøèíà áîëüøå íóëÿ AO(Shift + 2) > AO(Shift + 3) && AO(Shift + 1) > 0 && AO(Shift + 3) > 0/* && AO(Shift + 2) > Peak*/) && TimePeak != Time[Shift + 2]) { PrePeak = Peak; PreTimePeak = TimePeak; Peak = AO(Shift + 2); TimePeak = Time[Shift + 2]; if(Peak < 0 && PrePeak < 0 && Peak > PrePeak) a = 1; else a = 3; if(Peak > 0 && PrePeak > 0 && Peak < PrePeak) a = 2; else {if(a != 1) a = 3;} }else a = 3; //if(a != 3) Print(a); if(a == 1) return(1); if(a == 2) return(2); if(a == 3) return(0); } // Ôèëüòð Àëëèãàòîð! // Ìèíèìàëüíîå çíà÷åíèå double AlligatorMin(int Shift = 1) { double Min; Min = MathMin(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift), iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift)); Min = MathMin(Min, iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift)); Min = NormalizeDouble(Min, Digits); return(Min); } // Ìàêñèìàëüíîå çíà÷åíèå double AlligatorMax(int Shift = 1) { double Max; Max = MathMax(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift), iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift)); Max = MathMax(Max, iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift)); Max = NormalizeDouble(Max, Digits); return(Max); } // Êðàñíàÿ ëèíèÿ àëëèãàòîðà double AlligatorRed(int Shift = 1) { double _Red = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift); return(NormalizeDouble(_Red, Digits)); } // Ôðàêòàë void Fractal(int Shift = 0) { if(iFractals(NULL, 0, MODE_UPPER, Shift + 3) > 0 && ( (iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorMax(Shift + 3) && AlligatorMode == 1) || (iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorRed(Shift + 3) && AlligatorMode == 2)) ) { FractalUpper = iFractals(NULL, 0, MODE_UPPER, Shift + 3); Time1 = Time[Shift + 3]; Print("Íàéäåí ôðàêòàë ââåðõ, çíà÷åíèå: ", DoubleToStr(FractalUpper, Digits)); } if(iFractals(NULL, 0, MODE_LOWER, Shift + 3) > 0 && ( (iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorMin(Shift + 3) && AlligatorMode == 1) || (iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorRed(Shift + 3) && AlligatorMode == 2)) ) { FractalLower = iFractals(NULL, 0, MODE_LOWER, Shift + 3); Time2 = Time[Shift + 3]; Print("Íàéäåí ôðàêòàë âíèç, çíà÷åíèå: ", DoubleToStr(FractalLower, Digits)); } } // 5 áàðîâ îäíîãî öâåòà void FiveBars(int Shift = 0) { int NumBarsGreen = 0, NumBarsRed = 0; for(int a = 1; a <= 5; a++) { if(AO(Shift + a) > AO(Shift + a + 1) && AC(Shift + a) > AC(Shift + a + 1)) NumBarsGreen++; if(AO(Shift + a) < AO(Shift + a + 1) && AC(Shift + a) < AC(Shift + a + 1)) NumBarsRed++; } if(NumBarsGreen == 5 && Low[Shift + 1] > AlligatorMax(Shift + 1)) {BarsGreen = true; BarsRed = false; PriceZone = Low[Shift + 1];} if(NumBarsRed == 5 && High[Shift + 1] < AlligatorMin(Shift + 1)) {BarsRed = true; BarsGreen = false; PriceZone = High[Shift + 1];} // --- if(BarsGreen == true && PriceZone < Low[Shift + 1]) PriceZone = Low[Shift + 1]; if(BarsRed == true && PriceZone > High[Shift + 1]) PriceZone = High[Shift + 1]; } // Çàêðûòèå âñåõ îòêðûòûõ ïîçèöèé void CloseAll() { int Orders; Orders = OrdersTotal(); for(int a = Orders; a > 0; a--) { if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES)) { int OrdTicket = OrderTicket(); double OrdLots = OrderLots(); if(OrderType() == OP_BUY) OrderClose(OrdTicket, OrdLots, Bid, 3, Orange); else OrderClose(OrdTicket, OrdLots, Ask, 3, Orange); } } } // Çíà÷åíèå èíäèêàòîðà AO! double AO(int Shift) { return(NormalizeDouble(iAO(NULL, 0, Shift), Digits + 1)); } // Çíà÷åíèå èíäèêàòîðà AC! double AC(int Shift) { return(NormalizeDouble(iAC(NULL, 0, Shift), Digits + 2)); } // Îòêðûòèå - Buy() void Buy() { if(Reinvest) Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Ask), 1); else Lot = Lots; if(Lot >= MaxLots) Lot = MaxLots; if(StopLoss != 0) SL = Bid - StopLoss*Point; else SL = 0; if(TakeProfit != 0) TP = Bid + TakeProfit*Point; else TP = 0; //--- if(AccountFreeMargin() - Lot*UnitLot*Ask > 0) Ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, SL, TP, "", 0, 0, Red); } // Îòêðûòèå - Sell() void Sell() { if(Reinvest) Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Bid), 1); else Lot = Lots; if(Lot >= MaxLots) Lot = MaxLots; if(StopLoss != 0) SL = Ask + StopLoss*Point; else SL = 0; if(TakeProfit != 0) TP = Ask - TakeProfit*Point; else TP = 0; //--- if(AccountFreeMargin() - Lot*UnitLot*Bid > 0) Ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, SL, TP, "", 0, 0, Blue); } // Òèï îòêðûòîé ïîçèöèè (åñëè îíà åñòü) int _OrderType() { if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == OP_BUY) return(0); if(OrderType() == OP_SELL) return(1); } }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Fractals
Bill Williams Alligator
Bill Williams Awesome oscillator
Bill Williams Accelerator/Decelerator oscillator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
Other Features: