//+------------------------------------------------------------------+ //| (ModifyOrder).mq4 | //| Copyright © 2005, komposter | //| mailto:komposterius@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, komposter" #property link "mailto:komposterius@mail.ru" /* -----------------------------Â-Í-È-Ì-À-Í-È-Å--------------------------------- Ïåðåä çàïóñêîì ñêðèïòà íàñòîÿòåëüíî ðåêîìåíäóþ èçó÷èòü ñëåäóþùåå ðóêîâîäñòâî: Ñêðèïò ïðåäíàçíà÷åí äëÿ ìîäèôèêàöèè/óäàëåíèÿ/çàêðûòèÿ ïîçèöèè/îòëîæåííîãî îðäåðà. Äëÿ ýòîãî íåîáõîäèìî: 1) Îçíàêîìèòüñÿ ñ äàííûì ðóêîâîäñòâîì =), !óñòàíîâèòü çíà÷åíèÿ ïî óìîë÷àíèþ! (íàõîäÿòñÿ ïîä îïèñàíèåì, íà÷èíàþòñÿ è çàêàí÷èâàþòñÿ ñòðîêîé //+----------------------------------------------+ ), ðàçðåøèòü èìïîðò âíåøíèõ ýêñïåðòîâ ÷åðåç ìåíþ "Ñåðâèñ" -> "Íàñòðîéêè" -> "Ñîâåòíèêè" -> "Ðàçðåøèòü èìïîðòèðîâàíèå âíåøíèõ ýêñïåðòîâ" (íåîáõîäèìî äëÿ îïèñàíèÿ îøèáêè, êîòîðàÿ ìîæåò âîçíèêíóòü ïðè ìîäèôèêàöèè îðäåðà) 2) Ïåðåòàùèòü ñêðèïò íà ãðàôèê íåäàëåêî îò îðäåðà/ïîçèöèè, êîòîðûé(-óþ) íåîáõîäèìî ìîäèôèöèðîâàòü. 3) Ïåðåìåñòèòü âñå ëèíèè íà íåîáõîäèìûå óðîâíè: - Open_Price_Line (ïî óìîë÷àíèþ - áåëàÿ) - öåíà îòêðûòèÿ (ÒÎËÜÊÎ ÄËß ÎÒËÎÆÅÍÍÛÕ ÎÐÄÅÐÎÂ) - Stop_Loss_Line (êðàñíàÿ) - óðîâåíü Ñòîï Ëîññ - Take_Profit_Line (çåë¸íàÿ) - óðîâåíü Òåéê Ïðîôèò - Expiration_Line (æ¸ëòàÿ) - âðåìÿ èñòå÷åíèÿ (ÒÎËÜÊÎ ÄËß ÎÒËÎÆÅÍÍÛÕ ÎÐÄÅÐÎÂ) ×òîá óäàëèòü Ñòîï Ëîññ/Òåéê Ïðîôèò/Âðåìÿ èñòå÷åíèÿ - ïðîñòî óäàëèòå ñîîòâåòñòâóþùóþ ëèíèþ. ×òîá óäàëèòü îòëîæåííûé îðäåð/çàêðûòü ïîçèöèþ - óäàëèòå ëèíèþ Open_Price_Line. 4) Êîãäà âñ¸ áóäåò ãîòîâî, â ïîÿâèâøåìñÿ îêíå íàæàòü êíîïêó "ÎÊ". Äëÿ ïðåêðàùåíèÿ ðàáîòû ñêðèïòà â ëþáîé ìîìåíò ìîæíî âîñïîëüçîâàòüñÿ êíîïêîé "Îòìåíà". Åñëè Âàìè áóäåò íàéäåíà îøèáêà â êîäå, èëè â ëîãèêå ðàáîòû ñêðèïòà, ïðîñüáà ñîîáùèòü íà komposterius@mail.ru */ #include <stdlib.mqh> int first = 1; int start() { //+------------------------------------------------------------------+ // Ìàêñèìàëüíîå ðàññòîÿíèå â ïóíêòàõ îò ìåñòà, íà êîòîðîå áûë "îòïóùåí" ñêðèïò, äî // öåíû îòêðûòèÿ îðäåðà. Äëÿ ìàêèìàëüíîé òî÷íîñòè ðàáîòû èñïîëüçóéòå "0", // òîãäà îðäåð âûäåëèòñÿ òîëüêî â ñëó÷àå òî÷íîãî ïîïàäàíèÿ. int Order_Find_Radius = 10; // Ðàññòîÿíèå ìåæäó ëèíèåé Take_Profit/Stop_Loss è ëèíèåé Open_Price â ïóíêòàõ ïî óìîë÷àíèþ. // Åñëè Take_Profit/Stop_Loss èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0 int Take_Profit = 50; int Stop_Loss = 50; // Ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû (äëÿ çàêðûòèÿ ïîçèöèè) int Slippage = 5; // Âðåìÿ èñòå÷åíèÿ îðäåðà, âûðàæåííîå â ñâå÷àõ // Äëÿ ïåðèîäà ãðàôèêà H4 è Expiration_Shift = 3 âðåìÿ èñòå÷åíèÿ íàñòóïèò ÷åðåç 12 ÷àñîâ ïîñëå óñòàíîâêè // Åñëè íåîáõîäèìî ñòàíäàðòíîå âðåìÿ èñòå÷åíèÿ äëÿ âñåõ ïåðèîäîâ ãðàôèêà, óêàæèòå "0" (áåç êàâû÷åê), è ïåðåõîäèòå ê ñëåäóþùåé íàñòðîéêå // Åñëè âðåìÿ èñòå÷åíèÿ îðäåðà èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0 int Expiration_Shift = 0; // Âðåìÿ èñòå÷åíèÿ îðäåðà, âûðàæåííîå â ÷àñàõ // Äëÿ òîãî, ÷òîá èñïîëüçîâàòü ýòó íàñòðîéêó, íåîáõîäèìî óñòàíîâèòü Expiration_Shift (ñì. âûøå íà 2 ñòðîêè) "0" (áåç êàâû÷åê) // Åñëè âðåìÿ èñòå÷åíèÿ îðäåðà èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0 int Expiration_Shift_H = 0; // Öâåòà îòîáðàæåíèÿ îðäåðîâ íà ãðàôèêå color Buy_Color = Lime; //( äëÿ îðäåðîâ BUYSTOP è BUYLIMIT ) color Sell_Color = Red; //( äëÿ îðäåðîâ SELLLIMIT è SELLSTOP ) // Öâåòà ëèíèé: color Open_Price_Line_Color = White; color Stop_Loss_Line_Color = Red; color Take_Profit_Line_Color = Lime; color Expiration_Line_Color = Yellow; //+------------------------------------------------------------------+ double Open_Price_Level, Stop_Loss_Level, Take_Profit_Level; datetime Expiration_Time; int _break, error; double DropPrice = PriceOnDropped(); // ïîèñê îðäåðà for ( int x = 0; x <= Order_Find_Radius; x ++ ) { int _OrdersTotal = OrdersTotal(); for ( int z = _OrdersTotal - 1; z >= 0; z -- ) { OrderSelect( z, SELECT_BY_POS, MODE_TRADES ); if ( OrderSymbol() == Symbol() ) { if ( ( DropPrice - OrderOpenPrice() )/Point <= x && ( DropPrice - OrderOpenPrice() )/Point >= 0 ) { _break = 1; break; } if ( ( OrderOpenPrice() - DropPrice )/Point <= x && ( OrderOpenPrice() - DropPrice )/Point >= 0 ) { _break = 1; break; } } } if ( _break == 1 ) { break; } } if ( _break != 1 ) { MessageBox( "Íå óäàëîñü íàéòè îðäåð!\n\n" + "Ïåðåìåñòèòå ñêðèïò íà ãðàôèê íåäàëåêî îò öåíû îòêðûòèÿ îðäåðà, êîòîðûé õîòèòå ìîäèôèöèðîâàòü ", "Íà÷àëî ðàáîòû", 0x00000000 | 0x00000010 | 0x00040000 ); return(0); } int _OrderType = OrderType(); int _OrderTicket = OrderTicket(); double _OrderOpenPrice = OrderOpenPrice(); double _OrderStopLoss = OrderStopLoss(); double _OrderTakeProfit = OrderTakeProfit(); datetime _OrderExpiration = OrderExpiration(); // Óñòàíîâêà íà÷àëüíûõ çíà÷åíèé: Open_Price_Level = _OrderOpenPrice; if ( _OrderStopLoss > 0 ) { Stop_Loss_Level = _OrderStopLoss; } else { if ( Stop_Loss > 0 ) { if ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT ) { Stop_Loss_Level = Open_Price_Level - Stop_Loss*Point; } else { Stop_Loss_Level = Open_Price_Level + Stop_Loss*Point; } } } if ( _OrderTakeProfit > 0 ) { Take_Profit_Level = _OrderTakeProfit; } else { if ( Take_Profit > 0 ) { if ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT ) { Take_Profit_Level = Open_Price_Level + Take_Profit*Point; } else { Take_Profit_Level = Open_Price_Level - Take_Profit*Point; } } } if ( _OrderExpiration > 0 ) { Expiration_Time = _OrderExpiration; } else { if ( _OrderType != OP_BUY && _OrderType != OP_SELL ) { if ( Expiration_Shift > 0 ) { Expiration_Time = CurTime() + Period()*60*Expiration_Shift; } else { if ( Expiration_Shift_H > 0 ) { Expiration_Time = CurTime() + 3600*Expiration_Shift_H; } } } } // Ñîçäàíèå ëèíèé: if ( first == 1 ) { ObjectCreate( "Open_Price_Line", OBJ_HLINE, 0, 0, Open_Price_Level, 0, 0, 0, 0 ); ObjectSet( "Open_Price_Line", OBJPROP_COLOR, Open_Price_Line_Color ); ObjectSetText( "Open_Price_Line", "Open_Price_Line", 6, "Arial", Open_Price_Line_Color ); if ( Stop_Loss_Level > 0 ) { ObjectCreate( "Stop_Loss_Line", OBJ_HLINE, 0, 0, Stop_Loss_Level, 0, 0, 0, 0 ); ObjectSet( "Stop_Loss_Line", OBJPROP_COLOR, Stop_Loss_Line_Color ); ObjectSetText( "Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Stop_Loss_Line_Color ); } if ( Take_Profit_Level > 0 ) { ObjectCreate( "Take_Profit_Line", OBJ_HLINE, 0, 0, Take_Profit_Level, 0, 0, 0, 0 ); ObjectSet( "Take_Profit_Line", OBJPROP_COLOR, Take_Profit_Line_Color ); ObjectSetText( "Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Take_Profit_Line_Color ); } if ( Expiration_Time > 0 ) { ObjectCreate( "Expiration_Line", OBJ_VLINE, 0, Expiration_Time, 0, 0, 0, 0, 0 ); ObjectSet( "Expiration_Line", OBJPROP_COLOR, Expiration_Line_Color ); ObjectSetText( "Expiration_Line", "Expiration_Line", 6, "Arial", Expiration_Line_Color ); } // âûâîä ìåññåäæáîêñà string Question = "Äëÿ âíåñåíèÿ èçìåíåíèé ïåðåìåñòèòå ëèíèè íà íåîáõîäèìûå óðîâíè è íàæìèòå \"ÎÊ\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè è çàâåðøèòü ðàáîòó, íàæìèòå \"Îòìåíà\"."; int Answer = MessageBox( Question, "Ìîäèôèêàöèÿ îðäåðà", 0x00000001 | 0x00000040 | 0x00040000 ); first = 0; // åñëè íàæàòà ëþáàÿ êðîìå "ÎÊ" êíîïêà - âûõîäèì if ( Answer != 1 ) { deinit(); return(0); } } // ñ÷èòûâàåì çíà÷åíèÿ ñ îáúåêòîâ è íîðìàëèçóåì: Open_Price_Level = NormalizeDouble( ObjectGet( "Open_Price_Line", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) ); Stop_Loss_Level = NormalizeDouble( ObjectGet( "Stop_Loss_Line", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) ); Take_Profit_Level = NormalizeDouble( ObjectGet( "Take_Profit_Line", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) ); Expiration_Time = ObjectGet( "Expiration_Line", OBJPROP_TIME1 ); if ( Open_Price_Level == 0 ) { int order; if ( _OrderType == OP_BUY || _OrderType == OP_SELL ) { if ( _OrderType == OP_BUY ) { order = OrderClose( _OrderTicket, OrderLots(), Bid, Slippage, Buy_Color ); } else { order = OrderClose( _OrderTicket, OrderLots(), Ask, Slippage, Sell_Color ); } } else { order = OrderDelete( _OrderTicket ); } if ( order > 0 ) { // åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì Print( "Îðäåð ¹", _OrderTicket, " çàêðûò/óäàë¸í óñïåøíî!"); return(0); } else { // åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì error = GetLastError(); Print("Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = ", error, ", ErrorDescription = \"", ErrorDescription( error ), "\"" ); MessageBox( "Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", "Îøèáêà çàêðûòèÿ/óäàëåíèÿ îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); return(-1); } return(0); } color _Color = Buy_Color; // ïðîâåðÿåì âñå çíà÷åíèÿ if ( _OrderType == OP_BUY ) { if ( Bid - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Stop_Loss_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Buy - ïîçèöèè îíà äîëæíà áûòü ÍÈÆÅ Bid. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( Take_Profit_Level - Bid < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Take_Profit_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Take_Profit_Line (çåë¸íàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Buy - ïîçèöèè îíà äîëæíà áûòü ÂÛØÅ Bid. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } if ( _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT ) { if ( Open_Price_Level - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Stop_Loss_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Buy, BuyLimit è BuyStop - îðäåðîâ îíà äîëæíà áûòü ÍÈÆÅ ëèíèè Open_Price_Line. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( Take_Profit_Level - Open_Price_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Take_Profit_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Take_Profit_Line (çåë¸íàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Buy, BuyLimit è BuyStop - îðäåðîâ îíà äîëæíà áûòü ÂÛØÅ ëèíèè Open_Price_Line. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( _OrderType == OP_BUYSTOP ) { if ( Open_Price_Level - Bid < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Open_Price_Line (áåëàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ BuyStop - îðäåðà îíà äîëæíà áûòü ÂÛØÅ òåêóùåé öåíû. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } if ( _OrderType == OP_BUYLIMIT ) { if ( Bid - Open_Price_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Open_Price_Line (áåëàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ BuyLimit - îðäåðà îíà äîëæíà áûòü ÍÈÆÅ òåêóùåé öåíû. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } } if ( _OrderType == OP_SELL ) { _Color = Sell_Color; if ( Stop_Loss_Level - Ask < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Stop_Loss_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Sell - ïîçèöèè îíà äîëæíà áûòü ÂÛØÅ Ask. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( Ask - Take_Profit_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Take_Profit_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Take_Profit_Line (çåë¸íàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Sell - ïîçèöèè îíà äîëæíà áûòü ÍÈÆÅ Ask. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } if ( _OrderType == OP_SELLLIMIT || _OrderType == OP_SELLSTOP ) { _Color = Sell_Color; if ( Stop_Loss_Level - Open_Price_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Stop_Loss_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Sell, SellLimit è SellStop - îðäåðîâ îíà äîëæíà áûòü ÂÛØÅ ëèíèè Open_Price_Line. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( Open_Price_Level - Take_Profit_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point && Take_Profit_Level != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Take_Profit_Line (çåë¸íàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ Sell, SellLimit è SellStop - îðäåðîâ îíà äîëæíà áûòü ÍÈÆÅ ëèíèè Open_Price_Line. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } if ( _OrderType == OP_SELLLIMIT ) { if ( Open_Price_Level - Ask < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Open_Price_Line (áåëàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ SellLimit - îðäåðà îíà äîëæíà áûòü ÍÈÆÅ òåêóùåé öåíû. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } if ( _OrderType == OP_SELLSTOP ) { if ( Ask - Open_Price_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Open_Price_Line (áåëàÿ ëèíèÿ)!\n" + "\n" + "Äëÿ SellStop - îðäåðà îíà äîëæíà áûòü ÂÛØÅ òåêóùåé öåíû. \n" + "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } } if ( _OrderType == OP_BUY || _OrderType == OP_SELL ) { if ( Open_Price_Level != _OrderOpenPrice ) { Answer = MessageBox( "Íåëüçÿ äâèãàòü Open_Price_Line (áåëàÿ ëèíèÿ) äëÿ óæå îòêðûòûõ ïîçèöèé!\n" + "\n\n" + "×òîáû óñòàíîâèòü ëèíèþ â íà÷àëüíîå ïîëîæåíèå è íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { ObjectSet( "Open_Price_Line", OBJPROP_PRICE1, _OrderOpenPrice ); start(); } deinit(); return(-1); } if ( Expiration_Time != 0 ) { Answer = MessageBox( "Íåëüçÿ óñòàíàâëèâàòü Expiration_Line (æ¸ëòàÿ ëèíèÿ) äëÿ óæå îòêðûòûõ ïîçèöèé!\n" + "\n\n" + "×òîáû óäàëèòü ëèíèþ è íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { ObjectDelete( "Expiration_Line" ); start(); } deinit(); return(-1); } } else { if ( Expiration_Time <= CurTime() && Expiration_Time != 0 ) { Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåíà Expiration_Line (æ¸ëòàÿ ëèíèÿ)!\n" + "\n" + "Ñðîê èñòå÷åíèÿ îðäåðà íå ìîæåò áûòü â ïðîøåäøåì âðåìåíè! \n" + "\n\n" + "×òîáû íà÷àòü ìîäèôèêàöèþ ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" + "×òîá îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 ); if ( Answer == 4 ) { start(); } deinit(); return(-1); } } // âûâîäèì èíôó î çàïðîñå è ïûòàåìñÿ ìîäèôèöèðîâàòü îðäåð Print( "OrderTicket=",_OrderTicket, ",_OrderType=",_OrderType, ",Open_Price_Level=",Open_Price_Level, ",Stop_Loss_Level=", Stop_Loss_Level, ",Take_Profit_Level=", Take_Profit_Level, ",Expiration_Time=", Expiration_Time, ",_Color=", _Color ); int ordermodify = OrderModify( _OrderTicket, Open_Price_Level, Stop_Loss_Level, Take_Profit_Level, Expiration_Time, _Color ); if ( ordermodify > 0 ) { // åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì OrderPrint(); Print( "Îðäåð ¹", _OrderTicket, " ìîäèôèöèðîâàí óñïåøíî!"); return(0); } // åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì error = GetLastError(); Print("Îøèáêà ïðè ìîäèôèêàöèè! GetLastError = ", error, ", ErrorDescription = \"", ErrorDescription( error ), "\"" ); MessageBox( "Îøèáêà ïðè ìîäèôèêàöèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", "Îøèáêà ìîäèôèêàöèè îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); return(-1); } int deinit() { // óäàëåíèå âñåõ îáúåêòîâ, ñîçäàííûõ ñêðèïòîì ObjectDelete( "Open_Price_Line" ); ObjectDelete( "Stop_Loss_Line" ); ObjectDelete( "Take_Profit_Line" ); ObjectDelete( "Expiration_Line" ); return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features:
It opens Message Boxes to the user