Задержка в появлении баров. - страница 3

 
Nikolai Semko:

еще раз прошу прощения. Сегодня я невероятно туплю :)) ... спал всего 3 часа.

Вот исправленный код:

Программа "Ойкает" почти на каждой секунде.
 
savinkins:
Программа "Ойкает" почти на каждой секунде.

Наверное все же правильнее сказать на каждой минуте, а не секунде (судя по скрину).

Я лично не знаю в чем тогда проблема, т.к. у меня все ОК. 

Может проблема у брокера

Может в символе.

А попробуйте запустить на EURUSD

 
Nikolai Semko:

Наверное все же правильнее сказать на каждой минуте, а не секунде (судя по скрину).

Я лично не знаю в чем тогда проблема, т.к. у меня все ОК. 

Может проблема у брокера

Может в символе.

А попробуйте запустить на EURUSD

К форексу доступа у меня нет, да и не нужен.

Проверил на фьючерсе доллар/рубль как более ликвидном, там та же ерунда.

Спасибо за попытку разобраться.


 
savinkins:

К форексу доступа у меня нет, да и не нужен.

Проверил на фьючерсе доллар/рубль как более ликвидном, там та же ерунда.

Спасибо за попытку разобраться.


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

 
Nikolai Semko:
Тогда проблема существует, но по видимому, действительно, причина где то у брокера или в соединениии.

Да, забыл добавить. Брокер "БКС".

Спасибо.

 
savinkins:

Да, забыл добавить. Брокер "БКС".

Спасибо.

Я выхожу из игры - у меня нет реала на бирже. К сожалению.

 
savinkins:

Да, забыл добавить. Брокер "БКС".

Спасибо.

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

Если Вам необходимо считать формирования нового бара с наступлением новой минуты, то можно обойти эту некорректность.
Например, для минутного ТФ в первом приближении это будет выглядеть так:

int OnInit()
  {
   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[])
  {   
   static ulong prev_time=0;
   static int prev_rates_total =0;
   int real_rates_total=rates_total;
   datetime t = TimeCurrent(); 
   t -= t%60;
   if (prev_time>0 && prev_rates_total==rates_total && prev_time<t) real_rates_total++;
   prev_time=t;
   prev_rates_total=rates_total;
   
   // ......
   
   return(rates_total); // или return(real_rates_total);
  }

для других ТФ будет чуть посложнее с применением функции Bars.
Только хочу добавить, что нужно не забывать, что пока функция Bars в МТ5 глючная и лучше ( также и быстрее) будет использовать этот её аналог.

 
Nikolai Semko:

еще раз прошу прощения. Сегодня я невероятно туплю :)) ... спал всего 3 часа.

Вот исправленный код:

Ваше

prev_rates_total

Разве не равно

prev_calculated
 
Yury Kirillov:

Ваше

Разве не равно

О да, наверное. Ну тогда можно упростить.  
Я еще об этом подумал, но почему то было лень проверить :))
Причина обращения: