DRAW_COLOR_ARROW не перекрашивается

 

Доброго времени суток!


Прошу подсказать почему не перекрашивается цвет индикатора?

#property indicator_label1 "Symbol_1"

#property indicator_type1 DRAW_COLOR_ARROW


double bufferSymbol1[];

double bufferSymbolColor1[];


int chartBars = 2200;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

    {

//--- indicator buffers mapping

//---


     SetIndexBuffer(0, bufferSymbol1, INDICATOR_DATA);

     SetIndexBuffer(1, bufferSymbolColor1, INDICATOR_COLOR_INDEX);


     PlotIndexSetInteger(0, PLOT_ARROW, 111);


     PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);

     PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 3);

     PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, clrMediumAquamarine);

     PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, clrBlack);

     PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, clrSandyBrown);


     ArraySetAsSeries(bufferSymbol1, true);


     IndicatorSetInteger(INDICATOR_DIGITS, 2);

     IndicatorSetInteger(INDICATOR_FIXED_MAXIMUM, true);

     IndicatorSetInteger(INDICATOR_FIXED_MINIMUM, true);

     IndicatorSetDouble(INDICATOR_MAXIMUM, 100);

     IndicatorSetDouble(INDICATOR_MINIMUM, 0);

//---

     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 c = 0; c < chartBars; c++)

         {

          if(iClose(_Symbol, PERIOD_CURRENT, c) > iClose(_Symbol, PERIOD_CURRENT, c + 1))

              {

               bufferSymbol1[c] = 50;

               bufferSymbolColor1[c]=0;

              }

          else

              {

               bufferSymbol1[c] = 15;

               bufferSymbolColor1[c]=1;

              }

         }

//--- return value of prev_calculated for next call

     return(rates_total);

    }

Смена положения работает, а цвет не меняется.


 
Petr Zharuk:

Доброго времени суток!

Прошу подсказать почему не перекрашивается цвет индикатора?

Смена положения работает, а цвет не меняется.

#property indicator_plots 1
#property indicator_buffers 2


#property indicator_separate_window
#property indicator_plots 1
#property indicator_buffers 2
#property indicator_label1 "Symbol_1"
#property indicator_type1 DRAW_COLOR_ARROW

double bufferSymbol1[];
double bufferSymbolColor1[];
int chartBars = 2200;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0, bufferSymbol1, INDICATOR_DATA);
   SetIndexBuffer(1, bufferSymbolColor1, INDICATOR_COLOR_INDEX);

   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
   PlotIndexSetInteger(0, PLOT_ARROW, 111);
   PlotIndexSetInteger(0, PLOT_COLOR_INDEXES, 3);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, clrMediumAquamarine);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, clrBlack);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, clrSandyBrown);

   //ArraySetAsSeries(bufferSymbol1, true);

   IndicatorSetInteger(INDICATOR_DIGITS, 2);
   IndicatorSetInteger(INDICATOR_FIXED_MAXIMUM, true);
   IndicatorSetInteger(INDICATOR_FIXED_MINIMUM, true);
   IndicatorSetDouble(INDICATOR_MAXIMUM, 100);
   IndicatorSetDouble(INDICATOR_MINIMUM, 0);
//---
   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[])
  {
   int limit = prev_calculated - 1;
   if(prev_calculated <= 0)
      limit = 1;

   for(int c = limit; c < rates_total; c++)
     {
      if(iClose(_Symbol, PERIOD_CURRENT, c) > iClose(_Symbol, PERIOD_CURRENT, c - 1))
        {
         bufferSymbol1[c] = 50;
         bufferSymbolColor1[c] = 0;
        }
      else
        {
         bufferSymbol1[c] = 15;
         bufferSymbolColor1[c] = 1;
        }
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:


Доброго времени!


Значительные изменения я увидел только в кол-ве расчетов баров.

В вашем коде ведется расчет всех доступных баров, я же хочу рассчитывать последние 2200.

Не ужели в этом нюанс прорисовки?

 
Petr Zharuk #:

Доброго времени!

Значительные изменения я увидел только в кол-ве расчетов баров.

В вашем коде ведется расчет всех доступных баров, я же хочу рассчитывать последние 2200.

Не ужели в этом нюанс прорисовки?

Весь нюанс указан в начале сообщения.

#property indicator_plots 1
#property indicator_buffers 2

Код я добавил потом, так на всякий случай, чтоб понятнее было.

Оказалось зря добавил)))

Ваш код выдавал ошибку "выход за пределы массива" мне лениво было смотреть код, поэтому сделал как мне удобнее.


ArraySetAsSeries(bufferSymbol1, true);

Почему только один буфер разворачиваете шиворот навыворот, а второй оставляете обычным? 

 
Aleksandr Slavskii #:

Весь нюанс указан в начале сообщения.

Код я добавил потом, так на всякий случай, чтоб понятнее было.

Оказалось зря добавил)))

Ваш код выдавал ошибку "выход за пределы массива" мне лениво было смотреть код, поэтому сделал как мне удобнее.


Почему только один буфер разворачиваете шиворот навыворот, а второй оставляете обычным? 

Благодарен вам. 

Развернул буфер цветов и все заработало)

Причина обращения: