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

 
Roman:

А может для реал тайм, вместо

использовать

Зачем копировать, если можно сразу получить текущую цену?
В теории, CopyTicks в своих потрохах, имеет дополнительные проверки параметров, чем увеличивает длину кода в теле функции.
А SymbolInfoTick не имеет дополнительных параметров, и по идее реализация данной функции должна содержать меньше кода.
Меньше кода - быстрее выполнение. 

Единственно что плохо, по функции SymbolInfoTick нет подробной документации, как у CopyTicks, и до конца не ясно как она работает.
Кэширует, или сразу отдаёт сырец то что пришло.

Сразу отдает только стакан, остальное всё проходит доп. проверки.

Подробную документацию никто не раскроет - это тайна за 7 печатями )))

 
Sergey Chalyshev:

Сразу отдает только стакан, остальное всё проходит доп. проверки.

Подробную документацию никто не раскроет - это тайна за 7 печатями )))

SymbolInfoTick() в принципе не может отдавать стакан, наверно имелось ввиду BestBid, BestAsk. 
А разве структура MqlTick не заполняется полностью по мимо BestBid, BestAsk ?
Почему вы решили, что для остальных членов структуры нужна доп. проверка?

struct MqlTick 
{ 
   datetime     time;          // Время последнего обновления цен 
   double       bid;           // Текущая цена Bid 
   double       ask;           // Текущая цена Ask 
   double       last;          // Текущая цена последней сделки (Last) 
   ulong        volume;        // Объем для текущей цены Last 
   long         time_msc;      // Время последнего обновления цен в миллисекундах 
   uint         flags;         // Флаги тиков 
   double       volume_real;   // Объем для текущей цены Last c повышенной точностью 
};

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

bool  MarketBookGet( 
   string        symbol,     // символ 
   MqlBookInfo&  book[]      // ссылка на массив 
   );

Возвращает массив структур MqlBookInfo, содержащий записи стакана цен указанного символа.

 
Roman:

SymbolInfoTick() в принципе не может отдавать стакан, наверно имелось ввиду BestBid, BestAsk. 
А разве структура MqlTick не заполняется полностью по мимо BestBid, BestAsk ?
Почему вы решили, что для остальных членов структуры нужна доп. проверка?

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

Возвращает массив структур MqlBookInfo, содержащий записи стакана цен указанного символа.

Не понимаю о чем вы.

OnBook и OnTick это разные потоки, если MQ их синхронизировало это очень плохо.

Судя по приведенной мной картинке выше они не полностью синхронизированы.

Так же внушает доверия тест fxsaber:

Результат плохой: в OnTick/OnBookEvent тики, полученные разными способами, очень часто не совпадают прямо внутри одной On-функции. При этом невозможно определить, в какой функции какой метод получения тика актуальный, а в какой - нет. Жуткая неопределенность.

Поэтому, кому что:

- если нужны лучшие цены - OnBook,

- если нужна лента сделок - CopyTick,

- а если ничего не нужно - OnTick, он может пропускать тики и задерживать поток информации, т.к. работает в одном процессе в очереди с другими On функциями.


p.s. всё что написал здесь касается только биржевых счетов, форексникам всё пофиг (никакой разницы), форексники проходите мимо.

fxsaber
fxsaber
  • www.mql5.com
Опубликовал пост TesterPortfolio - портфель ТС Опубликовал пост "Out-Of-Sample" - где расположить, справа или слева? Когда-то в паблике столкнулся с мнением, что OOS должен располагаться только справа. Т.е. расположение его слева от интервала Оптимизации - ошибка. Я с этим был категорически не согласен, т.к. не видел разницы. Теперь вижу...
 
Andrey Khatimlianskii:

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

В целом, вопрос раскрыт, и любой желающий сможет посмотреть и ваш, и fxsaber-а и мой коды, и сделать выводы.
С вами диалог прекращаю, ничего кроме громких криков от вас не исходит, а на прием информации ваш мозг вообще не работает.

Удачи на ФОРТСЕ.

Андрей!

Вы напрасно обидились на мои высказывания о ФОРЕКСниках, они не имеют никакого отношения к Вам.

У нас с Вами всегда были конструктивные диалоги, но если это как-то задело Вас, то

приношу лично Вам свои извинения!

 
Sergey Chalyshev:

Не понимаю о чем вы.

OnBook и OnTick это разные потоки, если MQ их синхронизировало это очень плохо.


Из моих последних тестов (после исправления ошибки в коде),

очень хорошо видно, что OnTick() срабатывает или раньше или в тоже время, что и OnBookEvent(),

но в принтах OnTick() всегда первый.

Думается, что когда приходит новый пакет тиков, 

то функция, обрабатывающая их, сначала "дергает" OnTick(), а потом уже "распихивает" данные

куда нужно :)

 
Roman:

А может для реал тайм, вместо

использовать

Зачем копировать, если можно сразу получить текущую цену?

А Вы для какого рынка интересуетесь?

 
prostotrader:

Из моих последних тестов (после исправления ошибки в коде),

очень хорошо видно, что OnTick() срабатывает или раньше или в тоже время, что и OnBookEvent(),

но в принтах OnTick() всегда первый.

Думается, что когда приходит новый пакет тиков, 

то функция, обрабатывающая их, сначала "дергает" OnTick(), а по том уже "распихивает" данные

куда нужно :)

Да, примерно так же думаю.

Терминал асинхронный однопоточный, по очереди обрабатывает все события.

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

В одном советнике только OnBook без OnTick.

В другом только OnTick без OnBook.

И складывать цены, с локальным временем в миллисекундах, в один файл. Тогда будет видна реальная разница.

Иначе, без биржевого времени стакана, разницу не понять.

 
Sergey Chalyshev:

Да, примерно так же думаю.

Терминал асинхронный однопоточный, по очереди обрабатывает все события.

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

В одном советнике только OnBook без OnTick.

В другом только OnTick без OnBook.

И складывать цены, с локальным временем в миллисекундах, в один файл. Тогда будет видна реальная разница.

Иначе, без биржевого времени стакана, разницу не понять.

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

 
Sergey Chalyshev:

Не понимаю о чем вы.

OnBook и OnTick это разные потоки, если MQ их синхронизировало это очень плохо.

Судя по приведенной мной картинке выше они не полностью синхронизированы.

Так же внушает доверия тест fxsaber:

Поэтому, кому что:

- если нужны лучшие цены - OnBook,

- если нужна лента сделок - CopyTick,

- а если ничего не нужно - OnTick, он может пропускать тики и задерживать поток информации, т.к. работает в одном процессе в очереди с другими On функциями.


p.s. всё что написал здесь касается только биржевых счетов, форексникам всё пофиг (никакой разницы), форексники проходите мимо.

Речь была за SymbolInfoTick, вы написали, что " Сразу отдает только стакан, остальное всё проходит доп. проверки"
Я привел структуру MqlTick, чтоб показать вам из чего она состоит, там нет стакана, там только лучшие цены. И ни каких доп проверок там нет.
По этому я удивился от написанного вами, наверно неправильно изложили мысль.
OnBook и OnTick по идее это разные сокеты, так как в любых биржевых протоколах трейды идут в одном сокете, а Level2(стакан) в другом.
Из этого следует, что в сокет OnTick приходят только лучшие bid ask last и т.д по структуре. По этому для OnTick свой обработчик.
Для Level2 другой сокет, и соответственно у него другой обработчик. По идее они не должны быть синхронизированы принудительно на стороне терминала.

Да всё верно, кому что нужно тот то и использует, трейды в SymbolInfoTick или CopyTick, стакан в MarketBookGet.

 
prostotrader:

А Вы для какого рынка интересуетесь?

Дилинговый форекс не использую.
Вы же в примере из CopyTick получаете только один последний элемент структуры, по сути только лучшие цены.
Вот и подумалось, зачем копировать данные из одной области памяти в другую область,
когда есть 
SymbolInfoTick который отдает лучшие цены, не куда не копируя. Возможно я и ошибаюсь, как работают функции, это только мои догадки.
Хотя всё может быть, что эти две функции работают одинаково, разница только в том что 
CopyTick может запрашивать диапазон тиков.
И циклами пользоваться для
 обработки тиков, это лишнее.

Причина обращения: