Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
#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);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---