Как сделать выводить arrow на иcтории - страница 2

 

Всем привет! Вот новый код уже индикатора,но только не могу понять чего делаю не так, выставляет не на все график метки и те индикаторы которые ставит ,ставит не там где ожидалось бы. Задумка получить на каждом баре индикацию красного цвета при условии,что MACD на всех ТФ выбранных в настройках, ниже нуля, а зеленые индикации ставит на каждом баре когда MACD на ТФ выбранных в настройках, выше нуля.В приложении индикатор и настройки в шаблоне мт4. Заранее благодарю за помощь

//+------------------------------------------------------------------+
//|                                                       iarrow.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Green
#property indicator_width1 2
#property indicator_width2 2

extern ENUM_TIMEFRAMES timeframe1 = PERIOD_CURRENT;
extern ENUM_TIMEFRAMES timeframe2 = PERIOD_CURRENT;
extern ENUM_TIMEFRAMES timeframe3 = PERIOD_CURRENT;


double BufferRed[];
double BufferGreen[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, BufferRed);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexBuffer(1, BufferGreen);
   SetIndexStyle(1, DRAW_ARROW);
//---
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for (int i=0; i<Bars; i++) {
     if(
     iMACD(NULL,timeframe1,12,26,9,PRICE_CLOSE,MODE_MAIN,i)<0
          && iMACD(NULL,timeframe2,12,26,9,PRICE_CLOSE,MODE_MAIN,i)<0
          && iMACD(NULL,timeframe3,12,26,9,PRICE_CLOSE,MODE_MAIN,i)<0
     ) {
       BufferRed[i] = High[i];
     }
     
     if(
     iMACD(NULL,timeframe1,12,26,9,PRICE_CLOSE,MODE_MAIN,i)>0
     && iMACD(NULL,timeframe2,12,26,9,PRICE_CLOSE,MODE_MAIN,i)>0
     && iMACD(NULL,timeframe3,12,26,9,PRICE_CLOSE,MODE_MAIN,i)>0
     ) {
        BufferGreen[i] = Low[i];
     }
  }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Причина обращения: