#SendPendingOrder





//+------------------------------------------------------------------+
//|                                   (SendPendingOrder).mq4 |
//|                                       Copyright © 2006, Yuri2005 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yuri2005"

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

Ñêðèïò ïðåäíàçíà÷åí äëÿ óñòàíîâêè îòëîæåííîãî îðäåðà.

Äëÿ ýòîãî íåîáõîäèìî:
 
 1) Îçíàêîìèòüñÿ ñ äàííûì ðóêîâîäñòâîì. 
 
 2) Óñòàíîâèòü çíà÷åíèÿ ïåðåìåííûõ ïî óìîë÷àíèþ (íàõîäÿòñÿ ïîä îïèñàíèåì,íà÷èíàþòñÿ è 
    çàêàí÷èâàþòñÿ ñòðîêîé  //+----------------------------------------------+ )
    
 3) Ðàçðåøèòü èìïîðò âíåøíèõ ýêñïåðòîâ ÷åðåç ìåíþ
 	 "Ñåðâèñ" -> "Íàñòðîéêè" -> "Ñîâåòíèêè" -> "Ðàçðåøèòü èìïîðòèðîâàíèå âíåøíèõ ýêñïåðòîâ"
 	 (íåîáõîäèìî äëÿ îïèñàíèÿ îøèáêè, êîòîðàÿ ìîæåò âîçíèêíóòü ïðè óñòàíîâêå îðäåðà).
 
 4) Ïåðåòàùèòü ñêðèïò íà ãðàôèê. Ïðè ýòîì ó÷èòûâàòü, ÷òî ìåñòî ïðèêðåïëåíèÿ - ýòî áóäóùèé óðîâåíü 
    ðàñïîëîæåíèÿ óïðàâëÿþùåé ëèíèè.  ïðîöåññå óñòàíîâêè å¸ ìîæíî áóäåò ìåíÿòü, íî äëÿ óïðîùåíèÿ
 	 ðàáîòû ðåêîìåíäóþ ïåðåòàñêèâàòü ñêðèïò ñðàçó íà íóæíûé óðîâåíü.
 
 5) Óïðàâëÿþùèå ëèíèè.
    
    Îáÿçàòåëüíàÿ îñíîâíàÿ ëèíèÿ.  çàâèñèìîñòè îò èñïîëüçóåìîãî ìåòîäà ðàñ÷¸òà öåíû îòêðûòèÿ 
    (îïðåäåëÿåìîãî ïåðåìåííîé Method) ìîæåò áûòü îäíîé èç òð¸õ ñëåäóþùèõ ëèíèé:
    
 	 1. Ïðè Method = "Open"
 	   - Open Price Line (ïî óìîë÷àíèþ - ñèíÿÿ) - ëèíèÿ, óêàçûâàþùàÿ öåíó îòêðûòèÿ îðäåðà.
 	 
 	 2. Ïðè Method = "Plus"
 	   - Plus Level Line (ïî óìîë÷àíèþ - ò¸ìíî-îðàíæåâàÿ) - ëèíèÿ, îïðåäåëÿþùàÿ öåíó îòêðûòèÿ îðäåðà
 	   ñ çàäàííûì îòñòóïîì ââåðõ îò íå¸. Âåëè÷èíà îòñòóïà îïðåäåëÿåòñÿ ïåðåìåííîé Indent_From_Level. 
 	  	 
 	 3. Ïðè Method = "Minus"
 	   - Minus Level Line (ïî óìîë÷àíèþ - öâåòà LimeGreen - áëèçêîãî ê çåë¸íîìó) - ëèíèÿ, îïðåäåëÿþùàÿ 
 	   öåíó îòêðûòèÿ îðäåðà ñ çàäàííûì îòñòóïîì âíèç îò íå¸. Âåëè÷èíà îòñòóïà îïðåäåëÿåòñÿ ïåðåìåííîé 
 	   Indent_From_Level
 	   
 	 Îáÿçàòåëüíóþ ëèíèþ óäàëÿòü íåëüçÿ.
 	    
 	 Íåîáÿçàòåëüíûå ëèíèè.
 	   
	 - Stop Loss Line (êðàñíàÿ) - óðîâåíü ñòîï-ëîññ
	 - Take Profit Line (ò¸ìíî-ôèîëåòîâàÿ) - óðîâåíü òåéê-ïðîôèò 
	 - Expiration Line (êîðè÷íåâàÿ) - âðåìÿ èñòå÷åíèÿ îðäåðà
	 
	 Íåîáÿçàòåëüíûå ëèíèè ìîæíî íå èñïîëüçîâàòü èëè óäàëÿòü.
		 
	 - "****" - óêàçàòåëü ðàçìåðà ïîçèöèè. Íåîáõîäèìî óñòàíîâèòü íàïðîòèâ íóæíîãî çíà÷åíèÿ. 
		
 6) Ïåðåìåñòèòü âñå ëèíèè íà íåîáõîäèìûå óðîâíè.
	
	Â çàâèñèìîñòè îò öåíû îòêðûòèÿ îðäåðà Open_Price îïðåäåëÿåòñÿ òèï îðäåðà:
	
	Open_Price  >  Ask  -  BUYSTOP-îðäåð,
	Open_Price  <=  Ask  -  BUYLIMIT-îðäåð.
	Open_Price  <  Bid  -  SELLSTOP-îðäåð.
	Open_Price  >=  Bid  -  SELLLIMIT-îðäåð.
	
	×òîáû óäàëèòü ñòîï-ëîññ/ òåéê-ïðîôèò/ âðåìÿ èñòå÷åíèÿ - ïðîñòî óäàëèòå ñîîòâåòñòâóþùóþ ëèíèþ.

 7) Êîãäà âñ¸ áóäåò ãîòîâî, â ïîÿâèâøåìñÿ îêíå íàæìèòå êíîïêó "ÎÊ".
 
 8) Äëÿ ïðåêðàùåíèÿ ðàáîòû ñêðèïòà â ëþáîé ìîìåíò ìîæíî âîñïîëüçîâàòüñÿ êíîïêîé "Îòìåíà".
 
*/


//+------------------------------------------------------------------+
// Âñå íèæåîïèñàííûå ïåðåìåííûå ìîæíî áóäåò èçìåíèòü â îêíå ñâîéñòâ ñêðèïòà, êîòîðîå îòêðîåòñÿ 
// ïðè ïðèêðåïëåíèè. 
// Åñëè îêíî ñâîéñòâ íå íóæíî, íàäî çàêîììåíòèðîâàòü ñëåäóþùóþ ñòðîêó (ïîñòàâèòü â íà÷àëî //)

#property show_inputs

// Òèï îðäåðà ïî óìîë÷àíèþ - "Buy" èëè "Sell", òàêæå ìîæíî ââåñòè áóêâû b èëè B, ëþáîå ñëîâî íà b èëè B, 
// ÷èñëî 1 - äëÿ îïåðàöèè Buy; áóêâû s èëè S, ëþáîå ñëîâî íà s èëè S, ÷èñëî -1 - äëÿ îïåðàöèè Sell 

extern string Operation = "Buy"; 

// Òî÷íîå çíà÷åíèå ïðåïîëàãàåìîé öåíû îòêðûòèÿ. Ïðè èñïîëüçîâàíèè äàííîé ïåðåìåííîé ëèíèÿ 
// îòêðûòèÿ îðäåðà áóäåò óñòàíîâëåíà òî÷íî íà óêàçàíîå çíà÷åíèå, èíà÷å - íà òî÷êó ïðèêðåïëåíèÿ ñêðèïòà.

extern double Open_Price = 0;

// Óðîâåíü, ââåðõ îò êîòîðîãî áóäåò ðàñ÷èòûâàòüñÿ öåíà îòêðûòèÿ îðäåðà, îòñòóï îðäåðà îò ëèíèè îïðåäåëÿåòñÿ
// ïåðåìåííîé Indent_From_Level, åñëè ðàâåí 0, òî íå èñïîëüçóåòñÿ.

extern double Plus_Level = 0;

// Óðîâåíü, âíèç îò êîòîðîãî áóäåò ðàñ÷èòûâàòüñÿ öåíà îòêðûòèÿ îðäåðà, îòñòóï îðäåðà îò ëèíèè îïðåäåëÿåòñÿ
// ïåðåìåííîé Indent_From_Level, åñëè ðàâåí 0, òî íå èñïîëüçóåòñÿ.

extern double Minus_Level = 0;

// Îòñòóï â ïóíêòàõ îò óðîâíåé Plus_Level èëè Minus_Level, èñïîëüçóåòñÿ òîëüêî âìåñòå ñ íèìè, â ïðîòèâíîì ñëó÷àå èãíîðèðóåòñÿ.

extern int Indent_From_Level = 0;

// Îáü¸ì ñäåëêè ïî óìîë÷àíèþ (ìîæíî ìåíÿòü â ïðîöåññå ðàáîòû).
// Äîëæåí áûòü êðàòåí ðàçìåðó ìèíèìàëüíîãî ëîòà (ñìîòðè íèæå). 

extern double Lots = 0.10;

// Ìåòîä îïðåäåëåíèÿ öåíû îòêðûòèÿ îðäåðà (Order Open Price). Ìîæåò ïðèíèìàòü îäíî èç 3 çíà÷åíèé:

/* "Open" (äîïóñòèìî ëþáîå ñëîâî, íà÷èíàþùååñÿ íà O èëè o, áóêâà O èëè o, ëèáî ÷èñëî 0) - Äëÿ îïðåäåëåíèÿ Order Open Price 
      èñïîëüçóåòñÿ ëèáî öåíà Open_Price, ëèáî çíà÷åíèå ëèíèè Open Price Line (ïî óìîë÷àíèþ ñèíåãî öâåòà). Ïðè ýòîì öåíà 
      Order Open Price âñåãäà îïðåäåëÿåòñÿ òî÷íî ïî çíà÷åíèþ öåíû ëèíèè Open Price Line.
  
   "Plus" (äîïóñòèìî ëþáîå ñëîâî, íà÷èíàþùååñÿ íà P èëè p, áóêâà P èëè p, ëèáî ÷èñëî 1) - Äëÿ îïðåäåëåíèÿ Order Open Price 
      èñïîëüçóåòñÿ ëèáî öåíà Plus_Level, ëèáî çíà÷åíèå ëèíèè Plus Level Line(ïî óìîë÷àíèþ ÿðêî-îðàíæåâîãî öâåòà). Ïðè ýòîì öåíà 
      Order Open Price âû÷èñëÿåòñÿ êàê Plus_Level + Indent_From_Level + Spread. Ýòî ïîçâîëÿåò ñòàâèòü îðäåð íà îòêðûòèå íå òî÷íî
      ïî çíà÷åíèþ öåíû ëèíèè Plus Level Line, à ñ îïðåäåë¸ííûì îòñòóïîì ââåðõ îò íå¸, ÷òî áûâàåò óäîáíî, ê ïðèìåðó, ïðè óñòàíîâêå 
      îðäåðîâ âáëèçè îïðåäåë¸ííûõ óðîâíåé ñîïðîòèâëåíèÿ èëè ïîääåðæêè.
  
   "Minus" (äîïóñòèìî ëþáîå ñëîâî, íà÷èíàþùååñÿ íà M èëè m, áóêâà M èëè m, ëèáî ÷èñëî -1) - Äëÿ îïðåäåëåíèÿ Order Open Price 
      èñïîëüçóåòñÿ ëèáî öåíà Minus_Level, ëèáî çíà÷åíèå ëèíèè Minus Level Line(ïî óìîë÷àíèþ öâåòà LimeGreen - áëèçêîãî ê çåë¸íîìó). 
      Ïðè ýòîì öåíà Order Open Price âû÷èñëÿåòñÿ êàê Minus_Level - Indent_From_Level. Ýòî ïîçâîëÿåò ñòàâèòü îðäåð íà îòêðûòèå íå 
      òî÷íî ïî çíà÷åíèþ öåíû ëèíèè Minus Level Line, à ñ îïðåäåë¸ííûì îòñòóïîì âíèç îò íå¸, ÷òî áûâàåò óäîáíî, ê ïðèìåðó, ïðè 
      óñòàíîâêå îðäåðîâ âáëèçè îïðåäåë¸ííûõ óðîâíåé ñîïðîòèâëåíèÿ èëè ïîääåðæêè. */

extern string Method = "Open";

// Âîçìîæíûå âàðèàíòû óñòàíîâêè Stop Loss è Take Profit; åñëè  óñòàíîâêè íå èñïîëüçóþòñÿ, òî óñòàíîâèòå èõ ðàâíûìè 0.

// Attached_Stop_Loss (óñòàíàâëèâàåòñÿ â ïóíêòàõ) - Stop Loss, ïðèâÿçàííûé ê öåíå îòêðûòèÿ îðäåðà. 
// Áóäåò óñòàíîâëåí àâòîìàòè÷åñêè íà óêàçàííîì ðàññòîÿíèè â ïóíêòàõ îò íå¸.
// Ïðè èñïîëüçîâàíèè Attached_Stop_Loss ëèíèÿ óñòàíîâêè Stop Loss îðäåðà íà ãðàôèêå íå ðèñóåòñÿ, 
// òàê êàê åãî çíà÷åíèå æ¸ñòêî çàâèñèò òîëüêî îò öåíû îòêðûòèÿ îðäåðà.

extern int Attached_Stop_Loss = 0;

// Exact_Stop_Loss (óñòàíàâëèâàåòñÿ â àáñîëþòíîì âûðàæåíèè) - Stop Loss, óñòàíàâëèâàåìûé íåçàâèñèìî îò öåíû îòêðûòèÿ îðäåðà.
// Íà÷àëüíîå ðàñïîëîæåíèå ëèíèè Exact_Stop_Loss óñòàíàâëèâàåòñÿ íà ãðàôèêå òî÷íî â óêàçàííîé òî÷êå è íå çàâèñèò îò ïîñëåäóþùèõ
// ïåðåìåùåíèé îò ïîñëåäóþùèõ ïåðåìåùåíèé ëèíèé Open Price Line, Plus Level Line èëè Minus Level Line.

extern double Exact_Stop_Loss = 0;

// Fixed_Stop_Loss (óñòàíàâëèâàåòñÿ â ïóíêòàõ) - Stop Loss, óñòàíàâëèâàåìûé íåçàâèñèìî îò öåíû îòêðûòèÿ îðäåðà.
// Íà÷àëüíîå ðàñïîëîæåíèå óðîâíÿ Fixed_Stop_Loss óñòàíàâëèâàåòñÿ íà óêàçàííîì ðàññòîÿíèè â ïóíêòàõ îò íà÷àëüíîãî 
// çíà÷åíèÿ Open_Price è íå çàâèñèò îò ïîñëåäóþùèõ ïåðåìåùåíèé ëèíèé Open Price Line, Plus Level Line èëè 
// Minus Level Line. Îáðàòèòå îñîáîå âíèìàíèå: ïðè èñïîëüçîâàíèè ëèíèé Plus Level Line èëè Minus Level Line  
// Fixed_Stop_Loss ðàñ÷èòûâàåòñÿ íå îò íèõ, à èìåííî îò çíà÷åíèÿ Open_Price!

extern int Fixed_Stop_Loss = 50;

// Attached_Take_Profit (óñòàíàâëèâàåòñÿ â ïóíêòàõ) - Take Profit, ïðèâÿçàííûé ê öåíå îòêðûòèÿ îðäåðà. 
// Áóäåò óñòàíîâëåí àâòîìàòè÷åñêè íà óêàçàííîì ðàññòîÿíèè â ïóíêòàõ îò íå¸. Ïðè èñïîëüçîâàíèè 
// Attached_Take_Profit ëèíèÿ óñòàíîâêè Take_Profit îðäåðà íà ãðàôèêå íå ðèñóåòñÿ, òàê êàê åãî çíà÷åíèå 
// æ¸ñòêî çàâèñèò òîëüêî îò öåíû îòêðûòèÿ îðäåðà.

extern int Attached_Take_Profit = 0;

// Exact_Take_Profit (óñòàíàâëèâàåòñÿ â àáñîëþòíîì âûðàæåíèè) - Take Profit, óñòàíàâëèâàåìûé íåçàâèñèìî 
// îò öåíû îòêðûòèÿ îðäåðà. Íà÷àëüíîå ðàñïîëîæåíèå óðîâíÿ Exact_Take_Profit óñòàíàâëèâàåòñÿ íà ãðàôèêå 
// òî÷íî â óêàçàííîé òî÷êå è íå çàâèñèò îò ïîñëåäóþùèõ ïåðåìåùåíèé ëèíèé Open Price Line, Plus Level Line 
// èëè Minus Level Line.

extern double Exact_Take_Profit = 0;

// Fixed_Take_Profit (óñòàíàâëèâàåòñÿ â ïóíêòàõ) - Take Profit, óñòàíàâëèâàåìûé íåçàâèñèìî îò öåíû îòêðûòèÿ îðäåðà.
// Íà÷àëüíîå ðàñïîëîæåíèå óðîâíÿ Fixed_Take_Profit óñòàíàâëèâàåòñÿ íà óêàçàííîì ðàññòîÿíèè â ïóíêòàõ îò íà÷àëüíîãî 
// çíà÷åíèÿ Open_Price è íå çàâèñèò îò ïîñëåäóþùèõ ïåðåìåùåíèé ëèíèé Open Price Line, Plus Level Line èëè 
// Minus Level Line. Îáðàòèòå îñîáîå âíèìàíèå: ïðè èñïîëüçîâàíèè ëèíèé Plus Level Line èëè Minus Level Line 
// Fixed_Take_Profit ðàñ÷èòûâàåòñÿ íå îò íèõ, à èìåííî îò çíà÷åíèÿ Open_Price!

extern int Fixed_Take_Profit = 50;

// Òî÷íîå âðåìÿ  èñòå÷åíèÿ îðäåðà. Äîëæíî áûòü ââåäåíî â ôîðìàòå Ãîä.Ìåñÿö.Äåíü<ïðîáåë>×àñû:Ìèíóòû (òàêîé ôîðìàò 
// ïðåäëàãàåòñÿ äëÿ ââîäà äàòû è âðåìåíè âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà ïî óìîë÷àíèþ) ëèáî Äåíü.Ìåñÿö.Ãîä<ïðîáåë>×àñû:Ìèíóòû. 
// Äàòó è âðåìÿ ìîæíî ââîäèòü êàê â ïîëíîì ôîðìàòå (2006.01.01 00:00), òàê è ñ ïðîïóñêîì íà÷àëüíûõ íóëåé è îáîçíà÷åíèåì ãîäà 
// îäíîé-äâóìÿ-òðåìÿ öèôðàìè (9.10.6 2:15), à òàêæå îïóñêàÿ ïðè óêàçàíèè âðåìåíè ìèíóòû (9.10.6 2)èëè âðåìÿ ïîëíîñòüþ (òîãäà 
// áóäåò àâòîìàòè÷åñêè ïîäñòàâëÿòüñÿ âðåìÿ 00:00). Ìîæíî óêàçàòü òîëüêî âðåìÿ áåç óêàçàíèÿ äàòû - îíî äîëæíî áûòü îáÿçàòåëüíî 
// óêàçàíî â ôîðìàòå ×àñû:Ìèíóòû (18:00) èëè ×àñû: (18:) - àâòîìàòè÷åñêè áóäåò ïîäñòàâëåíà òåêóùàÿ äàòà. Ìîæíî óêàçûâàòü òîëüêî 
// äàòó è âðåìÿ â ôîðìàòå Äåíü.Ìåñÿö ×àñû:Ìèíóòû (9.10 16:16) èëè Äåíü.Ìåñÿö ×àñû (9.10 16) - àâòîìàòè÷åñêè áóäåò ïîäñòàâëåí 
// òåêóùèé ãîä. Ïðè óêàçàíèè äàòû â êà÷åñòâå ðàçäåëèòåëÿ âìåñòî òî÷êè ìîæíî èñïîëüçîâàòü çíàê "/"/. Åñëè âðåìÿ è äàòà ìåíüøå 
// òåêóùèõ, òî äàííàÿ ïåðåìåííàÿ èñïîëüçîâàòüñÿ íå áóäåò, à å¸ çíà÷åíèå áóäåò èãíîðèðîâàòüñÿ. Òàêæå â ñëó÷àå óñòàíîâêè 
// äåéñòâóþùåãî (òî åñòü áîëüøåãî òåêóùåãî âðåìåíè) çíà÷åíèÿ Exact_Expiration_Time áóäóò èãíîðèðîâàòüñÿ ëþáûå óñòàíîâêè 
// Expiration_Shift è Expiration_Shift_H (ñì. íèæå).

extern datetime Exact_Expiration_Time = D'2006..';

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

extern int Expiration_Shift = 0;

// Âðåìÿ èñòå÷åíèÿ îðäåðà, âûðàæåííîå â ÷àñàõ
// Äëÿ òîãî, ÷òîá èñïîëüçîâàòü ýòó íàñòðîéêó, íåîáõîäèìî óñòàíîâèòü Expiration_Shift (ñì. âûøå íà 2 ñòðîêè) "0" (áåç êàâû÷åê)
// Åñëè âðåìÿ èñòå÷åíèÿ îðäåðà èñïîëüçîâàòüñÿ íå áóäåò, óñòàíîâèòå çíà÷åíèå 0.

extern int Expiration_Shift_H = 0;

// Ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû â ïóíêòàõ.

extern int Slippage = 5;

// Ñïðåä ïî òåêóùåìó èíñòðóìåíòó. Äàííàÿ ïåðåìåííàÿ èñïîëüçóåòñÿ òîëüêî â ñëó÷àå èñïîëüçîâàíèÿ ïåðåìåííûõ
// Plus_Level èëè Minus_Level ëèáî ëèíèé Plus Level Line èëè Minus Level Line - åñëè îíè íå èñïîëüçóþòñÿ, 
// òî çíà÷åíèå Spread èãíîðèðóåòñÿ.

extern int Spread = 0;

// Êîììåíòàðèé ê îðäåðó

extern string _Comment = " ";

// "Ìàãè÷åñêèé íîìåð" îðäåðà

extern int MagicNumber = 1;

// Ìèíèìàëüíûé ðàçìåð ëîòà. Îïðåäåëÿåòñÿ òîðãîâûìè óñëîâèÿìè êîíêðåòíîé êîìïàíèè è ìîæåò
// ïðèíèìàòü òîëüêî îäíî èç 3 âîçìîæíûõ çíà÷åíèé: 0.01, 0.1 èëè 1.
// Îò äàííîé ïåðåìåííîé çàâèñèò îòðèñîâêà øêàëû óñòàíîâêè ðàçìåðà òîðãîâîãî ëîòà è åù¸ ðÿä íàñòðîåê.

extern double Min_Lot_Size = 0.1;

// Óñòàíàâëèâàåòñÿ, áóäåò ëè èñïîëüçîâàòüñÿ óïðàâëÿþùèé ôàéë äëÿ óñòàíîâêè ïàðàìåòðîâ îðäåðîâ.
// True - èñïîëüçóåòñÿ, False - íåò.
// Â óïðàâëÿþùåì ôàéëå ìîãóò õðàíèòüñÿ è èçìåíÿòüñÿ äàííûå î ðàçìåðå ëîòà, ñïðåäå, Attached Stop Loss,
// Attached Take Profit è Indent From Level ïî êàæäîìó êîíêðåòíîìó òîðãîâîìó èíñòðóìåíòó. Î ôîðìàòå 
// óïðàâëÿþùåãî ôàéëà ñìîòðèòå íèæå.

extern bool Read_From_File = True;

// Óñòàíàâëèâàåòñÿ, áóäåò ëè èñïîëüçîâàòüñÿ çíà÷åíèå ñïðåäà, çàïèñàííîå â óïðàâëÿþùåì ôàéëå äëÿ êîíêðåòíîãî
// ñèìâîëà. Åñëè True - èñïîëüçóåòñÿ, åñëè False - èãíîðèðóåòñÿ.

extern bool Use_Spread_From_File = True;

// Íàçâàíèå óïðàâëÿþùåãî ôàéëà. Ôàéë äîëæåí íàõîäèòñÿ â ïàïêå experts\files, íàõîäÿùåéñÿ 
// â ïàïêå ñ óñòàíîâëåííîé ïðîãðàììîé Metatrader. Â äàííîì ôàéëå ìîãóò õðàíèòñÿ è èçìåíÿòüñÿ
// âðó÷íóþ èëè èç äðóãèõ ýêñïåðòîâ/ ñêðèïòîâ/ èíäèêàòîðîâ/ ïðîãðàìì ðàçìåð òîðãîâîé îïåðàöèè, 
// ñòîï ëîññà, òåéê-ïðîôèòà è ðÿä äðóãèõ ïàðàìåòðîâ, ïîçâîëÿþùèõ àâòîìàòè÷åñêè èñïîëüçîâàòü 
// îïðåäåë¸ííûå òðåéäåðîì ïðàâèëà óïðàâëåíèÿ êàïèòàëîì.

/* Ôîðìàò óïðàâëÿþùåãî ôàéëà

EURUSD;51;102;14;38;2;13
USDJPY;52;104;17;39;3;13
GBPUSD;72;142;10;54;3;18
USDCAD;51;102;15;38;4;13
AUDUSD;35;70;22;26;2;9

Äëÿ âñåõ ñêðèïòîâ èñïîëüçóåòñÿ îäèí è òîò æå óïðàâëÿþùèé ôàéë, îäíàêî ÷àñòü ïàðàìåòðîâ èç ôàéëà â îòäåëüíûõ 
ñêðèïòàõ ìîæåò íå èñïîëüçîâàòüñÿ.

Ôàéë äîëæåí ïðåäñòàâëÿòü ñîáîé ñïèñîê ñòðîê, ïàðàìåòðû â êàæäîé ñòðîêå ðàçäåëåíû ";"
Ïîñëå ïîñëåäíåé ñòðîêè ôàéëà îáÿçàòåëüíî íåîáõîäèìî ñäåëàòü ïåðåâîä ñòðîêè (ïðè ðó÷íîì íàáîðå íàæàòü "Enter")

Çíà÷åíèÿ ïàðàìåòðîâ â ñòîëáöàõ:

1 - Íàçâàíèå òîðãîâîãî èíñòðóìåíòà. Äîëæíî òî÷íî ñîâïàäàòü ñ íàçâàíèåì äàííîãî òîðãîâîãî èíñòðóìåíòà â Ìåòàòðåéäåðå. 
  Âñå ñëåäóþùèå ïàðàìåòðû èç äàííîé ñòðîêè áóäóò èñïîëüçîâàòüñÿ òîëüêî äëÿ ñîâåðøåíèÿ òîðãîâûõ îïåðàöèé ïî ýòîìó òîðãîâîìó
  èíñòðóìåíòó.  ñëó÷àå îòñóòñòâèÿ â ôàéëå íàçâàíèÿ èíñòðóìåíòà, ïî êîòîðîìó âû ïðåäïîëàãàåòå ñîâåðøèòü îïåðàöèþ, áóäóò
  èñïîëüçîâàòüñÿ çíà÷åíèÿ èç íàñòðîåê èëè âõîäíûõ ïàðàìåòðîâ ñêðèïòà.
  
2 - Attached Stop Loss (ïðèêðåïë¸ííûé ñòîï ëîññ). Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Stop_From_File. 
  Íàçíà÷åíèå è èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèÿþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Attached_Stop_Loss 
  (ñìîòðè âûøå). Ïðè íàëè÷èè â ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Attached_Stop_Loss. Åñëè çíà÷åíèå Attached_Stop_Loss 
  áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, 
  òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
  
3 - Attached Take Profit (ïðèêðåïë¸ííûé òåéê ïðîôèò). Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Take_Profit_From_File. 
  Íàçíà÷åíèå è èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Attached_Take_Profit 
  (ñìîòðè âûøå). Ïðè íàëè÷èè â ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Attached_Take_Profit. Åñëè çíà÷åíèå Attached_Take_Profit 
  áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, 
  òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
  
4 - Îáú¸ì òîðãîâîé îïåðàöèè. Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Lots_From_File. Çíà÷åíèå â ýòîì ñòîëáöå
  äîëæíî áûòü óêàçàíî â ÅÄÈÍÈÖÀÕ ÌÈÍÈÌÀËÜÍÛÕ ËÎÒΠÌÅÒÀÒÐÅÉÄÅÐÀ è áûòü îáÿçàòåëüíî öåëûì ÷èñëîì. Òî åñòü, åñëè óêàçàíî çíà÷åíèå 14,
  òî ýòî îçíà÷àåò "14 ìèíèìàëüíûõ ëîòîâ Ìåòàòðåéäåðà". Òàêèì îáðàçîì, åñëè ìèíèìàëüíûé ëîò Ìåòàòðåéäåðà (ïåðåìåííàÿ Min_Lot_Size) 
  ðàâåí 0.01, òî îáú¸ì îïåðàöèè, ïåðåäàâàåìûé â îðäåð, áóäåò ðàâåí 14 * Min_Lot_Size (0.01) = 0.14 ëîòà, ïðè ìèíèìàëüíîì ëîòå 0.1 -
  14 * Min_Lot_Size (0.1) = 1.4, ïðè ìèíèàëüíîì ëîòå 1 = 14 * Min_Lot_Size (1) = 14. Ýòî ïîçâîëÿåò èñïîëüçîâàòü îäèí è òîò æå 
  óïðàâëÿþùèé ôàéë äëÿ ðàáîòû ñ ðàçíûìè íàñòðîéêàìè èëè â ðàçíûõ ÄÖ ñ ðàçíûìè ðàçìåðàìè ìèíèìàëüíîãî ëîòà. Ïðè íàëè÷èè â óïðàâëÿþùåì 
  ôàéëå äàííîãî ïàðàìåòðà ëþáûå íàñòðîéêè ðàçìåðå ëîòà â ñàìîì ñêðèïòå èëè åãî âõîäíûõ ïàðàìåòðàõ èãíîðèðóþòñÿ, îäíàêî åñëè çíà÷åíèå 
  â ñòîëáöå ðàâíî 0, òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
   
5 - Indent From Level (îòñòóï îò óðîâíÿ). Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Indent_From_File.Íàçíà÷åíèå
  è èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Indent_From_Level (ñìîòðè âûøå).
  Ïðè íàëè÷èè â ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Indent_From_Level. Åñëè çíà÷åíèå Indent_From_Level áûëî ââåäåíî â 
  íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, òî èñïîëüçóåòñÿ çíà÷åíèå, 
  ââåä¸ííîå â ñêðèïòå.
  
6 - Âåëè÷èíà ñïðåäà ïî èíñòðóìåíòó. Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Spread_From_File.Íàçíà÷åíèå è 
  èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Spread (ñìîòðè âûøå). Ïðè íàëè÷èè â 
  ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Spread. Åñëè çíà÷åíèå Spread áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ 
  ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
  
7 - Indent From Level2 (îòñòóï îò óðîâíÿ 2). Äàííûé ïàðàìåòð ÈÑÏÎËÜÇÓÅÒÑß ÒÎËÜÊÎ Â ÑÊÐÈÏÒÅ ModifyStopLoss, à â òåêóùåì ñêðèïòå íå 
  èñïîëüçóåòñÿ. Åñëè â ýòîì ñòîëáöå åñòü êàêèå-ëèáî çíà÷åíèÿ, òî îíè â òåêóùåì ñêðèïòå èãíîðèðóþòñÿ. Î íàçíà÷åíèè äàííîãî ïàðàìåòðà 
  ñìîòðèòå â îïèñàíèè ñêðèïòà ModifyStopLoss. Åñëè âû íå ïëàíèðóòå èñïîëüçîâàíèå ñêðèïòà ModifyStopLoss èëè äàííîãî ïàðàìåòðà âîîáùå, 
  òî ìîæåòå íå ñîçäàâàòü äàííûé ñòîëáåö ïðè ñîçäàíèè óïðàâëÿþùåãî ôàéëà.
 
Åñëè âû íå ïëàíèðóåòå èñïîëüçîâàíèå ëþáîãî èç âûøåóêàçàííûõ ïàðàìåòðîâ, òî â ñîîòâåòñòâóþùåì ñòîëáöå óêàæèòå 0 - ïðè ÷òåíèè èç ôàéëà
îí áóäåò èãíîðèðîâàòüñÿ, à â ðàáîòå áóäåò èñïîëüçîâàòüñÿ ñîîòâåòñòâóþùåå çíà÷åíèå èç íàñòðîåê èëè âõîäíûõ ïàðàìåòðîâ ñêðèïòà. Îäíàêî 
ñòîëáåö íåëüçÿ ïðîïóñêàòü. Êðîìå òîãî, ìîæíî ïîëíîñòüþ óäàëÿòü ñòîëáåö, åñëè îí â äàííîì ôàéëå ÿâëÿåòñÿ ïîñëåäíèì, åñëè âû íå ïëàíèðóåòå
èñïîëüçîâàòü ýòîò ïàðàìåòð.

  
  Ïðèîðèòåò ïàðàìåòðîâ îðäåðà. 
  
Íàèâûñøèì ïðèîðèòåòîì îáëàäàþò çíà÷åíèÿ èç âõîäíûõ ïàðàìåòðîâ ñêðèïòà Attached_Stop_Loss, Attached_Take_Profit, Spread è Indent_From_Level,
òî åñòü åñëè îíè íå ðàâíû 0, ëþáûå äðóãèå íàñòðîéêè ñòîï-ëîññà, òåéê-ïðîôèòà è àíàëîãè÷íûå ïàðàìåòðû, ïåðåäàâàåìûå èç óïðàâëÿþùåãî ôàéëà, 
áóäóò èãíîðèðîâàòüñÿ. Åñëè âûøåóêàçàííûå ïàðàìåòðû ðàâíû 0, òî èñïîëüçóþòñÿ àíàëîãè÷íûå ïàðàìåòðû, ïåðåäàâàåìûå èç óïðàâëÿþùåãî ôàéëà. Åñëè 
ïåðåäàâàåìûå èç ôàéëà ïàðàìåòðû òàêæå ðàâíû 0, èëè åñëè ôàéë íå èñïîëüçóåòñÿ, òî áóäóò èñïîëüçîâàòüñÿ ñíà÷àëà ïåðåìåííûå Exact_Stop_Loss è 
Exact_Take_Profit, è òîëüêî åñëè è îíè ðàâíû 0, èñïîëüçóþòñÿ ïåðåìåííûå Fixed_Stop_Loss è Fixed_Take_Profit, ïîýòîìó åñëè Âû ïëàíèðóåòå 
èñïîëüçîâàòü Exact_Stop_Loss, Exact_Take_Profit, Fixed_Stop_Loss èëè Fixed_Take_Profit, òî óáåäèòåñü, ÷òî âûøåóêàçàííûå ïàðàìåòðû èç ôàéëà
íå ïåðåäàþòñÿ èëè ïåðåìåííàÿ Read_From_File = False (ýòî çàïðåùàåò èñïîëüçîâàíèå óïðàâëÿþùåãî ôàéëà). 

*/
  
extern string FileName = "Raschet.csv";

extern string Line_Color = "----------------------------------------------------------------------------------------";

// Öâåòà óïðàâëÿþùèé ëèíèé  è òåêñòà ïî óìîë÷àíèþ

extern color Open_Price_Line_Color = Blue;
extern color Plus_Level_Line_Color = DarkOrange;
extern color Minus_Level_Line_Color = LimeGreen;
extern color Stop_Loss_Line_Color = Red;
extern color Take_Profit_Line_Color = DarkViolet;
extern color Expiration_Line_Color = Chocolate;

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

// Âêëþ÷åíèå áèáëèîòåêè îáðàáîòêè îøèáîê

#include <stdlib.mqh>

// Îáúÿâëåíèå ïåðåìåííûõ

int first = 1, stroka = 1, stolbec = 1, _OrderType, dig, Stop_From_File, Take_Profit_From_File, Met = 1000 ;
double Lots_Scale, Lots_From_File = 0, Indent_From_File = 0, Spread_From_File = 0;

// Íà÷àëî ñêðèïòà

int start()
{

// Îáúÿâëåíèå è óñòàíîâêà íà÷àëüíûõ çíà÷åíèé ïåðåìåííûõ

double Open_Price_Level, Stop_Loss_Level, Take_Profit_Level, Calculation_Level;
datetime Expiration_Time;
color Line_Color;

// Îïðåäåëåíèå ïåðåìåííîé òèïà îðäåðà
   
if (StringSubstr( Operation, 0, 1) == "b" || StringSubstr( Operation, 0, 1) == "B" || Operation == "1" )
   {
   _OrderType = 1;
   Operation = "ÏÎÊÓÏÊÓ";
   }
else 
   if (StringSubstr( Operation, 0, 1) == "s" || StringSubstr( Operation, 0, 1) == "S" || Operation == "-1" )
      {
      _OrderType = -1;
      Operation = "ÏÐÎÄÀÆÓ";
      }
   else
      {
      string Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
                     +  "òèï òîðãîâîé îïåðàöèè buy èëè sell";
	   int Answer = MessageBox( Question, "Íå îïðåäåë¸í òèï òîðãîâîé îïåðàöèè", 0x00000000 | 0x00000030);
      deinit(); 
      return(0);
      }

// Ïðîâåðêà óñòàíîâêè ðàçìåðà ìèíèìàëüíîãî ëîòà

if (Lots == 0) Lots = Min_Lot_Size;

if (Min_Lot_Size == 0.01)
   dig = 2;
else
   if (Min_Lot_Size == 0.1)
      dig = 1;
   else
      if (Min_Lot_Size == 1.0)
         dig = 0;
      else
         {
         Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
                  + "çíà÷åíèå Min_Lot_Size = 0.01, 0.1 èëè 1.0";
	      Answer = MessageBox( Question, "Íåêîððåêòíàÿ óñòàíîâêà ìèíèìàëüíîãî ëîòà", 0x00000000 | 0x00000030);
         deinit(); 
         return(0);
         }

if (Lots != 0 && Lots < Min_Lot_Size)
   {
   Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
            + "ðàçìåð ëîòà íå ìåíüøå ìèíèìàëüíîãî";
	Answer = MessageBox( Question, "Íåêîððåêòíàÿ óñòàíîâêà ðàçìåðà ëîòà", 0x00000000 | 0x00000030);
   deinit(); 
   return(0);
   }

// ×òåíèå ïàðàìåòðîâ óñòàíîâêè îðäåðà èç ôàéëà

if (Read_From_File)
   {
   string Info[120][20];
   int FileHandle = FileOpen(FileName, FILE_CSV|FILE_READ, ";");
   if (FileHandle == -1)   
      {
      Print("Îøèáêà=", GetLastError());
      Read_From_File = False;
      }
   if (FileHandle > 0)
      {
      while(!FileIsEnding(FileHandle))
         {
         Info[stroka,stolbec] = FileReadString(FileHandle); 
         stolbec++;
         if (FileIsLineEnding(FileHandle)) 
           {
           stroka++; 
           stolbec = 1;
           }
         }
       }
     }        
 
// Çàïèñü ñ÷èòàííûõ èç ôàéëà ïàðàìåòðîâ óñòàíîâêè îðäåðà â ïåðåìåííûå äëÿ èõ äàëüíåéøåãî èñïîëüçîâàíèÿ
        
if (Read_From_File)
   {
   for (int i = 1; i < stroka; i++)
      {
      if (Symbol() == Info[i,1])
          {
          Read_From_File = True;
          Stop_From_File = StrToInteger(Info[i,2]);
          Take_Profit_From_File = StrToInteger(Info[i,3]);
          Lots_From_File = NormalizeDouble(StrToDouble(Info[i,4]),0) * Min_Lot_Size;
          Indent_From_File = StrToInteger(Info[i,5]);
          Spread_From_File = StrToInteger(Info[i,6]);
          break;
          }
      Read_From_File = False;
      }
    }
      
if (Use_Spread_From_File && Spread_From_File != 0 && Spread == 0)
   Spread = Spread_From_File;
   
if (Indent_From_File != 0 && Indent_From_Level == 0)
   Indent_From_Level = Indent_From_File;

if (Stop_From_File != 0 && Attached_Stop_Loss == 0)
   Attached_Stop_Loss = Stop_From_File;

if (Take_Profit_From_File != 0 && Attached_Take_Profit == 0 )
   Attached_Take_Profit = Take_Profit_From_File;

if (Lots_From_File != 0)
   Lots = Lots_From_File;
   
if (Attached_Stop_Loss > 0 && _OrderType == 1)
   string Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí Attached Stop Loss\níà " + Attached_Stop_Loss 
                 +" ïóíêòîâ íèæå öåíû îòêðûòèÿ îðäåðà.";
                 
if (Attached_Stop_Loss > 0 && _OrderType == -1)
   Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí Attached Stop Loss\níà " + Attached_Stop_Loss 
                 +" ïóíêòîâ âûøå öåíû îòêðûòèÿ îðäåðà.";
                 
if (Attached_Take_Profit > 0 && _OrderType == 1)
   string Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí Attached Take Profit\níà " + Attached_Take_Profit 
                 +" ïóíêòîâ âûøå öåíû îòêðûòèÿ îðäåðà.";
                 
if (Attached_Take_Profit > 0 && _OrderType == -1)
   Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí Attached Take Profit\níà " + Attached_Take_Profit 
                 +" ïóíêòîâ íèæå öåíû îòêðûòèÿ îðäåðà.";
                  
// Îïðåäåëåíèå íà÷àëüíûõ ïàðàìåòðîâ óñòàíîâêè îðäåðà 

if (Plus_Level > 0 && Minus_Level > 0)
   {
   Question = "Íå ìîãóò îäíîâðåìåííî èñïîëüçîâàòüñÿ Plus_Level è Minus_Level\n" +  "Óñòàíîâèòå çíà÷åíèå îäíîãî èç óðîâíåé ðàâíûì 0";
	Answer = MessageBox( Question, "Íåâåðíàÿ óñòàíîâêà âõîäíûõ ïàðàìåòðîâ", 0x00000000 | 0x00000030);
   deinit(); return(0);
   }

// Îïðåäåëåíèå òèïà óïðàâëÿþùåé ëèíèè è å¸ çíà÷åíèÿ, èñõîäÿ èç èñïîëüçóåìîãî ìåòîäà îïðåäåëåíèÿ 
// öåíû îòêðûòèÿ îðäåðà (ïåðåìåííîé Method)

if (Open_Price > 0)
   {
   Met = 0;
   Calculation_Level = NormalizeDouble(Open_Price, Digits);
   }

if (Plus_Level > 0) 
   {
   Met = 1;
   Calculation_Level = NormalizeDouble(Plus_Level, Digits);
   }
  
if (Minus_Level > 0) 
   {
   Met = -1;
   Calculation_Level = NormalizeDouble(Minus_Level, Digits);
   }

// Îïðåäåëåíèå ñïîñîáà ðàñ÷¸òà öåíû îòêðûòèÿ

if (Met == 0 || Met == 1 || Met == -1 )
   bool Calculation_Type = true;
else
   Calculation_Type = false;

if (!Calculation_Type)
   {
   if (StringSubstr( Method, 0, 1) == "O" || StringSubstr( Method, 0, 1) == "o" || Method == "0" )
      Met = 0;
   else
      if (StringSubstr( Method, 0, 1) == "P" || StringSubstr( Method, 0, 1) == "p" || Method == "1" )
         Met = 1;
      else
         if (StringSubstr( Method, 0, 1) == "M" || StringSubstr( Method, 0, 1) == "m" || Method == "-1" )
            Met = -1;
         else
            {
            Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
                     + "îäíó èç ïåðåìåííûõ: Open_Price, Plus_Level, Minus_Level \n"
                     + "èëè ïðàâèëüíîå çíà÷åíèå ïåðåìåííîé Method";
	         Answer = MessageBox( Question, "Íå îïðåäåë¸í ñïîñîá ðàñ÷¸òà öåíû îòêðûòèÿ", 0x00000000 | 0x00000030);
            deinit(); 
            return(0);
            }
   }

if (Met == 0)
   Line_Color = Open_Price_Line_Color;

if (Met == 1)
   Line_Color = Plus_Level_Line_Color;
     
if (Met == -1)
   Line_Color = Minus_Level_Line_Color;
     
if (Calculation_Level == 0)
	Calculation_Level = PriceOnDropped();

// Îïðåäåëåíèå íà÷àëüíîãî çíà÷åíèÿ Open Price, Stop Loss, Take Profit è Expiration_Time
// ñ ó÷¸òîì èñïîëüçóåìîãî ìåòîäà îïðåäåëåíèÿ öåíû îòêðûòèÿ îðäåðà (ïåðåìåííîé Method)

// ---Open_Price_Level

if (Met == 1)
   {
   Open_Price_Level = Calculation_Level + Indent_From_Level * Point;
   string Line_Type = "Plus Level Line";
   string Description = "íà " + Indent_From_Level + " ïóíêòîâ âûøå óðîâíÿ \näàííîé ëèíèè.";
   if ( _OrderType == 1 )
      {
      Open_Price_Level = Open_Price_Level + Spread * Point;
      Description = "íà " + (Indent_From_Level + Spread) + " ïóíêòîâ âûøå óðîâíÿ \näàííîé ëèíèè.";
      }
   }
   
if (Met == -1)
   {
   Open_Price_Level = Calculation_Level - Indent_From_Level * Point;
   Line_Type = "Minus Level Line";
   Description = "íà " + Indent_From_Level + " ïóíêòîâ íèæå óðîâíÿ \näàííîé ëèíèè.";
   if ( _OrderType == 1 )
      {
      Open_Price_Level = Open_Price_Level + Spread * Point;
      Description = "íà " + (Indent_From_Level + Spread) + " ïóíêòîâ íèæå óðîâíÿ \näàííîé ëèíèè.";
      } 
   }
   
if (Open_Price_Level == Calculation_Level)
   Met = 0;

if (Met == 0)
   {
   Open_Price_Level = Calculation_Level;
   Line_Color = Open_Price_Line_Color;
   Line_Type = "Open Price Line";
   Description = "ðàâíà óðîâíþ äàííîé ëèíèè.";
   }

if ( _OrderType == 1 )
   {
   if ( Open_Price_Level <= 0 )
		Open_Price_Level = Bid + MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point;
		
   // ---Stop_Loss_Level

   if ( Fixed_Stop_Loss > 0 )
	   Stop_Loss_Level = Open_Price_Level - Fixed_Stop_Loss * Point; 

   if (Exact_Stop_Loss > 0)
      Stop_Loss_Level = NormalizeDouble(Exact_Stop_Loss, Digits);
	   
   // ---Take_Profit_Level
   
   if ( Fixed_Take_Profit > 0 )
      Take_Profit_Level = Open_Price_Level + Fixed_Take_Profit * Point;
   
   if (Exact_Take_Profit > 0)
      Take_Profit_Level = NormalizeDouble(Exact_Take_Profit, Digits);
	}
	
if ( _OrderType == -1 )
   {
   if ( Open_Price_Level <= 0 )
		 Open_Price_Level = Ask - MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point; 

   // ---Stop_Loss_Level
   
   if ( Fixed_Stop_Loss > 0 )
	   Stop_Loss_Level = Open_Price_Level + Fixed_Stop_Loss * Point;
	
   if (Exact_Stop_Loss > 0)
      Stop_Loss_Level = NormalizeDouble(Exact_Stop_Loss, Digits);
   
   // ---Take_Profit_Level
   
   if ( Fixed_Take_Profit > 0 )
	   Take_Profit_Level = Open_Price_Level - Fixed_Take_Profit * Point;

   if (Exact_Take_Profit > 0)
      Take_Profit_Level = NormalizeDouble(Exact_Take_Profit,Digits);
   }

// ---Expiration_Time

if (Exact_Expiration_Time > CurTime())
      Expiration_Time = Exact_Expiration_Time;
else
   if ( Expiration_Shift > 0 )
      Expiration_Time = CurTime() + Period() * 60 * Expiration_Shift;
   else
	   if ( Expiration_Shift_H > 0 )
		   Expiration_Time = CurTime() + 3600 * Expiration_Shift_H;
		
// Ñîçäàíèå óïðàâëÿþùèõ ëèíèé:

int Lots_value_y = 30;

if ( first == 1 )
   {
	ObjectCreate( "Calculation Level", OBJ_HLINE, 0, 0, Calculation_Level, 0, 0, 0, 0 );
	ObjectSet( "Calculation Level", OBJPROP_COLOR, Line_Color );
	ObjectSetText( "Calculation Level", Line_Type, 6, "Arial", Line_Color );

   if ( Stop_Loss_Level > 0 && Attached_Stop_Loss == 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 );
	   }
	if ( Take_Profit_Level > 0 && Attached_Take_Profit == 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 );
	   }

	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 );
	   }
	
   int y = 25;
	
	if (Lots - 7 * Min_Lot_Size >= Min_Lot_Size)
	   Lots_Scale = Lots - 7 * Min_Lot_Size;
	else
	   Lots_Scale = Min_Lot_Size;
	  
	for ( double z = Lots_Scale; z < Lots_Scale + 20 * Min_Lot_Size; z += Min_Lot_Size )
	   {
	   if (NormalizeDouble(z, dig) - NormalizeDouble(Lots, dig) == 0)
	      int y_pos = y;
	      
		ObjectCreate( DoubleToStr( z, dig ), OBJ_LABEL, 0,0,0,0,0,0,0);
		ObjectSet( DoubleToStr( z, dig ), OBJPROP_CORNER, 1);
		ObjectSet( DoubleToStr( z, dig ), OBJPROP_XDISTANCE, 1);
		ObjectSet( DoubleToStr( z, dig ), OBJPROP_YDISTANCE, y);
		ObjectSetText(  DoubleToStr( z, dig ), DoubleToStr( z, dig ), 10, "Arial", Open_Price_Line_Color);
		y += 15;
	   }
	      
	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, y_pos + 5);
	ObjectSetText(  "Lots value", "****", 14, "Arial", Open_Price_Line_Color);
	   
   ObjectsRedraw();
	
	// Âûâîä îêíà ïîäòâåðæäåíèÿ îïåðàöèè

	Question = "Âíèìàíèå! Áóäåò óñòàíîâëåí îòëîæåííûé îðäåð íà " + Operation + ".\n\n"
	           + "Äëÿ óñòàíîâêè îðäåðà ïåðåìåñòèòå ëèíèè íà íåîáõîäèìûå \n" 
	           + "óðîâíè, óêàæèòå îáú¸ì îïåðàöèè â ëîòàõ è íàæìèòå \"ÎÊ\".\n\n" 
	           + "×òîáû îòêàçàòüñÿ îò óñòàíîâêè îðäåðà è çàâåðøèòü ðàáîòó,\n"
				  + "íàæìèòå \"Îòìåíà\".\n\n"
				  + "Äëÿ óñòàíîâêè öåíû îòêðûòèÿ èñïîëüçóåòñÿ " 
	           + Line_Type  + ".\n"
	           + "Öåíà îòêðûòèÿ îðäåðà áóäåò " + Description + Description2 + Description3;
	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 < 35)  Lots = Lots_Scale;
if ( Lots_value_y >= 35  && Lots_value_y < 50  ) Lots = Lots_Scale + Min_Lot_Size;
if ( Lots_value_y >= 50  && Lots_value_y < 65  ) Lots = Lots_Scale + 2 * Min_Lot_Size;
if ( Lots_value_y >= 65  && Lots_value_y < 80  ) Lots = Lots_Scale + 3 * Min_Lot_Size;
if ( Lots_value_y >= 80  && Lots_value_y < 95  ) Lots = Lots_Scale + 4 * Min_Lot_Size;
if ( Lots_value_y >= 95  && Lots_value_y < 110 ) Lots = Lots_Scale + 5 * Min_Lot_Size;
if ( Lots_value_y >= 110 && Lots_value_y < 125 ) Lots = Lots_Scale + 6 * Min_Lot_Size;
if ( Lots_value_y >= 125 && Lots_value_y < 140 ) Lots = Lots_Scale + 7 * Min_Lot_Size;
if ( Lots_value_y >= 140 && Lots_value_y < 155 ) Lots = Lots_Scale + 8 * Min_Lot_Size;
if ( Lots_value_y >= 155 && Lots_value_y < 170 ) Lots = Lots_Scale + 9 * Min_Lot_Size;
if ( Lots_value_y >= 170 && Lots_value_y < 185 ) Lots = Lots_Scale + 10 * Min_Lot_Size;
if ( Lots_value_y >= 185 && Lots_value_y < 200 ) Lots = Lots_Scale + 11 * Min_Lot_Size;
if ( Lots_value_y >= 200 && Lots_value_y < 215 ) Lots = Lots_Scale + 12 * Min_Lot_Size;
if ( Lots_value_y >= 215 && Lots_value_y < 230 ) Lots = Lots_Scale + 13 * Min_Lot_Size;
if ( Lots_value_y >= 230 && Lots_value_y < 245 ) Lots = Lots_Scale + 14 * Min_Lot_Size;
if ( Lots_value_y >= 245 && Lots_value_y < 260 ) Lots = Lots_Scale + 15 * Min_Lot_Size;
if ( Lots_value_y >= 260 && Lots_value_y < 275 ) Lots = Lots_Scale + 16 * Min_Lot_Size;
if ( Lots_value_y >= 275 && Lots_value_y < 290 ) Lots = Lots_Scale + 17 * Min_Lot_Size;
if ( Lots_value_y >= 290 && Lots_value_y < 305 ) Lots = Lots_Scale + 18 * Min_Lot_Size;
if ( Lots_value_y >= 305 							  ) Lots = Lots_Scale + 19 * Min_Lot_Size;

Lots = NormalizeDouble( Lots, dig );
	
// Open_Price

Calculation_Level = NormalizeDouble( ObjectGet( "Calculation Level", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) );

if (Met == 0)
   Open_Price_Level = Calculation_Level;
   
if (Met == 1)
   {
   Open_Price_Level = Calculation_Level + Indent_From_Level * Point;
   if ( _OrderType == 1 )
      Open_Price_Level = Open_Price_Level + Spread * Point;
   }
   
if (Met == -1)
   {
   Open_Price_Level = Calculation_Level - Indent_From_Level * Point;
   if ( _OrderType == 1 )
      Open_Price_Level = Open_Price_Level + Spread * Point;
   }

// Stop_Loss

if (Attached_Stop_Loss != 0 && _OrderType == 1  )
   Stop_Loss_Level = Open_Price_Level - Attached_Stop_Loss * Point;
else
   if (Attached_Stop_Loss != 0 && _OrderType == -1  )
      Stop_Loss_Level = Open_Price_Level + Attached_Stop_Loss * Point;
   else
	   Stop_Loss_Level = NormalizeDouble( ObjectGet( "Stop Loss Line", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) );
	
// Take_Profit

if (Attached_Take_Profit != 0 && _OrderType == 1  )
   Take_Profit_Level = Open_Price_Level + Attached_Take_Profit * Point;
else
   if (Attached_Take_Profit != 0 && _OrderType == -1  )
      Take_Profit_Level = Open_Price_Level - Attached_Take_Profit * Point;
   else
	   Take_Profit_Level = NormalizeDouble( ObjectGet( "Take Profit Line", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) );
	
// Expiration_Time
	
Expiration_Time = ObjectGet( "Expiration Line", OBJPROP_TIME1 );
	
// Îïðåäåëÿåì òèï îðäåðà

if ( _OrderType == 1 )
	{
	if ( Open_Price_Level > Ask )
      _OrderType = OP_BUYSTOP; 
	else
		_OrderType = OP_BUYLIMIT;
	}
	
if ( _OrderType == -1 )
	{
	if ( Open_Price_Level < Bid )
	   _OrderType = OP_SELLSTOP;
	else
	   _OrderType = OP_SELLLIMIT;
	}

// Ïðîâåðÿåì âñå çíà÷åíèÿ

if ( _OrderType == OP_BUYLIMIT || _OrderType == OP_BUYSTOP )
	{
	if ( Open_Price_Level - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
					 		 		 "\n" +
					 		 		 "Äëÿ BuyLimit è BuyStop - îðäåðîâ îí äîëæåí áûòü ÍÈÆÅ óðîâíÿ Open Price.\n" + 
					 		 		 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 		 "\n" +
					 		 		 "Äëÿ BuyLimit è BuyStop - îðäåðîâ îí äîëæåí áûòü ÂÛØÅ óðîâíÿ Open Price.\n" + 
					 		 		 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 			 "\n" +
					 		 			 "Äëÿ BuyStop - îðäåðà îí äîëæåí áûòü ÂÛØÅ òåêóùåé öåíû.	\n" + 
					 		 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 			 	"\n" +
					 		 			 	"Äëÿ BuyLimit - îðäåðà îí äîëæåí áûòü ÍÈÆÅ òåêóùåé öåíû.	\n" + 
					 		 			 	"Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 		 			 	"\n" +
					 		 			 	"Óñòàíîâèòå ïðàâèëüíîå çíà÷åíèå è íàæìèòå \"Ïîâòîð\".\n" +
					 		 			 	"×òîáû îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
				if ( Answer == 4 ) 
				   { 
				   ObjectsRedraw(); 
				   start(); 
				   }
				deinit();
				return(-1);
			   }
		   }
	   }
	   
if ( _OrderType == OP_SELLLIMIT || _OrderType == OP_SELLSTOP )
	{
	if ( Stop_Loss_Level - Open_Price_Level < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
					 		 		 "\n" +
					 		 		 "Äëÿ SellLimit è SellStop - îðäåðîâ îí äîëæåí áûòü ÂÛØÅ óðîâíÿ Open Price.\n" + 
					 		 		 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 		 "\n" +
					 		 		 "Äëÿ SellLimit è SellStop - îðäåðîâ îí äîëæåí áûòü ÍÈÆÅ óðîâíÿ Open Price.\n" + 
					 		 		 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 			"\n" +
					 		 			"Äëÿ SellLimit - îðäåðà îí äîëæåí áûòü ÍÈÆÅ òåêóùåé öåíû.	\n" + 
					 		 		 	"Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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!\n" + 
					 		 			 	"\n" +
					 		 			 	"Äëÿ SellStop - îðäåðà îí äîëæåí áûòü ÂÛØÅ òåêóùåé öåíû.	\n" + 
					 		 			 	"Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\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" +
					 		 	 "×òîáû îòêàçàòüñÿ îò óñòàíîâêè, íàæìèòå \"Îòìåíà\".", "Óñòàíîâêà îòëîæåííîãî îðäåðà", 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);
int ordersend = OrderSend( Symbol(), _OrderType, Lots, Open_Price_Level, Slippage, Stop_Loss_Level, Take_Profit_Level, _Comment, MagicNumber, Expiration_Time);

if ( ordersend > 0 )
	{
   
   // Åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
	
	OrderPrint();
	Print( "Îðäåð #", ordersend, " óñòàíîâëåí óñïåøíî!");
	
	ObjectCreate("Îðäåð # " + DoubleToStr(ordersend,0), OBJ_TEXT, 0, iTime(NULL,0,0), Open_Price_Level);
   ObjectSetText("Îðäåð # " + DoubleToStr(ordersend,0), DoubleToStr(Open_Price_Level, Digits), 8,"Times New Roman", Open_Price_Line_Color );
   
   if (Stop_Loss_Level != 0)
      {
      ObjectCreate("Îðäåð # " + DoubleToStr(ordersend,0) + " Stop Loss", OBJ_TEXT, 0, iTime(NULL,0,0), Stop_Loss_Level);
      ObjectSetText("Îðäåð # " + DoubleToStr(ordersend,0) + " Stop Loss", DoubleToStr(Stop_Loss_Level, Digits), 8,"Times New Roman", Stop_Loss_Line_Color );
	   }
	
	if (Take_Profit_Level != 0)
	   {
	   ObjectCreate("Îðäåð # " + DoubleToStr(ordersend,0) + " Take Profit", OBJ_TEXT, 0, iTime(NULL,0,0), Take_Profit_Level);
      ObjectSetText("Îðäåð # " + DoubleToStr(ordersend,0) + " Take Profit", DoubleToStr(Take_Profit_Level, Digits), 8,"Times New Roman", Take_Profit_Line_Color );
      }	
   
   ObjectsRedraw();	
	return(0);
	}
	
// Åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì

int error = GetLastError();
Print("Îøèáêà ïðè óñòàíîâêå! GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
MessageBox( "Îøèáêà ïðè óñòàíîâêå! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", 
            "Îøèáêà óñòàíîâêè îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); 

ObjectsRedraw();	
return(-1);
}

// Çàâåðøåíèå ðàáîòû ñêðèïòà

int deinit()
{

// Óäàëåíèå âñåõ îáúåêòîâ, ñîçäàííûõ ñêðèïòîì

ObjectDelete( "Calculation Level" );
ObjectDelete( "Stop Loss Line" );
ObjectDelete( "Take Profit Line" );
ObjectDelete( "Expiration Line" );

for ( double z = Lots_Scale; z < Lots_Scale + 20 * Min_Lot_Size; z += Min_Lot_Size )
	ObjectDelete( DoubleToStr( z, dig )); 
		   
ObjectDelete( "Lots" );
ObjectDelete( "Lots value" );
ObjectsRedraw();	

return(0);
}





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached

Other Features:

It opens Message Boxes to the user
Uses files from the file system

It reads information from a file

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for #SendPendingOrder


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: