Новая версия платформы MetaTrader 5 build 5800: Улучшенный торговый диалог и удобная работа с CSV в MetaEditor - страница 6

 
Roman #:
То есть первая отрисовка в текущей реализации
будет только с приходом нового бара, возможно это и есть некорректный лаг буферного сдвига! 
Первая отрисовка будет тогда, когда появится вторая точка для отрисовки линии.
У Вас же в коде:
PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);

Ощущение, что вы не вникаете в ответы, а спорите с оппонентами. Вот же уже писали об этом: https://www.mql5.com/ru/forum/508121/page5#comment_59586457

 

То есть ждём когда же появиться там вторая точка?
На D1 будете сутки ждать? А на W1? Ещё скажите, что это особенность.
Детский сад какой то, а не программисты. Защищают кривую реализацию.
Со своими ИИ совсем отошли от логического мышления.

 
Sergey Gridnev #:


Запустите хотя-бы на М5, и посмотрите когда отрисуется графическое отображение.
Текущая реализация не корректна и это не есть нормально!
В текущей реализации первая точка для отрисовки создаётся на открытии бара, а не от первого переданного значения в буфер.
Сказки про начальные две точки не надо рассказывать, они легко создаются при желании корректного подхода.


#property indicator_separate_window
#property indicator_plots 1
#property indicator_buffers 1

double buff[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   SetIndexBuffer(0, buff, INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,  DRAW_LINE);
   PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE_SOLID);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrRed);
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 1);
   PlotIndexSetString(0,  PLOT_LABEL,"Bid"); 
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);   
   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
{


   //вставка последнего значения
   buff[rates_total-1] = SymbolInfoDouble(_Symbol, SYMBOL_BID);


   return(rates_total);
}