//+------------------------------------------------------------------+ //| exp_iCustom_v7_2.mq4 | //| * | //| * | //+------------------------------------------------------------------+ #property copyright "http://dmffx.com" #property link "http://dmffx.com" /* v7_2 Èñïðàâëåíà îøèáêà ïðè _OÑ_Mode=5, òåïåðü ñîâåòíèê çàêðûâàåò îðäåðà. */ /* 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); CloseBuySignal=(upnow>0 && upnow!=EMPTY_VALUE && (uppre==EMPTY_VALUE || uppre<=0)); CloseSellSignal=(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"); } } } } } } } }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
aName
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself
Other Features: