Проблема с ренко графиком

 

       Добрый день, пишу советник для оффлайн ренко графика (получаемый с помощью Renko Liva Chart) и никак не получается определить появление новой свечи. Стандартный код, например:

bool NewBar() 
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return (true);
     }
   else
     {
      return(false);
     }
  }

 не работает онлайн, хотя на тестере все ок. Есть идея читать данные прямо из файла hst, но может быть есть вариант по проще? Заранее спасибо.

 
static datetime lastbar = 0; //- в глобальные переменные

lastbar = Time[0]; //- в инит

bool NewBar() 
{
if(Time[0] <= lastbar ) return(false);
else  
{
lastbar = Time[0];
return(true);
}
}
 
evillive:


Так работает только на нормальном онлайн графике, а на оффлайн нет. Может быть проблема в том, что сейчас на оффлайн графиках необходимо обрабатывать только событие OnTimer, т.к. OnTick не работает. Такой код работает только на стандартном таймфрейме:

static datetime lastbar = 0; 
int OnInit()
  {
   lastbar = Time[0];
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
void OnTick()
  {
  }
void OnTimer()
  {
   if (NewBar() == true)
     {
      Print ("Новый бар !");
     }
  }
bool NewBar() 
  {
   if(Time[0] <= lastbar ) return(false);
   else  
    {
     lastbar = Time[0];
     return(true);
    }
  }
 
тогда только читать .hst
 
evillive:
тогда только читать .hst
ок, спасибо.
 

А в чем проблема то в онлайн? Может быть, дело в том, что два и более баров имеют одно и то же время открытия? Потому как в других случаях приведенный код работает корректно.

Другой вариант выявления нового бара - ориентироваться на количество баров:

bool IsNewBar()
{
   static int oldBars = 0;
   if (oldBars >= Bars)
      return false;
      
   oldBars = Bars;
   return true;
}
 
Scriptong:

А в чем проблема то в онлайн? Может быть, дело в том, что два и более баров имеют одно и то же время открытия? Потому как в других случаях приведенный код работает корректно.

Другой вариант выявления нового бара - ориентироваться на количество баров:

 

 


Нет, проблема не в одинаковом времени открытия - это точно, т.к. ни на одном баре он вообще не срабатывает. Спасибо за идею про количество, попробую.
 
dj_ymep:

       Добрый день, пишу советник для оффлайн ренко графика (получаемый с помощью Renko Liva Chart) и никак не получается определить появление новой свечи. Стандартный код, например:

 не работает онлайн, хотя на тестере все ок. Есть идея читать данные прямо из файла hst, но может быть есть вариант по проще? Заранее спасибо.

Разработчики сами еще не определились с нюансами автономных графиков,
много недоработок было еще в старом MQL, про новый я уже молчу, устал "копья ломать".

Поэтому, проще всего написать советник для обычного графика, включив в него функцию Ренко.
Пусть она прямо в советнике создает массив с теми данными, которые вы пытаетесь считать с автономного графика.
Правила для Ренко просты, реализовать легко.
И вполне достаточно функции обработки событий OnTick().
 
Scriptong:

А в чем проблема то в онлайн? Может быть, дело в том, что два и более баров имеют одно и то же время открытия? Потому как в других случаях приведенный код работает корректно.

Другой вариант выявления нового бара - ориентироваться на количество баров:

 

 


Не стоит ориентироваться на баги. Ихенько, только имхенько. 
 
tara:

Не стоит ориентироваться на баги. 
На какие именно баги? Что имеется в виду?
 
prorab:
Разработчики сами еще не определились с нюансами автономных графиков,
много недоработок было еще в старом MQL, про новый я уже молчу, устал "копья ломать".

Поэтому, проще всего написать советник для обычного графика, включив в него функцию Ренко.
Пусть она прямо в советнике создает массив с теми данными, которые вы пытаетесь считать с автономного графика.
Правила для Ренко просты, реализовать легко.
И вполне достаточно функции обработки событий OnTick().



 Была такая мысль, но все-таки хочется видеть наглядно что происходит.
Причина обращения: