#ModifyOrder





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

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

Ñêðèïò ïðåäíàçíà÷åí äëÿ ìîäèôèêàöèè/óäàëåíèÿ/çàêðûòèÿ ïîçèöèè/îòëîæåííîãî îðäåðà. Ïîçâîëÿåò 
èçìåíÿòü îòëîæåííûå îðäåðà êàê áåç èçìåíåíèÿ, òàê è ñ èçìåíåíèåì îáú¸ìà îðäåðà.

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

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


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

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

#property show_inputs

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

extern double New_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;

// Èçìåí¸ííûé îáü¸ì îðäåðà ïî óìîë÷àíèþ (ìîæíî ìåíÿòü â ïðîöåññå ðàáîòû)- èñïîëüçóåòñÿ òîëüêî äëÿ îòëîæåííûõ îðäåðîâ. 
// Åñëè ðàâåí 0, òî èñïîëüçóåòñÿ ðàíåå óñòàíîâëåííûé äëÿ îðäåðà îáú¸ì. Äîëæåí áûòü êðàòåí ðàçìåðó ìèíèìàëüíîãî ëîòà (ñìîòðè íèæå).

extern double Lots = 0;

// Ìåòîä îïðåäåëåíèÿ öåíû îòêðûòèÿ îðäåðà (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";

// Íîìåð îðäåðà äëÿ èçìåíåíèÿ. Äàííûé ñêðèïò ïîçâîëÿåò âûäåëÿòü îðäåðà äëÿ èçìåíåíèÿ êàê óêàçàíèåì íà èõ ëèíèþ íà ãðàôèêå, 
// òàê è ïðÿìûì ââåäåíèåì èõ íîìåðîâ. Åñëè íîìåð îðäåðà ââåä¸í, òî óêàçàíèå ëèíèè îðäåðà íà ãðàôèêå èãíîðèðóåòñÿ,
// åñëè íîìåð ðàâåí 0, òî èñïîëüçóåòñÿ óêàçàíèå ëèíèè îðäåðà.

extern int Order_Number = 0;

// Âîçìîæíûå âàðèàíòû óñòàíîâêè 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 = " ";

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

extern int Order_Find_Radius = 10;

// Ìèíèìàëüíûé ðàçìåð ëîòà. Îïðåäåëÿåòñÿ òîðãîâûìè óñëîâèÿìè êîíêðåòíîé êîìïàíèè è ìîæåò
// ïðèíèìàòü òîëüêî îäíî èç 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, 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;
double DropPrice = PriceOnDropped();
datetime Expiration_Time;
int _break, error;
color Line_Color;

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
         {
         string Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
                         + "çíà÷åíèå Min_Lot_Size = 0.01, 0.1 èëè 1.0";
	      int  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);
   }

// Ïîèñê îðäåðà äëÿ èçìåíåíèÿ

int _OrdersTotal = OrdersTotal();

// Íàõîæäåíèå îðäåðà ïðè ïîìîùè óêàçàíèÿ åãî ëèíèè íà ãðàôèêå

if (Order_Number == 0)
   {
   for ( int x = 0; x <= Order_Find_Radius; x ++ )
      {
	   for ( int z1 = _OrdersTotal - 1; z1 >= 0; z1 -- )
	      {
		   OrderSelect( z1, 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 (Order_Number != 0)
   {
	OrderSelect(Order_Number, SELECT_BY_TICKET);
		if ( OrderSymbol() == Symbol() )
			_break = 1; 
	}

if ( _break != 1 )
   {
	MessageBox(  "Íå óäàëîñü íàéòè îðäåð!\n\n" 
	           + "Ïåðåìåñòèòå ñêðèïò íà ãðàôèê íåäàëåêî îò öåíû îòêðûòèÿ \n"
				  + "îðäåðà, êîòîðûé õîòèòå ìîäèôèöèðîâàòü, ëèáî ââåäèòå \n" 
				  + "íîìåð îðäåðà âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà.", 
          	 	 "Íà÷àëî ðàáîòû", 0x00000000 | 0x00000010 | 0x00040000 ); 
	return(0);
   }

// Çàïèñü ïàðàìåòðîâ íàéäåííîãî îðäåðà

int _OrderType = OrderType();
int _OrderTicket = OrderTicket();
int _OrderMagic = OrderMagicNumber();
double _OrderOpenPrice = OrderOpenPrice();
double _OrderStopLoss = OrderStopLoss();
double _OrderTakeProfit = OrderTakeProfit();
double _Order_Lots = OrderLots();
datetime _OrderExpiration = OrderExpiration();

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

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 = 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;
   
// Îïðåäåëåíèå íîâîãî çíà÷åíèÿ Open_Price (öåíû îòêðûòèÿ îðäåðà) 

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

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

if (New_Price > 0)
   {
   Met = 0;
   Calculation_Level = NormalizeDouble(New_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 = _OrderOpenPrice;

// Îïðåäåëåíèå íà÷àëüíîãî çíà÷åíèÿ 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 Description1 = "íà " + Indent_From_Level + " ïóíêòîâ âûøå óðîâíÿ \näàííîé ëèíèè.";
   if ( _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT  )
      {
      Open_Price_Level = Open_Price_Level + Spread * Point;
      Description1 = "íà " + (Indent_From_Level + Spread) + " ïóíêòîâ âûøå óðîâíÿ \näàííîé ëèíèè.";
      }
   }
   
if (Met == -1)
   {
   Open_Price_Level = Calculation_Level - Indent_From_Level * Point;
   Line_Type = "Minus Level Line";
   Description1 = "íà " + Indent_From_Level + " ïóíêòîâ íèæå óðîâíÿ \näàííîé ëèíèè.";
   if (_OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT  )
      {
      Open_Price_Level = Open_Price_Level + Spread * Point;
      Description1 = "íà " + (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";
   if (_OrderType == OP_BUY || _OrderType == OP_BUY)
      Line_Type = "Zero Level Line";
   Description1 = "ðàâíà óðîâíþ äàííîé ëèíèè.";
   }

// Óñòàíîâêà îáú¸ìà îðäåðà
   
if (Lots == 0)
   Lots = _Order_Lots;
   
// Îïðåäåëåíèå íîâîãî çíà÷åíèÿ Stop Loss, Take Profit è Expiration_Time

// ---Stop_Loss_Level

if ( _OrderStopLoss > 0 && Fixed_Stop_Loss == 0 && Exact_Stop_Loss == 0 )
   Stop_Loss_Level = _OrderStopLoss; 
else
   {
	if ( Fixed_Stop_Loss > 0 )
	   {
		if ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT )
		   Stop_Loss_Level = Open_Price_Level - Fixed_Stop_Loss * Point; 
		else
		   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 ( _OrderTakeProfit > 0 && Fixed_Stop_Loss == 0 && Exact_Take_Profit == 0)
   Take_Profit_Level = _OrderTakeProfit; 
else
   {
	if ( Fixed_Take_Profit > 0 )
	   {
		if ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT )
		   Take_Profit_Level = Open_Price_Level + Fixed_Take_Profit * Point;
		else
		   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 ( _OrderType != OP_BUY && _OrderType != OP_SELL )
	{
   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;
	      else
		      if ( _OrderExpiration > 0 )
               Expiration_Time = _OrderExpiration;
	}

// Ñîçäàíèå óïðàâëÿþùèõ ëèíèé:

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 );
	   }
	
   if (_OrderType != OP_BUY && _OrderType != OP_SELL)
      {
      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();

   // Óñòàíîâêà äîïîëíèòåëüíûõ ïîÿñíåíèé, âûâîäèìûõ â îêíå ïîäòâåðæäåíèÿ îïåðàöèè
   
   if (_OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT)
      {
      if (Met == 0)
         {
         int Stop_Indent = - Attached_Stop_Loss;
         int Profit_Indent = Attached_Take_Profit;
         }
         
      if (Met == 1)
         {
         Stop_Indent = Indent_From_Level + Spread - Attached_Stop_Loss;
         Profit_Indent = Indent_From_Level + Spread + Attached_Take_Profit;
         }
         
      if (Met == -1)
         {
         Stop_Indent = Spread - Indent_From_Level - Attached_Stop_Loss;
         Profit_Indent = Spread - Indent_From_Level + Attached_Take_Profit;
         }
      }
         
   if (_OrderType == OP_SELL || _OrderType == OP_SELLSTOP || _OrderType == OP_SELLLIMIT)
      {
      if (Met == 0)
         {
         Stop_Indent = Attached_Stop_Loss;
         Profit_Indent = - Attached_Take_Profit;
         }
         
      if (Met == 1)
         {
         Stop_Indent = Indent_From_Level + Attached_Stop_Loss;
         Profit_Indent = Indent_From_Level - Attached_Take_Profit;
         }
         
      if (Met == -1)
         {
         Stop_Indent = - Indent_From_Level + Attached_Stop_Loss;
         Profit_Indent = - Indent_From_Level - Attached_Take_Profit;
         }
      } 
   
   if (Stop_Indent < 0)
      {
      string Stop_Indent_Type = "íèæå";
      Stop_Indent = - Stop_Indent;
      }
   else
      Stop_Indent_Type = "âûøå"; 
      
   if (Profit_Indent < 0)
      {
      string Profit_Indent_Type = "íèæå";
      Profit_Indent = - Profit_Indent;
      }
   else
      Profit_Indent_Type = "âûøå";           
   
   if (Attached_Stop_Loss > 0 && (_OrderType == OP_BUYLIMIT  || _OrderType == OP_BUYSTOP || _OrderType == OP_BUY))
      {
      string Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Stop Loss íà " + Attached_Stop_Loss 
                          + " ïóíêòîâ íèæå öåíû îòêðûòèÿ îðäåðà \n"
                          + "èëè íà " + Stop_Indent + " ïóíêòîâ " + Stop_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      
      if (_OrderType == OP_BUY)
         Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Stop Loss íà " + Stop_Indent 
                      + " ïóíêòîâ " + Stop_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      }
                 
   if (Attached_Stop_Loss > 0 && (_OrderType == OP_SELLLIMIT  || _OrderType == OP_SELLSTOP || _OrderType == OP_SELL))
      {
      Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Stop Loss íà " + Attached_Stop_Loss 
                   + " ïóíêòîâ âûøå öåíû îòêðûòèÿ îðäåðà \n"
                   + "èëè íà " + Stop_Indent + " ïóíêòîâ " + Stop_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      if (_OrderType == OP_SELL)
         Description2 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Stop Loss íà " + Stop_Indent 
                      + " ïóíêòîâ " + Stop_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      }             
                 
   if (Attached_Take_Profit > 0 && (_OrderType == OP_BUYLIMIT  || _OrderType == OP_BUYSTOP || _OrderType == OP_BUY))
      {
      string Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Take Profit íà " + Attached_Take_Profit 
                          + " ïóíêòîâ âûøå öåíû îòêðûòèÿ îðäåðà \n"
                          + "èëè íà " + Profit_Indent + " ïóíêòîâ " + Profit_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      if (_OrderType == OP_BUY)
         Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Take Profit íà " + Profit_Indent 
                      + " ïóíêòîâ " + Profit_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      }             
                 
   if (Attached_Take_Profit > 0 && (_OrderType == OP_SELLLIMIT  || _OrderType == OP_SELLSTOP || _OrderType == OP_SELL))
      {
      Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Take Profit íà " + Attached_Take_Profit 
                   + " ïóíêòîâ íèæå öåíû îòêðûòèÿ îðäåðà \n"
                   + "èëè íà " + Profit_Indent + " ïóíêòîâ " + Profit_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      if (_OrderType == OP_SELL)
         Description3 = "\n\nÑ îðäåðîì àâòîìàòè÷åñêè áóäåò óñòàíîâëåí èëè èçìåí¸í \nAttached Take Profit íà " + Profit_Indent 
                      + " ïóíêòîâ " + Profit_Indent_Type + " óðîâíÿ " + Line_Type + ".";
      }
      
   if (_OrderType == OP_BUY || _OrderType == OP_SELL)
      {
      string Description0 = "Äëÿ ìîäèôèêàöèè ïîçèöèè èñïîëüçóåòñÿ "
                            + Line_Type  + ".\n"
                            + "Ó îòêðûòîé ïîçèöèè èçìåíÿòü öåíó îòêðûòèÿ íåëüçÿ, ïîýòîìó \n"
                            + "ïåðåìåùåíèå äàííîé ëèíèè ïðèâåä¸ò òîëüêî ê èçìåíåíèþ \n"
                            + "îòíîñèòåëüíî íå¸ óðîâíåé Stop Loss è Take Profit (åñëè îíè \nèñïîëüçóþòñÿ).";
      string Description = " ";
      string Headline = "Ìîäèôèêàöèÿ ÎÒÊÐÛÒÎÉ ÏÎÇÈÖÈÈ";
      }
   else
      {
      Description0 =  "Äëÿ óñòàíîâêè öåíû îòêðûòèÿ èñïîëüçóåòñÿ " 
	                 + Line_Type  + ".\n"
	                 + "Öåíà îòêðûòèÿ îðäåðà áóäåò "
	                 + Description1 ;
	   Description = ", óêàæèòå ïðè íåîáõîäèìîñòè îáú¸ì îïåðàöèè â ëîòàõ\n";
	   Headline = "Ìîäèôèêàöèÿ ÎÒËÎÆÅÍÍÎÃÎ ÎÐÄÅÐÀ";
	   }
  
   // Âûâîä îêíà ïîäòâåðæäåíèÿ îïåðàöèè  
   
   Question = "Äëÿ âíåñåíèÿ èçìåíåíèé ïåðåìåñòèòå ëèíèè íà íåîáõîäèìûå\n" 
	           + "óðîâíè" + Description
	           + "è íàæìèòå \"ÎÊ\".\n\n" 
	           + "×òîáû îòêàçàòüñÿ îò âíåñåíèÿ èçìåíåíèé è çàâåðøèòü ðàáîòó,\n"
				  + "íàæìèòå \"Îòìåíà\".\n\n"
				  + Description0 + Description2 + Description3;
	Answer = MessageBox( Question, Headline, 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 ), Digits );

if (Met == 0)
   Open_Price_Level = Calculation_Level;
   
if (Met == 1)
   {
   Open_Price_Level = Calculation_Level + Indent_From_Level * Point;
   if ( _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT || _OrderType == OP_BUY )
      Open_Price_Level = Open_Price_Level + Spread * Point;
   }
   
if (Met == -1)
   {
   Open_Price_Level = Calculation_Level - Indent_From_Level * Point;
   if ( _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT || _OrderType == OP_BUY )
      Open_Price_Level = Open_Price_Level + Spread * Point;
   }
   
// Stop_Loss

if (Attached_Stop_Loss != 0 && ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT ))
   Stop_Loss_Level = Open_Price_Level - Attached_Stop_Loss * Point;
else
   if (Attached_Stop_Loss != 0 && ( _OrderType == OP_SELL || _OrderType == OP_SELLSTOP || _OrderType == OP_SELLLIMIT ))
      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 == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT ))
   Take_Profit_Level = Open_Price_Level + Attached_Take_Profit * Point;
else
   if (Attached_Take_Profit != 0 && ( _OrderType == OP_SELL || _OrderType == OP_SELLSTOP || _OrderType == OP_SELLLIMIT ))
      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 );

// Îáðàáîòêà óäàëåíèÿ ëèíèè Calculation Level
	
if ( Calculation_Level == 0 )
	{
	int order;
	if ( _OrderType == OP_BUY || _OrderType == OP_SELL )
		{
		// Âûâîä îêíà ïîäòâåðæäåíèÿ
	   Question = "Áûëà óäàëåíà ëèíèÿ " + Line_Type + " äëÿ îòêðûòîé ïîçèöèè.\n" 
	              + "Ýòî ïðèâåä¸ò ê çàêðûòèþ ïîçèöèè ïî òåêóùåé ðûíî÷íîé öåíå.\n\n"
	              + "Äëÿ ïîäòâåðæäåíèÿ îïåðàöèè íàæìèòå \"ÎÊ\".\n" 
	              + "Äëÿ îòìåíû îïåðàöèè íàæìèòå \"Îòìåíà\".";
	   Answer = MessageBox( Question, "Ïîäòâåðæäåíèå çàêðûòèÿ ïîçèöèè", 0x00000001 | 0x00000040 | 0x00040000  );
      
      if ( Answer != 1 ) 
         return(0);
		
		if ( _OrderType == OP_BUY ) 
			order = OrderClose( _OrderTicket, OrderLots(), Bid, Slippage); 
		else
			order = OrderClose( _OrderTicket, OrderLots(), Ask, Slippage);
		}
		else
		   order = OrderDelete( _OrderTicket ); 

	if ( order > 0 )
	   {
      
      // Åñëè âñ¸ OK, âûâîäèì ëîã è âûõîäèì
	   
	   Print( "Îðäåð #", _OrderTicket, " çàêðûò/óäàë¸í óñïåøíî!");
			
	   ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0));
      ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss");
      ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit");
    		
		ObjectsRedraw();	
		return(0); 
      } 
      
      // åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
		
		error = GetLastError();
		Print("Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
		MessageBox( "Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", 
             	 	"Îøèáêà çàêðûòèÿ/óäàëåíèÿ îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); 
		
		ObjectsRedraw();	
		return(-1);
	return(0);
	}
	
// Ïðîâåðÿåì âñå çíà÷åíèÿ

if ( _OrderType == OP_BUY )
	{
	if (Bid - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point && Stop_Loss_Level != 0 )
		{
		Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
				 		 		 	"\n" +
				 		 		 	"Äëÿ Buy - ïîçèöèè îí äîëæåí áûòü ÍÈÆÅ Bid.	\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 - Bid < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point && Take_Profit_Level != 0 )
		{
		Answer = MessageBox( "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Take Profit!\n" + 
			 		 		 		"\n" +
			 		 		 		"Äëÿ Buy - ïîçèöèè îí äîëæåí áûòü ÂÛØÅ Bid.	\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 || _OrderType == OP_BUYLIMIT )
	{
	if ( Open_Price_Level - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point && Stop_Loss_Level != 0 )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
						 			 "\n" +
					 	 			 "Äëÿ Buy, 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" +
				 		 			 "Äëÿ Buy, 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);
			}
		}
		
	if ( _OrderType == OP_BUYLIMIT )
		{
		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_SELL )
	{
	if ( Stop_Loss_Level - Ask < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point && Stop_Loss_Level != 0 )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
				 		 			 "\n" +
						 			 "Äëÿ Sell - ïîçèöèè îí äîëæåí áûòü ÂÛØÅ Ask.	\n" + 
					 	 			 "Ìèíèìàëüíûé îòñòóï (" + Symbol() + ") - " + DoubleToStr( MarketInfo( Symbol(), MODE_STOPLEVEL ), 0 ) + " ïóíêòîâ.\n" + 
					 	 			 "\n" +
						 			 "Óñòàíîâèòå ïðàâèëüíîå çíà÷åíèå è íàæìèòå \"Ïîâòîð\".\n" +
					 	 			 "×òîáû îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
		if ( Answer == 4 ) 
		   { 
		   ObjectsRedraw(); 
		   start(); 
		   }
		deinit();
		return(-1);
		}
	if ( Ask - Take_Profit_Level < MarketInfo( Symbol(), MODE_STOPLEVEL ) * Point && Take_Profit_Level != 0 )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Take Profit!\n" + 
						 			 "\n" +
					 	 			 "Äëÿ Sell - ïîçèöèè îí äîëæåí áûòü ÍÈÆÅ Ask.	\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 && Stop_Loss_Level != 0 )
		{
		Answer = MessageBox(  "Íåïðàâèëüíî óñòàíîâëåí óðîâåíü Stop Loss!\n" + 
				 		 			 "\n" +
				 		 			 "Äëÿ Sell, 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" +
						 			 "Äëÿ Sell, 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);
			}
		}
	
	if ( _OrderType == OP_SELLSTOP )
		{
		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 ( _OrderType == OP_BUY || _OrderType == OP_SELL )
   {
	if ( Expiration_Time != 0 )
		{
		Answer = MessageBox( "Íåëüçÿ óñòàíàâëèâàòü Expiration Line (êîðè÷íåâàÿ ëèíèÿ)" 
		                   + "äëÿ óæå îòêðûòûõ ïîçèöèé!\n\n"  
			 		 		    +	"×òîáû ïðîäîëæèòü ìîäèôèêàöèþ îðäåðà, óäàëèòå ëèíèþ è \n"
			 		 		    + "íàæìèòå \"Ïîâòîð\".\n" 
			 		 		    +	"×òîáû îòêàçàòüñÿ îò ìîäèôèêàöèè, íàæìèòå \"Îòìåíà\".", "Ìîäèôèêàöèÿ îðäåðà", 0x00000005 | 0x00000030 | 0x00040000 );
		if ( Answer == 4 ) 
		   {	
		   ObjectDelete( "Expiration Line" ); 
		   ObjectsRedraw();
		   start(); 
		   }
		deinit();
		return(-1);
		}
	}
else
	{
	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);
		}
	}
	
if ( _OrderType == OP_BUY || _OrderType == OP_SELL )
   Open_Price_Level = _OrderOpenPrice;

// Èçìåíåíèå îðäåðà áåç èçìåíåíèÿ îáú¸ìà. 

if (Lots == 0 || Lots == _Order_Lots || _OrderType == OP_BUY || _OrderType == OP_SELL)
   {	
   if ((NormalizeDouble(Open_Price_Level, Digits) - NormalizeDouble(_OrderOpenPrice, Digits) != 0) || (NormalizeDouble(Stop_Loss_Level, Digits) - NormalizeDouble(_OrderStopLoss, Digits) != 0) || 
   (NormalizeDouble(Take_Profit_Level, Digits) - NormalizeDouble(_OrderTakeProfit, Digits) != 0) || (Expiration_Time != _OrderExpiration))
      {
      
      // Âûâîäèì èíôó î çàïðîñå è ïûòàåìñÿ ìîäèôèöèðîâàòü îðäåð
      
      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);
      int ordermodify = OrderModify( _OrderTicket, Open_Price_Level, Stop_Loss_Level, Take_Profit_Level, Expiration_Time);
     
      if (ordermodify > 0)
	      {
         //Åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
	      OrderPrint();
	      Print( "Îðäåð #", _OrderTicket, " ìîäèôèöèðîâàí óñïåøíî!");
	      }
	   else
	      {
	      Print( "Îðäåð #", _OrderTicket, " îñòàëñÿ áåç èçìåíåíèé");
	      error = GetLastError();
	      if (error != 1)
	         { 
	         Print("GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
            MessageBox( "Îðäåð îñòàëñÿ áåç èçìåíåíèé \n" + ErrorDescription( error ), "Îðäåð íå èçìåí¸í", 0x00000000 | 0x00000040 | 0x00040000 );
	         }
	      else
	         MessageBox( "Îðäåð îñòàëñÿ áåç èçìåíåíèé \n", "Îðäåð íå èçìåí¸í", 0x00000000 | 0x00000040 | 0x00040000 );
	      }
      } 
	   else 
      MessageBox( "Îðäåð îñòàëñÿ áåç èçìåíåíèé \n", "Îðäåð íå èçìåí¸í", 0x00000000 | 0x00000040 | 0x00040000 );
	    
   OrderSelect(_OrderTicket, SELECT_BY_TICKET);
   
	if (!ObjectMove("Îðäåð # " + DoubleToStr(_OrderTicket,0), 0, iTime(NULL,0,0), OrderOpenPrice()))
	   ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0), OBJ_TEXT, 0, iTime(NULL,0,0), OrderOpenPrice());
   ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0), DoubleToStr(OrderOpenPrice(), Digits), 8,"Times New Roman", Open_Price_Line_Color );
   
   if (!ObjectMove("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss", 0, iTime(NULL,0,0), OrderStopLoss()) && (Stop_Loss_Level != 0))
       ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss", OBJ_TEXT, 0, iTime(NULL,0,0), OrderStopLoss());
   ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss", DoubleToStr(OrderStopLoss(), Digits), 8,"Times New Roman", Stop_Loss_Line_Color );
	
	if (!ObjectMove("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit", 0, iTime(NULL,0,0), OrderTakeProfit()) && (Take_Profit_Level != 0))
	    ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit", OBJ_TEXT, 0, iTime(NULL,0,0), OrderTakeProfit());
   ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit", DoubleToStr(OrderTakeProfit(), Digits), 8,"Times New Roman", Take_Profit_Line_Color );
   
   ObjectsRedraw();	
   return(-1);
   }
 
// Èçìåíåíèå îðäåðà ñ èçìåíåíèåì îáú¸ìà.
// Ìåòàòðåéäåð íå ïîçâîëÿåò èçìåíÿòü îáú¸ì ó óæå óñòàíîâëåííûõ îòëîæåííûõ îðäåðîâ,
// ïîýòîìó ñíà÷àëà óäàëÿåòñÿ ñòàðûé îðäåð, à çàòåì óñòàíàâëèâàåòñÿ íîâûé îðäåð ñ äðóãèì îáú¸ìîì. 

if ((Lots != 0) && (Lots != _Order_Lots))
   {
     
   // Óäàëåíèå ñòàðîãî îðäåðà
     
   if (OrderDelete( _OrderTicket ))
      {
      
      // åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
      
      Print( "Îðäåð #", _OrderTicket, " óäàë¸í óñïåøíî!");
    
      ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0));
      ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss");
      ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit");
    		
      ObjectsRedraw();
      }
   else
   
   // Åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
	 
	{
	error = GetLastError();
	if (error != 0 && error != 4202 )
	   {
	   Print("Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
	   MessageBox( "Îøèáêà ïðè çàêðûòèè/óäàëåíèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", 
             	 	"Îøèáêà çàêðûòèÿ/óäàëåíèÿ îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); 
	   
	   ObjectsRedraw();	
	   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=", _OrderMagic, ",Expiration_Time=", Expiration_Time );
	int ordersend = OrderSend( Symbol(), _OrderType, Lots, Open_Price_Level, Slippage, Stop_Loss_Level, Take_Profit_Level, _Comment, _OrderMagic, 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);
      }

    // Åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
	 
   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:
Checks for the total of open orders

It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
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 : USDJPY on H1

From 2009-11-01 to 2009-11-30 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 : 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 2009-08-01 to 2009-10-01 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 : 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

Request Backtest for #ModifyOrder


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

Pair: Period: