Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Помогите решить проблему при синхронизации кода с открытием бара - линия перестает рисоваться

    Вот сам код, это пример для наглядности, но принцип работы тот же.

    Мне важно синхронизировать с открытием бара, поскольку работаю с тиками и при появлении нового бара некоторые показатели обнуляються.
    MQL код:

    #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_plots 2
    //--- plot Label1
    #property indicator_label1 "bulls_middleline"
    #property indicator_type1 DRAW_LINE
    #property indicator_color1 clrGreen
    #property indicator_style1 STYLE_SOLID
    #property indicator_width1 1
    //--- plot Label2
    #property indicator_label2 "bears_middleline"
    #property indicator_type2 DRAW_LINE
    #property indicator_color2 clrRed
    #property indicator_style2 STYLE_SOLID
    #property indicator_width2 1
    //--- indicator buffers
    double bulls_middleline[],bears_middleline[];
    int realbar,futurebar;
    double up,up_buffer,down,down_buffer;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //--- indicator buffers mapping
    SetIndexBuffer(0,bulls_middleline);
    SetIndexBuffer(1,bears_middleline);
    //---
    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 i,
    limit = prev_calculated == 0 // Переменной limit, при условии что prev_calculated равно нулю
    ? rates_total-1 // будет присвоено значение rates_total(количество баров в окне) минус 1
    : prev_calculated; // иначе будет присвоено prev_calculated(количество не посчитанных баров

    for(i = limit-1; i >= 0; i--) // цикл
    {
    //+------------------------------------------------------------------+
    //| Накопитель показателей |
    //+------------------------------------------------------------------+
    up = (open[i] + high[i]) / 2;
    down = (open[i] + low[i]) / 2;
    //+------------------------------------------------------------------+
    //| Объявление нового бара |
    //+------------------------------------------------------------------+
    realbar = Bars;
    if(realbar >= futurebar)
    {
    bulls_middleline[i] = (up_buffer + up) / 2;
    up_buffer = bulls_middleline[i];
    bears_middleline[i] = (down_buffer + down) / 2;
    down_buffer = bears_middleline[i];

    futurebar = Bars + 1;
    }
    }
    //--- return value of prev_calculated for next call
    return(rates_total);
    }

Сейчас онлайн

working...
X