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 );
}





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