#ModifyStopLoss





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

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

Ñêðèïò ïðåäíàçíà÷åí äëÿ ìîäèôèêàöèè èëè óäàëåíèÿ ñòîï-ëîññà ó óñòàíîâëåííîãî îòëîæåííîãî 
îðäåðà èëè îòêðûòîé ïîçèöèè.

Äëÿ ýòîãî íåîáõîäèìî:

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

 4) Ó ñêðèïòà îäíà óïðàâëÿþùàÿ ëèíèÿ:
 
	- Calculation Level Line (ïî óìîë÷àíèþ - öâåòà LimeGreen - áëèçêîãî ê çåë¸íîìó ) - 
	äàííàÿ ëèíèÿ â çàâèñèìîñòè îò äðóãèõ íàñòðîåê ëèáî îïðåäåëÿåò íîâûé óðîâåíü Stop Loss,
	ëèáî ñëóæèò óðîâíåì äëÿ îòñ÷¸òà Stop Loss'à.

   Äëÿ ìîäèôèêàöèè ñòîï-ëîññà ïåðåíåñèòå ëèíèþ Calculation Level Line íà íóæíûé óðîâåíü.
   Äëÿ óäàëåíèÿ ñòîï-ëîññà âûäåëèòå ëèíèþ Calculation Level Line è óäàëèòå å¸ ñ ãðàôèêà. 
    
 5) Êîãäà âñ¸ áóäåò ãîòîâî, â ïîÿâèâøåìñÿ îêíå íàæìèòå êíîïêó "ÎÊ".
    
 6) Äëÿ ïðåêðàùåíèÿ ðàáîòû ñêðèïòà â ëþáîé ìîìåíò ìîæíî âîñïîëüçîâàòüñÿ êíîïêîé "Îòìåíà".

*/


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

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

#property show_inputs

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

extern double Calculation_Level = 0;

// Ïåðâûé âîçìîæíûé ðàçìåð îòñòóïà îò óðîâíÿ Calculation_Level. Äàííîå çíà÷åíèå, â ñëó÷àå åãî èñïîëüçîâàíèÿ, îòíèìàåòñÿ èëè ïðèáàâëÿåòñÿ
// (â çàâèñèìîñòè îò íàïðàâëåíèÿ - Buy èëè Sell èçìåíÿåìîãî îðäåðà) îò óðîâíÿ Calculation_Level è îïðåäåëÿåò íîâîå çíà÷åíèå
// óðîâíÿ Stop Loss. Åñëè ðàâåí 0, òî â êà÷åñòâå óðîâíÿ Stop Loss áóäåò èñïîëüçîâàòüñÿ çíà÷åíèå óðîâíÿ Calculation_Level.

extern int Indent_From_Level1 = 0;

// Âòîðîé âîçìîæíûé ðàçìåð îòñòóïà îò óðîâíÿ Calculation_Level. Íàçíà÷åíèå òî æå, ÷òî è ó óðîâíÿ Indent_From_Level1. Äëÿ èçìåíåíèÿ ñòîï-ëîññà 
// ìîæåò èñïîëüçîâàòüñÿ òîëüêî îäèí èç íèõ, êàêîé èìåííî - îïðåäåëÿåòñÿ ïåðåìåííîé Indent_From_Level1_Flag (ñìîòðè íèæå).

extern int Indent_From_Level2 = 0;

// Ïåðåêëþ÷àòåëü èñïîëüçóåìûõ äëÿ ìîäèôèêàöèè ñòîï-ëîññà îòñòóïîâ. Åñëè óñòàíîâëåí â True, òî èñïîëüçóåòñÿ îòñòóï Indent_From_Level1,
// åñëè óñòàíîâëåí â False, òî Indent_From_Level2

extern bool Indent_From_Level1_Flag = True;

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

extern int Order_Number = 0;

// Ñïðåä ïî òåêóùåìó èíñòðóìåíòó. Äàííàÿ ïåðåìåííàÿ èñïîëüçóåòñÿ äëÿ óòî÷íåíèÿ óðîâíÿ ñòîï-ëîññà, åñëè åãî íóæíî âûñòàâèòü ïî öåíå Ask,
// òî åñòü íà ïîêóïêó (Buy), à ãðàôèêè ñòðîÿòñÿ òîëüêî ïî öåíå Bid (êàê ñòàíäàðòíî â Ìåòàòðåéäåðå).

extern int Spread = 0;

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

extern string _Comment = " ";

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

extern int Order_Find_Radius = 10;

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

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 - Indent From Level1 (îòñòóï îò óðîâíÿ - 1). Ýòî òîò æå ñàìûé ïàðàìåòð, êîòîðûé â äðóãèõ ñêðèïòàõ íàçûâàåòñÿ Attached Stop Loss 
  (ïðèêðåïë¸ííûé ñòîï ëîññ), íî â òåêóùåì ñêðèïòå îí èìååò äðóãîå íàçíà÷åíèå. Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â 
  ïåðåìåííóþ Indent_From_File1. 
  Íàçíà÷åíèå è èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèÿþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Indent_From_Level1 
  (ñìîòðè âûøå). Ïðè íàëè÷èè â ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Indent_From_Level1. Åñëè çíà÷åíèå Indent_From_Level1 
  áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, 
  òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
  
3 - Attached Take Profit (ïðèêðåïë¸ííûé òåéê ïðîôèò). Äàííûé ïàðàìåòð â òåêóùåì ñêðèïòå íå èñïîëüçóåòñÿ, çíà÷åíèÿ èç äàííîãî ñòîëáöà 
  èãíîðèðóþòñÿ, îäíàêî ñàì ñòîëáåö â ôàéëå äîëæåí ïðèñóòñòâîâàòü è áûòü çàïîëíåííûì (÷òî òàì óêàçàíî, äëÿ äàííîãî ñêðèïòà íå èìååò 
  çíà÷åíèÿ) - ýòî ñäåëàíî äëÿ ñîâìåñòèìîñòè ñ äðóãèìè ñêðèïòàìè. Îïèñàíèå åãî íàçíà÷åíèÿ ñìîòðèòå â èíñòðóêöèÿõ ê äðóãèì ñêðèïòàì.
 
4 - Îáú¸ì òîðãîâîé îïåðàöèè. Äàííûé ïàðàìåòð â òåêóùåì ñêðèïòå íå èñïîëüçóåòñÿ, çíà÷åíèÿ èç äàííîãî ñòîëáöà 
  èãíîðèðóþòñÿ, îäíàêî ñàì ñòîëáåö â ôàéëå äîëæåí ïðèñóòñòâîâàòü è áûòü çàïîëíåííûì (÷òî òàì óêàçàíî, äëÿ äàííîãî ñêðèïòà íå èìååò 
  çíà÷åíèÿ) - ýòî ñäåëàíî äëÿ ñîâìåñòèìîñòè ñ äðóãèìè ñêðèïòàìè. Îïèñàíèå åãî íàçíà÷åíèÿ ñìîòðèòå â èíñòðóêöèÿõ ê äðóãèì ñêðèïòàì.
   
5 - Indent From Level (îòñòóï îò óðîâíÿ). Äàííûé ïàðàìåòð â òåêóùåì ñêðèïòå íå èñïîëüçóåòñÿ, çíà÷åíèÿ èç äàííîãî ñòîëáöà 
  èãíîðèðóþòñÿ, îäíàêî ñàì ñòîëáåö â ôàéëå äîëæåí ïðèñóòñòâîâàòü è áûòü çàïîëíåííûì (÷òî òàì óêàçàíî, äëÿ äàííîãî ñêðèïòà íå èìååò 
  çíà÷åíèÿ) - ýòî ñäåëàíî äëÿ ñîâìåñòèìîñòè ñ äðóãèìè ñêðèïòàìè. Îïèñàíèå åãî íàçíà÷åíèÿ ñìîòðèòå â èíñòðóêöèÿõ ê äðóãèì ñêðèïòàì.
  
6 - Âåëè÷èíà ñïðåäà ïî èíñòðóìåíòó. Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà çàïèñûâàåòñÿ â ïåðåìåííóþ Spread_From_File.Íàçíà÷åíèå è 
  èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Spread (ñìîòðè âûøå). Ïðè íàëè÷èè â 
  ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Spread. Åñëè çíà÷åíèå Spread áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ 
  ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.
  
7 - Indent From Level2 (îòñòóï îò óðîâíÿ 2). Äàííûé ïàðàìåòð ÈÑÏÎËÜÇÓÅÒÑß ÒÎËÜÊÎ Â ÒÅÊÓÙÅÌ ÑÊÐÈÏÒÅ. Äàííûé ïàðàìåòð ïðè ÷òåíèè èç ôàéëà
  çàïèñûâàåòñÿ â ïåðåìåííóþ Indent_From_File2. 
  Íàçíà÷åíèå è èñïîëüçîâàíèå äàííîãî ïàðàìåòðà ïîëíîñòüþ àíàëîãè÷íî èñïîëüçîâàíèÿþ ïðåäîïðåäåë¸ííîé ïåðåìåííîé Indent_From_Level2 
  (ñìîòðè âûøå). Ïðè íàëè÷èè â ôàéëå äàííîãî ïàðàìåòðà îí çàìåíÿåò ïåðåìåííóþ Indent_From_Level2. Åñëè çíà÷åíèå Indent_From_Level2 
  áûëî ââåäåíî â íàñòðîéêàõ ñêðèïòà èëè åãî âõîäíûõ ïàðàìåòðàõ, òî îíî èãíîðèðóåòñÿ, îäíàêî åñëè çíà÷åíèå â ñòîëáöå ðàâíî 0, 
  òî èñïîëüçóåòñÿ çíà÷åíèå, ââåä¸ííîå â ñêðèïòå.

Åñëè âû íå ïëàíèðóòå èñïîëüçîâàíèå äàííîãî ïàðàìåòðà âîîáùå, òî ìîæåòå íå ñîçäàâàòü äàííûé ñòîëáåö ïðè ñîçäàíèè óïðàâëÿþùåãî ôàéëà.
 
Åñëè âû íå ïëàíèðóåòå èñïîëüçîâàíèå ëþáîãî èç âûøåóêàçàííûõ ïàðàìåòðîâ, òî â ñîîòâåòñòâóþùåì ñòîëáöå óêàæèòå 0 - ïðè ÷òåíèè èç ôàéëà
îí áóäåò èãíîðèðîâàòüñÿ, à â ðàáîòå áóäåò èñïîëüçîâàòüñÿ ñîîòâåòñòâóþùåå çíà÷åíèå èç íàñòðîåê èëè âõîäíûõ ïàðàìåòðîâ ñêðèïòà. Îäíàêî 
ñòîëáåö íåëüçÿ ïðîïóñêàòü. Êðîìå òîãî, ìîæíî ïîëíîñòüþ óäàëÿòü ñòîëáåö, åñëè îí â äàííîì ôàéëå ÿâëÿåòñÿ ïîñëåäíèì, åñëè âû íå ïëàíèðóåòå
èñïîëüçîâàòü ýòîò ïàðàìåòð.

  
  Ïðèîðèòåò ïàðàìåòðîâ îðäåðà. 
  
Íàèâûñøèì ïðèîðèòåòîì îáëàäàþò çíà÷åíèÿ èç âõîäíûõ ïàðàìåòðîâ ñêðèïòà Indent From Level1, Indent From Level2, Spread, òî åñòü åñëè îíè íå 
ðàâíû 0, ëþáûå äðóãèå àíàëîãè÷íûå ïàðàìåòðû, ïåðåäàâàåìûå èç óïðàâëÿþùåãî ôàéëà,áóäóò èãíîðèðîâàòüñÿ. Åñëè âûøåóêàçàííûå ïàðàìåòðû ðàâíû 0, 
òî èñïîëüçóþòñÿ àíàëîãè÷íûå ïàðàìåòðû, ïåðåäàâàåìûå èç óïðàâëÿþùåãî ôàéëà. 
  
*/

extern string FileName = "Raschet.csv";

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

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

extern color Calculation_Level_Line_Color = LimeGreen;
extern color Open_Price_Line_Color = Blue;
extern color Stop_Loss_Color = Red;

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

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

#include <stdlib.mqh>

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

int first = 1, stroka = 1, stolbec = 1 ;
double Indent_From_File1 = 0, Indent_From_File2 = 0, Spread_From_File = 0;

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

int start()
{

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

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

int _break, error, Indent_From_Level;
double Calculation_Level_Line, Stop_Loss_Level, DropPrice = PriceOnDropped();

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

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;
          Indent_From_File1 = StrToInteger(Info[i,2]);
          Indent_From_File2 = StrToInteger(Info[i,7]);
          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_File1 != 0 && Indent_From_Level1 == 0)
   Indent_From_Level1 = Indent_From_File1;

if (Indent_From_File2 != 0 && Indent_From_Level2 == 0)
   Indent_From_Level2 = Indent_From_File2;
   
if (Indent_From_Level1_Flag)
   Indent_From_Level = Indent_From_Level1;
else
   Indent_From_Level = Indent_From_Level2;
   
// Ïîèñê îðäåðà äëÿ èçìåíåíèÿ

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();
double _OrderOpenPrice = OrderOpenPrice();
double _OrderStopLoss = OrderStopLoss();
double _OrderTakeProfit = OrderTakeProfit();
double _Order_Lots = OrderLots();
datetime _OrderExpiration = OrderExpiration();

// Óñòàíîâêà íà÷àëüíûõ çíà÷åíèé:

// ---Calculation_Level_Line

if (Calculation_Level == 0 && _OrderStopLoss != 0 )
	Calculation_Level_Line = _OrderStopLoss;
else 
   if (Calculation_Level == 0 && _OrderStopLoss == 0 )
      Calculation_Level_Line = _OrderOpenPrice;
   else 
      Calculation_Level_Line = NormalizeDouble(Calculation_Level, Digits);

// Ñîçäàíèå ëèíèè:

if ( first == 1 )
   {						
	ObjectCreate( "Calculation Level Line", OBJ_HLINE, 0, 0, Calculation_Level_Line, 0, 0, 0, 0 );
	ObjectSet(  "Calculation Level Line", OBJPROP_COLOR, Calculation_Level_Line_Color );
   ObjectsRedraw();
   }

// Âûâîä îêíà ïîäòâåðæäåíèÿ îïåðàöèè

string Description2 = "Ïðè èçìåíåíèè îðäåðà îòñòóï íå èñïîëüçóåòñÿ. Íîâûé ñòîï-ëîññ \n"
                    + "áóäåò óñòàíîâëåí òî÷íî íà óðîâíå óïðàâëÿþùåé ëèíèè.";

if ( _OrderType == OP_SELL || _OrderType == OP_SELLSTOP || _OrderType == OP_SELLLIMIT )
   {
   string Description = "Ïðè èçìåíåíèè îðäåðà èñïîëüçóåòñÿ äîïîëíèòåëüíûé îòñòóï ââåðõ. \n"
                      + "Íîâûé ñòîï-ëîññ áóäåò óñòàíîâëåí íà " + (Indent_From_Level + Spread) + " ïóíêòîâ âûøå óðîâíÿ \n"
                      + "óïðàâëÿþùåé ëèíèè.";
   if (Indent_From_Level + Spread == 0)
         Description = Description2;
   }
else
   {
   Description = "Ïðè èçìåíåíèè îðäåðà èñïîëüçóåòñÿ äîïîëíèòåëüíûé îòñòóï âíèç. \n"
               + "Íîâûé ñòîï-ëîññ áóäåò óñòàíîâëåí íà " + Indent_From_Level + " ïóíêòîâ íèæå óðîâíÿ \n"
               + "óïðàâëÿþùåé ëèíèè.";
   if (Indent_From_Level == 0)
         Description = Description2;
   }
	
string Question = "Äëÿ âíåñåíèÿ èçìåíåíèé ïåðåìåñòèòå ëèíèþ íà íåîáõîäèìûé \n" 
	             + "óðîâåíü è íàæìèòå \"ÎÊ\".\n\n" 
	             + "×òîáû îòêàçàòüñÿ îò ìîäèôèêàöèè è çàâåðøèòü ðàáîòó,\n"
				    + "íàæìèòå \"Îòìåíà\".\n\n"
				    + Description;
				    
int Answer = MessageBox( Question, "Èçìåíåíèå óðîâíÿ Stop Loss", 0x00000001 | 0x00000040 | 0x00040000 );
first = 0;

// åñëè íàæàòà ëþáàÿ êðîìå "ÎÊ" êíîïêà - âûõîäèì
if ( Answer != 1 ) 
	{ 
	deinit(); 
	return(0); 
	}
	
// Ñ÷èòûâàåì çíà÷åíèÿ ñ îáúåêòîâ è íîðìàëèçóåì:

// Calculation_Level

Calculation_Level_Line = NormalizeDouble( ObjectGet( "Calculation Level Line", OBJPROP_PRICE1 ), Digits );

// Âû÷èñëåíèå íîâîãî çíà÷åíèÿ Stop Loss

// Stop_Loss

if ( _OrderType == OP_BUY || _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT )
   Stop_Loss_Level = NormalizeDouble(Calculation_Level_Line - Indent_From_Level * Point, Digits);
else
   Stop_Loss_Level = NormalizeDouble(Calculation_Level_Line + (Indent_From_Level + Spread) * Point, Digits);
          
if (Calculation_Level_Line == 0)
   Stop_Loss_Level = 0;

// Ïðîâåðÿåì âñå çíà÷åíèÿ
	
if ( _OrderType == OP_BUY )
   {
	if (Bid - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )* Point )
      {
		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 ( _OrderType == OP_BUYSTOP || _OrderType == OP_BUYLIMIT )
   {
	if ( _OrderOpenPrice - Stop_Loss_Level < MarketInfo( Symbol(), MODE_STOPLEVEL )* Point )
	   {
		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 ( _OrderType == OP_SELL )
	{
	if ( Stop_Loss_Level - Ask < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point )
      {
		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 ( _OrderType == OP_SELLLIMIT || _OrderType == OP_SELLSTOP )
	{
	if ( Stop_Loss_Level - _OrderOpenPrice < MarketInfo( Symbol(), MODE_STOPLEVEL )*Point )
	   {
		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);
		}
   }

// Óñòàíîâêà íîâîãî çíà÷åíèÿ Stop Loss
   
if (NormalizeDouble(Stop_Loss_Level, Digits) - NormalizeDouble(_OrderStopLoss, Digits) != 0 ) 
   {
   
   // Âûâîäèì èíôó î çàïðîñå è ïûòàåìñÿ ìîäèôèöèðîâàòü îðäåð

   Print( "OrderTicket=",_OrderTicket, ",_OrderType=",_OrderType, ",Open_Price_Level=",_OrderOpenPrice, ",Stop_Loss_Level=", Stop_Loss_Level, ",Take_Profit_Level=", _OrderTakeProfit, ",Expiration_Time=", _OrderExpiration);
   int ordermodify = OrderModify( _OrderTicket, _OrderOpenPrice, Stop_Loss_Level, _OrderTakeProfit, _OrderExpiration);
     
   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_Color );
		  
return(-1);
}

// Çàâåðøåíèå ðàáîòû ñêðèïòà
 
int deinit()
{

// Óäàëåíèå âñåõ îáúåêòîâ, ñîçäàííûõ ñêðèïòîì
	
ObjectDelete( "Calculation Level Line" );
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 can change open orders parameters, due to possible stepping strategy

Other Features:

Uses files from the file system

It reads information from a file
It opens Message Boxes to the user