Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
MultiIndicatorOptimizer
//+------------------------------------------------------------------+
//| MultiIndicatorOptimizer.mq4 |
//| Copyright © 2008, komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, komposter"
#property link "mailto:komposterius@mail.ru"
/*
Ñîâòåíèê èñïîëüçóåò 5 èíäèêàòîðîâ.
Èíäèêàòîðû (âåðíåå, èõ âûçîâ) ìîæíî ìåíÿòü â êîäå ýêñïåðòà íà àíàëîãè÷íûå ïî êîë-âó ïàðàìåòðîâ è ìåòîäàì îòðèñîâêè.
Äëÿ êàæäîãî èíäèêàòîðà ìîæíî íàñòðîèòü (âíåøíèìè ïåðåìåííûìè):
- ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
- äëÿ êàæäîãî èç ÒÔ (îò Ì1 äî MN):
- âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
- ïàðàìåòðû èíäèêàòîðà.
Ïî âñåì âêëþ÷åííûì èíäèêàòîðàì/ÒÔ ýêñïåðò íàõîäèò 2 ñèãíàëà.
Ñèãíàë ïî èíäèêàòîðó/ÒÔ ðàñ÷èòûâàåòñÿ êàê (ñèãíàë1 + ñèãíàë2) / 2 * "ÒÔ_Á".
Ñóììàðíûì (èòîãîâûì) ñèãíàëîì ÿâëÿåòñÿ ñóììà âñåõ ñèãíàëîâ ïî èíäèêàòîðàì/ÒÔ.
Ñèãíàëû äëÿ èíäèêàòîðîâ:
MACD:
ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
ñèãíàë2 - èíäèêàòîð âûøå ñèãíàëüíîé ëèíèè çíà÷åíèå +1, èíäèêàòîð íèæå ñèãíàëüíîé ëèíèè çíà÷åíèå -1;
Awesome Oscillator:
ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
ñèãíàë2 - èíäèêàòîð çåëåíîãî öâåòà çíà÷åíèå +1, èíäèêàòîð êðàñíîãî öâåòà çíà÷åíèå -1;
Moving Average of Oscillator:
ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
ñèãíàë2 íå ïðåäóñìîòðåí.
Williams' Percent Range:
ñèãíàë1 - èíäèêàòîð ïåðåñåêàåò ëèíèþ ïåðåïðîäàííîñòè ââåðõ=+1, èíäèêàòîð ïåðåñåêàåò ëèíèþ ïåðåêóïëèííîñòè âíèç=-1;
ñèãíàë2 íå ïðåäóñìîòðåí.
Stochastic Oscillator:
ñèãíàë1 - %K ïåðåñåêàåò ëèíèþ ïåðåïðîäàííîñòè ââåðõ=+1, %K ïåðåñåêàåò ëèíèþ ïåðåêóïëèííîñòè âíèç=-1;
ñèãíàë2 - %K âûøå %D = +1, %K íèæå %D = -1.
Òîðãîâëÿ:
- åñëè èòîãîâûé ñèãíàë áîëüøå 0 è íåò áàé-ïîçèöèè, îòêðûâàåì áàé;
- åñëè èòîãîâûé ñèãíàë ìåíüøå 0 è íåò ñåëë-ïîçèöèè, îòêðûâàåì ñåëë.
Ïàðàìåòðû îòêðûâàåìûõ ïîçèöèé:
- Ðàçìåð ëîòà:
- åñëè "Ë" = 0, èñïîëüçóåòñÿ óêàçàííûé ðàçìåð ëîòà ("Ë1");
- åñëè "Ë" = 1, ëîò ðàñ÷èòûâàåòñÿ ïî ôîðìóëå: "(Ýêâèòè - Ë2) / Ë3 * Ë1", íî íå ìåíüøå "Ë1";
- åñëè ýêâèòè ñòàíîâèòñÿ áîëüøå Ë2*Ë4, Ë2 óâåëè÷èâàåòñÿ â Ë4 ðàç.
- ÑË è ÒÏ:
- åñëè "Ä" = 0, ÑË è ÒÏ áóäóò ðàâíû ñîîòâåòñòâóþùèì âíåøíèì ïåðåìåííûì;
- åñëè "Ä" = 1, ÑË è ÒÏ ðàñ÷èòûâàþòñÿ ïî ôîðìóëå: "óêàçàííûé ÑË(ÒÏ) * Èòîãîâûé ñèãíàë * Ä1";
Ñîïðîâîæäåíèå ïîçèöèé:
- åñëè "Ä" = 1, è åñòü îòêðûòàÿ ïîçèöèÿ:
- ðàñ÷èòûâàåì íîâûå ÑË/ÒÏ äëÿ ïîçèöèè ïî ôîðìóëå: "óêàçàííûé ÑË(ÒÏ) * Èòîãîâûé ñèãíàë * Ä1" (îòñ÷åò îò öåíû îòêðûòèÿ ïîçèöèè);
- åñëè öåíà âûøëà çà íîâûå çíà÷åíèÿ ÑË èëè ÒÏ, çàêðûâàåì ïîçèöèþ;
- åñëè ÑË èëè ÒÏ ïîçèöèè íå ðàâíû ðàñ÷èòàííûì çíà÷åíèÿì, ìîäèôèöèðóåì èõ.
*/
//---- Âíåøíèå ïåðåìåííûå (äîñòóïíûå â îêíå ñâîéñòâ ýêñïåðòà) - ìîæíî óñòàíîâèòü çíà÷åíèÿ ïî óìîë÷àíèþ
extern string Expert_Properties = "-------Expert-Properties-------";
extern int Expert_Id = 1135; // óíèêàëüíûé èäåíòèôèêàòîð ýêñïåðòà. Åñëè íà 2-õ ãðàôèêàõ ñ îäèíàêîâûì Ñèìâîëîì È ÒàéìÔðåéìîì äîëæíî ðàáîòàòü 2 ýêñïåðòà, íàäî óñòàíîâèòü èì ðàçíûå Expert_Id
extern int L = 0;
extern double L1 = 0.1;
extern double L2 = 1000.0;
extern double L3 = 500.0;
extern double L4 = 2.0;
extern int D = 0;
extern double D1 = 0.1;
extern int StopLoss = 50; // ðàññòîÿíèå äî ÑòîïËîññà â ïóíêòàõ (0 - îòêëþ÷èòü ÑË)
extern int TakeProfit = 50; // ðàññòîÿíèå äî ÒåéêÏðîôèòà â ïóíêòàõ (0 - îòêëþ÷èòü ÒÏ)
extern string Indicator_Properties = "------Indicator-Properties-----";
//+------------------------------------------------------------------+
//| Ind1
//+------------------------------------------------------------------+
extern int Ind1_GLOBAL_Use = 1; // ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
extern int Ind1_M1_MACD_Weight = 0; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
extern int Ind1_M1_MACD_FastPeriod = 12; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ áûñòðîé ñêîëüçÿùåé ñðåäíåé
extern int Ind1_M1_MACD_SlowPeriod = 26; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ìåäëåííîé ñêîëüçÿùåé ñðåäíåé.
extern int Ind1_M1_MACD_SignalPeriod = 9; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñèãíàëüíîé ëèíèè
extern int Ind1_M1_MACD_Price = 0; // èñïîëüçóåìàÿ öåíà
extern int Ind1_M5_MACD_Weight = 0;
extern int Ind1_M5_MACD_FastPeriod = 12;
extern int Ind1_M5_MACD_SlowPeriod = 26;
extern int Ind1_M5_MACD_SignalPeriod = 9;
extern int Ind1_M5_MACD_Price = 0;
extern int Ind1_M15_MACD_Weight = 0;
extern int Ind1_M15_MACD_FastPeriod = 12;
extern int Ind1_M15_MACD_SlowPeriod = 26;
extern int Ind1_M15_MACD_SignalPeriod = 9;
extern int Ind1_M15_MACD_Price = 0;
extern int Ind1_M30_MACD_Weight = 0;
extern int Ind1_M30_MACD_FastPeriod = 12;
extern int Ind1_M30_MACD_SlowPeriod = 26;
extern int Ind1_M30_MACD_SignalPeriod = 9;
extern int Ind1_M30_MACD_Price = 0;
extern int Ind1_H1_MACD_Weight = 1;
extern int Ind1_H1_MACD_FastPeriod = 12;
extern int Ind1_H1_MACD_SlowPeriod = 26;
extern int Ind1_H1_MACD_SignalPeriod = 9;
extern int Ind1_H1_MACD_Price = 0;
extern int Ind1_H4_MACD_Weight = 0;
extern int Ind1_H4_MACD_FastPeriod = 12;
extern int Ind1_H4_MACD_SlowPeriod = 26;
extern int Ind1_H4_MACD_SignalPeriod = 9;
extern int Ind1_H4_MACD_Price = 0;
extern int Ind1_D1_MACD_Weight = 0;
extern int Ind1_D1_MACD_FastPeriod = 12;
extern int Ind1_D1_MACD_SlowPeriod = 26;
extern int Ind1_D1_MACD_SignalPeriod = 9;
extern int Ind1_D1_MACD_Price = 0;
extern int Ind1_W1_MACD_Weight = 0;
extern int Ind1_W1_MACD_FastPeriod = 12;
extern int Ind1_W1_MACD_SlowPeriod = 26;
extern int Ind1_W1_MACD_SignalPeriod = 9;
extern int Ind1_W1_MACD_Price = 0;
extern int Ind1_MN_MACD_Weight = 0;
extern int Ind1_MN_MACD_FastPeriod = 12;
extern int Ind1_MN_MACD_SlowPeriod = 26;
extern int Ind1_MN_MACD_SignalPeriod = 9;
extern int Ind1_MN_MACD_Price = 0;
//+------------------------------------------------------------------+
//| Ind2
//+------------------------------------------------------------------+
extern int Ind2_GLOBAL_Use = 1; // ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
extern int Ind2_M1_AO_Weight = 0; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
extern int Ind2_M5_AO_Weight = 0;
extern int Ind2_M15_AO_Weight = 0;
extern int Ind2_M30_AO_Weight = 0;
extern int Ind2_H1_AO_Weight = 1;
extern int Ind2_H4_AO_Weight = 0;
extern int Ind2_D1_AO_Weight = 0;
extern int Ind2_W1_AO_Weight = 0;
extern int Ind2_MN_AO_Weight = 0;
//+------------------------------------------------------------------+
//| Ind3
//+------------------------------------------------------------------+
extern int Ind3_GLOBAL_Use = 1; // ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
extern int Ind3_M1_OsMA_Weight = 0; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
extern int Ind3_M1_OsMA_FastPeriod = 12; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ áûñòðîé ñêîëüçÿùåé ñðåäíåé
extern int Ind3_M1_OsMA_SlowPeriod = 26; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ìåäëåííîé ñêîëüçÿùåé ñðåäíåé.
extern int Ind3_M1_OsMA_SignalPeriod = 9; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñèãíàëüíîé ëèíèè
extern int Ind3_M1_OsMA_Price = 0; // èñïîëüçóåìàÿ öåíà
extern int Ind3_M5_OsMA_Weight = 0;
extern int Ind3_M5_OsMA_FastPeriod = 12;
extern int Ind3_M5_OsMA_SlowPeriod = 26;
extern int Ind3_M5_OsMA_SignalPeriod = 9;
extern int Ind3_M5_OsMA_Price = 0;
extern int Ind3_M15_OsMA_Weight = 0;
extern int Ind3_M15_OsMA_FastPeriod = 12;
extern int Ind3_M15_OsMA_SlowPeriod = 26;
extern int Ind3_M15_OsMA_SignalPeriod = 9;
extern int Ind3_M15_OsMA_Price = 0;
extern int Ind3_M30_OsMA_Weight = 0;
extern int Ind3_M30_OsMA_FastPeriod = 12;
extern int Ind3_M30_OsMA_SlowPeriod = 26;
extern int Ind3_M30_OsMA_SignalPeriod = 9;
extern int Ind3_M30_OsMA_Price = 0;
extern int Ind3_H1_OsMA_Weight = 1;
extern int Ind3_H1_OsMA_FastPeriod = 12;
extern int Ind3_H1_OsMA_SlowPeriod = 26;
extern int Ind3_H1_OsMA_SignalPeriod = 9;
extern int Ind3_H1_OsMA_Price = 0;
extern int Ind3_H4_OsMA_Weight = 0;
extern int Ind3_H4_OsMA_FastPeriod = 12;
extern int Ind3_H4_OsMA_SlowPeriod = 26;
extern int Ind3_H4_OsMA_SignalPeriod = 9;
extern int Ind3_H4_OsMA_Price = 0;
extern int Ind3_D1_OsMA_Weight = 0;
extern int Ind3_D1_OsMA_FastPeriod = 12;
extern int Ind3_D1_OsMA_SlowPeriod = 26;
extern int Ind3_D1_OsMA_SignalPeriod = 9;
extern int Ind3_D1_OsMA_Price = 0;
extern int Ind3_W1_OsMA_Weight = 0;
extern int Ind3_W1_OsMA_FastPeriod = 12;
extern int Ind3_W1_OsMA_SlowPeriod = 26;
extern int Ind3_W1_OsMA_SignalPeriod = 9;
extern int Ind3_W1_OsMA_Price = 0;
extern int Ind3_MN_OsMA_Weight = 0;
extern int Ind3_MN_OsMA_FastPeriod = 12;
extern int Ind3_MN_OsMA_SlowPeriod = 26;
extern int Ind3_MN_OsMA_SignalPeriod = 9;
extern int Ind3_MN_OsMA_Price = 0;
//+------------------------------------------------------------------+
//| Ind4
//+------------------------------------------------------------------+
extern int Ind4_GLOBAL_Use = 1; // ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
extern int Ind4_M1_WPR_Weight = 0; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
extern int Ind4_M1_WPR_Period = 14; // ïåðèîä(êîëè÷åñòâî áàðîâ) äëÿ âû÷èñëåíèÿ èíäèêàòîðà
extern double Ind4_M1_WPR_DN_Level = -80; // óðîâåíü ïåðåïðîäàííîñòè
extern double Ind4_M1_WPR_UP_Level = -20; // óðîâåíü ïåðåêóïëåííîñòè
extern int Ind4_M5_WPR_Weight = 0;
extern int Ind4_M5_WPR_Period = 14;
extern double Ind4_M5_WPR_DN_Level = -80;
extern double Ind4_M5_WPR_UP_Level = -20;
extern int Ind4_M15_WPR_Weight = 0;
extern int Ind4_M15_WPR_Period = 14;
extern double Ind4_M15_WPR_DN_Level = -80;
extern double Ind4_M15_WPR_UP_Level = -20;
extern int Ind4_M30_WPR_Weight = 0;
extern int Ind4_M30_WPR_Period = 14;
extern double Ind4_M30_WPR_DN_Level = -80;
extern double Ind4_M30_WPR_UP_Level = -20;
extern int Ind4_H1_WPR_Weight = 1;
extern int Ind4_H1_WPR_Period = 14;
extern double Ind4_H1_WPR_DN_Level = -80;
extern double Ind4_H1_WPR_UP_Level = -20;
extern int Ind4_H4_WPR_Weight = 0;
extern int Ind4_H4_WPR_Period = 14;
extern double Ind4_H4_WPR_DN_Level = -80;
extern double Ind4_H4_WPR_UP_Level = -20;
extern int Ind4_D1_WPR_Weight = 0;
extern int Ind4_D1_WPR_Period = 14;
extern double Ind4_D1_WPR_DN_Level = -80;
extern double Ind4_D1_WPR_UP_Level = -20;
extern int Ind4_W1_WPR_Weight = 0;
extern int Ind4_W1_WPR_Period = 14;
extern double Ind4_W1_WPR_DN_Level = -80;
extern double Ind4_W1_WPR_UP_Level = -20;
extern int Ind4_MN_WPR_Weight = 0;
extern int Ind4_MN_WPR_Period = 14;
extern double Ind4_MN_WPR_DN_Level = -80;
extern double Ind4_MN_WPR_UP_Level = -20;
//+------------------------------------------------------------------+
//| Ind5
//+------------------------------------------------------------------+
extern int Ind5_GLOBAL_Use = 1; // ãëîáàëüíûé ôëàã èñïîëüçîâàíèÿ èíäèêàòîðà (1 - èíäèêàòîð èñïîëüçóåòñÿ, 0 - èíäèêàòîð íå èñïîëüçóåòñÿ);
extern int Ind5_M1_Stoch_Weight = 0; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
extern int Ind5_M1_Stoch_Kperiod = 5; // ïåðèîä(êîëè÷åñòâî áàðîâ) äëÿ âû÷èñëåíèÿ ëèíèè %K
extern int Ind5_M1_Stoch_Dperiod = 3; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ëèíèè %D
extern int Ind5_M1_Stoch_Slowing = 3; // çíà÷åíèå çàìåäëåíèÿ
extern int Ind5_M1_Stoch_Method = 0; // ìåòîä óñðåäíåíèÿ
extern int Ind5_M1_Stoch_Price = 0; // èñïîëüçóåìàÿ öåíà
extern double Ind5_M1_Stoch_DN_Level = 20; // óðîâåíü ïåðåïðîäàííîñòè
extern double Ind5_M1_Stoch_UP_Level = 80; // óðîâåíü ïåðåêóïëåííîñòè
extern int Ind5_M5_Stoch_Weight = 0;
extern int Ind5_M5_Stoch_Kperiod = 5;
extern int Ind5_M5_Stoch_Dperiod = 3;
extern int Ind5_M5_Stoch_Slowing = 3;
extern int Ind5_M5_Stoch_Method = 0;
extern int Ind5_M5_Stoch_Price = 0;
extern double Ind5_M5_Stoch_DN_Level = 20;
extern double Ind5_M5_Stoch_UP_Level = 80;
extern int Ind5_M15_Stoch_Weight = 0;
extern int Ind5_M15_Stoch_Kperiod = 5;
extern int Ind5_M15_Stoch_Dperiod = 3;
extern int Ind5_M15_Stoch_Slowing = 3;
extern int Ind5_M15_Stoch_Method = 0;
extern int Ind5_M15_Stoch_Price = 0;
extern double Ind5_M15_Stoch_DN_Level = 20;
extern double Ind5_M15_Stoch_UP_Level = 80;
extern int Ind5_M30_Stoch_Weight = 0;
extern int Ind5_M30_Stoch_Kperiod = 5;
extern int Ind5_M30_Stoch_Dperiod = 3;
extern int Ind5_M30_Stoch_Slowing = 3;
extern int Ind5_M30_Stoch_Method = 0;
extern int Ind5_M30_Stoch_Price = 0;
extern double Ind5_M30_Stoch_DN_Level = 20;
extern double Ind5_M30_Stoch_UP_Level = 80;
extern int Ind5_H1_Stoch_Weight = 1;
extern int Ind5_H1_Stoch_Kperiod = 5;
extern int Ind5_H1_Stoch_Dperiod = 3;
extern int Ind5_H1_Stoch_Slowing = 3;
extern int Ind5_H1_Stoch_Method = 0;
extern int Ind5_H1_Stoch_Price = 0;
extern double Ind5_H1_Stoch_DN_Level = 20;
extern double Ind5_H1_Stoch_UP_Level = 80;
extern int Ind5_H4_Stoch_Weight = 0;
extern int Ind5_H4_Stoch_Kperiod = 5;
extern int Ind5_H4_Stoch_Dperiod = 3;
extern int Ind5_H4_Stoch_Slowing = 3;
extern int Ind5_H4_Stoch_Method = 0;
extern int Ind5_H4_Stoch_Price = 0;
extern double Ind5_H4_Stoch_DN_Level = 20;
extern double Ind5_H4_Stoch_UP_Level = 80;
extern int Ind5_D1_Stoch_Weight = 0;
extern int Ind5_D1_Stoch_Kperiod = 5;
extern int Ind5_D1_Stoch_Dperiod = 3;
extern int Ind5_D1_Stoch_Slowing = 3;
extern int Ind5_D1_Stoch_Method = 0;
extern int Ind5_D1_Stoch_Price = 0;
extern double Ind5_D1_Stoch_DN_Level = 20;
extern double Ind5_D1_Stoch_UP_Level = 80;
extern int Ind5_W1_Stoch_Weight = 0;
extern int Ind5_W1_Stoch_Kperiod = 5;
extern int Ind5_W1_Stoch_Dperiod = 3;
extern int Ind5_W1_Stoch_Slowing = 3;
extern int Ind5_W1_Stoch_Method = 0;
extern int Ind5_W1_Stoch_Price = 0;
extern double Ind5_W1_Stoch_DN_Level = 20;
extern double Ind5_W1_Stoch_UP_Level = 80;
extern int Ind5_MN_Stoch_Weight = 0;
extern int Ind5_MN_Stoch_Kperiod = 5;
extern int Ind5_MN_Stoch_Dperiod = 3;
extern int Ind5_MN_Stoch_Slowing = 3;
extern int Ind5_MN_Stoch_Method = 0;
extern int Ind5_MN_Stoch_Price = 0;
extern double Ind5_MN_Stoch_DN_Level = 20;
extern double Ind5_MN_Stoch_UP_Level = 80;
#include <trade_lib&info_lib.mqh>
int SummSignal = 0;
int counted_bar = 0;
int last_trade = 0;
int Ind1_PeriodsCount = 0;
int Ind1_Periods [9];
int Ind1_MACD_Weight [9]; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
int Ind1_MACD_FastPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ áûñòðîé ñêîëüçÿùåé ñðåäíåé
int Ind1_MACD_SlowPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ìåäëåííîé ñêîëüçÿùåé ñðåäíåé.
int Ind1_MACD_SignalPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñèãíàëüíîé ëèíèè
int Ind1_MACD_Price [9]; // èñïîëüçóåìàÿ öåíà
int Ind2_PeriodsCount = 0;
int Ind2_Periods [9];
int Ind2_AO_Weight [9]; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
int Ind3_PeriodsCount = 0;
int Ind3_Periods [9];
int Ind3_OsMA_Weight [9]; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
int Ind3_OsMA_FastPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ áûñòðîé ñêîëüçÿùåé ñðåäíåé
int Ind3_OsMA_SlowPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ìåäëåííîé ñêîëüçÿùåé ñðåäíåé.
int Ind3_OsMA_SignalPeriod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ñèãíàëüíîé ëèíèè
int Ind3_OsMA_Price [9]; // èñïîëüçóåìàÿ öåíà
int Ind4_PeriodsCount = 0;
int Ind4_Periods [9];
int Ind4_WPR_Weight [9]; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
int Ind4_WPR_Period [9]; // ïåðèîä(êîëè÷åñòâî áàðîâ) äëÿ âû÷èñëåíèÿ èíäèêàòîðà
double Ind4_WPR_DN_Level [9]; // óðîâåíü ïåðåïðîäàííîñòè
double Ind4_WPR_UP_Level [9]; // óðîâåíü ïåðåêóïëåííîñòè
int Ind5_PeriodsCount = 0;
int Ind5_Periods [9];
int Ind5_Stoch_Weight [9]; // âåñ ñèãíàëà èíäèêàòîðà íà äàííîì ÒÔ (0 - èíäèêàòîð íå èñïîëüçóåòñÿ, >0 - èñïîëüçóåòñÿ);
int Ind5_Stoch_Kperiod [9]; // ïåðèîä(êîëè÷åñòâî áàðîâ) äëÿ âû÷èñëåíèÿ ëèíèè %K
int Ind5_Stoch_Dperiod [9]; // ïåðèîä óñðåäíåíèÿ äëÿ âû÷èñëåíèÿ ëèíèè %D
int Ind5_Stoch_Slowing [9]; // çíà÷åíèå çàìåäëåíèÿ
int Ind5_Stoch_Method [9]; // ìåòîä óñðåäíåíèÿ
int Ind5_Stoch_Price [9]; // èñïîëüçóåìàÿ öåíà
double Ind5_Stoch_DN_Level [9]; // óðîâåíü ïåðåïðîäàííîñòè
double Ind5_Stoch_UP_Level [9]; // óðîâåíü ïåðåêóïëåííîñòè
int init()
{
TradeInfoLib_Initialization ( Expert_Id, "MultiIndicatorOptimizer" );
// çàïèñûâàåì âñå "ðàáî÷èå" ÒÔ â ìàññèâû äëÿ óäîáñòâà àíàëèçà
Ind1_PeriodsCount = 0;
if ( Ind1_GLOBAL_Use == 1 )
{
if ( Ind1_MN_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_MN1;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_MN_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_MN_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_MN_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_MN_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_MN_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_W1_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_W1;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_W1_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_W1_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_W1_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_W1_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_W1_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_D1_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_D1;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_D1_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_D1_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_D1_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_D1_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_D1_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_H4_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_H4;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_H4_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_H4_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_H4_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_H4_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_H4_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_H1_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_H1;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_H1_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_H1_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_H1_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_H1_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_H1_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_M30_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_M30;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_M30_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_M30_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_M30_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_M30_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_M30_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_M15_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_M15;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_M15_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_M15_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_M15_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_M15_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_M15_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_M5_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_M5;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_M5_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_M5_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_M5_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_M5_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_M5_MACD_Price;
Ind1_PeriodsCount ++;
}
if ( Ind1_M1_MACD_Weight != 0 )
{
Ind1_Periods [Ind1_PeriodsCount] = PERIOD_M1;
Ind1_MACD_Weight [Ind1_PeriodsCount] = Ind1_M1_MACD_Weight;
Ind1_MACD_FastPeriod [Ind1_PeriodsCount] = Ind1_M1_MACD_FastPeriod;
Ind1_MACD_SlowPeriod [Ind1_PeriodsCount] = Ind1_M1_MACD_SlowPeriod;
Ind1_MACD_SignalPeriod [Ind1_PeriodsCount] = Ind1_M1_MACD_SignalPeriod;
Ind1_MACD_Price [Ind1_PeriodsCount] = Ind1_M1_MACD_Price;
Ind1_PeriodsCount ++;
}
}
if ( Ind2_GLOBAL_Use == 1)
{
Ind2_PeriodsCount = 0;
if ( Ind2_MN_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_MN1;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_MN_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_W1_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_W1;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_W1_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_D1_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_D1;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_D1_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_H4_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_H4;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_H4_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_H1_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_H1;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_H1_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_M30_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_M30;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_M30_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_M15_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_M15;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_M15_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_M5_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_M5;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_M5_AO_Weight;
Ind2_PeriodsCount ++;
}
if ( Ind2_M1_AO_Weight != 0 )
{
Ind2_Periods [Ind2_PeriodsCount] = PERIOD_M1;
Ind2_AO_Weight [Ind2_PeriodsCount] = Ind2_M1_AO_Weight;
Ind2_PeriodsCount ++;
}
}
if ( Ind3_GLOBAL_Use == 1)
{
Ind3_PeriodsCount = 0;
if ( Ind3_MN_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_MN1;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_MN_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_MN_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_MN_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_MN_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_MN_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_W1_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_W1;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_W1_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_W1_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_W1_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_W1_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_W1_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_D1_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_D1;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_D1_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_D1_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_D1_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_D1_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_D1_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_H4_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_H4;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_H4_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_H4_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_H4_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_H4_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_H4_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_H1_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_H1;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_H1_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_H1_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_H1_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_H1_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_H1_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_M30_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_M30;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_M30_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_M30_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_M30_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_M30_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_M30_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_M15_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_M15;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_M15_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_M15_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_M15_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_M15_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_M15_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_M5_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_M5;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_M5_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_M5_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_M5_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_M5_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_M5_OsMA_Price;
Ind3_PeriodsCount ++;
}
if ( Ind3_M1_OsMA_Weight != 0 )
{
Ind3_Periods [Ind3_PeriodsCount] = PERIOD_M1;
Ind3_OsMA_Weight [Ind3_PeriodsCount] = Ind3_M1_OsMA_Weight;
Ind3_OsMA_FastPeriod [Ind3_PeriodsCount] = Ind3_M1_OsMA_FastPeriod;
Ind3_OsMA_SlowPeriod [Ind3_PeriodsCount] = Ind3_M1_OsMA_SlowPeriod;
Ind3_OsMA_SignalPeriod [Ind3_PeriodsCount] = Ind3_M1_OsMA_SignalPeriod;
Ind3_OsMA_Price [Ind3_PeriodsCount] = Ind3_M1_OsMA_Price;
Ind3_PeriodsCount ++;
}
}
if ( Ind4_GLOBAL_Use == 1)
{
Ind4_PeriodsCount = 0;
if ( Ind4_MN_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_MN1;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_MN_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_MN_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_MN_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_MN_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_W1_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_W1;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_W1_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_W1_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_W1_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_W1_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_D1_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_D1;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_D1_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_D1_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_D1_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_D1_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_H4_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_H4;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_H4_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_H4_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_H4_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_H4_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_H1_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_H1;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_H1_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_H1_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_H1_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_H1_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_M30_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_M30;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_M30_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_M30_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_M30_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_M30_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_M15_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_M15;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_M15_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_M15_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_M15_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_M15_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_M5_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_M5;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_M5_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_M5_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_M5_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_M5_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
if ( Ind4_M1_WPR_Weight != 0 )
{
Ind4_Periods [Ind4_PeriodsCount] = PERIOD_M1;
Ind4_WPR_Weight [Ind4_PeriodsCount] = Ind4_M1_WPR_Weight;
Ind4_WPR_Period [Ind4_PeriodsCount] = Ind4_M1_WPR_Period;
Ind4_WPR_DN_Level [Ind4_PeriodsCount] = Ind4_M1_WPR_DN_Level;
Ind4_WPR_UP_Level [Ind4_PeriodsCount] = Ind4_M1_WPR_UP_Level;
Ind4_PeriodsCount ++;
}
}
if ( Ind5_GLOBAL_Use == 1)
{
Ind5_PeriodsCount = 0;
if ( Ind5_MN_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_MN1;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_MN_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_MN_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_MN_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_MN_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_MN_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_MN_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_MN_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_MN_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_W1_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_W1;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_W1_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_W1_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_W1_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_W1_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_W1_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_W1_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_W1_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_W1_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_D1_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_D1;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_D1_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_D1_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_D1_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_D1_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_D1_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_D1_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_D1_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_D1_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_H4_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_H4;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_H4_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_H4_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_H4_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_H4_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_H4_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_H4_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_H4_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_H4_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_H1_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_H1;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_H1_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_H1_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_H1_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_H1_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_H1_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_H1_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_H1_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_H1_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_M30_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_M30;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_M30_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_M30_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_M30_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_M30_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_M30_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_M30_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_M30_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_M30_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_M15_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_M15;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_M15_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_M15_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_M15_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_M15_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_M15_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_M15_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_M15_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_M15_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_M5_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_M5;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_M5_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_M5_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_M5_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_M5_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_M5_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_M5_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_M5_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_M5_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
if ( Ind5_M1_Stoch_Weight != 0 )
{
Ind5_Periods [Ind5_PeriodsCount] = PERIOD_M1;
Ind5_Stoch_Weight [Ind5_PeriodsCount] = Ind5_M1_Stoch_Weight;
Ind5_Stoch_Kperiod [Ind5_PeriodsCount] = Ind5_M1_Stoch_Kperiod;
Ind5_Stoch_Dperiod [Ind5_PeriodsCount] = Ind5_M1_Stoch_Dperiod;
Ind5_Stoch_Slowing [Ind5_PeriodsCount] = Ind5_M1_Stoch_Slowing;
Ind5_Stoch_Method [Ind5_PeriodsCount] = Ind5_M1_Stoch_Method;
Ind5_Stoch_Price [Ind5_PeriodsCount] = Ind5_M1_Stoch_Price;
Ind5_Stoch_DN_Level [Ind5_PeriodsCount] = Ind5_M1_Stoch_DN_Level;
Ind5_Stoch_UP_Level [Ind5_PeriodsCount] = Ind5_M1_Stoch_UP_Level;
Ind5_PeriodsCount ++;
}
}
return(0);
}
int deinit()
{
TradeInfoLib_Deinitialization();
return(0);
}
int start()
{
if ( !IsOK() ) return;
// - åñëè ýêâèòè ñòàíîâèòñÿ áîëüøå Ë2*Ë4, Ë2 óâåëè÷èâàåòñÿ â Ë4 ðàç.
while ( AccountEquity() >= L2*L4 ) L2 *= L4;
find_signal(); // àíàëèçèðóåì èíäèêàòîðû
trade_control(); // óïðàâëÿåì ïîçèöèÿìè
return(0);
}
void find_signal()
{
// ðàáîòàåì òîëüêî ïðè ïîÿâëåíèè íîâîãî áàðà íà ñàìîì ìëàäøåì èç àíàëèçèðóåìûõ ÒÔ
if ( Time[0] <= counted_bar ) return;
counted_bar = Time[0];
SummSignal = 0;
int p, p_signal_1, p_signal_2;
// Ïî âñåì âêëþ÷åííûì èíäèêàòîðàì/ÒÔ ýêñïåðò íàõîäèò 2 ñèãíàëà.
for ( p = 0; p < Ind1_PeriodsCount; p ++ )
{
p_signal_1 = 0; p_signal_2 = 0;
// MACD:
double macd_m = iMACD( _Symbol, Ind1_Periods[p], Ind1_MACD_FastPeriod[p], Ind1_MACD_SlowPeriod[p], Ind1_MACD_SignalPeriod[p], Ind1_MACD_Price[p], MODE_MAIN, 1 );
double macd_s = iMACD( _Symbol, Ind1_Periods[p], Ind1_MACD_FastPeriod[p], Ind1_MACD_SlowPeriod[p], Ind1_MACD_SignalPeriod[p], Ind1_MACD_Price[p], MODE_SIGNAL, 1 );
// ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
if ( macd_m > 0.0 ) p_signal_1 = 1;
if ( macd_m < 0.0 ) p_signal_1 = -1;
// ñèãíàë2 - èíäèêàòîð âûøå ñèãíàëüíîé ëèíèè çíà÷åíèå +1, èíäèêàòîð íèæå ñèãíàëüíîé ëèíèè çíà÷åíèå -1;
if ( macd_m > macd_s ) p_signal_2 = 1;
if ( macd_m < macd_s ) p_signal_2 = -1;
// Ñèãíàë ïî èíäèêàòîðó/ÒÔ ðàñ÷èòûâàåòñÿ êàê (ñèãíàë1 + ñèãíàë2) / 2 * "ÒÔ_Á".
// Ñóììàðíûì (èòîãîâûì) ñèãíàëîì ÿâëÿåòñÿ ñóììà âñåõ ñèãíàëîâ ïî èíäèêàòîðàì/ÒÔ.
SummSignal += (p_signal_1 + p_signal_2) / 2.0 * Ind1_MACD_Weight[p];
}
for ( p = 0; p < Ind2_PeriodsCount; p ++ )
{
p_signal_1 = 0; p_signal_2 = 0;
// Awesome Oscillator:
double ao_1 = iAO( _Symbol, Ind2_Periods[p], 1 );
double ao_2 = iAO( _Symbol, Ind2_Periods[p], 2 );
// ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
if ( ao_1 > 0.0 ) p_signal_1 = 1;
if ( ao_1 < 0.0 ) p_signal_1 = -1;
// ñèãíàë2 - èíäèêàòîð çåëåíîãî öâåòà çíà÷åíèå +1, èíäèêàòîð êðàñíîãî öâåòà çíà÷åíèå -1;
if ( ao_1 > ao_2 ) p_signal_2 = 1;
if ( ao_1 < ao_2 ) p_signal_2 = -1;
SummSignal += (p_signal_1 + p_signal_2) / 2.0 * Ind2_AO_Weight[p];
}
for ( p = 0; p < Ind3_PeriodsCount; p ++ )
{
p_signal_1 = 0; p_signal_2 = 0;
// Moving Average of Oscillator:
double osma_1 = iOsMA( _Symbol, Ind3_Periods[p], Ind3_OsMA_FastPeriod[p], Ind3_OsMA_SlowPeriod[p], Ind3_OsMA_SignalPeriod[p], Ind3_OsMA_Price[p], 1 );
// ñèãíàë1 - èíäèêàòîð âûøå íóëåâîé ëèíèè çíà÷åíèå=+1, èíäèêàòîð íèæå íóëåâîé ëèíèè çíà÷åíèå=-1;
if ( osma_1 > 0.0 ) p_signal_1 = 1;
if ( osma_1 < 0.0 ) p_signal_1 = -1;
// ñèãíàë2 íå ïðåäóñìîòðåí.
p_signal_2 = p_signal_1;
SummSignal += (p_signal_1 + p_signal_2) / 2.0 * Ind3_OsMA_Weight[p];
}
for ( p = 0; p < Ind4_PeriodsCount; p ++ )
{
p_signal_1 = 0; p_signal_2 = 0;
// Williams' Percent Range:
double wpr_1 = iWPR( _Symbol, Ind4_Periods[p], Ind4_WPR_Period[p], 1 );
double wpr_2 = iWPR( _Symbol, Ind4_Periods[p], Ind4_WPR_Period[p], 2 );
// ñèãíàë1 - èíäèêàòîð ïåðåñåêàåò ëèíèþ ïåðåïðîäàííîñòè ââåðõ=+1, èíäèêàòîð ïåðåñåêàåò ëèíèþ ïåðåêóïëèííîñòè âíèç=-1;
if ( wpr_1 > Ind4_WPR_DN_Level[p] && wpr_2 <= Ind4_WPR_DN_Level[p] ) p_signal_1 = 1;
if ( wpr_1 < Ind4_WPR_UP_Level[p] && wpr_2 >= Ind4_WPR_UP_Level[p] ) p_signal_1 = -1;
// ñèãíàë2 íå ïðåäóñìîòðåí.
p_signal_2 = p_signal_1;
SummSignal += (p_signal_1 + p_signal_2) / 2.0 * Ind4_WPR_Weight[p];
}
for ( p = 0; p < Ind5_PeriodsCount; p ++ )
{
p_signal_1 = 0; p_signal_2 = 0;
// Stochastic Oscillator:
double sto_m_1 = iStochastic( _Symbol, Ind5_Periods[p], Ind5_Stoch_Kperiod[p], Ind5_Stoch_Dperiod[p], Ind5_Stoch_Slowing[p], Ind5_Stoch_Method[p], Ind5_Stoch_Price[p], MODE_MAIN, 1 );
double sto_m_2 = iStochastic( _Symbol, Ind5_Periods[p], Ind5_Stoch_Kperiod[p], Ind5_Stoch_Dperiod[p], Ind5_Stoch_Slowing[p], Ind5_Stoch_Method[p], Ind5_Stoch_Price[p], MODE_MAIN, 2 );
double sto_s_1 = iStochastic( _Symbol, Ind5_Periods[p], Ind5_Stoch_Kperiod[p], Ind5_Stoch_Dperiod[p], Ind5_Stoch_Slowing[p], Ind5_Stoch_Method[p], Ind5_Stoch_Price[p], MODE_SIGNAL, 1 );
// ñèãíàë1 - %K ïåðåñåêàåò ëèíèþ ïåðåïðîäàííîñòè ââåðõ=+1, %K ïåðåñåêàåò ëèíèþ ïåðåêóïëèííîñòè âíèç=-1;
if ( sto_m_1 > Ind5_Stoch_DN_Level[p] && sto_m_2 <= Ind5_Stoch_DN_Level[p] ) p_signal_1 = 1;
if ( sto_m_1 < Ind5_Stoch_UP_Level[p] && sto_m_2 >= Ind5_Stoch_UP_Level[p] ) p_signal_1 = -1;
// ñèãíàë2 - %K âûøå %D = +1, %K íèæå %D = -1.
if ( sto_m_1 > sto_s_1 ) p_signal_2 = 1;
if ( sto_m_1 < sto_s_1 ) p_signal_2 = -1;
SummSignal += (p_signal_1 + p_signal_2) / 2.0 * Ind5_Stoch_Weight[p];
}
}
//+------------------------------------------------------------------+
//| Ô-öèÿ êîíòðîëÿ îòêðûòûõ ïîçèöèé |
//+------------------------------------------------------------------+
void trade_control()
{
int _OrdersTotal = OrdersTotal(), _GetLastError, type; bool opened_b = false, opened_s = false, error = false; double SLTP_k, _StopLossLevel, _TakeProfitLevel;
for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError, " ( ", ErrorDescription( _GetLastError ), " )" );
continue;
}
if ( OrderMagicNumber() != _MagicNumber ) continue;
if ( OrderSymbol() != _Symbol ) continue;
type = OrderType();
// Ñîïðîâîæäåíèå ïîçèöèé:
// - åñëè "Ä" = 1, è åñòü îòêðûòàÿ ïîçèöèÿ:
// - ðàñ÷èòûâàåì íîâûå ÑË/ÒÏ äëÿ ïîçèöèè ïî ôîðìóëå: "óêàçàííûé ÑË(ÒÏ) * Èòîãîâûé ñèãíàë * Ä1" (îòñ÷åò îò öåíû îòêðûòèÿ ïîçèöèè);
// - åñëè öåíà âûøëà çà íîâûå çíà÷åíèÿ ÑË èëè ÒÏ, çàêðûâàåì ïîçèöèþ;
// - åñëè ÑË èëè ÒÏ ïîçèöèè íå ðàâíû ðàñ÷èòàííûì çíà÷åíèÿì, ìîäèôèöèðóåì èõ.
if ( type == OP_BUY )
{
opened_b = true;
if ( D == 1 && SummSignal != 0 )
{
SLTP_k = SummSignal * D1;
if ( StopLoss > 0 )
{ _StopLossLevel = NormalizeDouble( OrderOpenPrice() - StopLoss*SLTP_k*_Point, _Digits ); }
else
{ _StopLossLevel = 0.0; }
if ( TakeProfit > 0 )
{ _TakeProfitLevel = NormalizeDouble( OrderOpenPrice() + TakeProfit*SLTP_k*_Point, _Digits ); }
else
{ _TakeProfitLevel = 0.0; }
if ( _StopLossLevel > _Point/2.0 && NormalizeDouble( _StopLossLevel - Bid, _Digits ) >= 0.0 )
{
Print( "SL for buy order #", OrderTicket(), " (", DoubleToStr( _StopLossLevel, _Digits ), ")!" );
if ( _OrderClose( OrderTicket() ) < 0 ) error = true;
continue;
}
if ( _TakeProfitLevel > _Point/2.0 && NormalizeDouble( Bid - _TakeProfitLevel, _Digits ) >= 0.0 )
{
Print( "TP for buy order #", OrderTicket(), " (", DoubleToStr( _TakeProfitLevel, _Digits ), ")!" );
if ( _OrderClose( OrderTicket() ) < 0 ) error = true;
continue;
}
if ( NormalizeDouble( MathAbs( _StopLossLevel - OrderStopLoss() ), _Digits ) > _Point/2.0 || NormalizeDouble( MathAbs( _TakeProfitLevel - OrderTakeProfit() ), _Digits ) > _Point/2.0 )
{
Print( "New SL/TP for buy order #", OrderTicket(), " (", DoubleToStr( _StopLossLevel, _Digits ), "/", DoubleToStr( _TakeProfitLevel, _Digits ), ")!" );
_OrderModify( OrderTicket(), OrderOpenPrice(), _StopLossLevel, _TakeProfitLevel );
continue;
}
}
}
if ( type == OP_SELL )
{
opened_s = true;
if ( D == 1 && SummSignal != 0 )
{
SLTP_k = -SummSignal * D1;
if ( StopLoss > 0 )
{ _StopLossLevel = NormalizeDouble( OrderOpenPrice() + StopLoss*SLTP_k*_Point, _Digits ); }
else
{ _StopLossLevel = 0.0; }
if ( TakeProfit > 0 )
{ _TakeProfitLevel = NormalizeDouble( OrderOpenPrice() - TakeProfit*SLTP_k*_Point, _Digits ); }
else
{ _TakeProfitLevel = 0.0; }
if ( _StopLossLevel > _Point/2.0 && NormalizeDouble( Ask - _StopLossLevel, _Digits ) >= 0.0 )
{
Print( "SL for sell order #", OrderTicket(), " (", DoubleToStr( _StopLossLevel, _Digits ), ")!" );
if ( _OrderClose( OrderTicket() ) < 0 ) error = true;
continue;
}
if ( _TakeProfitLevel > _Point/2.0 && NormalizeDouble( _TakeProfitLevel - Ask, _Digits ) >= 0.0 )
{
Print( "TP for sell order #", OrderTicket(), " (", DoubleToStr( _TakeProfitLevel, _Digits ), ")!" );
if ( _OrderClose( OrderTicket() ) < 0 ) error = true;
continue;
}
if ( NormalizeDouble( MathAbs( _StopLossLevel - OrderStopLoss() ), _Digits ) > _Point/2.0 || NormalizeDouble( MathAbs( _TakeProfitLevel - OrderTakeProfit() ), _Digits ) > _Point/2.0 )
{
Print( "New SL/TP for sell order #", OrderTicket(), " (", DoubleToStr( _StopLossLevel, _Digits ), "/", DoubleToStr( _TakeProfitLevel, _Digits ), ")!" );
_OrderModify( OrderTicket(), OrderOpenPrice(), _StopLossLevel, _TakeProfitLevel );
continue;
}
}
}
}
// Òîðãîâëÿ:
// - åñëè èòîãîâûé ñèãíàë áîëüøå 0 è íåò áàé-ïîçèöèè, îòêðûâàåì áàé;
// - åñëè èòîãîâûé ñèãíàë ìåíüøå 0 è íåò ñåëë-ïîçèöèè, îòêðûâàåì ñåëë.
if ( !opened_b && SummSignal > 0 ) OpenBuy ();
if ( !opened_s && SummSignal < 0 ) OpenSell();
if ( !error ) SummSignal = 0;
}
int OpenBuy()
{
if ( Time[0] <= last_trade ) return(0);
double _OpenPriceLevel, _StopLossLevel, _TakeProfitLevel;
_OpenPriceLevel = NormalizeDouble( Ask, _Digits );
// - ÑË è ÒÏ:
// - åñëè "Ä" = 0, ÑË è ÒÏ áóäóò ðàâíû ñîîòâåòñòâóþùèì âíåøíèì ïåðåìåííûì;
// - åñëè "Ä" = 1, ÑË è ÒÏ ðàñ÷èòûâàþòñÿ ïî ôîðìóëå: "óêàçàííûé ÑË(ÒÏ) * Èòîãîâûé ñèãíàë * Ä1";
double SLTP_k = 1.0;
if ( D == 1 ) SLTP_k = SummSignal * D1;
if ( StopLoss > 0 )
{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel - StopLoss*SLTP_k*_Point, _Digits ); }
else
{ _StopLossLevel = 0.0; }
if ( TakeProfit > 0 )
{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel + TakeProfit*SLTP_k*_Point, _Digits ); }
else
{ _TakeProfitLevel = 0.0; }
// - Ðàçìåð ëîòà:
// - åñëè "Ë" = 0, èñïîëüçóåòñÿ óêàçàííûé ðàçìåð ëîòà ("Ë1");
// - åñëè "Ë" = 1, ëîò ðàñ÷èòûâàåòñÿ ïî ôîðìóëå: "(Ýêâèòè - Ë2) / Ë3 * Ë1", íî íå ìåíüøå "Ë1";
// - åñëè ýêâèòè ñòàíîâèòñÿ áîëüøå Ë2*Ë4, Ë2 óâåëè÷èâàåòñÿ â Ë4 ðàç.
double lot = L1;
if ( L == 1 ) lot = MathMax( (AccountEquity() - L2) / L3 * L1, L1 );
double MinLot = MarketInfo( _Symbol, MODE_MINLOT );
double MaxLot = MarketInfo( _Symbol, MODE_MAXLOT );
double LotStep = MarketInfo( _Symbol, MODE_LOTSTEP );
lot = NormalizeDouble( lot / LotStep, 0 ) * LotStep;
if ( lot < MinLot ) lot = MinLot;
if ( lot > MaxLot ) lot = MaxLot;
int res = _OrderSend ( _Symbol, OP_BUY, lot, _OpenPriceLevel, Slippage, _StopLossLevel, _TakeProfitLevel, "", _MagicNumber );
if ( res < 0 )
{
Alert( strComment, ": îøèáêà ïðè îòêðûòèè BUY-ïîçèöèè!!!" );
}
else
{
SummSignal = 0;
last_trade = Time[0];
}
return( res );
}
int OpenSell()
{
if ( Time[0] <= last_trade ) return(0);
double _OpenPriceLevel, _StopLossLevel, _TakeProfitLevel;
_OpenPriceLevel = NormalizeDouble( Bid, _Digits );
// - ÑË è ÒÏ:
// - åñëè "Ä" = 0, ÑË è ÒÏ áóäóò ðàâíû ñîîòâåòñòâóþùèì âíåøíèì ïåðåìåííûì;
// - åñëè "Ä" = 1, ÑË è ÒÏ ðàñ÷èòûâàþòñÿ ïî ôîðìóëå: "óêàçàííûé ÑË(ÒÏ) * Èòîãîâûé ñèãíàë * Ä1";
double SLTP_k = 1.0;
if ( D == 1 ) SLTP_k = -SummSignal * D1;
if ( StopLoss > 0 )
{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel + StopLoss*SLTP_k*_Point, _Digits ); }
else
{ _StopLossLevel = 0.0; }
if ( TakeProfit > 0 )
{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel - TakeProfit*SLTP_k*_Point, _Digits ); }
else
{ _TakeProfitLevel = 0.0; }
// - Ðàçìåð ëîòà:
// - åñëè "Ë" = 0, èñïîëüçóåòñÿ óêàçàííûé ðàçìåð ëîòà ("Ë1");
// - åñëè "Ë" = 1, ëîò ðàñ÷èòûâàåòñÿ ïî ôîðìóëå: "(Ýêâèòè - Ë2) / Ë3 * Ë1", íî íå ìåíüøå "Ë1";
// - åñëè ýêâèòè ñòàíîâèòñÿ áîëüøå Ë2*Ë4, Ë2 óâåëè÷èâàåòñÿ â Ë4 ðàç.
double lot = L1;
if ( L == 1 ) lot = MathMax( (AccountEquity() - L2) / L3 * L1, L1 );
double MinLot = MarketInfo( _Symbol, MODE_MINLOT );
double MaxLot = MarketInfo( _Symbol, MODE_MAXLOT );
double LotStep = MarketInfo( _Symbol, MODE_LOTSTEP );
lot = NormalizeDouble( lot / LotStep, 0 ) * LotStep;
if ( lot < MinLot ) lot = MinLot;
if ( lot > MaxLot ) lot = MaxLot;
int res = _OrderSend ( _Symbol, OP_SELL, lot, _OpenPriceLevel, Slippage, _StopLossLevel, _TakeProfitLevel, "", _MagicNumber );
if ( res < 0 )
{
Alert( strComment, ": îøèáêà ïðè îòêðûòèè SELL-ïîçèöèè!!!" );
}
else
{
SummSignal = 0;
last_trade = Time[0];
}
return( res );
}
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
---