Ошибка индикатора мт5

 

Привет всем ! 

Подскажите , либо я чтото не то делаю , поскольку еще в процессе изучения mql5 либо это ошибка mql5 .

Суть такова , запускаю простой цикл прорисовки по ценам открытия 10 баров :

//+------------------------------------------------------------------+
//|                                                    Symbol_V1.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1 Orange


input int Bars_=10;

double ExtMapBuffer1[];

int i;
datetime time_;

int OnInit()
  {
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   
   return(0);
  }




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(i=0;i<=Bars_;i++){

ExtMapBuffer1[i]=open[i];

}    
  
  
   return(rates_total);
  }

рисует , но по идее по циклу условие i<=Bars тоесть меньше равно указанному количеству баров , но если смотрим на график то прорисовка по всем барам что есть : 

 

 а не по 10 барам , и также по функции while (i<=Bars)

в буфер почемуто попадает все количество баров , ане ограниченное количество.

В чем трабл ? как решить ? 

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
Invest777:

В чем трабл ? как решить ? 

Посмотрите вот это .
 
Lizar:
Посмотрите вот это .
а можно в 2 словах в чем же сама ошибка , если по вашей ссылке то получается вообще другой какбы счет баров, если сравнивать с mql4 , поскольку там подобной проблемы нету ! 
 
Invest777:
а можно в 2 словах в чем же сама ошибка , если по вашей ссылке то получается вообще другой какбы счет баров, если сравнивать с mql4 , поскольку там подобной проблемы нету ! 

Проблемы нет. Просто MQL5 позволяет управлять индексацией в массивах. По умолчанию в open[] индексация как в стандартных массивах. Если нужна индексация как в таймсерии, то нужно использовать для установки  ArraySetAsSeries().

Ваш пример можно поправить, например, так:

for(i=rates_total-Bars_;i<rates_total;i++)
  {
   ExtMapBuffer1[i]=open[i];
  }

 или так:

for(i=0;i<=Bars_;i++)
  {
   ExtMapBuffer1[rates_total-1-i]=open[rates_total-1-i];
  }
 
Lizar:

Проблемы нет. Просто MQL5 позволяет управлять индексацией в массивах. По умолчанию в open[] индексация как в стандартных массивах. Если нужна индексация как в таймсерии, то нужно использовать для установки  ArraySetAsSeries().

Ваш пример можно поправить, например, так:

 или так:

В мт4 конечно в этом вопросе както попроще намного.

такс , попробывал 2 варианта , отрисовует уже указанное количество баров , указл 100 баров , но рисует сплошную линию , ане цены открытия каждого бара :

 

 
Invest777:

В мт4 конечно в этом вопросе както попроще намного.

такс , попробывал 2 варианта , отрисовует уже указанное количество баров , указл 100 баров , но рисует сплошную линию , ане цены открытия каждого бара :

 

Всё правильно рисует, у Вас на графике намного больше баров, а значение первых Bars_-100 баров не задано, инициализируйте их пустым значением ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE); или "задайте" масштаб графика не более 100 последних баров.
 
mql5:
Всё правильно рисует, у Вас на графике намного больше баров, а значение первых Bars_-100 баров не задано, инициализируйте их пустым значением ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE); или "задайте" масштаб графика не более 100 последних баров.

Да , спасибо , щас работает как должно, просто основывался на mql4 , там както проще с индексацией баров.

Только вот еще вопрос , если код :

for(i=rates_total-Bars_;i<rates_total;i++)
  {
   ExtMapBuffer1[i]=open[i];
  }

то нормально , если поставить функцию : 

for(i=rates_total-Bars_;i<rates_total;i++)
  {
   ExtMapBuffer1[i]=iOpenMQL4(_Symbol,0,i);
  }
double iOpenMQL4(string symbol,int tf,int index)
{   
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyOpen(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

по идее тоже самое , то уже выдает вообще непонятные значения : 

 

 что тут не так  ?

 

 
Invest777:

 что тут не так  ?

Читайте справку CopyOpen

Функция получает в массив open_array исторические данные цен открытия баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар.
 
mql5:

Читайте справку CopyOpen


да я вкурсе , что с 0 и в глубь , но как тогда нужно использовать функцию iOpenMQL4(_Symbol,0,i); чтоб при 

for(i=rates_total-Bars_;i<rates_total;i++)
  {
   ExtMapBuffer1[i]=iOpenMQL4(_Symbol,0,i);
  }

 работало нормально , тоесть последние 100 баров например цены открытия рисовало ?

 

Кроме того  еще скопировал стандартный ваш прописанный индикатор с функции https://www.mql5.com/ru/docs/indicators/icustom , там внизу в виде примера ,

по идее должно работать но выдает ошибку :

 

хотя нечего не менял , это ваш код , как было приписанно изначально. 

Документация по MQL5: Технические индикаторы / iCustom
Документация по MQL5: Технические индикаторы / iCustom
  • www.mql5.com
Технические индикаторы / iCustom - Документация по MQL5
 
мне ктото ответит ? , темболее касательно 2-го вопроса все по инструкции так сказать , а чего не работает !?
Причина обращения: