Тики в реальном времени - страница 21

 
Aleksey Mavrin:

Вот такая картина за день. Конечно не проверялось соответствует ли ОнБук Тику, а просто брался следующий пришедший в надежде что если ОнТик опережает ОнБук, то соответствующий будет или следующий же , либо чуть позже.

Максимальный конечно без доп.проверок не показатель, или выброс или действительно ОнБук где-то подтормаживает.


А вот это кто сможет пояснить? Почему столько ОнТиков распринтовывается, и между ними не влазит ни одного ОнБука?


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

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

И таймер совсем не нужен...

 
А вот интересно, топикстартер удовлетворен ответами на свой вопрос?
 
prostotrader:

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

И таймер совсем не нужен...

Вы же не нашли что причина из-за ошибок в коде. Или вопрос не поняли. Я и просто выводил принтом в Он функциях отметку, без таймера, все равно находится толпа тиков между которыми нет ОнБуков.
 
Aleksey Mavrin:
Вы же не нашли что причина из-за ошибок в коде. Или вопрос не поняли. Я и просто выводил принтом в Он функциях отметку, без таймера, все равно находится толпа тиков между которыми нет ОнБуков.

1. Мне вообще не понятно как Вы запускали советника(ков)

2. Есть 2 кода, написанных Андреем и мной, которые

подтверждают друг друга. Так зачем разбираться в Вашем?

3. И Андрей и я запускали советников на Срочном рынке, а Вы на Фондовом.

Может быть на Фонде терминал имеет какие-то изъяны (Даже не запускал МТ5 на Фондовом рынке).

Лично я, на Фонде, торгую через Квик

 
prostotrader:

1. Мне вообще не понятно как Вы запускали советника(ков)

2. Есть 2 кода, написанных Андреем и мной, которые

подтверждают друг друга. Так зачем разбираться в Вашем?

3. И Андрей и я запускали советников на Срочном рынке, а Вы на Фондовом.

Может быть на Фонде терминал имеет какие-то изъяны (Даже не запускал МТ5 на Фондовом рынке).

Лично я, на Фонде, торгую через Квик

А, ясно. Завтра попробую на срочном. А почему мт5 на фонде не используете? Какие то минусы есть? 
З.ы. код там 3 строчки) просто фиксирует время мск безо всяких проверок чтобы очередь никак не тормозилась обработчиком, а по таймеру его печатает и считает задержку. В вашем коде я тоже не разбирался досконально, по выводу уже ясно общий принцип работы.
 
Aleksey Mavrin:
1. А, ясно. Завтра попробую на срочном. А почему мт5 на фонде не используете? Какие то минусы есть? 
З.ы. код там 3 строчки) просто фиксирует время мск безо всяких проверок чтобы очередь никак не тормозилась обработчиком, а по таймеру его печатает и считает задержку. В вашем коде я тоже не разбирался досконально, по выводу уже ясно общий принцип работы.

1. Второй и последующие терминалы у брокера - платные, и у меня нет стратегий, где я торгую только акциями (портфелями акций).

2. Если Вы собираетесь выводить накопленные GetMicrosecondCount(), то 

сделайте это без таймера в OnDeinit(), при выходе советника все распечатается.

void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  } 
  if(reason == REASON_REMOVE)
  {
   //Распечатываем данные
  } 
}
 
prostotrader:

2. Если Вы собираетесь выводить накопленные GetMicrosecondCount(), то 

сделайте это без таймера в OnDeinit(), при выходе советника все распечатается.

Да так тоже можно, я изначально для наглядности чтоб следить так сделал. Но из-за таймера ОнТики могут пропускаться, но ОнБуки то не должны, они же гарантированы. Может я не учел что-то, может не все Тики инициируют изменение стакана, т.е. ОнБук?
 
Aleksey Mavrin:
Да так тоже можно, я изначально для наглядности чтоб следить так сделал. Но из-за таймера ОнТики могут пропускаться, но ОнБуки то не должны, они же гарантированы. Может я не учел что-то, может не все Тики инициируют изменение стакана, т.е. ОнБук?

И еще

Нужно сделать проверку счетчиков:

void OnBookEvent(const string &symbol)
{ 
  if(curBook >= 65534) return;
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(curTick >= 65534) return;
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

А, при объявлении массивов,нужно делать так

ulong TimeArrayBook[
INT_MAX];

а инициализировать так
ArrayInitialize(TimeArrayBook, 0);

	          
 
prostotrader:

И еще

Нужно сделать проверку счетчиков:

А, при инициализации число должно быть не 65536, а 65535

Неа, не нужно. Специально так сделано чтобы не проверять ничего. Они  Ушорт. Размер массива да с запасом вышел, но это ни на что не влияет ведь.
 
Aleksey Mavrin:

А вот это кто сможет пояснить? Почему столько ОнТиков распринтовывается, и между ними не влазит ни одного ОнБука?

Посмотрите на время лога. Это все в одну мс произошло, и рядом (в эту же мс) куча ОнБук-ов.

Можно посчитать все события счетчиками, но даже визуально видно, что ОнБуков больше.