Скачать MetaTrader 5

обновление индикатора

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай MetaTrader 5 для iPad и торгуй в любом месте!
Dmitiry Ananiev
6570
Dmitiry Ananiev 2016.04.17 11:17 

Клиент мне скинул индикатор, поэтому выложить здесь не могу. 

В процессе поступления новых баров он рисует гистограмму. Если зайти в его свойства, и нажать ОК, ТО гистограмма обновляется. Как сделать так чтоб он постоянно обновлялся ? Ну или хотя бы на каждом новом баре .

Vladimir Karputov
Модератор
45526
Vladimir Karputov 2016.04.17 11:39  
Dmitiry Ananiev:

Клиент мне скинул индикатор, поэтому выложить здесь не могу. 

В процессе поступления новых баров он рисует гистограмму. Если зайти в его свойства, и нажать ОК, ТО гистограмма обновляется. Как сделать так чтоб он постоянно обновлялся ? Ну или хотя бы на каждом новом баре .

После клика на "OK" индикатор инициализируется, а значит в  OnCalculate() получает prev_calculate==0. Вероятно в индикаторе просто не реализована обработка на сам правом баре.
Vladimir Karputov
Модератор
45526
Vladimir Karputov 2016.04.17 11:44  

Алгоритм нахождения нового бара:

//+------------------------------------------------------------------+
//| 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[])
  {
   static datetime prev_time;
//--- revert access to array time[] - do it like in timeseries 
   ArraySetAsSeries(time,true);
//--- first calculation or number of bars was changed
   if(prev_calculated==0)// first calculation
     {
      prev_time=time[0];
      return(rates_total);
     }
//---
   if(time[0]>prev_time)
      Print("New bar!");
//---
   prev_time=time[0];
//--- return value of prev_calculated for next call
   return(rates_total);
  }
Alexey Kozitsyn
6372
Alexey Kozitsyn 2016.04.17 11:51  
Karputov Vladimir:
После клика на "OK" индикатор инициализируется, а значит в  OnCalculate() получает prev_calculate==0. Вероятно в индикаторе просто не реализована обработка на сам правом баре.

Не только это может быть. Возможно не корректно указан последний анализируемый элемент, или, наоборот, первый.

Upd: последний или первый в основном расчетном цикле. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий