//+------------------------------------------------------------------+ //| Breakdowning martingail™ v 0.9.4.mq4 | //| Copyright © 2006, B@ss & Steve | //| albass@mail333.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, B@ss & Steve" #property link "albass@mail333.com, http://forum.alpari-idc.ru" //---- #include <stdlib.mqh> // åñëè false, òî ïðè çàêðûòèè òåêóùåé ñåðèè, íîâûå îðäåðà íå áóäóò // îòêðûâàòüñÿ. extern bool TradeAllowed = true; // øàã â ïóíêòàõ óðîâíåé extern int Shag = 20; // ðàçìåð òîðãóåìîãî ëîòà, ïðè âûêëþ÷åííîì ÌÌ extern double startLots = 0.1; // âêëþ÷åíèå MoneyManagement extern bool MoneyManagement = true; // ëîãàðèôìè÷åñêèé MoneyManagement extern bool LogariphmicMM = true; // ðàçìåð ëîòà â ïðîöåíòàõ îò äåïîçèòà extern double Riskfactor = 4; // ðàçìåð íóæíîãî ïðîôèòà â ïðîöåíòàõ îò äåïîçèòà extern double ProfitPercent = 0.4; // âêëþ÷åíèå îïòèìàëüíîãî çàêðûòèÿ îðäåðîâ (ïîâûøàåò äîõîäíîñòü) extern bool OptimalTakeProfit = true; // çàêðûòèå îðäåðîâ ïî òåéêïðîôèòàì è ñòîï-ëîññàì extern bool Close_on_TP = false; /* äâà ðåæèìà Close_on_TP: true - äâèãàÿ ïåðâûé óðîâåíü ïðè äîñòèæåíèè TP (åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû) false - èäåíòè÷íûé òîìó, åñëè Close_on_TP âûêëþ÷åí (åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû, òî TP=0)*/ extern bool Mode_Close_on_TP = true; // ïîêàçûâàòü ñëóæåáíóþ èíôîðìàöèþ ïî îðäåðàì â æóðíàëå òåðìèíàëà extern bool ShowLog = false; //---- int timeOut = 5000; int maxLevel = 9; // ìàêñèìàëüíûé îòêðûòûé óðîâåíü double LotsLevel_2 = 1; // øàã ïðèðàùåíèÿ ëîòîâ ñ óâåëè÷åíèåì óðîâíÿ double LotsLevel_3 = 2; double LotsLevel_4 = 4; double LotsLevel_5 = 8; double LotsLevel_6 = 16; double LotsLevel_7 = 32; double LotsLevel_8 = 64; double LotsLevel_9 = 128; //+------------------------------------------------------------------+ //| Ôóíêöèÿ ïðîâåðÿåò íàëè÷èå îðäåðà ñ äàííûì ìàãè÷åñêèì íîìåðîì | //+------------------------------------------------------------------+ bool isMgNum(int num) { int t, cnt1; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderMagicNumber() == num && OrderSymbol() == Symbol()) { return (True); // âîçâðàùàåìîå çíà÷åíèå } } return (False); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ óäàëåíèÿ îðäåðà ïî ìàãè÷åñêîìó íîìåðó | //+------------------------------------------------------------------+ bool deleteOrderNum(int num) { int t, cnt1, err; bool tic; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { // òîëüêî äëÿ äàííîãî èíñòðóìåíòà if(OrderMagicNumber() == num && (OrderType()==OP_BUYSTOP || OrderType() == OP_SELLSTOP)) { int start = GetTickCount(); tic = OrderDelete(OrderTicket()); Print("Âðåìÿ óäàëåíèÿ ", (GetTickCount() - start) / 1000, " ñåêóíä."); //---- if(tic) PlaySound("timeout.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } return(True); // âîçâðàùàåìîå çíà÷åíèå } } } return (False); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ, ïðîâåðÿþùàÿ, àêòèâèðîâàí ëè äàííûé îðäåð â îòêðûòóþ | //| ïîçèöèþ | //+------------------------------------------------------------------+ bool isOrderActive(int num) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ { int t, cnt1; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderMagicNumber()== num) { //---- if(OrderType() == OP_BUY || OrderType() == OP_SELL) { return(True); // âîçâðàùàåìîå çíà÷åíèå } } } } return (False); } //+------------------------------------------------------------------+ //| Îïðåäåëåíèå ìàêñèìàëüíî îòêðûòûõ ëîòîâ ïî äàííîìó èíñòðóìåíòó | //+------------------------------------------------------------------+ double getTopLots (int mode) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ { int t, cnt1; double topL, topL_buy, topL_sell; t = OrdersTotal(); topL = 0; for(cnt1 = 0; cnt1 < t; cnt1++) //---- { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderType() == OP_BUY && mode == 1) // äëÿ áàé { //---- if(OrderLots() > topL) { topL = OrderLots(); } } //---- if(OrderType() == OP_SELL && mode == 2) // äëÿ ñåëë { if(OrderLots() > topL) { topL = OrderLots(); } } // ðàçíèöà â ëîòàõ ìåæäó áàé è ñåëë (äëÿ âû÷èñëåíèÿ ïðîôèòà íóæíîãî) if(mode == 3) { //---- if(OrderType() == OP_SELL && OrderLots() > topL_sell) { topL_sell = OrderLots(); } //---- if(OrderType() == OP_BUY && OrderLots() > topL_buy) { topL_buy = OrderLots(); } topL = MathAbs(topL_sell - topL_buy); } } } return (topL); } //+------------------------------------------------------------------+ //| Îïðåäåëåíèå ìàñèìàëüíîãî óðîâíÿ äëÿ äëèííûõ èëè êîðîòêèõ ïîçèöèé| | //+------------------------------------------------------------------+ int getTopLevel (int mode) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ { int t, cnt1, tLev, cLev; t = OrdersTotal(); cLev = 0; tLev = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderType() == OP_BUY || OrderType() == OP_SELL) { //òîëüêî àêòèâèðîâàííûå ïîçèöèè if(mode == 1) { //ïðîâåðêà óðîâíÿ äëÿ ëîíãîâ if(OrderMagicNumber() == 851) cLev = 9; //---- if(OrderMagicNumber() == 841) cLev = 8; //---- if(OrderMagicNumber() == 831) cLev = 7; //---- if(OrderMagicNumber() == 821) cLev = 6; //---- if(OrderMagicNumber() == 811) cLev = 5; //---- if(OrderMagicNumber() == 801) cLev = 4; //---- if(OrderMagicNumber() == 791) cLev = 3; //---- if(OrderMagicNumber() == 781) cLev = 2; //---- if(OrderMagicNumber() == 771) cLev = 1; } else { //ïðîâåðêà óðîâíÿ äëÿ øîðòîâ if(OrderMagicNumber() == 852) cLev = 9; //---- if(OrderMagicNumber() == 842) cLev = 8; //---- if(OrderMagicNumber() == 832) cLev = 7; //---- if(OrderMagicNumber() == 822) cLev = 6; //---- if(OrderMagicNumber() == 812) cLev = 5; //---- if(OrderMagicNumber() == 802) cLev = 4; //---- if(OrderMagicNumber() == 792) cLev = 3; //---- if(OrderMagicNumber() == 782) cLev = 2; //---- if(OrderMagicNumber() == 772) cLev = 1; } } } //---- if(cLev > tLev) tLev = cLev; } return (tLev); } //+------------------------------------------------------------------+ //| Îïðåäåëåíèå, ñêîëüêî ëîòîâ îòêðûâàòü ïî çàäàííîìó íîìåðó óðîâíÿ | //+------------------------------------------------------------------+ double getLotByLevel (int level) // ôóíêöèÿ äëÿ âû÷èñëåíèÿ ëîòà ïî óðîâíþ { double lot1; lot1 = startLots; // çíà÷åíèå ïî óìîë÷àíèþ // ïåðâûå îðäåðà - òîëüêî äëÿ îòñ÷åòà óðîâíåé, ïîçèöèè ðàçìåðîì 0,1 ëîòà if(level == 1) lot1 = 0.1; //---- if(level == 2) lot1 = NormalizeDouble(startLots*LotsLevel_2, 1); //---- if(level == 3) lot1 = NormalizeDouble(startLots*LotsLevel_3, 1); //---- if(level == 4) lot1 = NormalizeDouble(startLots*LotsLevel_4, 1); //---- if(level == 5) lot1 = NormalizeDouble(startLots*LotsLevel_5, 1); //---- if(level == 6) lot1 = NormalizeDouble(startLots*LotsLevel_6, 1); //---- if(level == 7) lot1 = NormalizeDouble(startLots*LotsLevel_7, 1); //---- if(level == 8) lot1 = NormalizeDouble(startLots*LotsLevel_8, 1); //---- if(level == 9) lot1 = NormalizeDouble(startLots*LotsLevel_9, 1); return(lot1); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ äëÿ ïîëó÷åíèÿ öåíû îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó | //| íîìåðó | //+------------------------------------------------------------------+ double getOrderPriceByNum (int num) { int t, cnt1; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderMagicNumber() == num) { return(OrderOpenPrice()); } } } return (0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ äëÿ ïîëó÷åíèÿ âðåìåíè îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó| //| íîìåðó | //+------------------------------------------------------------------+ datetime getOrderOpenTimeByNum (int num) { int t, cnt1; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderMagicNumber() == num) { return(OrderOpenTime()); } } } return (0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ ëîíãîâ ïî äàííîìó èíñòðóìåíòó | //+------------------------------------------------------------------+ double getBuyLotsSum(int mode) { int t, cnt1; double sm; t = OrdersTotal(); sm = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(mode != 1) { //---- if(OrderType() == OP_BUY && OrderSymbol() == Symbol()) { sm = sm + OrderLots(); } } else { //à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà if(OrderType() == OP_BUY) { sm = sm + OrderLots(); } } } return(sm); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ øîðòîâ ïî äàííîìó èíñòðóìåíòó | //+------------------------------------------------------------------+ double getSellLotsSum(int mode) { int t, cnt1; double sm; t = OrdersTotal(); sm = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(mode != 1) { //---- if(OrderType() == OP_SELL && OrderSymbol() == Symbol()) { sm = sm + OrderLots(); } } else { //à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà if(OrderType() == OP_SELL) { sm = sm + OrderLots(); } } } return(sm); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ äëÿ ìîäèôèêàöèè îòëîæåííûõ îðäåðîâ ëîíãîâ. Çäåñü | //| îïðåäåëÿåì ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî îðäåðà äëÿ | //| ëîíãîâ | //+------------------------------------------------------------------+ int getMaxLongNum() { int t, cnt1; int topL; t = OrdersTotal(); topL = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderType() == OP_BUY) { //---- if(OrderMagicNumber() > topL) topL = OrderMagicNumber(); } } } return (topL); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ îïðåäåëÿåò ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî | //| îðäåðà äëÿ øîðòîâ | //+------------------------------------------------------------------+ int getMaxShortNum() { int t, cnt1; int topL; t = OrdersTotal(); topL = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderType() == OP_SELL) { //---- if(OrderMagicNumber() > topL) topL = OrderMagicNumber(); } } } return (topL); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ îïðåäåëÿåò ñëåäóþùèé ìàãè÷åñêèé íîìåð ïî äàííîìó | //+------------------------------------------------------------------+ int getNextOrderNum(int n1) { //---- if(n1 == 771) return(781); //---- if(n1 == 781) return(791); //---- if(n1 == 791) return(801); //---- if(n1 == 801) return(811); //---- if(n1 == 811) return(821); //---- if(n1 == 821) return(831); //---- if(n1 == 831) return(841); //---- if(n1 == 841) return(851); //---- if(n1 == 772) return(782); //---- if(n1 == 782) return(792); //---- if(n1 == 792) return(802); //---- if(n1 == 802) return(812); //---- if(n1 == 812) return(822); //---- if(n1 == 822) return(832); //---- if(n1 == 832) return(842); //---- if(n1 == 842) return(852); return (0); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ âû÷èñëåíèÿ ìàãè÷åñêîãî íîìåðà ïî íîìåðó óðîâíÿ | //+------------------------------------------------------------------+ int getNum(int dir, int level) { //---- if(dir == 1) { //äëÿ ëîíãîâ if(level == 1) return(771); //---- if(level == 2) return(781); //---- if(level == 3) return(791); //---- if(level == 4) return(801); //---- if(level == 5) return(811); //---- if(level == 6) return(821); //---- if(level == 7) return(831); //---- if(level == 8) return(841); //---- if(level == 9) return(851); } else { //---- if(level == 1) return(772); //---- if(level == 2) return(782); //---- if(level == 3) return(792); //---- if(level == 4) return(802); //---- if(level == 5) return(812); //---- if(level == 6) return(822); //---- if(level == 7) return(832); //---- if(level == 8) return(842); //---- if(level == 9) return(852); } } //+------------------------------------------------------------------+ //| Ôóíêöèÿ ìîäèôèêàöèè îòëîæåííîãî îðäåðà. Çäåñü ïîëó÷àåì | //| âû÷èñëåííûå öåíû îòêðûòèÿ è òýéêïðîôèòà äëÿ îòëîæåííûõ îðäåðîâ | //| è åñëè îíè îòëè÷àþòñÿ îò öåí ìîäèôèöèðóåìîãî îðäåðà, èçìåíÿåì èõ| //+------------------------------------------------------------------+ int modOrder(int num, double oprice, double prprice) { int t, cnt1, err, start; bool tic; double p1, p2; t = OrdersTotal(); //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol() && OrderMagicNumber() == num) { //---- if((OrderOpenPrice() != oprice || OrderTakeProfit() != prprice) && oprice != 0) { //---- if(OrderType() == OP_BUYSTOP) { p1 = oprice; p2 = prprice; NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS)); NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS)); //---- if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits) || NormalizeDouble(OrderTakeProfit(), Digits) != NormalizeDouble(p2, Digits)) { start = GetTickCount(); tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green); //---- if(ShowLog) { Print("ìîäèô BUYSTOP ", OrderOpenPrice(), "->", p1, " t/p ", OrderTakeProfit(),"->", p2); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } //---- if(OrderType() == OP_SELLSTOP) { p1 = oprice; p2 = prprice; NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS)); NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS)); //---- if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits) || NormalizeDouble(OrderTakeProfit(), Digits) != NormalizeDouble(p2, Digits)) { start = GetTickCount(); tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green); //---- if(ShowLog) { Print("ìîäèô SELLSTOP ", OrderOpenPrice(), "->", p1, " t/p ", OrderTakeProfit(),"->", p2); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } } } } return (1); } //+------------------------------------------------------------------+ //| Ôóíêöèÿ ïîäñ÷åò ïðîôèòà ïî ïîçèöèÿì â çàâèñèìîñòè îò ðåæèìà. Ïðè| //| mode=1 òîëüêî äëÿ òåêóùåãî èíñòðóìåíòà, ïðè ëþáîì äðóãîì äëÿ | //| âñåõ ïîçèöèé ñ÷åòà | //+------------------------------------------------------------------+ double getAllProfit(int mode) { int t, cnt1; double pf; t = OrdersTotal(); pf = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(mode == 1) { //---- if(OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } } else { //---- if(mode == 2 && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } //---- if(mode == 3 && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } } } return (pf); } //+------------------------------------------------------------------+ //| ïðè ëþáîì äðóãîì äëÿ âñåõ ïîçèöèé ñ÷åòà | //+------------------------------------------------------------------+ double getDayProfit(int mode, int dayShift) { int t, cnt1, cyear, cmonth, cday; double pf; datetime ctm; t = HistoryTotal(); pf = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY); ctm = OrderCloseTime(); cyear = TimeYear(ctm); cmonth = TimeMonth(ctm); cday = TimeDay(ctm); //---- if(cyear == Year() && cmonth == Month() && cday == (Day() - dayShift)) { //---- if(mode==1) { //ïðèáûëü ïî ëîíãàì è øîðòàì if(OrderType() == OP_BUY || OrderType() == OP_SELL) { pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } } else { //---- if(mode == 2 && OrderType() == OP_BUY) { //ïðèáûëü òîëüêî ïî ëîíãàì pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } //---- if(mode == 3 && OrderType() == OP_SELL) { //ïðèáûëü òîëüêî ïî øîðòàì pf = pf + OrderProfit() + OrderSwap() + OrderCommission(); } } } } return (pf); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double getLevelPositions(int mode, int level) { int t, cnt1; double pf; t = HistoryTotal(); pf = 0; //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY); //---- if(OrderSymbol() == Symbol()) { //ïðîâåðêà èíñòðóìåíòà if(OrderType() == OP_BUY || OrderType() == OP_SELL) { //---- if(mode == 1 && (OrderMagicNumber() == level || OrderMagicNumber() == (level + 1))) { //ñ÷èòàåì òîëüêî ñäåëêè îäíîãî óðîâíÿ pf = pf + 1; } //---- if(mode == 2) { //ñ÷åò ñäåëîê ïî âñåì óðîâíÿì pf = pf + 1; } } } } return (pf); } //+------------------------------------------------------------------+ //| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð SellStop | //+------------------------------------------------------------------+ double setPriceSellStop() { double topPrice, PriceSetka, HighestPriceInRange; int NumPoloski, NumBarsAfterOpenedOrder; datetime OpenOrderTime; topPrice = getOrderPriceByNum(getMaxShortNum()); OpenOrderTime = getOrderOpenTimeByNum(getMaxShortNum()); NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false); HighestPriceInRange = Highest(NULL, 0, MODE_HIGH, NumBarsAfterOpenedOrder, 0); // íîìåð ïîëîñêè ïîä òåêóùåé öåíîé BID NumPoloski = MathAbs(MathFloor((Bid - topPrice) / (Shag*Point))); // çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå PriceSetka = topPrice + NumPoloski*Shag*Point; //---- if(HighestPriceInRange < PriceSetka + Shag*Point && PriceSetka >= topPrice+Shag*Point && Bid > topPrice) { return(NormalizeDouble(PriceSetka - Shag*Point,Digits)); } } //+------------------------------------------------------------------+ //| Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð BuyStop | //+------------------------------------------------------------------+ double setPriceBuyStop() { double lowPrice, PriceSetka, LowestPriceInRange; int NumPoloski, NumBarsAfterOpenedOrder; datetime OpenOrderTime; lowPrice = getOrderPriceByNum(getMaxLongNum()); OpenOrderTime = getOrderOpenTimeByNum(getMaxLongNum()); NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false); LowestPriceInRange = Lowest(NULL, 0, MODE_LOW, NumBarsAfterOpenedOrder, 0); // íîìåð ïîëîñêè íàä òåêóùåé öåíîé ASK NumPoloski = MathAbs(MathFloor((lowPrice - Ask) / (Shag*Point))); // çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå PriceSetka = lowPrice - NumPoloski*Shag*Point; //---- if(LowestPriceInRange > PriceSetka - Shag*Point && PriceSetka <= lowPrice - Shag*Point && Ask < lowPrice) { return(NormalizeDouble(PriceSetka + Shag*Point,Digits)); } } //+------------------------------------------------------------------+ //| Ôóíêöèÿ çàêðûòèÿ îðäåðîâ ïî äîñòèæåíèþ ïðîôèòà | //+------------------------------------------------------------------+ bool getProfitOrdersClose() { int cnt1, err, tic1,tic2, LotBy, LotBy1,i; bool ticdone; int T1[10], T2[10], a; a = 0; //---- for(cnt1 = 0; cnt1 < OrdersTotal(); cnt1++) { //ïðîâåðÿåì, ìîæíî ëè çàêðûòü âñòðå÷íûå îðäåðà áåç ïîòåðè ñïðåäà OrderSelect(cnt1, SELECT_BY_POS); tic1 = OrderTicket(); LotBy = OrderLots(); //---- if(OrderType() == OP_SELL) { //---- for(i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS); tic2 = OrderTicket(); LotBy1 = OrderLots(); //---- if(OrderType() == OP_BUY && LotBy == LotBy1 && OrderSelect(tic1, SELECT_BY_TICKET) && OrderSelect(tic2, SELECT_BY_TICKET)) { T1[a] = tic1; T2[a] = tic2; a++; } } } } for(cnt1 = 0; cnt1 < a; cnt1++) { // çàêðûâàåì âñòðå÷íûå îðäåðà if(OrderSelect(T1[cnt1], SELECT_BY_TICKET) && OrderSelect(T2[cnt1], SELECT_BY_TICKET)) { ticdone = OrderCloseBy(T1[cnt1], T2[cnt1], Green); //---- if(!ticdone) { err = GetLastError(); //---- if(err != 0 && err != 1) Print ("Îøèáêà çàêðûòèÿ âñòðå÷íîãî îðäåðà = ", ErrorDescription(err)); } Sleep(timeOut); } } for(cnt1 = OrdersTotal(); cnt1 >= 0; cnt1--) { // çàêðûâàåì âñå îñòàâøèåñÿ îðäåðà OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES); //---- if(OrderSymbol() == Symbol()) { //---- if(OrderType() == OP_BUY) { ticdone = OrderClose(OrderTicket(), OrderLots(), Ask, 3, Green); //---- if(ticdone) PlaySound("timeout.wav"); //---- if(!ticdone) { err = GetLastError(); if(err != 0) Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err)); } Sleep(timeOut); } //---- if(OrderType() == OP_SELL) { ticdone = OrderClose(OrderTicket(), OrderLots(), Bid, 3, Green); //---- if(ticdone) PlaySound("timeout.wav"); //---- if(!ticdone) { err = GetLastError(); //---- if(err != 0) Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err)); } Sleep(timeOut); } } } return (False); } //+------------------------------------------------------------------+ //| Ñóììà ëîòîâ âñåõ îòêðûòûõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ | //| çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè | //+------------------------------------------------------------------+ double getSumLots(int mode) { int i; double sumLots; //---- for(i = 0; i <= OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS); //---- if(OrderType() == OP_BUY && mode == 1) { sumLots = sumLots + OrderLots(); } //---- if(OrderType() == OP_SELL && mode == 2) { sumLots = sumLots + OrderLots(); } } return(sumLots); } //+------------------------------------------------------------------+ //| Âçâåøåííàÿ öåíà äëÿ âñåõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ | //| çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè | //+------------------------------------------------------------------+ double getSumWeightedPrice(int mode) { int i; double sumWeightedPrice; //---- for(i = 0; i <= OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS); //---- if(OrderType() == OP_BUY && mode == 1) { sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice(); } //---- if(OrderType() == OP_SELL && mode == 2) { sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice(); } } return(sumWeightedPrice); } //+------------------------------------------------------------------+ //| Îïðåäåëåíèå öåí çàêðûòèÿ âñåõ îðäåðîâ, íåîáõîäèìûõ äëÿ | //| âûñòàâëåíèÿ òåéêïðîôèòîâ è ñòîïëîññîâ äëÿ îðäåðîâ | //+------------------------------------------------------------------+ double getOptimalTakeProfit(bool mode, bool SELL_BUY) { //ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à double TempOptimalTP, TempOptimalTP_sell, TempOptimalTP_buy, NeedTP_points, lots; int i; double multiplier, profit_money, price_tick; //---- if(mode) { multiplier = MathSqrt(getTopLots(3)); } //---- if(!mode) { multiplier=1; } profit_money = AccountBalance()*ProfitPercent*multiplier / 100; price_tick = MarketInfo(Symbol(), MODE_TICKVALUE); // íåîáõîäèìîå êîëè÷åñòâî ïóíêòîâ (ïðè ëîòå=1) äëÿ äîñòèæåíèÿ ïðîôèòà NeedTP_points = profit_money*Point / price_tick; lots = getSumLots(1) + getSumLots(2); //---- if(getSumLots(2) != 0) { TempOptimalTP_sell = (getSumWeightedPrice(2) - NeedTP_points) / getSumLots(2); } else { TempOptimalTP_sell=0; } // áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à //---- if(getSumLots(1) != 0) { TempOptimalTP_buy = (getSumWeightedPrice(1) + NeedTP_points) / getSumLots(1); } else { TempOptimalTP_buy = 0; } //áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à //---- if(!SELL_BUY) { //---- if(getTopLevel(1) == getTopLevel(2)) { TempOptimalTP = TempOptimalTP_buy; } else { //---- if(lots != 0) { TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) + TempOptimalTP_sell*getSumLots(2) + NeedTP_points) / lots; } else { TempOptimalTP = 0; } } //ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à return(NormalizeDouble(TempOptimalTP_buy, Digits)); } //---- if(SELL_BUY) { //---- if(getTopLevel(1) == getTopLevel(2)) { TempOptimalTP=TempOptimalTP_sell; } else { //---- if(lots != 0) { TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) + TempOptimalTP_sell*getSumLots(2) - NeedTP_points) / lots; } else { TempOptimalTP = 0; } } // ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à return(NormalizeDouble(TempOptimalTP_sell, Digits)); } } //+------------------------------------------------------------------+ //| Ôóíêöèÿ èçìåíÿåò òåêóùèé òýéêïðîôèò äëÿ âñåõ îòêðûòûõ ïîçèöèé íà| //| öåíó óðîâíÿ òðåáóåìîé äîõîäíîñòè | | //+------------------------------------------------------------------+ void setNewTakeProfit() { int t, cnt1, err, start; bool tic; double priceTP_buy, priceTP_sell, priceSL_buy, priceSL_sell, s, spread; t = OrdersTotal(); s = MarketInfo(Symbol(), MODE_SPREAD); spread = s*Point; priceTP_buy = getOptimalTakeProfit(OptimalTakeProfit, false); priceTP_sell = getOptimalTakeProfit(OptimalTakeProfit, true); priceSL_buy = priceTP_sell; priceSL_sell = priceTP_buy; //---- if(getTopLevel(1) > getTopLevel(2)) { //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS); //---- if(OrderType() == OP_BUY && OrderTakeProfit() != priceTP_buy - spread) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread, 0, Green); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", priceTP_buy-spread, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } //---- if(OrderType() == OP_SELL && OrderStopLoss() != priceSL_sell) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_sell, 0, 0, Yellow); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé SL OP_SELL -", OrderTakeProfit(), "->", priceSL_sell, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } } //---- if(getTopLevel(1) < getTopLevel(2)) { //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS); //---- if(OrderType() == OP_BUY && OrderStopLoss() != priceSL_buy) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_buy, 0, 0, Green); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé SL OP_BUY -", OrderTakeProfit(), "->", priceSL_buy, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } //---- if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread, 0, Yellow); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", priceTP_sell + spread, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } } //---- if(getTopLevel(1) == getTopLevel(2) && !Mode_Close_on_TP) { //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS); //---- if(OrderType() == OP_BUY && OrderTakeProfit() != 0) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Green); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", 0, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } //---- if(OrderType() == OP_SELL && OrderTakeProfit() != 0) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Yellow); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", 0, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } } //---- if(getTopLevel(1) == getTopLevel(2) && Mode_Close_on_TP) { //---- for(cnt1 = 0; cnt1 < t; cnt1++) { OrderSelect(cnt1, SELECT_BY_POS); //---- if(OrderType()==OP_BUY && OrderTakeProfit()!=priceTP_buy-spread) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread, 0, Green); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", priceTP_buy-spread, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } //---- if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread) { start = GetTickCount(); tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread, 0, Yellow); //---- if(ShowLog) { Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", priceTP_sell+spread, " lots= ", OrderLots(), " ticket= ", OrderTicket()); Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(tic) PlaySound("alert.wav"); //---- if(!tic) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } } } } //+------------------------------------------------------------------+ //| Breakdowning martingail™ v 0.9.4 | //+------------------------------------------------------------------+ int start() { double s, spread, allDeals=0,Risk, level; int total, err, i, start; string level_str; bool ticket; s = MarketInfo(Symbol(), MODE_SPREAD); spread = s*Point; // Âêëþ÷åíèå ìàíèìåíåäæìåíòà (âû÷èñëåíèå ëîòîâ) if(MoneyManagement == true && LogariphmicMM == true) { Risk = MathCeil(Riskfactor*100 / MathSqrt(AccountBalance())); //---- if(Risk >= 20) Risk = 20; startLots = MathCeil(AccountBalance()*Risk / 10000) / 10; //---- if(startLots > MarketInfo(Symbol(), MODE_MAXLOT)) { startLots = MarketInfo(Symbol(), MODE_MAXLOT); } //---- if(startLots < MarketInfo(Symbol(), MODE_MINLOT)) { startLots = MarketInfo(Symbol(), MODE_MINLOT); } } //---- if(MoneyManagement == true && LogariphmicMM == false) { startLots = NormalizeDouble(AccountBalance()*Riskfactor / 100000, 1); //---- if(startLots > MarketInfo(Symbol(), MODE_MAXLOT)) { startLots = MarketInfo(Symbol(), MODE_MAXLOT); } //---- if(startLots < MarketInfo(Symbol(), MODE_MINLOT)) { startLots = MarketInfo(Symbol(), MODE_MINLOT); } } //---- if(MoneyManagement == false && LogariphmicMM == false) { startLots = startLots; } //Ðàñïå÷àòêà ðàçëè÷íîé èíôîðìàöèè íà ýêðàíå allDeals = getLevelPositions(2,0); //---- if(getTopLevel(1) > getTopLevel(2)) { level = getOptimalTakeProfit(OptimalTakeProfit, false) - spread; } //---- if(getTopLevel(1) < getTopLevel(2)) { level = getOptimalTakeProfit(OptimalTakeProfit, true) + spread; } //---- if(level != 0) { level_str = DoubleToStr(level, Digits); } else { level_str = " ïîêà íåò, æäåì..."; } // ðàñïå÷àòêà óðîâíÿ çàêðûòèÿ âñåõ îðäåðîâ Comment("", "\n", " B R E A K D O W N I N G M A R T I N G A I L ™ v. 0.9.4", " Ïëàíèðóåìûé óðîâåíü çàêðûòèÿ ñåðèè : ",level_str,"\n", " Ïðîôèò ïî ëîíãàì = ", NormalizeDouble(getAllProfit(2),2)," $", "\n", " Ïðîôèò ïî øîðòàì = ", NormalizeDouble(getAllProfit(3),2)," $", "\n", " ---------------------------------------------------", "\n", " Ïðîôèò ñåãîäíÿ = ", NormalizeDouble(getDayProfit(1, 0),2), " $","\n", " Ïðîôèò â÷åðà = ", NormalizeDouble(getDayProfit(1, 1),2)," $", "\n", " Ïðîôèò ïîçàâ÷åðà = ", NormalizeDouble(getDayProfit(1, 2),2)," $", "\n", " ---------------------------------------------------", "\n", " Balance = ",NormalizeDouble(AccountBalance(),2)," $","\n", " Equity = ",NormalizeDouble(AccountEquity(),2)," $","\n", " Free Margin = ",NormalizeDouble(AccountFreeMargin(),2)," $","\n", " ______________________________", "\n", " Sell Lots = ", getSellLotsSum(1), " | Buy Lots = ", getBuyLotsSum(1), "\n" ); // ïðîâåðêà äîñòàòî÷íîãî êîëè÷åñòâà ìàðæè íà ñ÷åòå if(AccountFreeMargin() < (1000) && ShowLog) { Print("Ìàëî äåíåã íà ñ÷åòå. Free Margin = ", AccountFreeMargin()); PlaySound("timeout.wav"); return(0); } total = OrdersTotal(); // âûñòàâëåíèå ïåðâîãî óðîâíÿ, êîãäà Mode_Close_on_TP=true èëè îðäåðà ïåðâîãî óðîâíÿ // ñòîÿò ñëèøêîì äàëåêî äðóã îò äðóãà if(MathAbs(getOrderPriceByNum(getNum(1, 1)) - getOrderPriceByNum(getNum(0, 1))) > (MarketInfo(Symbol(), MODE_SPREAD) + 10)*Point && Mode_Close_on_TP && Close_on_TP) { getProfitOrdersClose(); } //âûñòàâëåíèå ïåðâûõ îðäåðîâ ñåðèè, åñëè òàêèõ åùå íåò if(isMgNum(getNum(1, 1)) == False && TradeAllowed) { start = GetTickCount(); ticket = OrderSend(Symbol(), OP_BUY, getLotByLevel(1), NormalizeDouble(Ask, Digits), 3, 0, 0, "ïåðâàÿ ëîíã", getNum(1, 1), 0, Green); //---- if(ShowLog) { Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè ëîíãîâ ", Symbol(), " ask= ", Ask, " ticket=", ticket); Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(ticket) PlaySound("alert.wav"); //---- if(!ticket) { err = GetLastError(); Print("Îøèáêà = ", err, " (",ErrorDescription(err), ")"); } Sleep(timeOut); } //---- if(isMgNum(getNum(0, 1)) == False && TradeAllowed) { start = GetTickCount(); ticket = OrderSend(Symbol(), OP_SELL, getLotByLevel(1), NormalizeDouble(Bid, Digits), 3, 0, 0, "ïåðâàÿ øîðò", getNum(0, 1), 0, Green); //---- if(ShowLog) { Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè øîðòîâ ", Symbol(), " Bid= ", Bid, " ticket=", ticket); Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(ticket) PlaySound("alert.wav"); //---- if(!ticket) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); } //âûñòàâëÿåì îðäåðà äëÿ ëîíãîâ if(getTopLevel(1) < maxLevel) { //---- for(i = 1; i < 9; i++) { //---- if(getTopLevel(1) == i && isMgNum(getNum(1, i + 1)) == False && isOrderActive(getNum(1, i)) == True && setPriceBuyStop() != 0 && getOrderPriceByNum(getMaxLongNum())!=setPriceBuyStop()) { start = GetTickCount(); ticket = OrderSend(Symbol(), OP_BUYSTOP, getLotByLevel(getTopLevel(1) + 1), setPriceBuyStop(), 3, 0, 0, StringConcatenate(i + 1, " ëîíã"), getNum(1, i + 1), 0, Green); //---- if(ShowLog) { Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(ticket) PlaySound("alert.wav"); //---- if(!ticket) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); return(1); } } } //âûñòàâëÿåì îðäåðà äëÿ øîðòîâ if(getTopLevel(2) < maxLevel) { //---- for(i = 1; i < 9; i++) { //---- if(getTopLevel(2) == i && isMgNum(getNum(0, i + 1)) == False && isOrderActive(getNum(0, i)) == True && setPriceSellStop() != 0 && getOrderPriceByNum(getMaxShortNum()) != setPriceSellStop()) { start = GetTickCount(); ticket = OrderSend(Symbol(), OP_SELLSTOP, getLotByLevel(getTopLevel(2) + 1), setPriceSellStop(), 3, 0, 0, StringConcatenate(i + 1, " øîðò"), getNum(0, i + 1), 0, Red); //---- if(ShowLog) { Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä."); } //---- if(ticket) PlaySound("alert.wav"); //---- if(!ticket) { err = GetLastError(); Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")"); } Sleep(timeOut); return(1); } } } //ìîäèôèêàöèÿ îòëîæåííûõ îðäåðîâ BuyStop è SellStop if(getOrderPriceByNum(getNextOrderNum(getMaxShortNum())) < setPriceSellStop() && setPriceSellStop() != 0) // äëÿ øîðòîâ { modOrder(getNextOrderNum(getMaxShortNum()), setPriceSellStop(), 0); } //---- if(getOrderPriceByNum(getNextOrderNum(getMaxLongNum())) > setPriceBuyStop() && setPriceBuyStop() != 0) // äëÿ ëîíãîâ { modOrder(getNextOrderNum(getMaxLongNum()), setPriceBuyStop(), 0); } //---- if(getAllProfit(1) > AccountBalance()*ProfitPercent*MathSqrt(getTopLots(3)) / 100 && !Close_on_TP) { //ïðè äîñòèæåíèè íåîáõîäèìîãî ïðîôèòà çàêðûâàåì âñå îðäåðà getProfitOrdersClose(); } //---- if(Close_on_TP) { //ïðîâåðÿåì, ìîæíî ëè èçìåíèòü óðîâíè òåéêïðîôèòà è ñòîïëîññà äëÿ âñåõ îòêðûòûõ îðäåðîâ setNewTakeProfit(); } // Óäàëåíèå âñåõ ëèøíèõ îðäåðîâ â ñëó÷àå, åñëè ñåðèÿ çàêðûëàñü ïðîôèòîì, òî åñòü åñëè // íåò îòêðûòûõ îðäåðîâ ïåðâîé ñòóïåíè. Óäàëåíèå ëèøíèõ ëîíãîâ, åñëè íåò îðäåðà ïåðâîé ñòóïåíè if(isOrderActive(getNum(1, 1)) == False) { //---- for(i = getNum(1, 2); i < getNum(1, 9); i += 10) { //íà÷èíàåì ïåðåáèðàòü âñå ñî âòîðîãî óðîâíÿ deleteOrderNum(i); } } //---- if(isOrderActive(getNum(0, 1)) == False) { //äëÿ øîðòîâ for(i = getNum(0, 2); i < getNum(0, 9); i += 10) { deleteOrderNum(i); } } return(0); } //+------------------------------------------------------------------+ // the end.
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself
It automatically opens orders when conditions are reached
Other Features:
It plays sound alerts