//-------------------------------------------------------------------- // impuls.mq4 //--------------------------------------------------------------- 1 -- #property copyright "Copyright © Roman Shiredchenko, 2009" //-------------------------------------------------------------------- #property indicator_separate_window // индикатор рисуется в отдельном окне #property indicator_buffers 3 // кол-во буферов для расчета индикатора #property indicator_color1 Gray // запрет на продажу либо покупку снят #property indicator_color2 Green // запрет на игру на понижение #property indicator_color3 Red // запрет на игру на повышение //---- indicator parameters extern int History =5000; // кол-во баров расчетной истории extern int Period_Ema=13; // период расчетной ема extern int Period_Macd1=12; // параметры расчета масди extern int Period_Macd2=26; extern int Period_Macd3=9; double ExtBuffer0[]; // определение массивов для индикатора - гистограммы double ExtBuffer1[]; double ExtBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); IndicatorShortName("impuls"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here //---- return(0); } //---------------------------------------------------------------- int start() // Специальная функция start() { //----------------------------------------------------------------- double EMA1, EMA2, SumEMA; // 2 МА для расчета значений индикатора EMA double M_0, M_1, SumMacd ; // Значение MAIN MACD на 0 и 1 барах //--------------------------------------------------------------- 4 -- int i, // Индекс бара n, // Формальн. параметр(индекс бара) Counted_bars; // Количество просчитанных баров //-------------------------------------------------------------- 10 -- Counted_bars=IndicatorCounted(); // Количество просчитанных баров i=Bars-Counted_bars-1; // Индекс первого непосчитанного if (i>History-1) // Если много баров то .. i=History-1; // ..рассчитывать заданное колич. //-------------------------------------------------------------- 11 -- ExtBuffer1[i] = 0; // обнуление значений массивов линий индикатора ExtBuffer2[i] = 0; ExtBuffer0[i] = 0; while(i>=0) // Цикл по непосчитанным барам { //-------------------------------------------------------- 12 -- EMA1=iMA(NULL,0,Period_Ema,0,MODE_EMA,PRICE_CLOSE,i); // Значение EМА1 current EMA2=iMA(NULL,0,Period_Ema,0,MODE_EMA,PRICE_CLOSE,i+1); // Значение EМА2 prev SumEMA = 0; SumEMA = EMA1 - EMA2; // вычисление разности ема на тек. и предыдущем барах M_0=iMACD(NULL,0,Period_Macd1,Period_Macd2,Period_Macd3,PRICE_CLOSE,MODE_MAIN,i); // M_1=iMACD(NULL,0,Period_Macd1,Period_Macd2,Period_Macd3,PRICE_CLOSE,MODE_MAIN,i+1); // SumMacd=M_0-M_1; // тоже самое для макда ExtBuffer1[i] = 0; ExtBuffer2[i] = 0; ExtBuffer0[i] = 0; if (SumEMA>0 && SumMacd>0) ExtBuffer1[i] = 4; // если и ема и масди растут, то рисуй зеленую линию гистограммы равную 4 if (SumEMA<0 && SumMacd<0) // если ема и макди уменьшаются, то рисуй красную лин гистограммы равную 2 { ExtBuffer2[i] = 2; } else ExtBuffer0[i] = 3; // иначе рисуй серую линию гистограммы индикатора импульс //-------------------------------------------------------- 13 -- i--; // Расчёт индекса следующего бара //-------------------------------------------------------- 14 -- } return; // Выход из спец. ф-ии start() } //-------------------------------------------------------------- 15 --