//+------------------------------------------------------------------+ //| 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 ); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
MACD Histogram
Bill Williams Awesome oscillator
Moving Average of Oscillator
Larry William percent range indicator
Stochastic oscillator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features:
It issuies visual alerts to the screen