Orders Execution
Indicators Used
0
Views
0
Downloads
0
Favorites
exp_iCustom_v7
//+------------------------------------------------------------------+
//| exp_iCustom_v5.mq4 |
//| * |
//| * |
//+------------------------------------------------------------------+
#property copyright "Integer"
#property link "for-good-letters@yandex.ru"
/*
v7
MW_Mode - ðûíî÷íûå îðäåðà îðäåðà îòêðûâàþòñÿ áåç ñòîïëîññ è òåéêïðîôèò, çàòåì, ïîñëå îòêðûòèÿ, óñòàíàëèâàþòñÿ.
_O_Mode=5, _C_Mode=5 - ñìåíà öâåòà. Íàïðèìåð èíäèêàòîð NRTR NK (http://codebase.mql4.com/ru/545).
 ðàçäåëå ïàðàìåòðîâ "Èíäèêàòîð äëÿ îòêðûòèÿ":
_O_M5_iBuyBufIndex - èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå ââåðõ
_O_M5_iSellBufIndex - èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå âíèç
 ðàçäåëå ïàðàìåòðîâ "Èíäèêàòîð äëÿ çàêðûòèÿ":
_C_M5_iBuyBufIndex - èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå ââåðõ
_C_M5_iSellBufIndex - èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå âíèç
*/
/*
v6
Äîáàâëåíà âîçìîæíîñòü äîïîëíèòåëüíûõ ïðîâåðîê ïðè çàêðûòèè îðäåðîâ ïî èíäèêàòîðó: ïðîâåðêà
ïðèáûëè îðäåðà (çàêðûòèå òîëüêî îðäåðîâ ñ ïðèáûëüþ íå ìåíüøå çàäàííîé), ïðîâåðêà ïîëîæåíèÿ
ñòîïëîññ îðäåðà (åñëè ñòîïëîññ ôèêñèðóåò çàäàííóþ ïðèáûëü, îðäåð íå çàêðûâàåòñÿ).
Ïåðåìåííûå:
==== Äîïîëíèòåëüíûå ïðàâèëà çàêðûòèÿ ====
CheckProfit - Ïðîâåðÿòü ïðèáûëü îðäåðà ïðè çàêðûòèè, îðäåðà ñ ìåíüøå, ÷åì MinimalProfit ïðèáûëüþ íå çàêðûâàþòñÿ
MinimalProfit - Ñì. ïåðåìåííóþ CheckProfit
CheckSL - Åñëè ñòîïëîññ îðäåðà ôèêñèðóåò ïðèáûëü íå ìåíüøå ÷åì MinimalSLProfit, îðäåð íå çàêðûâàåòñÿ
MinimalSLProfit - Ñì. ïåðåìåííóþ CheckSL
Äîáàâëåíà âîçìîæíîñòü òðåéëèíãà ïî ïîëüçîâàòåëüñêîìó èíäèêàòîðó. Ìîæåò èñïîëüçîâàòüñÿ ëþáîé èíäèêàòîð,
íàïðèìåð, êàíàë - http://codebase.mql4.com/ru/546, äâóõöâåòíûé ïîïåðåìåííûé - http://codebase.mql4.com/ru/688,
ðèñóùèé òî÷êè èëè ñòðåëêè, ïðè ýòîì ìîäèôèêàöèÿ îðäåðà áóäëåò ïðîèñõîäèòü ïðè íàëè÷èå òî÷êè èëè ñòðåëêè.
Ïåðåìåííûå:
=== Òðåéëèíã ïî èíäèêàòîðó ===
_TS_ON - âêëþ÷åíèå òðåéëèíãà ïî èíäèêàòîðó
_TS_iCustomName - èìÿ Custom èíäèêàòîðà
_TS_iCustomParam - ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü "/". Äëÿ ïåðåìåííûõ òèïàâìåñòî íà÷åíèÿ true èñïîëüçóåòñÿ 1, âìåñòî false - 0. Åñëè â ïàðàìåòðàõ èíäèêàòîðà åñò ñòðîêîâûå ïåðåìåííûå, ýêñïåðò ðàáîòàòü íå áóäåò!!!
_TS_iForBuyBufIndex - èíäåêñ áóôåðà äëÿ îðäåðîâ buy
_TS_iForSellBufIndex - èíäåêñ áóôåðà äëÿ îðäåðîâ sell
_TS_iShift - ñäâèã èíäèêàòîðà. 1 - íà ñôîðìèðîâàííûõ áàðàõ, 0 - íà ôîðìèðóþùåìñÿ áàðå (íå ðåêîìåíäóåòñÿ). Òàêæå ìîæåò áûòü âåäåíî çíà÷åíèå 2,3,4...
_TS_Opt_1_Use - âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 1. Ïðè âêëþ÷åíèè îïòèìèçèðóåìîé ïåðåìåííîé âìåñòî çíà÷åíèÿ èç ñòðîêè iCustomParam, îïðåäåëÿåìîãî ïåðåìåííîé Opt_X_Index áóäåò èñïîëüçîâàòüñÿ çíà÷åíèå ïåðåìåííîé Opt_X_Value
_TS_Opt_1_Index - èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 1 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
_TS_Opt_1_Value - çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 1
_TS_Opt_2_Use - âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 2
_TS_Opt_2_Index - èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 2 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
_TS_Opt_2_Value - çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 2
_TS_Opt_3_Use - âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 3
_TS_Opt_3_Index - èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 3 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
_TS_Opt_3_Value - çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 3
_TS_Opt_4_Use - âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 4
_TS_Opt_4_Index - èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 4 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
_TS_Opt_4_Value - çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 4
_TS_Opt_5_Use - âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 5
_TS_Opt_5_Index - èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 5 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
_TS_Opt_5_Value - çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 5
_TS_Indent - îòñòóï â ïóíêòàõ îò çíà÷åíèÿ èíäèêàòîðà
_TS_TrailInProfit - ìèíèìàëüíàÿ ôèêñèðóåìàÿ ïðèáûëü. Ñòîïëîññ ïåðåñòàâëÿåòñÿ â òîì ñëó÷àå, åñëè îí ôèêñèðóåò íå ìåíåå ÷åì _TS_TrailInProfit ïóíêòîâ ïðèáûëè
*/
/*
v5
Èçìåíåí òèï ïåðåìåííûõ
_O_M3_BuyLevel,
_O_M3_SellLevel,
_C_M3_CloseBuyLevel,
_C_M3_CloseSellLevel,
ñ int íà double, äëÿ âîçìîæíîñòè ââîäèòü äðîáíûå ÷èñëà.
*/
/*
v4
Äîáàâëåíà ðàáîòà îòëîæåííûìè îðäåðàìè.
Äîáàâëåíû ñòðîêîâûå ðàçäåëèòåëè ðàçäåëîâ ñ ïåðåìåííûìè â îêíå ñâîéñòâ.
Âûáîð òèïà îðäåðîâ âûïîëíÿåòñÿ ïåðåìåííîé OrdType: 0 - ðûíî÷íûå, 1 - ñòîï, 2 - ëèìèò (ïåðåìåííàÿ íàõîäèòñÿ â ðàçäåëå "Îðäåð").
Äîáàâëåí ðàçäåë ïåðåìåííûõ "Îòëîæåííûå îðäåðà" äëÿ óïðàâëåíèÿ ðàáîòîé îòëîæåííûìè îðäåðàìè:
PendLevel - óðîâåíü óñòàíîâêè îòëîæåííîãî îðäåðà îò òåêóùé ðûíî÷íîé öåíû
PendPromPrice - öåíà óñòàíîâêè îòëîæåííîãî îðäåðà îòñ÷èòûâàåòñÿ îò öåíû íóëåâîãî áàðà,
ïðè çíà÷åíèè PendPromPrice=0 - îò öåíû çàêðûòèÿ (ñîîòâåòñòâóåò òåêóùåé
ðûíî÷íîé öåíå), 1 - îò öåíû îòêðûòèÿ áàðà
PendNewSigMode - ñïîñîá óïðàâëåíèÿ îòëîæåííûì îðäåðîì ïî íîâîìó òîðãîâîìó ñèãíàéëó:
0 - åñëè îðäåð óæå áûë óñòàíîâëåí, òî ïðè ïîÿâëåíèè íîâîãî òîðãîâîãî
ñèãíàëà íå âûïîëíÿþòñÿ íè êàêèå äåéñòâèÿ,
1 - ïåðåóñòàíîâêà îðäåðà ïî íîâîìó ñèãíàëó,
2 - ïî íîâîìó ñèãíàëó îðäåð ïåðåóñòàíàâëèâàåòñÿ
íà "ëó÷øèé óðîâåíü" - áàéñòîï òîëüêî âíèç, áàéëèìèò
òîëüêî ââåðõ, ñåëëñòîï òîëüêî ââåðõ, ñåëëèìèò òîëüêî âíèç.
PendPriceFollow - ðåæèì ñëåäîâàíèÿ çà öåíîé. îðäåð ìîäèôèöèðóåòñÿ ïðè êàæäîì èçìåíåíèè
öåíû îïðåäåëííîé ïåðåìåííîé PendPromPrice, îðäåð ïåðåóñòàíàâëèâàåòñÿ òîëüêî
íà "ëó÷øóþ öåíó" (ñì. îïèñàíèå ïåðåìåííîé PendNewSigMode)
PendDelete - óäàëåíèå îòëîæåííîãî îðäåðà ïî ïðîòèâîïîîæíîìó òîðãîâîìó ñèãíàëó.
Ïðè çíà÷åíèè false, âîçìîæíî îäíîâðåìåííîé ñóùåñòâîâàíèå äâóõ
îòëîæåííûõ îðäåðîâ ðàçíîãî íàïðàâëåíèÿ.
PendExpiration - ñðîê ñóùåñòâàíèÿ îðäåðà â ìèíóòàõ (ìèíèìàëüíîå çíà÷åíèå 11 ìèíóò)
*/
/*
v3
Äîáàâëåí åùå îäèí ðåæèì _O_Mode (è _Ñ_Mode)
Ðåæèì 4 - Ýêñòðåìóì ïî òðåì òî÷êàì. Èñïîëüçóåòñÿ îäíà ëèíèÿ èíäèêàòîðà.
Íîìåð áóôåðà óêàçûâàåòñÿ â ïåðåìåííîé _O_M4_iBufIndex
(èëè _Ñ_M4_iBufIndex â áëîêå çàêðûòèÿ).
*/
/*
v2
1. Äîáàâëåíà âîçìîæíîñòü èñïîëüçîâàíèÿ ðàçíûõ èíäèêàòîðîâ äëÿ ñèãíàëîâ îòêðûòèÿ è çàêðûòèÿ.
Ïàðàìåòðû èíäèêàòîðà îòêðûòèÿ íà÷èíàþòñÿ ñ ïåðôèêñà _O_, èíäèêòîðà çàêðûòèÿ - ñ ïåðôèêñà _C_.
Ìîæåò áûòü òðè ðåæèìà èñïîëüçîâàíèÿ èíäèêàòîðîâ îòêðûòèÿ è çàêðûòèÿ (óñòàíàâëèâàåòñÿ ïåðåìåííîé
_OÑ_Mode).
Ðåæèì 1 - äëÿ çàêðûòèÿ èíäèêàòîð íå èñïîëüçóþòñÿ. Âîçìîæíî çàêðûòèÿ òîëüêî ïî ñòîïëîññ è òåéêïðîôèò.
Ðåæèì 2 - èíäèêàòîð çàêðûòèÿ íå èñïîëüçóåòñÿ. Êðîìå çàêðûòèÿ ïî ñòîïëîññ è òåéêïðîôèò
âûïîëíÿåòñÿ çàêðûòèÿ ïðîòèâîïëîæíûõ îðäåðîâ ïî ñèãíàëàì îòêðûòèÿ. Ñòîïëîññ è òåéêïðîôèò
ìîãóò áûòü îòêëþ÷åíû - íàäî ââåñòè çíà÷åíèå 0 â ïåðåìåííûå StopLoss è/èëè TakeProfit
(ýòî êàñàåòñÿ âñåõ ðåæèìîâ).
Ðåæèì 3 - Èñïîëüçóþòñÿ îòäåëüíûå ñèãíàëû çàêðûòèÿ ïî èíäèêàòîðó çàêðûòèÿ (_C_). Â ýòîì ðåæèìå ìîæíî
èñïîëüçîâàòü äîïîëíèòåëüíûé ðåæèì êîïèðîâàíèÿ ïàðàìåòðîâ èíäèêàòîðà îòêðûòèÿ â
ïàðåìåòðû èíäèêòîðà çàêðûòèÿ (ïåðåìåííàÿ _C_UseOpenParam), ïðè ýòîì êîïèðóåòñÿ èìÿ èíäèêàòîðà
è åãî ïàðàìåòðû. Ýòîò ðåæèì ñäåëàí äëÿ èíäèêàòîðîâ ãåíåðèðóùèõ ñèãíàëû îòêðûòèÿ è çàêðûòèÿ
äëÿ óñêîðåíèÿ îïòèìèçàöèè (îïòèìèçèðóåìûå ïàðàìåòðû òàêæå êîïèðóþòñÿ).
2. Ìîãóò èñïîëüçîâàòüñÿ íå òîëüêî èíäèêàòîðû ñî ñòðåëêàìè, íî è èíäèêàòîðû ñ ëèíèÿìè.
Ìîæåò èñïîëüçîâàòüñÿ äâå ëèíèè (ïåðåñå÷åíèå ãëàâíîé è ñèãíàëüíîé) è îäíà ëèíèÿ -
åå ïåðåñå÷åíèå ñ óðîâíÿìè.
Äëÿ âûáîðà òèïà èíäèêàòîðà èñïîëüçóåòñÿ ïåðåìåííàÿ _O_Mode (è _Ñ_Mode â áëîêå çàêðûòèÿ).
Ðåæèì 1 - èíäèêàòîð ðèñóåò ñòðåëêè. Äëÿ óêàçàíèÿ íîìåðîâ áóôåðîâ èñïîëüçóþòñÿ
ïåðåìåííûå _O_M1_iBuyBufIndex è _O_M1_iSellBufIndex, à â áëîêå
çàêðûòèÿ - _C_M1_iCloseBuyBufIndex è _C_M1_iCloseSellBufIndex.
Ðåæèì 2 - èñïîëüçóþòñÿ ãëàâíàÿ è ñèãíàëüíàÿ ëèíèè èíäèêàòîðà. Åñëè ãëàâíàÿ
ëèíèÿ ïåðåñåêàåò ñèãíàëüíóþ ñíèçó ââåðõ - ñèãíàë îòêðûòèÿ Buy èëè
çàêðûòèÿ Sell. Äëÿ óêàçàíèÿ áóôåðîâ èñïîëüçóþòñÿ ïåðåìåííûå
_O_M2_iMainBufIndex, _O_M2_iSignalBufIndex è _C_M2_iMainBufIndex,
_C_M2_iSignalBufIndex.
Ðåæèì 3 - èñïîëüçóåòñÿ îäíà ëèíèÿ èíäèêàòîðà. Íîìåð áóôåðà óêàçûâàåòñÿ â
ïåðåìåííîé _O_M3_iBufIndex (èëè _Ñ_M3_iBufIndex â áëîêå çàêðûòèÿ).
Äëÿ óêàçàíèÿ çíà÷åíèÿ óðîâíåé èñïîëüçóþòñÿ ïåðåìåííûå _O_M3_BuyLevel
è _O_M3_SellLevel (_O_M3_CloseBuyLevel è _C_M3_CloseSellLevel â
áëîêå çàêðûòèÿ). Ïåðåñå÷åíèå óðîâíÿ Buy ñíèçó ââåðõ - ïîêóïêà,
óðîâíÿ Sell ñâåðõó âíèç - ïðîäàæà.
*/
/*
v1
Ýêñïåðò ïðåäíàçíà÷åí äëÿ ðàáîòû ñ ëþáûì Custom èíäèêòîðîì, çà èñêëþ÷åíèåì èíäèêàòîðîâ ñî ñòðîêîâûìè ïàðàìåòðàìè.
Âîçìîæíà îïòèìèçàöèÿ 5-è ïàðàìåòðîâ èíäèêàòîðà.
*/
extern int TimeFrame=0; // ðàáî÷èé òàéìôðåéì ýêñïåðòà: 0 - òàéìôðåéì ãðàôèêà íà êîòîðîì ðàáîòàåò ýêñïåðò èëè êîòîðûé âûáðàí â òåñòåðå. Èëè êîíêðåòíîå çíà÷åíèå 1,5,15,30,60,240,1440...
extern string s0="==== Èíäèêàòîð äëÿ îòêðûòèÿ (Mode: 1 - ñòðåëêè, 2 - ãëàâíàÿ è ñèãíàëüíàÿ, 3 - ëèíèÿ è óðîâíè, 4 - ýêñòðåìóì, 5 - ñìåíà öâåòà) ====";
extern int _O_Mode=1; // 1-èíäèêàòîð ðèñóåò ñòðåëêè, îòêðûòèå ïî ñòðåëêàì, 2-ó èíäèêàòîðà ãëàâíàÿ è ñèãíàëüíàÿ ëèíèÿ, îòêðûòèå ïðè ïåðåñå÷åíèå ëèíèé, 3-èñïîëüçóåòñÿ îäíà ëèíèÿ è åå ïåðåñå÷åíèå ñ óðîâíÿìè, 4-ýêñòðåìóì, 5-ñìåíà öâåòà
extern string _O_iCustomName="ââåäèòå èìÿ èíäèêàòîðà"; // èìÿ Custom èíäèêàòîðà
extern string _O_iCustomParam="ââåäèòå ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü /"; // ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü "/". Äëÿ ïåðåìåííûõ òèïà bool âìåñòî íà÷åíèÿ true èñïîëüçóåòñÿ 1, âìåñòî false - 0. Åñëè â ïàðàìåòðàõ èíäèêàòîðà åñò ñòðîêîâûå ïåðåìåííûå, ýêñïåðò ðàáîòàòü íå áóäåò!!!
extern int _O_M1_iBuyBufIndex=0; // èíäåêñ áóôåðà ñî ñòðåëêàìè íà ïîêóïêó
extern int _O_M1_iSellBufIndex=1; // èíäåêñ áóôåðà ñî ñòðåëêàìè íà ïðîäàæó
extern int _O_M2_iMainBufIndex=0; // èíäåêñ áóôåðà ãëàâíîé ëèíèè
extern int _O_M2_iSignalBufIndex=1; // èíäåêñ áóôåðà ñèãíàëüíîé ëèíèè
extern int _O_M3_iBufIndex=0; // èíäåêñ áóôåðà ëèíèè
extern double _O_M3_BuyLevel=20; // óðîâåíü ïîïêóïêè (ïåðåñå÷åíèå ñíèçó ââåðõ)
extern double _O_M3_SellLevel=80; // óðîâåíü ïðîäàæè (ïåðåñå÷åíèå ñâåðõó âíèç)
extern int _O_M4_iBufIndex=0; // èíäåêñ áóôåðà ëèíèè
extern int _O_M5_iBuyBufIndex=0; // èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå ââåðõ
extern int _O_M5_iSellBufIndex=1; // èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå âíèç
extern int _O_iShift=1; // ñäâèã èíäèêàòîðà. 1 - íà ñôîðìèðîâàííûõ áàðàõ, 0 - íà ôîðìèðóþùåìñÿ áàðå (íå ðåêîìåíäóåòñÿ). Òàêæå ìîæåò áûòü âåäåíî çíà÷åíèå 2,3,4...
extern bool _O_Opt_1_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 1. Ïðè âêëþ÷åíèè îïòèìèçèðóåìîé ïåðåìåííîé âìåñòî çíà÷åíèÿ èç ñòðîêè iCustomParam, îïðåäåëÿåìîãî ïåðåìåííîé Opt_X_Index áóäåò èñïîëüçîâàòüñÿ çíà÷åíèå ïåðåìåííîé Opt_X_Value
extern int _O_Opt_1_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 1 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _O_Opt_1_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 1
extern bool _O_Opt_2_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 2
extern int _O_Opt_2_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 2 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _O_Opt_2_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 2
extern bool _O_Opt_3_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 3
extern int _O_Opt_3_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 3 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _O_Opt_3_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 3
extern bool _O_Opt_4_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 4
extern int _O_Opt_4_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 4 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _O_Opt_4_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 4
extern bool _O_Opt_5_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 5
extern int _O_Opt_5_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 5 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _O_Opt_5_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 5
extern string s1="==== == (_OÑ_Mode: 1 - ïî sl è tp, 2 - ðàçâîðîò, 3 - _Ñ_...) == ====";
extern int _OÑ_Mode=1; // 1-çàêðûòèå ïî ñòîïëîññ è òåéêïðîôèò, 2-ïåðåä îòêðûòèåì çàêðûâàþòñÿ ïðîòèâîïëîæíûå îðäåðà ïî ñèãíàëàì îòêðûòèÿ èíäèêàòîðà _O_, 3-èñïîëüçóþòñÿ ñèãíàëû çàêðûòèÿ èíäèêàòîðà _C_
extern string s2="==== Èíäèêàòîð äëÿ çàêðûòèÿ (Mode: 1 - ñòðåëêè, 2 - ãëàâíàÿ è ñèãíàëüíàÿ, 3 ëèíèÿ è óðîâíè, 4 ýêñòðåìóì, 5 - ñìåíà öâåòà) ====";
extern int _C_Mode=1; // 1-èíäèêàòîð ðèñóåò ñòðåëêè, îòêðûòèå ïî ñòðåëêàì, 2-ó èíäèêàòîðà ãëàâíàÿ è ñèãíàëüíàÿ ëèíèÿ, îòêðûòèå ïðè ïåðåñå÷åíèå ëèíèé, 3-èñïîëüçóåòñÿ îäíà ëèíèÿ è åå ïåðåñå÷åíèå ñ óðîâíÿìè, 4-ýêñòðåìóì, 5-ñìåíà öâåòà
extern bool _C_UseOpenParam=false; // êîïèðîâàòü âñå ïàðàìåòðû ñ èíäèêàòðà îòêðûòèÿ (òàêæå è èìÿ èíäèêòàîðà). Ñäåëàíî íà ñëó÷àé èñïîëüçîâàíèÿ èíäèêòîðà ñî ñòðåëêàìè îòêðûòèÿ è ñòðåëêàìè çàêðûòèÿ, ñ òàêèì èíäèêàòîðîì äîñòàòî÷íî óñòàíîâèòü _C_UseOpenParam=true è óêàçàòü íîìåðà áóôåðîâ _C_M1_..., _C_M2_..., _C_M3_... è óñòàíîâèòü ðåæèì _C_Mode (íàïðèìåð íà îòêðûòèå èñïîëüçóþòñÿ ñòðåëêè, à íà çàêðûòèå ïåðåñå÷åíèå ëèíèé)
extern string _C_iCustomName="ââåäèòå èìÿ èíäèêàòîðà"; // èìÿ Custom èíäèêàòîðà
extern string _C_iCustomParam="ââåäèòå ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü /"; // ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü "/". Äëÿ ïåðåìåííûõ òèïà bool âìåñòî íà÷åíèÿ true èñïîëüçóåòñÿ 1, âìåñòî false - 0. Åñëè â ïàðàìåòðàõ èíäèêàòîðà åñò ñòðîêîâûå ïåðåìåííûå, ýêñïåðò ðàáîòàòü íå áóäåò!!!
extern int _C_M1_iCloseBuyBufIndex=0; // èíäåêñ áóôåðà ñî ñòðåëêàìè íà ïîêóïêó
extern int _C_M1_iCloseSellBufIndex=1; // èíäåêñ áóôåðà ñî ñòðåëêàìè íà ïðîäàæó
extern int _C_M2_iMainBufIndex=0; // èíäåêñ áóôåðà ãëàâíîé ëèíèè
extern int _C_M2_iSignalBufIndex=1; // èíäåêñ áóôåðà ñèãíàëüíîé ëèíèè
extern int _C_M3_iBufIndex=0; // èíäåêñ áóôåðà ëèíèè
extern double _C_M3_CloseBuyLevel=80; // óðîâåíü çàêðûòèÿ ïîïêóïêè (ïåðåñå÷åíèå ñâåðõó âíèç)
extern double _C_M3_CloseSellLevel=20; // óðîâåíü çàêðûòèÿ ïðîäàæè (ïåðåñå÷åíèå ñíèçó ââåðõ)
extern int _C_M4_iBufIndex=0; // èíäåêñ áóôåðà ëèíèè
extern int _C_M5_iBuyBufIndex=0; // èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå ââåðõ
extern int _C_M5_iSellBufIndex=1; // èíäåêñ áóôåðà ëèíèè îòîáðàæàåìîé ïðè òðåíäå âíèç
extern int _C_iShift=1; // ñäâèã èíäèêàòîðà. 1 - íà ñôîðìèðîâàííûõ áàðàõ, 0 - íà ôîðìèðóþùåìñÿ áàðå (íå ðåêîìåíäóåòñÿ). Òàêæå ìîæåò áûòü âåäåíî çíà÷åíèå 2,3,4...
extern bool _C_Opt_1_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 1. Ïðè âêëþ÷åíèè îïòèìèçèðóåìîé ïåðåìåííîé âìåñòî çíà÷åíèÿ èç ñòðîêè iCustomParam, îïðåäåëÿåìîãî ïåðåìåííîé Opt_X_Index áóäåò èñïîëüçîâàòüñÿ çíà÷åíèå ïåðåìåííîé Opt_X_Value
extern int _C_Opt_1_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 1 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _C_Opt_1_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 1
extern bool _C_Opt_2_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 2
extern int _C_Opt_2_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 2 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _C_Opt_2_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 2
extern bool _C_Opt_3_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 3
extern int _C_Opt_3_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 3 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _C_Opt_3_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 3
extern bool _C_Opt_4_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 4
extern int _C_Opt_4_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 4 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _C_Opt_4_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 4
extern bool _C_Opt_5_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 5
extern int _C_Opt_5_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 5 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _C_Opt_5_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 5
extern string s22="==== Äîïîëíèòåëüíûå ïðàâèëà çàêðûòèÿ ====";
extern bool CheckProfit=false; // Ïðîâåðÿòü ïðèáûëü îðäåðà ïðè çàêðûòèè, îðäåðà ñ ìåíüøå, ÷åì MinimalProfit ïðèáûëüþ íå çàêðûâàþòñÿ
extern int MinimalProfit=0; // Ñì. ïåðåìåííóþ CheckProfit
extern bool CheckSL=false; // Åñëè ñòîïëîññ îðäåðà ôèêñèðóåò ïðèáûëü íå ìåíüøå ÷åì MinimalSLProfit, îðäåð íå çàêðûâàåòñÿ
extern int MinimalSLProfit=0; // Ñì. ïåðåìåííóþ CheckSL
extern string s3="=== Îïðåäåëåíèå ðàçìåðà ëîòà ===";
extern int MMMethod=0; // ìåòîä ÌÌ: 0-Lots, 1-÷àñòü (Risk) îò ñâîáîäíûõ ñðåäñòâ, 2-÷àñòü (Risk) îò ñâîáîäíûõ ñðåäñòâ íîðìèðîâàííûõ ïî çíà÷åíèþ MeansStep (íàïðèìåð Risk=0.1, MeansStep=1000, åñëè ñðåäñòâ ìåíüøå 2000, ëîò ðàâåí 0.1, åñëè ñðåäñòâ ñòàëî 2000 èëè áîëåå - 0.2 ëîòà, 3000 è áîëåå - 0.3 ëîòà è ò.ä. )
extern double Lots=0.1; // êîëè÷åñòîâ ëîòîâ ïðè MMMethod=0
extern double Risk=0.1; // ðèñê. Âåëè÷èíà îò ñðåäñòâ ïðè FixedLot=false
extern int MeansType=3; // òèï ñðåäñòâ èñïîëüçóåìûõ ïðè ðàñ÷åòå ðàçìåðà ëîòà. 1 - Balance, 2 - Equity, 3 - FreeMargin
extern double MeansStep=1000; // øàã ñðåäñòâ. Èñïîëüçóåòñÿ ïðè MMMethod=2
extern int LotsDigits=1; // Êîëè÷åñòâî çíàêîâ ïîñëå çàïÿòîé ó ðàçìåðà ëîòà
extern string s4="=== Îðäåð (OrdType: 0-Market, 1-Stop, 2-Limit) ===";
extern int OrdType=0; // òèï îðäåðîâ: 0 - ðûíî÷íûå, 1 - ñòîï, 2 - ëèìèò. Äëÿ òèïîâ 1 è 2 ñì. ïåðåìåííûå
extern int Slippage=3; // äîïóñòèìîå îòêëîíåíèå îò çàïðîøåííîé öåíû
extern int StopLoss=25; // ñòîïëîññ
extern int TakeProfit=25; // òåéêïðîôèò
extern int SleepBars=1; // òàéìàóò ïîñëå îòêðûòèÿ îðäåðà â êîëè÷åñòâå áàðîâ ðàáî÷åãî òàéìôðåéìà
extern bool CancelSleeping=true; // âêëþ÷åíèå îòìåíû òàéìàóòà ïðè îòêðûòèè îðäåðà ïðîòèâîïîëîæíîãî íàïðàâëåíèÿ.
extern int Magic_N=96778; // ìàãèê
extern bool MW_Mode=false; // ðåæèì îòêðûòèÿ áåç ñòîïëîññ/òåéêïðîôèò è óñòàíîâêà ñòîïëîññ/òåéêïðîôèò ïîñëå îòêðûòèÿ îðäåðà
extern string s41="---- ---- Îòëîæåííûå îðäåðà (PendNewSigMode: 1-íåò ïåðåóñòàíîâêè, 2-ïðîñòàÿ ïåðåóñòàíîâêà, 3-ïåðåóñòàíîâêà íà ëó÷øèé óðîâåíü) ---- ----";
extern int PendLevel=20; // óðîâåíü óñòàíîâêè îòëîæåííîãî îðäåðà îò òåêóùé ðûíî÷íîé öåíû
extern int PendPromPrice=1; // öåíà óñòàíîâêè îòëîæåííîãî îðäåðà îòñ÷èòûâàåòñÿ îò öåíû íóëåâîãî áàðà, ïðè çíà÷åíèè PendPromPrice=0 - îò öåíû çàêðûòèÿ (ñîîòâåòñòâóåò òåêóùåé ðûíî÷íîé öåíå), 1 - îò öåíû îòêðûòèÿ áàðà
extern int PendNewSigMode=2; // ñïîñîá óïðàâëåíèÿ îòëîæåííûì îðäåðîì ïî íîâîìó òîðãîâîìó ñèãíàéëó: îðäåðà. 0 - åñëè îðäåð óæå áûë óñòàíîâëåí, òî ïðè ïîÿâëåíèè íîâîãî òîðãîâîãî ñèãíàëà íå âûïîëíÿþòñÿ íè êàêèå äåéñòâèÿ, 1 - ïåðåóñòàíîâêà îðäåðà ïî íîâîìó ñèãíàëó, 2 - ïî íîâîìó ñèãíàëó îðäåð ïåðåóñòàíàâëèâàåòñÿ íà "ëó÷øèé óðîâåíü" - áàéñòîï òîëüêî âíèç, áàéëèìèò òîëüêî ââåðõ, ñåëëñòîï òîëüêî ââåðõ, ñåëëèìèò òîëüêî âíèç
extern bool PendPriceFollow=false; // ðåæèì ñëåäîâàíèÿ çà öåíîé. îðäåð ìîäèôèöèðóåòñÿ ïðè êàæäîì èçìåíåíèè öåíû îïðåäåëííîé ïåðåìåííîé PendPromPrice, îðäåð ïåðåóñòàíàâëèâàåòñÿ òîëüêî íà "ëó÷øóþ öåíó" (ñì. îïèñàíèå ïåðåìåííîé PendNewSigMode)
extern bool PendDelete=true; // óäàëåíèå îòëîæåííîãî îðäåðà ïî ïðîòèâîïîîæíîìó òîðãîâîìó ñèãíàëó. Ïðè çíà÷åíèè false, âîçìîæíî îäíîâðåìåííîé ñóùåñòâîâàíèå äâóõ îðäåðîâ ðàçíîãî íàïðàâëåíèÿ
extern int PendExpiration=0; // ñðîê ñóùåñòâàíèÿ îðäåðà â ìèíóòàõ (ìèíèìàëüíîå çíà÷åíèå 11 ìèíóò)
extern string s42="---- ---- Ó÷åò ðûíî÷íûõ îðäåðîâ ---- ----";
extern int MaxOrdersCount=-1; // äîïóñòèìîå îáùåå êîëè÷åñòâî îòêðûòûõ îðäåðîâ. -1 - íå îãðàíè÷åíî
extern int MaxBuyCount=-1; // äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ buy. -1 - íå îãðíè÷åíî
extern int MaxSellCount=-1; // äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ sell. -1 - íå îãðíè÷åíî
extern string s5="=== Òðåéëèíã ===";
extern bool TrailingStop_Use=false; // âêëþ÷åíèå ôóíêöèè òðåéëèíãñòîïà
extern int TrailingStopStart=50; // ïðèáûëü îðäåðà ïðè êîòîðîé íà÷èíàåò ðàáîòàòü òðåéëèíãñòîï
extern int TrailingStop=15; // óðîâåíü òðåéëèíãñòîïà
extern string s6="=== Áåçóáûòîê ===";
extern bool BreakEven_Use=false; // âêëþ÷åíèå ôóíêöèè áåçóáûòêà
extern int BreakEvenStart=30; // ïðèáûëü îðäåðà ïðè êîòîðîé ñðàáàòûâàåò áåçóáûòîê
extern int BreakEvenLevel=15; // óðîâåíü íà êîòîðûé óñòàíàâëèâàåòñÿ ñòîïëîññ îò öåíû ñðàáàòûâàíèÿ áåçóáûòêà
extern string s7="=== Òðåéëèíã ïî èíäèêàòîðó ===";
extern bool _TS_ON=false; // âêëþ÷åíèå òðåéëèíãà ïî èíäèêàòîðó
extern string _TS_iCustomName="ââåäèòå èìÿ èíäèêàòîðà"; // èìÿ Custom èíäèêàòîðà
extern string _TS_iCustomParam="ââåäèòå ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü /"; // ñïèñîê ïàðàìåòðîâ ÷åðåç ðàçäåëèòåëü "/". Äëÿ ïåðåìåííûõ òèïà bool âìåñòî íà÷åíèÿ true èñïîëüçóåòñÿ 1, âìåñòî false - 0. Åñëè â ïàðàìåòðàõ èíäèêàòîðà åñò ñòðîêîâûå ïåðåìåííûå, ýêñïåðò ðàáîòàòü íå áóäåò!!!
extern int _TS_iForBuyBufIndex=0; // èíäåêñ áóôåðà äëÿ îðäåðîâ buy
extern int _TS_iForSellBufIndex=1; // èíäåêñ áóôåðà äëÿ îðäåðîâ sell
extern int _TS_iShift=1; // ñäâèã èíäèêàòîðà. 1 - íà ñôîðìèðîâàííûõ áàðàõ, 0 - íà ôîðìèðóþùåìñÿ áàðå (íå ðåêîìåíäóåòñÿ). Òàêæå ìîæåò áûòü âåäåíî çíà÷åíèå 2,3,4...
extern bool _TS_Opt_1_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 1. Ïðè âêëþ÷åíèè îïòèìèçèðóåìîé ïåðåìåííîé âìåñòî çíà÷åíèÿ èç ñòðîêè iCustomParam, îïðåäåëÿåìîãî ïåðåìåííîé Opt_X_Index áóäåò èñïîëüçîâàòüñÿ çíà÷åíèå ïåðåìåííîé Opt_X_Value
extern int _TS_Opt_1_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 1 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _TS_Opt_1_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 1
extern bool _TS_Opt_2_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 2
extern int _TS_Opt_2_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 2 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _TS_Opt_2_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 2
extern bool _TS_Opt_3_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 3
extern int _TS_Opt_3_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 3 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _TS_Opt_3_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 3
extern bool _TS_Opt_4_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 4
extern int _TS_Opt_4_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 4 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _TS_Opt_4_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 4
extern bool _TS_Opt_5_Use=false; // âêëþ÷åíèÿ èñïîëüçîâàíèÿ îïòèìèçèðóåìîé ïåðåìåííîé 5
extern int _TS_Opt_5_Index=0; // èíäåêñ îïòèìèçèðóåìîé ïåðåìåííîé 5 â ìàññèâå ïàðàìåòðîâ (â ñòðîêå iCustomParam). Îòñ÷åò íà÷èíàåòñÿ ñ íóëÿ.
extern double _TS_Opt_5_Value=0; // çíà÷åíèå îïòèìèçèðóåìîé ïåðåìåííîé 5
extern int _TS_Indent=0; // îòñòóï â ïóíêòàõ îò çíà÷åíèÿ èíäèêàòîðà
extern int _TS_TrailInProfit=0; // ìèíèìàëüíàÿ ôèêñèðóåìàÿ ïðèáûëü. Ñòîïëîññ ïåðåñòàâëÿåòñÿ â òîì ñëó÷àå, åñëè îí ôèêñèðóåò íå ìåíåå ÷åì _TS_TrailInProfit ïóíêòîâ ïðèáûëè
double _O_ParArr[];
double _C_ParArr[];
double _TS_ParArr[];
int LastBuyTime,LastSellTime;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(TimeFrame==0)TimeFrame=Period();
fSplitStrToDouble(_O_iCustomParam,_O_ParArr,"/");
if(_O_Opt_1_Use){
if(_O_Opt_1_Index<ArraySize(_O_ParArr))_O_ParArr[_O_Opt_1_Index]=_O_Opt_1_Value;
}
if(_O_Opt_2_Use){
if(_O_Opt_2_Index<ArraySize(_O_ParArr))_O_ParArr[_O_Opt_2_Index]=_O_Opt_2_Value;
}
if(_O_Opt_3_Use){
if(_O_Opt_3_Index<ArraySize(_O_ParArr))_O_ParArr[_O_Opt_3_Index]=_O_Opt_3_Value;
}
if(_O_Opt_4_Use){
if(_O_Opt_4_Index<ArraySize(_O_ParArr))_O_ParArr[_O_Opt_4_Index]=_O_Opt_4_Value;
}
if(_O_Opt_5_Use){
if(_O_Opt_5_Index<ArraySize(_O_ParArr))_O_ParArr[_O_Opt_5_Index]=_O_Opt_5_Value;
}
if(_OÑ_Mode==3){
if(_C_UseOpenParam){
ArrayResize(_C_ParArr,ArraySize(_O_ParArr));
ArrayCopy(_C_ParArr,_O_ParArr,0,0,ArraySize(_O_ParArr));
_C_iCustomName=_O_iCustomName;
}
else{
fSplitStrToDouble(_C_iCustomParam,_C_ParArr,"/");
if(_C_Opt_1_Use){
if(_C_Opt_1_Index<ArraySize(_C_ParArr))_C_ParArr[_C_Opt_1_Index]=_C_Opt_1_Value;
}
if(_C_Opt_2_Use){
if(_C_Opt_2_Index<ArraySize(_C_ParArr))_C_ParArr[_C_Opt_2_Index]=_C_Opt_2_Value;
}
if(_C_Opt_3_Use){
if(_C_Opt_3_Index<ArraySize(_C_ParArr))_C_ParArr[_C_Opt_3_Index]=_C_Opt_3_Value;
}
if(_C_Opt_4_Use){
if(_C_Opt_4_Index<ArraySize(_C_ParArr))_C_ParArr[_C_Opt_4_Index]=_C_Opt_4_Value;
}
if(_C_Opt_5_Use){
if(_C_Opt_5_Index<ArraySize(_C_ParArr))_C_ParArr[_C_Opt_5_Index]=_C_Opt_5_Value;
}
}
}
fSplitStrToDouble(_TS_iCustomParam,_TS_ParArr,"/");
if(_TS_Opt_1_Use){
if(_TS_Opt_1_Index<ArraySize(_TS_ParArr))_TS_ParArr[_TS_Opt_1_Index]=_TS_Opt_1_Value;
}
if(_TS_Opt_2_Use){
if(_TS_Opt_2_Index<ArraySize(_TS_ParArr))_TS_ParArr[_TS_Opt_2_Index]=_TS_Opt_2_Value;
}
if(_TS_Opt_3_Use){
if(_TS_Opt_3_Index<ArraySize(_TS_ParArr))_TS_ParArr[_TS_Opt_3_Index]=_TS_Opt_3_Value;
}
if(_TS_Opt_4_Use){
if(_TS_Opt_4_Index<ArraySize(_TS_ParArr))_TS_ParArr[_TS_Opt_4_Index]=_TS_Opt_4_Value;
}
if(_TS_Opt_5_Use){
if(_TS_Opt_5_Index<ArraySize(_TS_ParArr))_TS_ParArr[_TS_Opt_5_Index]=_TS_Opt_5_Value;
}
if(_TS_iCustomName=="ââåäèòå èìÿ èíäèêàòîðà"){
_TS_ON=false;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
static bool ft=false;
if(!ft){
int CheckTypeBuy;
int CheckTypeSell;
switch(OrdType){
case 0:
CheckTypeBuy=OP_BUY;
CheckTypeSell=OP_SELL;
break;
case 1:
CheckTypeBuy=OP_BUYSTOP;
CheckTypeSell=OP_SELLSTOP;
break;
case 2:
CheckTypeBuy=OP_BUYLIMIT;
CheckTypeSell=OP_SELLLIMIT;
break;
}
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==CheckTypeBuy)LastBuyTime=MathMax(LastBuyTime,OrderOpenTime());
if(OrderType()==CheckTypeSell)LastSellTime=MathMax(LastSellTime,OrderOpenTime());
}
}
else{
return(0);
}
}
for(i=0;i<HistoryTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==CheckTypeBuy)LastBuyTime=MathMax(LastBuyTime,OrderOpenTime());
if(OrderType()==CheckTypeSell)LastSellTime=MathMax(LastSellTime,OrderOpenTime());
}
}
else{
return(0);
}
}
if(LastBuyTime>LastSellTime)LastSellTime=0;
if(LastSellTime>LastBuyTime)LastBuyTime=0;
LastBuyTime=TimeFrame*60*MathFloor(LastBuyTime/(TimeFrame*60));
LastSellTime=TimeFrame*60*MathFloor(LastSellTime/(TimeFrame*60));
ft=true;
}
if(MW_Mode){
fMW();
}
bool BuySignal=false;
bool SellSignal=false;
bool TestMode=true;
switch (_O_Mode){
case 1:
double buyarrow=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M1_iBuyBufIndex,_O_ParArr,_O_iShift);
double sellarrow=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M1_iSellBufIndex,_O_ParArr,_O_iShift);
BuySignal=(buyarrow!=EMPTY_VALUE && buyarrow!=0);
SellSignal=(sellarrow!=EMPTY_VALUE && sellarrow!=0);
break;
case 2:
double main_1=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M2_iMainBufIndex,_O_ParArr,_O_iShift);
double signal_1=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M2_iSignalBufIndex,_O_ParArr,_O_iShift);
double main_2=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M2_iMainBufIndex,_O_ParArr,_O_iShift+1);
double signal_2=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M2_iSignalBufIndex,_O_ParArr,_O_iShift+1);
BuySignal=(main_1>signal_1 && !(main_2>signal_2));
SellSignal=(main_1<signal_1 && !(main_2<signal_2));
break;
case 3:
double line_1=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M3_iBufIndex,_O_ParArr,_O_iShift);
double line_2=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M3_iBufIndex,_O_ParArr,_O_iShift+1);
BuySignal=(line_1>_O_M3_BuyLevel && !(line_2>_O_M3_BuyLevel));
SellSignal=(line_1<_O_M3_SellLevel && !(line_2<_O_M3_SellLevel));
break;
case 4:
line_1=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M4_iBufIndex,_O_ParArr,_O_iShift);
line_2=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M4_iBufIndex,_O_ParArr,_O_iShift+1);
double line_3=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M3_iBufIndex,_O_ParArr,_O_iShift+2);
BuySignal=(line_1>line_2 && line_3>line_2);
SellSignal=(line_1<line_2 && line_3<line_2);
break;
case 5:
double upnow=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M5_iBuyBufIndex,_O_ParArr,_O_iShift);
double uppre=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M5_iBuyBufIndex,_O_ParArr,_O_iShift+1);
double dnnow=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M5_iSellBufIndex,_O_ParArr,_O_iShift);
double dnpre=fGetCustomValue(TimeFrame,_O_iCustomName,_O_M5_iSellBufIndex,_O_ParArr,_O_iShift+1);
BuySignal=(upnow!=0 && upnow!=EMPTY_VALUE && (uppre==EMPTY_VALUE || uppre<=0));
SellSignal=(dnnow!=0 && dnnow!=EMPTY_VALUE && (dnpre==EMPTY_VALUE || dnpre<=0));
break;
}
bool CloseBuySignal=false;
bool CloseSellSignal=false;
switch(_OÑ_Mode){
case 2:
CloseBuySignal=SellSignal;
CloseSellSignal=BuySignal;
break;
case 3:
switch (_C_Mode){
case 1:
double closebuyarrow=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M1_iCloseBuyBufIndex,_C_ParArr,_C_iShift);
double closesellarrow=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M1_iCloseSellBufIndex,_C_ParArr,_C_iShift);
CloseBuySignal=(closebuyarrow!=EMPTY_VALUE && closebuyarrow!=0);
CloseSellSignal=(closesellarrow!=EMPTY_VALUE && closesellarrow!=0);
break;
case 2:
main_1=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M2_iMainBufIndex,_C_ParArr,_C_iShift);
signal_1=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M2_iSignalBufIndex,_C_ParArr,_C_iShift);
main_2=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M2_iMainBufIndex,_C_ParArr,_C_iShift+1);
signal_2=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M2_iSignalBufIndex,_C_ParArr,_C_iShift+1);
CloseSellSignal=(main_1>signal_1 && !(main_2>signal_2));
CloseBuySignal=(main_1<signal_1 && !(main_2<signal_2));
break;
case 3:
line_1=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M3_iBufIndex,_C_ParArr,_C_iShift);
line_2=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M3_iBufIndex,_C_ParArr,_C_iShift+1);
CloseSellSignal=(line_1>_C_M3_CloseSellLevel && !(line_2>_C_M3_CloseSellLevel));
CloseBuySignal=(line_1<_C_M3_CloseBuyLevel && !(line_2<_C_M3_CloseBuyLevel));
break;
case 4:
line_1=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M4_iBufIndex,_C_ParArr,_C_iShift);
line_2=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M4_iBufIndex,_C_ParArr,_C_iShift+1);
line_3=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M4_iBufIndex,_C_ParArr,_C_iShift+2);
CloseSellSignal=(line_1>line_2 && line_3>line_2);
CloseBuySignal=(line_1<line_2 && line_3<line_2);
break;
case 5:
upnow=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M5_iBuyBufIndex,_C_ParArr,_C_iShift);
uppre=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M5_iBuyBufIndex,_C_ParArr,_C_iShift+1);
dnnow=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M5_iSellBufIndex,_C_ParArr,_C_iShift);
dnpre=fGetCustomValue(TimeFrame,_C_iCustomName,_C_M5_iSellBufIndex,_C_ParArr,_C_iShift+1);
BuySignal=(upnow!=0 && upnow!=EMPTY_VALUE && (uppre==EMPTY_VALUE || uppre<=0));
SellSignal=(dnnow!=0 && dnnow!=EMPTY_VALUE && (dnpre==EMPTY_VALUE || dnpre<=0));
break;
}
}
if(CloseBuySignal || CloseSellSignal){
fOrderCloseMarket(CloseBuySignal,CloseSellSignal);
}
if(BuySignal && SellSignal){
BuySignal=false;
SellSignal=false;
}
if(BuySignal || SellSignal){
if(OrdType!=0){
if(PendDelete){
fOrderDeletePending(SellSignal,BuySignal);
}
}
int BuyCount,SellCount,BuyStopCount,SellStopCount,BuyLimitCount,SellLimitCount,BuyStopTicket,SellStopTicket,BuyLimitTicket,SellLimitTicket;
int Total=fOrdersTotal(BuyCount,SellCount,BuyStopCount,SellStopCount,BuyLimitCount,SellLimitCount,BuyStopTicket,SellStopTicket,BuyLimitTicket,SellLimitTicket);
if(Total==-1)return(0);
if(Total<MaxOrdersCount || MaxOrdersCount==-1){
if(BuySignal){
if(BuyCount<MaxBuyCount || MaxBuyCount==-1){
// BUY
switch(OrdType){
case 0: // Buy Market
if(iTime(NULL,TimeFrame,0)>=LastBuyTime+TimeFrame*60*SleepBars){
fOrderOpenBuy();
}
break;
case 1: // Buy Stop
if(BuyStopCount==0){ // óñòàíîâêà
if(iTime(NULL,TimeFrame,0)>=LastBuyTime+TimeFrame*60*SleepBars){
double OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel+(Ask-Bid);
datetime Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fOrderSetBuyStop(OpPrice,Expir);
}
}
else{ // ìîäèôèêàöèÿ
if(BuyStopTicket>0){
switch(PendNewSigMode){
case 1: // ïðîñòàÿ
if(iTime(NULL,TimeFrame,0)>=LastBuyTime+TimeFrame*60*SleepBars){
if(OrderSelect(BuyStopTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)!=ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifyBuyStop(OrderTicket(),OpPrice,Expir);
}
}
}
break;
case 2: // íà ëó÷øóþ öåíó
if(OrderSelect(BuyStopTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)<ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifyBuyStop(OrderTicket(),OpPrice,Expir);
}
}
break;
}
}
}
break;
case 2:// Buy Limit
if(BuyLimitCount==0){ // óñòàíîâêà
if(iTime(NULL,TimeFrame,0)>=LastBuyTime+TimeFrame*60*SleepBars){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel+(Ask-Bid);
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fOrderSetBuyLimit(OpPrice,Expir);
}
}
else{ // ìîäèôèêàöèÿ
if(BuyLimitTicket>0){
switch(PendNewSigMode){
case 1: // ïðîñòàÿ
if(iTime(NULL,TimeFrame,0)>=LastBuyTime+TimeFrame*60*SleepBars){
if(OrderSelect(BuyLimitTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)!=ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifyBuyLimit(OrderTicket(),OpPrice,Expir);
}
}
}
break;
case 2: // íà ëó÷øóþ öåíó
if(OrderSelect(BuyLimitTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)>ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifyBuyLimit(OrderTicket(),OpPrice,Expir);
}
}
break;
}
}
}
break;
}
}
}
if(SellSignal){
if(SellCount<MaxSellCount || MaxSellCount==-1){
// SELL
switch(OrdType){
case 0: // Sell Market
if(iTime(NULL,TimeFrame,0)>=LastSellTime+TimeFrame*60*SleepBars){
fOrderOpenSell();
}
break;
case 1: // Sell Stop
if(SellStopCount==0){ // óñòàíîâêà
if(iTime(NULL,TimeFrame,0)>=LastSellTime+TimeFrame*60*SleepBars){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel;
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fOrderSetSellStop(OpPrice,Expir);
}
}
else{ // ìîäèôèêàöèÿ
if(SellStopTicket>0){
switch(PendNewSigMode){
case 1: // ïðîñòàÿ
if(iTime(NULL,TimeFrame,0)>=LastSellTime+TimeFrame*60*SleepBars){
if(OrderSelect(SellStopTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel;
if(ND(OpPrice)!=ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifySellStop(OrderTicket(),OpPrice,Expir);
}
}
}
break;
case 2: // íà ëó÷øóþ öåíó
if(OrderSelect(SellStopTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel;
if(ND(OpPrice)>ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifySellStop(OrderTicket(),OpPrice,Expir);
}
}
break;
}
}
}
break;
case 2: // Sell Limit
if(SellLimitCount==0){ // óñòàíîâêà
if(iTime(NULL,TimeFrame,0)>=LastSellTime+TimeFrame*60*SleepBars){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel;
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fOrderSetSellLimit(OpPrice,Expir);
}
}
else{ // ìîäèôèêàöèÿ
if(SellLimitTicket>0){
switch(PendNewSigMode){
case 1:
if(iTime(NULL,TimeFrame,0)>=LastSellTime+TimeFrame*60*SleepBars){
if(OrderSelect(SellLimitTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel;
if(ND(OpPrice)!=ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifySellLimit(OrderTicket(),OpPrice,Expir);
}
}
}
break;
case 2:
if(OrderSelect(SellLimitTicket,SELECT_BY_TICKET)){
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel;
if(ND(OpPrice)<ND(OrderOpenPrice())){
Expir=0;
if(PendExpiration!=0)Expir=TimeCurrent()+PendExpiration*60;
fModifySellLimit(OrderTicket(),OpPrice,Expir);
}
}
break;
}
}
}
break;
}
}
}
}
}
IndTrailing();
if(TrailingStop_Use)fTrailingWithStart();
if(BreakEven_Use)fBreakEvenToLevel();
if(OrdType!=0)if(PendPriceFollow)fPendingPriceFollow();
return(0);
}
//+------------------------------------------------------------------+
void fPendingPriceFollow(){
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
switch (OrderType()){
case OP_BUYSTOP:
double OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)<ND(OrderOpenPrice())){
fModifyBuyStop(OrderTicket(),OpPrice,OrderExpiration());
}
break;
case OP_SELLSTOP:
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel;
if(ND(OpPrice)>ND(OrderOpenPrice())){
fModifySellStop(OrderTicket(),OpPrice,OrderExpiration());
}
break;
case OP_BUYLIMIT:
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)>ND(OrderOpenPrice())){
fModifyBuyLimit(OrderTicket(),OpPrice,OrderExpiration());
}
break;
case OP_SELLLIMIT:
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)+Point*PendLevel;
OpPrice=iMA(NULL,TimeFrame,1,0,0,PendPromPrice,0)-Point*PendLevel+(Ask-Bid);
if(ND(OpPrice)<ND(OrderOpenPrice())){
fModifySellLimit(OrderTicket(),OpPrice,OrderExpiration());
}
break;
}
}
}
}
}
double fGetLotsSimple(int aTradeType){
double retlot;
double Means;
switch(MMMethod){
case 0:
retlot=Lots;
break;
case 1:
switch (MeansType){
case 1:
Means=AccountBalance();
break;
case 2:
Means=AccountEquity();
break;
case 3:
Means=AccountFreeMargin();
break;
default:
Means=AccountBalance();
}
retlot=AccountBalance()/1000*Risk;
break;
case 2:
switch (MeansType){
case 1:
Means=AccountBalance();
break;
case 2:
Means=AccountEquity();
break;
case 3:
Means=AccountFreeMargin();
break;
default:
Means=AccountBalance();
}
if(Means<MeansStep){
Means=MeansStep;
}
retlot=(MeansStep*MathFloor(Means/MeansStep))/1000*Risk;
break;
default:
retlot=Lots;
}
if(retlot<1.0/MathPow(10,LotsDigits))retlot=1.0/MathPow(10,LotsDigits) ;
retlot=NormalizeDouble(retlot,LotsDigits);
if(AccountFreeMarginCheck(Symbol(),aTradeType,retlot)<=0){
return(-1);
}
if(GetLastError()==134){
return(-2);
}
return(retlot);
}
int fOrderOpenBuy(){
RefreshRates();
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=0;
double tpts=0;
if(!MW_Mode){
if(StopLoss!=0)slts=ND(Ask-Point*StopLoss);
if(TakeProfit!=0)tpts=ND(Ask+Point*TakeProfit);
}
int irv=OrderSend(Symbol(),OP_BUY,lts,ND(Ask),Slippage,slts,tpts,NULL,Magic_N,0,CLR_NONE);
if(irv>0){
LastBuyTime=iTime(NULL,TimeFrame,0);
if(CancelSleeping)LastSellTime=0;
if(MW_Mode){
fMW();
}
return(irv);
}
else{
Print ("Error open BUY. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need open buy. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(lt3!=iTime(NULL,TimeFrame,0)){
lt3=iTime(NULL,TimeFrame,0);
if(lts==-1)Print("Need open buy. No money");
if(lts==-2)Print("Need open buy. Wrong lots size");
}
return(-3);
}
}
int fOrderOpenSell(){
RefreshRates();
double lts=fGetLotsSimple(OP_SELL);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=0;
double tpts=0;
if(!MW_Mode){
if(StopLoss!=0)slts=ND(Bid+Point*StopLoss);
if(TakeProfit!=0)tpts=ND(Bid-Point*TakeProfit);
}
int irv=OrderSend(Symbol(),OP_SELL,lts,ND(Bid),Slippage,slts,tpts,NULL,Magic_N,0,CLR_NONE);
if(irv>0){
LastSellTime=iTime(NULL,TimeFrame,0);
if(CancelSleeping)LastBuyTime=0;
if(MW_Mode){
fMW();
}
return(irv);
}
else{
Print ("Error open SELL. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need open sell. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(lt3!=iTime(NULL,TimeFrame,0)){
lt3=iTime(NULL,TimeFrame,0);
if(lts==-1)Print("Need open sell. No money");
if(lts==-2)Print("Need open sell. Wrong lots size");
}
return(-3);
}
}
void fMW(){
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
RefreshRates();
if(OrderType()==OP_BUY || OrderType()==OP_SELL){
if((ND(OrderStopLoss())==0 && StopLoss!=0) || (ND(OrderTakeProfit())==0 && TakeProfit!=0)){
if(OrderType()==OP_BUY){
double slts=ND(OrderStopLoss());
if(slts==0){
if(StopLoss==0)slts=0;else{
slts=ND(OrderOpenPrice()-Point*StopLoss);
double msl=ND(Bid-Point*MarketInfo(Symbol(),MODE_STOPLEVEL)-Point);
slts=MathMin(slts,msl);
}
}
double tpts=ND(OrderTakeProfit());
if(tpts==0){
if(TakeProfit==0)tpts=0;else {
tpts=ND(OrderOpenPrice()+Point*TakeProfit);
double mtp=ND(Bid+Point*MarketInfo(Symbol(),MODE_STOPLEVEL)+Point);
tpts=MathMax(tpts,mtp);
}
}
}
if(OrderType()==OP_SELL){
slts=ND(OrderStopLoss());
if(slts==0){
if(StopLoss==0)slts=0;else {
slts=ND(OrderOpenPrice()+Point*StopLoss);
msl=ND(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL)+Point);
slts=MathMax(slts,msl);
}
}
tpts=ND(OrderTakeProfit());
if(tpts==0){
if(TakeProfit==0)tpts=0;else {
tpts=ND(OrderOpenPrice()-Point*TakeProfit);
mtp=ND(Ask-Point*MarketInfo(Symbol(),MODE_STOPLEVEL)-Point);
tpts=MathMin(tpts,mtp);
}
}
}
if(OrderStopLoss()!=slts || OrderTakeProfit()!=tpts){
bool brv=OrderModify(OrderTicket(),OrderOpenPrice(),slts,tpts,0,CLR_NONE);
int check=GetLastError();
if(brv){
Print("SL/TP äëÿ îðäåðà "+OrderTicket()+" óñòàíîâëåí");
}
else{
Print("Íå óäàëîñü óñòàíîâèòü SL/TP äëÿ îðäåðà "+OrderTicket()+". "+fMyErDesc(check));
}
}
}
}
}
}
}
}
string fMyErDesc(int aErrNum){
string pref="Err Num: "+aErrNum+" - ";
switch(aErrNum){
case 0: return(pref+"NO ERROR");
case 1: return(pref+"NO RESULT");
case 2: return(pref+"COMMON ERROR");
case 3: return(pref+"INVALID TRADE PARAMETERS");
case 4: return(pref+"SERVER BUSY");
case 5: return(pref+"OLD VERSION");
case 6: return(pref+"NO CONNECTION");
case 7: return(pref+"NOT ENOUGH RIGHTS");
case 8: return(pref+"TOO FREQUENT REQUESTS");
case 9: return(pref+"MALFUNCTIONAL TRADE");
case 64: return(pref+"ACCOUNT DISABLED");
case 65: return(pref+"INVALID ACCOUNT");
case 128: return(pref+"TRADE TIMEOUT");
case 129: return(pref+"INVALID PRICE");
case 130: return(pref+"INVALID STOPS");
case 131: return(pref+"INVALID TRADE VOLUME");
case 132: return(pref+"MARKET CLOSED");
case 133: return(pref+"TRADE DISABLED");
case 134: return(pref+"NOT ENOUGH MONEY");
case 135: return(pref+"PRICE CHANGED");
case 136: return(pref+"OFF QUOTES");
case 137: return(pref+"BROKER BUSY");
case 138: return(pref+"REQUOTE");
case 139: return(pref+"ORDER LOCKED");
case 140: return(pref+"LONG POSITIONS ONLY ALLOWED");
case 141: return(pref+"TOO MANY REQUESTS");
case 145: return(pref+"TRADE MODIFY DENIED");
case 146: return(pref+"TRADE CONTEXT BUSY");
case 147: return(pref+"TRADE EXPIRATION DENIED");
case 148: return(pref+"TRADE TOO MANY ORDERS");
//---- mql4 run time errors
case 4000: return(pref+"NO MQLERROR");
case 4001: return(pref+"WRONG FUNCTION POINTER");
case 4002: return(pref+"ARRAY INDEX OUT OF RANGE");
case 4003: return(pref+"NO MEMORY FOR FUNCTION CALL STACK");
case 4004: return(pref+"RECURSIVE STACK OVERFLOW");
case 4005: return(pref+"NOT ENOUGH STACK FOR PARAMETER");
case 4006: return(pref+"NO MEMORY FOR PARAMETER STRING");
case 4007: return(pref+"NO MEMORY FOR TEMP STRING");
case 4008: return(pref+"NOT INITIALIZED STRING");
case 4009: return(pref+"NOT INITIALIZED ARRAYSTRING");
case 4010: return(pref+"NO MEMORY FOR ARRAYSTRING");
case 4011: return(pref+"TOO LONG STRING");
case 4012: return(pref+"REMAINDER FROM ZERO DIVIDE");
case 4013: return(pref+"ZERO DIVIDE");
case 4014: return(pref+"UNKNOWN COMMAND");
case 4015: return(pref+"WRONG JUMP");
case 4016: return(pref+"NOT INITIALIZED ARRAY");
case 4017: return(pref+"DLL CALLS NOT ALLOWED");
case 4018: return(pref+"CANNOT LOAD LIBRARY");
case 4019: return(pref+"CANNOT CALL FUNCTION");
case 4020: return(pref+"EXTERNAL EXPERT CALLS NOT ALLOWED");
case 4021: return(pref+"NOT ENOUGH MEMORY FOR RETURNED STRING");
case 4022: return(pref+"SYSTEM BUSY");
case 4050: return(pref+"INVALID FUNCTION PARAMETERS COUNT");
case 4051: return(pref+"INVALID FUNCTION PARAMETER VALUE");
case 4052: return(pref+"STRING FUNCTION INTERNAL ERROR");
case 4053: return(pref+"SOME ARRAY ERROR");
case 4054: return(pref+"INCORRECT SERIES ARRAY USING");
case 4055: return(pref+"CUSTOM INDICATOR ERROR");
case 4056: return(pref+"INCOMPATIBLE ARRAYS");
case 4057: return(pref+"GLOBAL VARIABLES PROCESSING ERROR");
case 4058: return(pref+"GLOBAL VARIABLE NOT FOUND");
case 4059: return(pref+"FUNCTION NOT ALLOWED IN TESTING MODE");
case 4060: return(pref+"FUNCTION NOT CONFIRMED");
case 4061: return(pref+"SEND MAIL ERROR");
case 4062: return(pref+"STRING PARAMETER EXPECTED");
case 4063: return(pref+"INTEGER PARAMETER EXPECTED");
case 4064: return(pref+"DOUBLE PARAMETER EXPECTED");
case 4065: return(pref+"ARRAY AS PARAMETER EXPECTED");
case 4066: return(pref+"HISTORY WILL UPDATED");
case 4067: return(pref+"TRADE ERROR");
case 4099: return(pref+"END OF FILE");
case 4100: return(pref+"SOME FILE ERROR");
case 4101: return(pref+"WRONG FILE NAME");
case 4102: return(pref+"TOO MANY OPENED FILES");
case 4103: return(pref+"CANNOT OPEN FILE");
case 4104: return(pref+"INCOMPATIBLE ACCESS TO FILE");
case 4105: return(pref+"NO ORDER SELECTED");
case 4106: return(pref+"UNKNOWN SYMBOL");
case 4107: return(pref+"INVALID PRICE PARAM");
case 4108: return(pref+"INVALID TICKET");
case 4109: return(pref+"TRADE NOT ALLOWED");
case 4110: return(pref+"LONGS NOT ALLOWED");
case 4111: return(pref+"SHORTS NOT ALLOWED");
case 4200: return(pref+"OBJECT ALREADY EXISTS");
case 4201: return(pref+"UNKNOWN OBJECT PROPERTY");
case 4202: return(pref+"OBJECT DOES NOT EXIST");
case 4203: return(pref+"UNKNOWN OBJECT TYPE");
case 4204: return(pref+"NO OBJECT NAME");
case 4205: return(pref+"OBJECT COORDINATES ERROR");
case 4206: return(pref+"NO SPECIFIED SUBWINDOW");
case 4207: return(pref+"SOME OBJECT ERROR");
default: return(pref+"WRONG ERR NUM");
}
}
double ND(double v){return(NormalizeDouble(v,Digits));}
int fOrdersTotal(int & aBuyCount,int & aSellCount,int & aBuyStopCount,int & aSellStopCount,int & aBuyLimitCount,int & aSellLimitCount,int & aBuyStopTicket,int & aSellStopTicket,int & aBuyLimitTicket,int & aSellLimitTicket){
aBuyCount=0;
aSellCount=0;
aBuyStopCount=0;
aSellStopCount=0;
aBuyLimitCount=0;
aSellLimitCount=0;
aBuyStopTicket=0;
aSellStopTicket=0;
aBuyLimitTicket=0;
aSellLimitTicket=0;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
switch (OrderType()){
case OP_BUY:
aBuyCount++;
break;
case OP_SELL:
aSellCount++;
break;
case OP_BUYSTOP:
aBuyStopCount++;
aBuyStopTicket=OrderTicket();
break;
case OP_SELLSTOP:
aSellStopCount++;
aSellStopTicket=OrderTicket();
break;
case OP_BUYLIMIT:
aBuyLimitCount++;
aBuyLimitTicket=OrderTicket();
break;
case OP_SELLLIMIT:
aSellLimitCount++;
aSellLimitTicket=OrderTicket();
break;
}
}
}
else{
return(-1);
}
}
return(aBuyCount+aSellCount);
}
int fOrderCloseMarket(bool aCloseBuy=true,bool aCloseSell=true){
int tErr=0;
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY && aCloseBuy){
RefreshRates();
if(CheckProfit){
if(ND(Bid-OrderOpenPrice())<ND(Point*MinimalProfit)){
continue;
}
}
if(CheckSL){
if(ND(OrderStopLoss())!=0){
if(ND(OrderStopLoss()-OrderOpenPrice())>=ND(Point*MinimalSLProfit)){
continue;
}
}
}
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Bid),Slippage,CLR_NONE)){
Print("Error close BUY "+OrderTicket()+" "+fMyErDesc(GetLastError()));
tErr=-1;
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
if(OrderType()==OP_SELL && aCloseSell){
RefreshRates();
if(CheckProfit){
if(ND(OrderOpenPrice()-Ask)<ND(Point*MinimalProfit)){
continue;
}
}
if(CheckSL){
if(ND(OrderStopLoss())!=0){
if(ND(OrderOpenPrice()-OrderStopLoss())>=ND(Point*MinimalSLProfit)){
continue;
}
}
}
if(!IsTradeContextBusy()){
if(!OrderClose(OrderTicket(),OrderLots(),ND(Ask),Slippage,CLR_NONE)){
Print("Error close SELL "+OrderTicket()+" "+fMyErDesc(GetLastError()));
tErr=-1;
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
}
}
}
return(tErr);
}
int fOrderDeletePending(bool aDeleteBuy=true,bool aDeleteSell=true){
int tErr=0;
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if((OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT) && aDeleteBuy){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderDelete(OrderTicket())){
Print("Error delete order "+OrderTicket()+" "+fMyErDesc(GetLastError()));
tErr=-1;
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need delete order "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
if((OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT) && aDeleteSell){
RefreshRates();
if(!IsTradeContextBusy()){
if(!OrderDelete(OrderTicket())){
Print("Error delete order "+OrderTicket()+" "+fMyErDesc(GetLastError()));
tErr=-1;
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need delete order "+OrderTicket()+". Trade Context Busy");
}
return(-2);
}
}
}
}
}
return(tErr);
}
int fSplitStrToDouble(string aString,double & aArray[],string aDelimiter){
string tmp_str="";
string tmp_char="";
ArrayResize(aArray,0);
for(int i=0;i<StringLen(aString);i++){
tmp_char=StringSubstr(aString,i,1);
if(tmp_char==aDelimiter){
if(StringTrimLeft(StringTrimRight(tmp_str))!=""){
ArrayResize(aArray,ArraySize(aArray)+1);
aArray[ArraySize(aArray)-1]=StrToDouble(tmp_str);
}
tmp_str="";
}
else{
if(tmp_char!=" ")tmp_str=tmp_str+tmp_char;
}
}
if(StringTrimLeft(StringTrimRight(tmp_str))!=""){
ArrayResize(aArray,ArraySize(aArray)+1);
aArray[ArraySize(aArray)-1]=StrToDouble(tmp_str);
}
return(ArraySize(aArray));
}
void fBreakEvenToLevel(){
double slts;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
RefreshRates();
if(ND(Bid-OrderOpenPrice())>=ND(Point*BreakEvenStart)){
slts=ND(OrderOpenPrice()+Point*(BreakEvenStart-BreakEvenLevel));
if(ND(OrderStopLoss())<slts){
if(!IsTradeContextBusy()){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
Print("Error breakeven BUY "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need breakeven BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
RefreshRates();
if(ND(OrderOpenPrice()-Ask)>=ND(Point*BreakEvenStart)){
slts=ND(OrderOpenPrice()-Point*(BreakEvenStart-BreakEvenLevel));
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!IsTradeContextBusy()){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
Print("Error breakeven SELL "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need breakeven SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
}
}
void fTrailingWithStart(){
double slts;
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
RefreshRates();
if(ND(Bid-OrderOpenPrice())>=ND(Point*TrailingStopStart)){
slts=ND(Bid-Point*TrailingStop);
if(ND(OrderStopLoss())<slts){
if(!IsTradeContextBusy()){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
Print("Error trailingstop BUY "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need trailingstop BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
RefreshRates();
if(ND(OrderOpenPrice()-Ask)>=ND(Point*TrailingStopStart)){
slts=ND(Ask+Point*TrailingStop);
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
Print("Error trailingstop SELL "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need trailingstop SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
}
double fGetCustomValue(int TimeFrame,string aName,int aIndex,double aParArr[],int aShift){
double tv;
switch (ArraySize(aParArr)){
case 0:
tv=iCustom(NULL,TimeFrame,aName,aIndex,aShift);
break;
case 1:
tv=iCustom(NULL,TimeFrame,aName,aParArr[0],aIndex,aShift);
break;
case 2:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aIndex,aShift);
break;
case 3:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aIndex,aShift);
break;
case 4:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aIndex,aShift);
break;
case 5:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aIndex,aShift);
break;
case 6:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aIndex,aShift);
break;
case 7:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aIndex,aShift);
break;
case 8:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aIndex,aShift);
break;
case 9:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aIndex,aShift);
break;
case 10:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aIndex,aShift);
break;
case 11:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aIndex,aShift);
break;
case 12:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aIndex,aShift);
break;
case 13:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aIndex,aShift);
break;
case 14:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aIndex,aShift);
break;
case 15:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aIndex,aShift);
break;
case 16:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aIndex,aShift);
break;
case 17:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aIndex,aShift);
break;
case 18:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aIndex,aShift);
break;
case 19:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aIndex,aShift);
break;
case 20:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aIndex,aShift);
break;
case 21:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aIndex,aShift);
break;
case 22:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aIndex,aShift);
break;
case 23:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aIndex,aShift);
break;
case 24:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aIndex,aShift);
break;
case 25:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aIndex,aShift);
break;
case 26:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aIndex,aShift);
break;
case 27:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aIndex,aShift);
break;
case 28:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aIndex,aShift);
break;
case 29:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aIndex,aShift);
break;
case 30:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aIndex,aShift);
break;
case 31:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aIndex,aShift);
break;
case 32:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aIndex,aShift);
break;
case 33:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aIndex,aShift);
break;
case 34:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aIndex,aShift);
break;
case 35:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aIndex,aShift);
break;
case 36:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aIndex,aShift);
break;
case 37:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aIndex,aShift);
break;
case 38:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aIndex,aShift);
break;
case 39:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aIndex,aShift);
break;
case 40:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aIndex,aShift);
break;
case 41:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aIndex,aShift);
break;
case 42:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aIndex,aShift);
break;
case 43:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aIndex,aShift);
break;
case 44:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aIndex,aShift);
break;
case 45:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aIndex,aShift);
break;
case 46:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aIndex,aShift);
break;
case 47:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aIndex,aShift);
break;
case 48:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aIndex,aShift);
break;
case 49:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aIndex,aShift);
break;
case 50:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aIndex,aShift);
break;
case 51:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aIndex,aShift);
break;
case 52:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aIndex,aShift);
break;
case 53:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aIndex,aShift);
break;
case 54:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aIndex,aShift);
break;
case 55:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aParArr[54],
aIndex,aShift);
break;
case 56:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aParArr[54],
aParArr[55],
aIndex,aShift);
break;
case 57:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aParArr[54],
aParArr[55],
aParArr[56],
aIndex,aShift);
break;
case 58:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aParArr[54],
aParArr[55],
aParArr[56],
aParArr[57],
aIndex,aShift);
break;
case 59:
tv=iCustom(NULL,TimeFrame,aName,
aParArr[0],
aParArr[1],
aParArr[2],
aParArr[3],
aParArr[4],
aParArr[5],
aParArr[6],
aParArr[7],
aParArr[8],
aParArr[9],
aParArr[10],
aParArr[11],
aParArr[12],
aParArr[13],
aParArr[14],
aParArr[15],
aParArr[16],
aParArr[17],
aParArr[18],
aParArr[19],
aParArr[20],
aParArr[21],
aParArr[22],
aParArr[23],
aParArr[24],
aParArr[25],
aParArr[26],
aParArr[27],
aParArr[28],
aParArr[29],
aParArr[30],
aParArr[31],
aParArr[32],
aParArr[33],
aParArr[34],
aParArr[35],
aParArr[36],
aParArr[37],
aParArr[38],
aParArr[39],
aParArr[40],
aParArr[41],
aParArr[42],
aParArr[43],
aParArr[44],
aParArr[45],
aParArr[46],
aParArr[47],
aParArr[48],
aParArr[49],
aParArr[50],
aParArr[51],
aParArr[52],
aParArr[53],
aParArr[54],
aParArr[55],
aParArr[56],
aParArr[57],
aParArr[58],
aIndex,aShift);
break;
}
return(tv);
}
int fOrderSetBuyLimit(double aOpenPrice,datetime aExpiration=0){
// fOrderSetBuyLimit();
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Ask-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=msl){
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(oppr-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_BUYLIMIT,lts,oppr,Slippage,slts,tpts,NULL,Magic_N,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error set BUYLIMIT. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need set BUYLIMIT. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(lts==-1)Print("Need set BUYLIMIT. No money");
if(lts==-2)Print("Need set BUYLIMIT. Wrong lots size");
}
return(-3);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
Print("Need set BUYLIMIT. Wrong price level");
}
return(-4);
}
}
int fOrderSetBuyStop(double aOpenPrice,datetime aExpiration=0){
// fOrderSetBuyStop();
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=msl){
double lts=fGetLotsSimple(OP_BUY);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(oppr-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_BUYSTOP,lts,oppr,Slippage,slts,tpts,NULL,Magic_N,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error set BUYSTOP. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need set BUYSTOP. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(lts==-1)Print("Need set BUYSTOP. No money");
if(lts==-2)Print("Need set BUYSTOP. Wrong lots size");
}
return(-3);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
Print("Need set BUYSTOP. Wrong price level ",msl," ",Ask);
}
return(-4);
}
}
int fOrderSetSellLimit(double aOpenPrice,datetime aExpiration=0){
// fOrderSetSellLimit();
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Bid+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=msl){
double lts=fGetLotsSimple(OP_SELL);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(oppr+Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr-Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_SELLLIMIT,lts,oppr,Slippage,slts,tpts,NULL,Magic_N,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error set SELLLIMIT. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need set SELLLIMIT. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(lts==-1)Print("Need set SELLLIMIT. No money");
if(lts==-2)Print("Need set SELLLIMIT. Wrong lots size");
}
return(-3);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
if(lts==-1)Print("Need set SELLIMIT. Wrong price level");
}
return(-4);
}
}
int fOrderSetSellStop(double aOpenPrice,datetime aExpiration=0){
// fOrderSetSellStop();
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Bid-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=msl){
double lts=fGetLotsSimple(OP_SELL);
if(lts>0){
if(!IsTradeContextBusy()){
double slts=ND(oppr+Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr-Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderSend(Symbol(),OP_SELLSTOP,lts,oppr,Slippage,slts,tpts,NULL,Magic_N,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error set SELLSTOP. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+20){
lt2=TimeCurrent();
Print("Need set SELLSTOP. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt3=0;
if(TimeCurrent()>lt3+20){
lt3=TimeCurrent();
if(lts==-1)Print("Need set SELLSTOP. No money");
if(lts==-2)Print("Need set SELLSTOP. Wrong lots size");
}
return(-3);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+20){
lt4=TimeCurrent();
Print("Need set SELLSTOP. Wrong price level");
}
return(-4);
}
}
int fModifyBuyStop(int aTicket,double aOpenPrice,datetime aExpiration=0){
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=msl){
if(!IsTradeContextBusy()){
double slts=ND(oppr-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
bool brv=OrderModify(aTicket,oppr,slts,tpts,aExpiration,CLR_NONE);
if(brv){
return(0);
}
else{
Print ("Error modify BUYSTOP. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+30){
lt2=TimeCurrent();
Print("Need modify buystop. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+30){
lt4=TimeCurrent();
Print("Need modify buystop. Wrong price level ");
}
return(-4);
}
}
int fModifySellStop(int aTicket,double aOpenPrice,datetime aExpiration=0){
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Bid-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=msl){
if(!IsTradeContextBusy()){
double slts=ND(oppr+Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr-Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderModify(aTicket,oppr,slts,tpts,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error modify SELLSTOP. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+30){
lt2=TimeCurrent();
Print("Need modify sellstop. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+30){
lt4=TimeCurrent();
Print("Need modify sellstop. Wrong price level");
}
return(-4);
}
}
int fModifyBuyLimit(int aTicket,double aOpenPrice,datetime aExpiration=0){
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Ask-Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr<=msl){
if(!IsTradeContextBusy()){
double slts=ND(oppr-Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr+Point*TakeProfit);
if(TakeProfit==0)tpts=0;
bool brv=OrderModify(aTicket,oppr,slts,tpts,aExpiration,CLR_NONE);
if(brv){
return(0);
}
else{
Print ("Error modify BUYLIMIT. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+30){
lt2=TimeCurrent();
Print("Need modify buylimit. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+30){
lt4=TimeCurrent();
Print("Need modify buylimit. Wrong price level ");
}
return(-4);
}
}
int fModifySellLimit(int aTicket,double aOpenPrice,datetime aExpiration=0){
RefreshRates();
double oppr=ND(aOpenPrice);
double msl=ND(Bid+Point*MarketInfo(Symbol(),MODE_STOPLEVEL));
if(oppr>=msl){
if(!IsTradeContextBusy()){
double slts=ND(oppr+Point*StopLoss);
if(StopLoss==0)slts=0;
double tpts=ND(oppr-Point*TakeProfit);
if(TakeProfit==0)tpts=0;
int irv=OrderModify(aTicket,oppr,slts,tpts,aExpiration,CLR_NONE);
if(irv>0){
return(irv);
}
else{
Print ("Error modify SELLLIMIT. "+fMyErDesc(GetLastError()));
return(-1);
}
}
else{
static int lt2=0;
if(TimeCurrent()>lt2+30){
lt2=TimeCurrent();
Print("Need modify selllimit. Trade Context Busy");
}
return(-2);
}
}
else{
static int lt4=0;
if(TimeCurrent()>lt4+30){
lt4=TimeCurrent();
Print("Need modify selllimit. Wrong price level");
}
return(-4);
}
}
void IndTrailing(){
if(!_TS_ON)return;
double tBuyVal=0;
double tSellVal=0;
tBuyVal=ND(fGetCustomValue(TimeFrame,_TS_iCustomName,_TS_iForBuyBufIndex,_TS_ParArr,_TS_iShift));
tSellVal=ND(fGetCustomValue(TimeFrame,_TS_iCustomName,_TS_iForSellBufIndex,_TS_ParArr,_TS_iShift));
if(tBuyVal>0){
if(tBuyVal!=EMPTY_VALUE){
tBuyVal-=Point*_TS_Indent;
tBuyVal=ND(tBuyVal);
}
}
if(tSellVal>0){
if(tSellVal!=EMPTY_VALUE){
tSellVal+=Point*_TS_Indent+(Ask-Bid);
tSellVal=ND(tSellVal);
}
}
if(tBuyVal<=0){
if(tSellVal<=0){
return;
}
}
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_N){
if(OrderType()==OP_BUY){
if(tBuyVal<=0){
continue;
}
RefreshRates();
if(tBuyVal>=ND(OrderOpenPrice()+Point*_TS_TrailInProfit)){
if(ND(OrderStopLoss())<tBuyVal){
if(!IsTradeContextBusy()){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),tBuyVal,OrderTakeProfit(),0,CLR_NONE)){
Print("Error trailingstop (ind) BUY "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
else{
static int lt1=0;
if(lt1!=iTime(NULL,TimeFrame,0)){
lt1=iTime(NULL,TimeFrame,0);
Print("Need trailingstop BUY "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
if(OrderType()==OP_SELL){
if(tSellVal<=0){
continue;
}
RefreshRates();
if(ND(tSellVal)<=ND(OrderOpenPrice()-Point*_TS_TrailInProfit)){
if(!IsTradeContextBusy()){
if(ND(OrderStopLoss())>tSellVal || ND(OrderStopLoss())==0){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),tSellVal,OrderTakeProfit(),0,CLR_NONE)){
Print("Error trailingstop (ind) SELL "+OrderTicket()+" "+fMyErDesc(GetLastError()));
}
}
}
else{
static int lt2=0;
if(lt2!=iTime(NULL,TimeFrame,0)){
lt2=iTime(NULL,TimeFrame,0);
Print("Need trailingstop SELL "+OrderTicket()+". Trade Context Busy");
}
}
}
}
}
}
}
}
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
---