Проблемы в индикаторном буфере, когда для графика DRAW_COLOR_LINE задано значение DRAW_NONE

 

Пишу индикатор и использую графики типа DRAW_COLOR_LINE.

Поскольку в моем индикаторе много графиков, я намеренно скрываю некоторые графики, устанавливая для них значение DRAW_NONE.

У меня есть линии Боллинджера и несколько сигнальных линий. Когда я установил для линии Боллинджера значение DRAW_NONE и попытался запустить индикатор, чтобы увидеть buffers = "CrossGreen" и "CrossRed", я получаю значения Боллинджера из верхних буферов. Я не понимаю того, что ошибся.

Помогите, пожалуйста. Вот мой фрагмент кода:


#property   indicator_separate_window
#define     TOTAL_BUFFERS 41
#define     PLOT_BUFFERS  41
#property   indicator_buffers TOTAL_BUFFERS
#property   indicator_plots   PLOT_BUFFERS

#define     COLORS_G    clrWhite,clrTomato,clrYellow,clrLimeGreen,clrAliceBlue,clrAqua,clrDarkOrchid
#define     COLORS_R    clrYellow,clrTomato,clrYellow,clrLimeGreen,clrAliceBlue,clrAqua,clrDarkOrchid

#property   indicator_type1     DRAW_LINE
#property   indicator_type2     DRAW_LINE
///////////////////////////////////////////////////////////////
#property   indicator_type3     DRAW_LINE
#property   indicator_type4     DRAW_LINE
/////////////////////////////////////////////////////////////
#property   indicator_type5     DRAW_ARROW
#property   indicator_type6     DRAW_ARROW
/////////////////////////////////////////////////////////////
#property   indicator_type16    DRAW_ARROW
#property   indicator_type17    DRAW_ARROW
/////////////////////////////////////////////////////////////
#property   indicator_type18    DRAW_COLOR_LINE
#property   indicator_type19    DRAW_COLOR_LINE
#property   indicator_type20    DRAW_COLOR_LINE
/////////////////////////////////////////////////////////////
#property   indicator_type21    DRAW_COLOR_LINE
#property   indicator_type22    DRAW_COLOR_LINE
#property   indicator_type23    DRAW_COLOR_LINE
/////////////////////////////////////////////////////////////
#property   indicator_type24    DRAW_COLOR_LINE
#property   indicator_type25    DRAW_COLOR_LINE
/////////////////////////////////////////////////////////////

#property   indicator_color1    clrGreenYellow
#property   indicator_color2    clrAqua
////////////////////////////////////////////////////////////
#property   indicator_color3    clrSalmon
#property   indicator_color4    clrTomato
/////////////////////////////////////////////////////////////
#property   indicator_color5    clrRed
#property   indicator_color6    clrPaleGreen
/////////////////////////////////////////////////////////////
#property   indicator_color16   clrWhite
#property   indicator_color17   clrWhite
/////////////////////////////////////////////////////////////
#property   indicator_color18   COLORS_G
#property   indicator_color19   COLORS_G
#property   indicator_color20   COLORS_G
/////////////////////////////////////////////////////////////
#property   indicator_color21   COLORS_R
#property   indicator_color22   COLORS_R
#property   indicator_color23   COLORS_R
/////////////////////////////////////////////////////////////
#property   indicator_color24   COLORS_G
#property   indicator_color25   COLORS_R
/////////////////////////////////////////////////////////////

#property   indicator_style1    STYLE_SOLID
#property   indicator_style2    STYLE_SOLID
/////////////////////////////////////////////////////////////
#property   indicator_style3    STYLE_SOLID
#property   indicator_style4    STYLE_SOLID
/////////////////////////////////////////////////////////////
#property   indicator_style5    STYLE_SOLID
#property   indicator_style6    STYLE_SOLID
/////////////////////////////////////////////////////////////
#property   indicator_style18   STYLE_SOLID
#property   indicator_style19   STYLE_SOLID
#property   indicator_style20   STYLE_SOLID
/////////////////////////////////////////////////////////////
#property   indicator_style21   STYLE_SOLID
#property   indicator_style22   STYLE_SOLID
#property   indicator_style23   STYLE_SOLID
/////////////////////////////////////////////////////////////
#property   indicator_style24   STYLE_SOLID
#property   indicator_style25   STYLE_SOLID
/////////////////////////////////////////////////////////////

#property   indicator_width1    1
#property   indicator_width2    1
/////////////////////////////////////////////////////////////
#property   indicator_width3    1
#property   indicator_width4    1
/////////////////////////////////////////////////////////////
#property   indicator_width5    1
#property   indicator_width6    1
/////////////////////////////////////////////////////////////
#property   indicator_width16    1
#property   indicator_width17    1
/////////////////////////////////////////////////////////////
#property   indicator_width18    1
#property   indicator_width19    1
#property   indicator_width20    1
/////////////////////////////////////////////////////////////
#property   indicator_width21    1
#property   indicator_width22    1
#property   indicator_width23    1
/////////////////////////////////////////////////////////////
#property   indicator_width24    1
#property   indicator_width25    1
/////////////////////////////////////////////////////////////

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   Previous_filling_start_with = 0;

   SetIndexBuffer(00,   buffer1,                INDICATOR_DATA); // #1
   SetIndexBuffer(01,   buffer2,                INDICATOR_DATA); // #2

   SetIndexBuffer(02,   buffer3,                INDICATOR_DATA); // #3
   SetIndexBuffer(03,   buffer4,                INDICATOR_DATA); // #4

   SetIndexBuffer(04,   signalBuy,              INDICATOR_DATA); // #5
   SetIndexBuffer(05,   signalSell,             INDICATOR_DATA); // #6

   SetIndexBuffer(06,   buffer5,                INDICATOR_DATA); // #7

   SetIndexBuffer(07,   buffer6,                INDICATOR_DATA); // #8

   SetIndexBuffer(08,   buffer7,                INDICATOR_DATA); // #9
   SetIndexBuffer(09,   buffer8,                INDICATOR_DATA); // #10

   SetIndexBuffer(10,   buffer9,                INDICATOR_DATA); // #11
   SetIndexBuffer(11,   buffer10,               INDICATOR_DATA); // #12

   SetIndexBuffer(12,   buffer11,               INDICATOR_DATA); // #13

   SetIndexBuffer(13,   signalBuyFalse,         INDICATOR_DATA); // #14
   SetIndexBuffer(14,   signalSellFalse,        INDICATOR_DATA); // #15

   SetIndexBuffer(15,   buffer12,               INDICATOR_DATA); // #16
   SetIndexBuffer(16,   buffer13,               INDICATOR_DATA); // #17

   SetIndexBuffer(17,   Green_Bol_Mid,          INDICATOR_DATA); // #18
   SetIndexBuffer(18,   c1,                     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(19,   Green_Bol_Up,           INDICATOR_DATA); // #19
   SetIndexBuffer(20,   c2,                     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(21,   Green_Bol_Down,         INDICATOR_DATA); // #20
   SetIndexBuffer(22,   c3,                     INDICATOR_COLOR_INDEX);

   SetIndexBuffer(23,   Red_Bol_Mid,            INDICATOR_DATA); // #21
   SetIndexBuffer(24,   c4,                     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(25,   Red_Bol_Up,             INDICATOR_DATA); // #22
   SetIndexBuffer(26,   c5,                     INDICATOR_COLOR_INDEX);
   SetIndexBuffer(27,   Red_Bol_Down,           INDICATOR_DATA); // #23
   SetIndexBuffer(28,   c6,                     INDICATOR_COLOR_INDEX);

   SetIndexBuffer(29,   CrossGreen,             INDICATOR_DATA); // #24
   SetIndexBuffer(30,   c7,                     INDICATOR_COLOR_INDEX);

   SetIndexBuffer(31,   CrossRed,               INDICATOR_DATA); // 25
   SetIndexBuffer(32,   c8,                     INDICATOR_COLOR_INDEX);

   SetIndexBuffer(33,   Green_STD_Buffer,       INDICATOR_DATA); // #26
   SetIndexBuffer(34,   Red_STD_Buffer,         INDICATOR_DATA); // #27

   SetIndexBuffer(35,   buffer_G,               INDICATOR_DATA); // #28
   SetIndexBuffer(36,   buffer_R,               INDICATOR_DATA); // #29

   SetIndexBuffer(37,   buffer14,               INDICATOR_DATA); // #30
   SetIndexBuffer(38,   buffer15,               INDICATOR_DATA); // #31

   SetIndexBuffer(39,   buffer16,               INDICATOR_DATA); // #32
   SetIndexBuffer(40,   buffer17,               INDICATOR_DATA); // #33

   for(int i =0; i<TOTAL_BUFFERS; i++)
     {
      PlotIndexSetDouble(i,   PLOT_EMPTY_VALUE, 0.0);
      PlotIndexSetInteger(i,  PLOT_DRAW_TYPE,   DRAW_NONE);
      PlotIndexSetInteger(i,  PLOT_SHOW_DATA,   0);
     }

   if(Display_BB_Green == true)
     {
      PlotIndexSetInteger(17,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(18,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(19,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);

      PlotIndexSetInteger(17,  PLOT_SHOW_DATA,   1);
      PlotIndexSetInteger(18,  PLOT_SHOW_DATA,   1);
      PlotIndexSetInteger(19,  PLOT_SHOW_DATA,   1);

      PlotIndexSetInteger(17,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(18,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(19,  PLOT_SHIFT,   BBPeriod);
     }

   if(Display_BB_Red == true)
     {
      PlotIndexSetInteger(20,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(21,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(22,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);

      PlotIndexSetInteger(20,  PLOT_SHOW_DATA,   1);
      PlotIndexSetInteger(21,  PLOT_SHOW_DATA,   1);
      PlotIndexSetInteger(22,  PLOT_SHOW_DATA,   1);

      PlotIndexSetInteger(20,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(21,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(22,  PLOT_SHIFT,   BBPeriod);
     }

   if(Display_Green_Up_Down_Dev == true)
     {
      int i = 23;
      PlotIndexSetInteger(i,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(i,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(i,  PLOT_SHOW_DATA,   1);
     }

   if(Display_Red_Up_Down_Dev == true)
     {
      int i = 24;
      PlotIndexSetInteger(i,  PLOT_DRAW_TYPE,   DRAW_COLOR_LINE);
      PlotIndexSetInteger(i,  PLOT_SHIFT,   BBPeriod);
      PlotIndexSetInteger(i,  PLOT_SHOW_DATA,   1);
     }

   return(INIT_SUCCEEDED);
  }
 

Следует отметить:

Когда все линии отображаются, я получаю правильные значения и правильные графики.

 
Предоставьте минимальный код, который воспроизводит проблему. Естественно код должен компилироваться.
 

В прошлый раз я предоставил код, который скомпилировался, и все равно никто не смог мне помочь. Теперь я рассказал о проблеме, с которой столкнулся, и вам нужен мой код. Есть ли здесь разработчик MT5, который может решить эту проблему, потому что это как-то связано с разработкой.

Я не могу поделиться своим кодом здесь. Я предоставил информацию, необходимую для понимания проблемы.

 
jaffer wilson #:

В прошлый раз я предоставил код, который скомпилировался, и все равно никто не смог мне помочь. Теперь я рассказал о проблеме, с которой столкнулся, и вам нужен мой код. Есть ли здесь разработчик MT5, который может решить эту проблему, потому что это как-то связано с разработкой.

Я не могу поделиться своим кодом здесь. Я предоставил информацию, необходимую для понимания проблемы.

 
jaffer wilson:

Поскольку в моем индикаторе много графиков, я намеренно скрываю некоторые графики, устанавливая для них значение DRAW_NONE.

неотображаемые буферы лучше маркировать как INDICATOR_CALCULATIONS

 

Вот индикатор из поставки: [data folder]\MQL5\Indicators\Examples\BB.mq5

Для 'Lower' я установил цвет NONE. Линия пропала с экрана - здесь всё правильно. В окне 'Data windows' эта линия отображается - здесь тоже всё правильно. 

 
Vladimir Karputov # :

Вот индикатор из поставки: [data folder]\MQL5\Indicators\Examples\BB.mq5

Для 'Lower' я установил цвет NONE. Линия пропала с экрана - здесь всё правильно. В окне 'Data windows' эта линия отображается - здесь тоже всё правильно. 

Вы пробовали использовать DRAW_NONE вместо clrNONE? Я имею в виду установку NONE для графика вместо цвета NONE. Я попытался сделать цвет clrNone, но есть проблема, связанная с масштабированием. Поскольку значение все еще доступно на диаграмме, масштаб остается таким же, как у значения диаграммы, которое я хочу видеть, в другом масштабе.

Я не хочу нормализовать значения.

 
jaffer wilson #:

Вы пробовали использовать DRAW_NONE вместо clrNONE? Я имею в виду установку NONE для графика вместо цвета NONE. Я попытался сделать цвет clrNone, но есть проблема, связанная с масштабированием. Поскольку значение все еще доступно на диаграмме, масштаб остается таким же, как у значения диаграммы, которое я хочу видеть, в другом масштабе.

Я не хочу нормализовать значения.

Результат всё тот-же - всё прекрасно работает:

//+------------------------------------------------------------------+
//|                                                           BB.mq5 |
//|                   Copyright 2009-2020, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009-2020, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Bollinger Bands"
#include <MovingAverages.mqh>
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  LightSeaGreen
#property indicator_type2   DRAW_LINE
#property indicator_color2  LightSeaGreen
#property indicator_type3   DRAW_NONE
#property indicator_color3  LightSeaGreen
#property indicator_label1  "Bands middle"
#property indicator_label2  "Bands upper"
#property indicator_label3  "Bands lower"


 
Vladimir Karputov # :

Результат всё тот-же - всё прекрасно работает:


Я подумал о том же, о чем вы только что упомянули. Но это с DRAW_LINE. Я готов использовать DRAW_COLOR_LINE, где нужны 2 буфера: один для LINE, а другой для COLOR. В моем индикаторе есть смесь DRAW_LINE, DRAW_COLOR_LINE и DRAW_ARROW. Как видите, я упомянул это во фрагменте кода.

 
jaffer wilson #:

Я подумал о том же, о чем вы только что упомянули. Но это с DRAW_LINE. Я готов использовать DRAW_COLOR_LINE, где нужны 2 буфера: один для LINE, а другой для COLOR. В моем индикаторе есть смесь DRAW_LINE, DRAW_COLOR_LINE и DRAW_ARROW. Как видите, я упомянул это во фрагменте кода.

Я Вам ДВА примера. Оба примера компилируются. Где Ваш минимальный код?