(SendPendingOrderMiniLots)

Author: Copyright � 2005, komposter
Price Data Components
Series array that contains open time of each bar
Orders Execution
It automatically opens orders when conditions are reached
Miscellaneous
It opens Message Boxes to the user
1 Views
3 Downloads
0 Favorites
(SendPendingOrderMiniLots)
//+------------------------------------------------------------------+
//|                                   (SendPendingOrderMiniLots).mq4 | 2008.11.17
//|                                      Copyright © 2005, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, komposter"
#property link      "mailto:komposterius@mail.ru"

/*
-----------------------------Â-Í-È-Ì-À-Í-È-Å---------------------------------
Ïåðåä çàïóñêîì ñêðèïòà íàñòîÿòåëüíî ðåêîìåíäóþ èçó÷èòü ñëåäóþùåå ðóêîâîäñòâî:

Ñêðèïò ïðåäíàçíà÷åí äëÿ óñòàíîâêè îòëîæåííîãî îðäåðà.
Äëÿ ýòîãî íåîáõîäèìî:
 1) Îçíàêîìèòüñÿ ñ äàííûì ðóêîâîäñòâîì =), 
 2)!óñòàíîâèòü çíà÷åíèÿ ïî óìîë÷àíèþ! (íàõîäÿòñÿ ïîä îïèñàíèåì,
 	 íà÷èíàþòñÿ è çàêàí÷èâàþòñÿ ñòðîêîé //+----------------------------------------------+ ),
 3) ðàçðåøèòü èìïîðò âíåøíèõ ýêñïåðòîâ ÷åðåç ìåíþ "Ñåðâèñ" -> "Íàñòðîéêè" -> "Ñîâåòíèêè" -> "Ðàçðåøèòü èìïîðòèðîâàíèå âíåøíèõ ýêñïåðòîâ"

 	 (íåîáõîäèìî äëÿ îïèñàíèÿ îøèáêè, êîòîðàÿ ìîæåò âîçíèêíóòü ïðè óñòàíîâêå îðäåðà)
 4) Ïåðåòàùèòü ñêðèïò íà ãðàôèê. Ïðè ýòîì ó÷èòûâàòü, ÷òî ìåñòî ïðèêðåïëåíèÿ - ýòî áóäóùàÿ öåíà îòêðûòèÿ (OpenPrice).  ïðîöåññå óñòàíîâêè 
    å¸ ìîæíî áóäåò ìåíÿòü, íî äëÿ óïðîùåíèÿ ðàáîòû ðåêîìåíäóþ ïåðåòàñêèâàòü ñêðèïò ñðàçó íà íóæíûé óðîâåíü.
 5) Ïåðåìåñòèòü âñå ëèíèè íà íåîáõîäèìûå óðîâíè:

		- Open_Price_Line (ïî óìîë÷àíèþ - áåëàÿ) - öåíà îòêðûòèÿ  (ÎÁßÇÀÒÅËÜÍÀß ëèíèÿ)
		- Stop_Loss_Line (êðàñíàÿ) - óðîâåíü Ñòîï Ëîññ (ÎÁßÇÀÒÅËÜÍÀß)
		- Take_Profit_Line (çåë¸íàÿ) - óðîâåíü Òåéê Ïðîôèò (íåîáÿçàòåëüíàÿ)
		- Expiration_Line (æ¸ëòàÿ) - âðåìÿ èñòå÷åíèÿ (íåîáÿçàòåëüíàÿ)
		(íåîáÿçàòåëüíûå ëèíèè ìîæíî óäàëÿòü)
		- "````" - ðàçìåð ïîçèöèè. Íåîáõîäèìî óñòàíîâèòü íàïðîòèâ íóæíîãî çíà÷åíèÿ (îò 0.01 äî 1.0)
	Â çàâèñèìîñòè îò ðàñïîëîæåíèÿ ëèíèé Open_Price è Stop_Loss âûáèðàåòñÿ òèï îðäåðà:
	Open_Price  >  Bid è Open_Price  >  Stop_Loss  -  BUYSTOP-îðäåð,
	Open_Price  >  Bid è Open_Price  <  Stop_Loss  -  SELLLIMIT-îðäåð,
	Open_Price  <  Ask è Open_Price  >  Stop_Loss  -  BUYLIMIT-îðäåð,
	Open_Price  <  Ask è Open_Price  <  Stop_Loss  -  SELLSTOP-îðäåð.
 6) Êîãäà âñ¸ áóäåò ãîòîâî, â ïîÿâèâøåìñÿ îêíå íàæàòü êíîïêó "ÎÊ".

 
 
 Äëÿ ïðåêðàùåíèÿ ðàáîòû ñêðèïòà â ëþáîé ìîìåíò ìîæíî âîñïîëüçîâàòüñÿ êíîïêîé "Îòìåíà".
 Åñëè Âàìè áóäåò íàéäåíà îøèáêà â êîäå, èëè â ëîãèêå ðàáîòû ñêðèïòà, ïðîñüáà ñîîáùèòü íà komposterius@mail.ru
*/
//+------------------------------------------------------------------+
// Âñå íèæåîïèñàííûå ïåðåìåííûå ìîæíî áóäåò èçìåíèòü â îêíå ñâîéñòâ ñêðèïòà,
// êîòîðîå îòêðîåòñÿ ïðè ïðèêðåïëåíèè. Ýòî ïîëåçíî, íàïðèìåð, ïðè íåîáõîäèìîñòè âûáðàòü
// íåïðåäñòàâëåííûé â ñïèñêå "Lots" ðàçìåð ïîçèöèè. Äëÿ ýòîãî, íàïèñàâ íóæíóþ öèôðó â îêíå ñâîéñòâ (íàïðèìåð, 1.5),
// ÍÅ ÄÂÈÃÀÉÒÅ óêàçàòåëü ðàçìåðà ëîòà ( "````" ).
// Åñëè îêíî ñâîéñòâ íå íóæíî, íàäî çàêîììåíòèðîâàòü ñëåäóþùóþ ñòðîêó (ïîñòàâèòü â íà÷àëî //)
#property show_inputs


// Òèï îðäåðà ïî óìîë÷àíèþ (âëèÿåò íà íà÷àëüíîå ðàñïîëîæåíèå ëèíèé ñòîï-ëîññ è òåéê-ïðîôèò)
extern int _OrderType = 1; //( "1" - BUYSTOP èëè BUYLIMIT, "-1" - SELLSTOP èëè SELLLIMIT )

// Îáü¸ì ñäåëêè ïî óìîë÷àíèþ (ìîæíî ìåíÿòü â ïðîöåññå ðàáîòû)
// îò 0.01 äî 0.1 ñ øàãîì 0.01, îò 0.1 äî 1.0 ñ øàãîì 0.1
extern double Lots = 0.01;

// Ðàññòîÿíèå ìåæäó ëèíèåé Take_Profit/Stop_Loss è ëèíèåé Open_Price â ïóíêòàõ ïî óìîë÷àíèþ.
// Åñëè Take_Profit èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0
extern int Stop_Loss = 50;
extern int Take_Profit = 50;

// Ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû
extern int Slippage = 5;

// Êîììåíòàðèé ê îðäåðó
extern string _Comment = "Opened by script";

// Order ID
extern int MagicNumber = 0;

// Âðåìÿ èñòå÷åíèÿ îðäåðà, âûðàæåííîå â ñâå÷àõ
// Äëÿ ïåðèîäà ãðàôèêà H4 è Expiration_Shift = 3 âðåìÿ èñòå÷åíèÿ íàñòóïèò ÷åðåç 12 ÷àñîâ ïîñëå óñòàíîâêè
// Åñëè íåîáõîäèìî ñòàíäàðòíîå âðåìÿ èñòå÷åíèÿ äëÿ âñåõ ïåðèîäîâ ãðàôèêà, óêàæèòå "0" (áåç êàâû÷åê), è ïåðåõîäèòå ê ñëåäóþùåé íàñòðîéêå
// Åñëè âðåìÿ èñòå÷åíèÿ îðäåðà èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0
extern int Expiration_Shift = 0;
// Âðåìÿ èñòå÷åíèÿ îðäåðà, âûðàæåííîå â ÷àñàõ
// Äëÿ òîãî, ÷òîá èñïîëüçîâàòü ýòó íàñòðîéêó, íåîáõîäèìî óñòàíîâèòü Expiration_Shift (ñì. âûøå íà 2 ñòðîêè) "0" (áåç êàâû÷åê)
// Åñëè âðåìÿ èñòå÷åíèÿ îðäåðà èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå 0
extern int Expiration_Shift_H = 0;

extern string Order_Color = "----------------------------------------------------------------------------------------";
// Öâåòà îòîáðàæåíèÿ îðäåðîâ íà ãðàôèêå
extern color Buy_Color = Lime; //( äëÿ îðäåðîâ BUYSTOP è BUYLIMIT )
extern color Sell_Color = Red; //( äëÿ îðäåðîâ SELLLIMIT è SELLSTOP )

extern string Line_Color = "----------------------------------------------------------------------------------------";
// Öâåòà ëèíèé:
extern color Open_Price_Line_Color = White;
extern color Stop_Loss_Line_Color = Red;
extern color Take_Profit_Line_Color = Lime;
extern color Expiration_Line_Color = Yellow;

//+------------------------------------------------------------------+

#include <stdlib.mqh>
int first = 1;
int start()
{
// Óñòàíîâêà íà÷àëüíûõ çíà÷åíèé:
double Open_Price_Level, Stop_Loss_Level, Take_Profit_Level;
datetime Expiration_Time;
// ---Open_Price_Level
	Open_Price_Level = PriceOnDropped();
	if ( Open_Price_Level <= 0 )
		{ Open_Price_Level = Bid + MarketInfo( Symbol(), MODE_STOPLEVEL )*Point; }
// ---Stop_Loss_Level
	Stop_Loss_Level = Open_Price_Level - Stop_Loss * Point;
// ---Take_Profit_Level
	if ( Take_Profit > 0 )
	{ Take_Profit_Level = Open_Price_Level + Take_Profit * Point; }

if ( _OrderType == -1 )
{
// ---Open_Price_Level
	Open_Price_Level = PriceOnDropped();
	if ( Open_Price_Level <= 0 )
		{ Open_Price_Level = Ask - MarketInfo( Symbol(), MODE_STOPLEVEL )*Point; }
// ---Stop_Loss_Level
	Stop_Loss_Level = Open_Price_Level + Stop_Loss * Point;
// ---Take_Profit_Level
	if ( Take_Profit > 0 )
	{ Take_Profit_Level = Open_Price_Level - Take_Profit * Point; }
}

// ---Expiration_Time
	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 );

	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 );
	}
// ñîçäàíèå "Øêàëû ðàçìåðà ëîòà" è óñòàíîâêà íà çíà÷åíèå ïî óìîë÷àíèþ
	int Lots_value_y = 30;
	switch ( Lots )
	{
		case 0.02: Lots_value_y = 45; break;
		case 0.03: Lots_value_y = 60; break;
		case 0.04: Lots_value_y = 75; break;
		case 0.05: Lots_value_y = 90; break;
		case 0.06: Lots_value_y = 105; break;
		case 0.07: Lots_value_y = 120; break;
		case 0.08: Lots_value_y = 135; break;
		case 0.09: Lots_value_y = 150; break;
		
		case 0.1: Lots_value_y = 165; break;
		case 0.2: Lots_value_y = 180; break;
		case 0.3: Lots_value_y = 195; break;
		case 0.4: Lots_value_y = 210; break;
		case 0.5: Lots_value_y = 225; break;
		case 0.6: Lots_value_y = 240; break;
		case 0.7: Lots_value_y = 255; break;
		case 0.8: Lots_value_y = 270; break;
		case 0.9: Lots_value_y = 285; break;
		case 1.0: Lots_value_y = 300; break;
	}
	if ( Lots > 1.0 ) Lots_value_y = 315;
	int Lots_value_y_start_position = Lots_value_y;
	
	ObjectCreate( "Lots", OBJ_LABEL, 0,0,0,0,0,0,0);
	ObjectSet( "Lots", OBJPROP_CORNER, 1);
	ObjectSet( "Lots", OBJPROP_XDISTANCE, 1);
	ObjectSet( "Lots", OBJPROP_YDISTANCE, 10);
	ObjectSetText(  "Lots", "Lots", 10, "Arial", Open_Price_Line_Color);

	ObjectCreate( "Lots_value", OBJ_LABEL, 0,0,0,0,0,0,0);
	ObjectSet( "Lots_value", OBJPROP_CORNER, 1);
	ObjectSet( "Lots_value", OBJPROP_XDISTANCE, 25);
	ObjectSet( "Lots_value", OBJPROP_YDISTANCE, Lots_value_y);
	ObjectSetText(  "Lots_value", "`````", 10, "Arial", Open_Price_Line_Color);

	int y = 25;
	for ( double z = 0.01; z <= 0.1; z += 0.01 )
	{
		ObjectCreate( DoubleToStr( z, 2 ), OBJ_LABEL, 0,0,0,0,0,0,0);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_CORNER, 1);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_XDISTANCE, 1);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_YDISTANCE, y);
		ObjectSetText(  DoubleToStr( z, 2 ), DoubleToStr( z, 2 ), 10, "Arial", Open_Price_Line_Color);
		y += 15;
	}

	y = 160;
	for ( z = 0.1; z <= 1.0; z += 0.1 )
	{
		ObjectCreate( DoubleToStr( z, 2 ), OBJ_LABEL, 0,0,0,0,0,0,0);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_CORNER, 1);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_XDISTANCE, 1);
		ObjectSet( DoubleToStr( z, 2 ), OBJPROP_YDISTANCE, y);
		ObjectSetText(  DoubleToStr( z, 2 ), DoubleToStr( z, 2 ), 10, "Arial", Open_Price_Line_Color);
		y += 15;
	}

	ObjectCreate( ">", OBJ_LABEL, 0,0,0,0,0,0,0);
	ObjectSet( ">", OBJPROP_CORNER, 1);
	ObjectSet( ">", OBJPROP_XDISTANCE, 1);
	ObjectSet( ">", OBJPROP_YDISTANCE, 310);
	ObjectSetText(  ">", ">10", 10, "Arial", Open_Price_Line_Color);

// âûâîä ìåññåäæáîêñà
	string Question = "Äëÿ óñòàíîâêè îðäåðà ïåðåìåñòèòå ëèíèè íà íåîáõîäèìûå óðîâíè è íàæìèòå \"ÎÊ\".\n" + 
							"×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".";
	int  Answer = MessageBox( Question, "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000001 | 0x00000040 | 0x00040000 );
	first = 0;
	// åñëè íàæàòà ëþáàÿ êðîìå "ÎÊ" êíîïêà - âûõîäèì
	if ( Answer != 1 ) { deinit(); return(0); }
}

// ñ÷èòûâàåì çíà÷åíèÿ ñ îáúåêòîâ è íîðìàëèçóåì:

// ðàçìåð ëîòà
	Lots_value_y = ObjectGet( "Lots_value", OBJPROP_YDISTANCE );
	if ( Lots_value_y_start_position != Lots_value_y )
	{
		Lots = 0.01;
		if ( Lots_value_y >= 35  && Lots_value_y < 50  ) Lots = 0.02;
		if ( Lots_value_y >= 50  && Lots_value_y < 65  ) Lots = 0.03;
		if ( Lots_value_y >= 65  && Lots_value_y < 80  ) Lots = 0.04;
		if ( Lots_value_y >= 80  && Lots_value_y < 95  ) Lots = 0.05;
		if ( Lots_value_y >= 95  && Lots_value_y < 110 ) Lots = 0.06;
		if ( Lots_value_y >= 110 && Lots_value_y < 125 ) Lots = 0.07;
		if ( Lots_value_y >= 125 && Lots_value_y < 140 ) Lots = 0.08;
		if ( Lots_value_y >= 140 && Lots_value_y < 155 ) Lots = 0.09;
		if ( Lots_value_y >= 155 && Lots_value_y < 170 ) Lots = 0.1;
		if ( Lots_value_y >= 170 && Lots_value_y < 185 ) Lots = 0.2;
		if ( Lots_value_y >= 185 && Lots_value_y < 200 ) Lots = 0.3;
		if ( Lots_value_y >= 200 && Lots_value_y < 215 ) Lots = 0.4;
		if ( Lots_value_y >= 215 && Lots_value_y < 230 ) Lots = 0.5;
		if ( Lots_value_y >= 230 && Lots_value_y < 245 ) Lots = 0.6;
		if ( Lots_value_y >= 245 && Lots_value_y < 260 ) Lots = 0.7;
		if ( Lots_value_y >= 260 && Lots_value_y < 275 ) Lots = 0.8;
		if ( Lots_value_y >= 275 && Lots_value_y < 290 ) Lots = 0.9;
		if ( Lots_value_y >= 290 							  ) Lots = 1.0;
	}
	Lots = NormalizeDouble( Lots, 2 );

	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 - Bid >= 0 )
	{
		if ( Open_Price_Level - Stop_Loss_Level > 0 )
		{ _OrderType = OP_BUYSTOP; }
		else
		{ _OrderType = OP_SELLLIMIT; }
	}
	else
	{
		if ( Open_Price_Level - Stop_Loss_Level > 0 )
		{ _OrderType = OP_BUYLIMIT; }
		else
		{ _OrderType = OP_SELLSTOP; }
	}

// ïðîâåðÿåì âñå çíà÷åíèÿ
	color _Color;
	if ( _OrderType == OP_BUYLIMIT || _OrderType == OP_BUYSTOP )
	{
		_Color = Buy_Color;
		if ( Open_Price_Level - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point )
		{
			Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + 
					 		 			 "\n" +
					 		 			 "Äëÿ BuyLimit è BuyStop - îðäåðîâ îíà äîëæíà áûòü ÍÈÆÅ ëèíèè Open_Price_Line.	\n" + 
					 		 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 		 			 "\n\n" +
					 		 			 "×òîáû íà÷àòü óñòàíîâêó ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 "×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
			if ( Answer == 4 ) { ObjectsRedraw(); 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" +
					 		 			 "Äëÿ BuyLimit è BuyStop - îðäåðîâ îíà äîëæíà áûòü ÂÛØÅ ëèíèè Open_Price_Line.	\n" + 
					 		 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 		 			 "\n\n" +
					 		 			 "×òîáû íà÷àòü óñòàíîâêó ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 "×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
			if ( Answer == 4 ) { ObjectsRedraw(); 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 ) { ObjectsRedraw(); start(); }
				deinit();
				return(-1);
			}
		}
		else
		{
			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 ) { ObjectsRedraw(); 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 )
		{
			Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåíà Stop_Loss_Line (êðàñíàÿ ëèíèÿ)!\n" + 
					 		 			 "\n" +
					 		 			 "Äëÿ SellLimit è SellStop - îðäåðîâ îíà äîëæíà áûòü ÂÛØÅ ëèíèè Open_Price_Line.	\n" + 
					 		 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 		 			 "\n\n" +
					 		 			 "×òîáû íà÷àòü óñòàíîâêó ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 "×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
			if ( Answer == 4 ) { ObjectsRedraw(); 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" +
					 		 			 "Äëÿ SellLimit è SellStop - îðäåðîâ îíà äîëæíà áûòü ÍÈÆÅ ëèíèè Open_Price_Line.	\n" + 
					 		 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 		 			 "\n\n" +
					 		 			 "×òîáû íà÷àòü óñòàíîâêó ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 "×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
			if ( Answer == 4 ) { ObjectsRedraw(); 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 ) { ObjectsRedraw(); start(); }
				deinit();
				return(-1);
			}
		}
		else
		{
			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 ) { ObjectsRedraw(); start(); }
				deinit();
				return(-1);
			}
		}
	}

	if ( Expiration_Time <= CurTime() && Expiration_Time > 0 )
	{
			Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåíà Expiration_Line (æ¸ëòàÿ ëèíèÿ)!\n" + 
					 		 			 "\n" +
					 		 			 "Ñðîê èñòå÷åíèÿ îðäåðà íå ìîæåò áûòü â ïðîøåäøåì âðåìåíè!		\n" + 
					 		 			 "\n\n" +
					 		 			 "×òîáû íà÷àòü óñòàíîâêó ñ íà÷àëà, íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 "×òîá îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
			if ( Answer == 4 ) { ObjectsRedraw(); start(); }
			deinit();
			return(-1);
	}
	
// âûâîäèì èíôó î çàïðîñå è ïûòàåìñÿ óñòàíîâèòü îðäåð
	Print( "Symbol=",Symbol(), ",_OrderType=",_OrderType, ",Lots=",Lots, ",Open_Price_Level=",Open_Price_Level, ",Slippage=", Slippage, ",Stop_Loss_Level=", Stop_Loss_Level, ",Take_Profit_Level=", Take_Profit_Level, ",_Comment=", _Comment, ",MagicNumber=", MagicNumber, ",Expiration_Time=", Expiration_Time, ",_Color=", _Color );
	int ordersend = OrderSend( Symbol(), _OrderType, Lots, Open_Price_Level, Slippage, Stop_Loss_Level, Take_Profit_Level, _Comment, MagicNumber, Expiration_Time, _Color );
	if ( ordersend > 0 )
	{
// åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
		OrderPrint();
		Print( "Îðäåð ¹", ordersend, " óñòàíîâëåí óñïåøíî!");
		return(0);
	}
// åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
	int 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" );
	for ( double z = 0.01; z < 0.1; z += 0.01 ) ObjectDelete( DoubleToStr( z, 2 )); 	
	for ( z = 0.1; z <= 1; z += 0.1 ) ObjectDelete( DoubleToStr( z, 2 )); 
	ObjectDelete( "Lots" );
	ObjectDelete( "Lots_value" );
	ObjectDelete( ">" );
	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 ---