ModifyOrder

Author: Copyright � 2005, komposter
ModifyOrder
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Miscellaneous
It opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
ModifyOrder
//+------------------------------------------------------------------+
//|                                                (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);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---