Различие тиков в CopyTicks и в обзоре рынка

 
В индикатор получаю тики через CopyTicks и CopyTicksRange и рисую Bid / Ask.
Открываю обзор рынка и перехожу на вкладку Ticks.

1. почему две картинки выглядят практически кардинально противоположно?
2. почему Tick.last у некоторых брокеров всегда 0, хотя Bid / Ask установлены?

3. почему CopyTicks возвращает последние тики в 23:59:45, а в обзоре рынка они приходят до 12:01:44


Файлы:
Ticks.mq5  7 kb
 

По этим двум функциям работа не проведена до конца.
Возможно методы допилены, но история при этом может оказаться неправильная. В итоге надеяться на правильность данных возвращенных методами нельзя.
В ветке https://www.mql5.com/ru/forum/251579 писали, уточняли какой сервер.. Но как бы не важно какой сервер, мы знаем что кухни могут творить что им вздумается.
Хотя может и есть методы проверяющие правильность тиковых данных.. (если кто знает, то напишите, пожалуйста).

Решение пока в реалтайме копить тики и оперировать только ими. Понятно что это совсем неудобно во многих случаях..

Может утопия, а может вдруг и нет: сделать бы такую штуку опциональную на серверной стороне, какие то проверки от кухонности, от шпилек, от потери ликвидности, от подмены истории. И если компания включила эту опцию - значит это плюс к честности и в терминале есть какой нить яркий флажок символизирующий об этом. А если не купила контора эту опцию, то флажка нет - все котируется и торгуется как обычно..

 
Ilnur Khasanov

ну, насчет кухонности, протерстировал на 4х брокерах, первые 2 дают покупать реальные американские акции, не CFD

  • Just2Trade
  • Admiral Markets - здесь CopyTicks всегда возвращает 0, тиков вообще нет
  • FXChoice
  • IFC Markets

если CopyTicks возвращает неправильные данные, то получается и "Тестирование на реальных тиках" всегда врет или проблема именно с этими функциями?
 
Andy Sanders:

ну, насчет кухонности, протерстировал на 4х брокерах, первые 2 дают покупать реальные американские акции, не CFD

1. Just2Trade

2. Admiral Markets - здесь CopyTicks всегда возвращает 0, тиков вообще нет

3. FXChoice

4. IFC Markets

если CopyTicks возвращает неправильные данные, то получается и "Тестирование на реальных тиках" всегда врет?

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

 
Возвращали бы эти две функции по GetLastError  что нибудь говорящее о состоянии истории, корректности флагов.. Или в какой нить параметр бы устанавливали значение..
 
Терминал работает с одним потоком тиков, так что стакан и copyticks работают с одними данными.

Проверьте вызовы copyticks, может неправильные параметры.
 
Renat Fatkhullin: 

чтобы избежать ошибок с человеческим фактором

  1. упростил индикатор до 50 строк
  2. убрал даты
  3. запрашиваю, только последние 1000 тиков

на скрине видно, что в обзоре рынка последний тик пришел в 13:09:10, в CopyTicks самый новый тик 21:29:26

графики отличаются и "на глаз" и по значениям Ask / Bid выведенным в консоли


Файлы:
Ticks.mq5  2 kb
 
Проверю как доберусь до компьютера.
 
для полноты картины добавлю, все предыдущие аккаунты - Demo
вот результаты дополнительных тестов

1. на реале RoboFX - тики совпадают и на глаз и по значениям
2. на демо AmpFutures - не совпадают

похоже, врет именно Demo, но тем не менее это не всё ... 
есть другие странности в упрощенном индикаторе, который приаттачил даже на реале Робо

1. если вызывать EventKillTimer внутри OnTimer по какому-то условию, то таймер не убивается и продолжает тикать, воспроизводится когда OnTimer не успевает отработать
2. я вызываю CopyTicks по таймеру, первый вызов срабатывает нормально, на втором CopyTicks возвращает 0, GetLastError = 4302
 
Andy Sanders:

чтобы избежать ошибок с человеческим фактором

  1. упростил индикатор до 50 строк
  2. убрал даты
  3. запрашиваю, только последние 1000 тиков

на скрине видно, что в обзоре рынка последний тик пришел в 13:09:10, в CopyTicks самый новый тик 21:29:26

графики отличаются и "на глаз" и по значениям Ask / Bid выведенным в консоли

Вы явно что-то намудрили в своем коде. И он показывает явно ошибочные данные.

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

void OnStart()
  {
   MqlTick items[];
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_ALL,0,10);

   if(count>0)
      ArrayPrint(items);
  }
Вот его вывод:
2018.06.30 23:01:08.882 test (EURUSD,M1)                         [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags]
2018.06.30 23:01:08.882 test (EURUSD,M1)        [0] 2018.06.29 23:59:00 1.16832 1.16845 0.0000        0 1530316740514     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [1] 2018.06.29 23:59:00 1.16835 1.16848 0.0000        0 1530316740622     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [2] 2018.06.29 23:59:01 1.16833 1.16846 0.0000        0 1530316741594     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [3] 2018.06.29 23:59:01 1.16832 1.16845 0.0000        0 1530316741935     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [4] 2018.06.29 23:59:02 1.16833 1.16846 0.0000        0 1530316742168     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [5] 2018.06.29 23:59:02 1.16835 1.16848 0.0000        0 1530316742270     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [6] 2018.06.29 23:59:02 1.16834 1.16847 0.0000        0 1530316742365     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [7] 2018.06.29 23:59:03 1.16823 1.16836 0.0000        0 1530316743176     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [8] 2018.06.29 23:59:03 1.16828 1.16841 0.0000        0 1530316743333     134
2018.06.30 23:01:08.882 test (EURUSD,M1)        [9] 2018.06.29 23:59:03 1.16831 1.16844 0.0000        0 1530316743548     134

А вот тиковый график, который полностью совпадает с результатами распринтовки выше:



При этом ваш индикатор показывает откровенно ошибочные данные на том же EURUSD M1, MetaQuotes-Demo:

Причем вам в CopyTicks отдаются абсолютно верные данные и вы их даже распечатываете. Если уменьшить количество запрашиваемых тиков до 10, чтобы не мусорить в логи, то ваш код показывает правильные данные Bid/Ask как с тикового чарта в обзоре рынка:

2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 0 Date: 2018.06.29 23:59:03 Ask: 1.16844 Bid: 1.16831
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 1 Date: 2018.06.29 23:59:03 Ask: 1.16841 Bid: 1.16828
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 2 Date: 2018.06.29 23:59:03 Ask: 1.16836 Bid: 1.16823
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 3 Date: 2018.06.29 23:59:02 Ask: 1.16847 Bid: 1.16834
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 4 Date: 2018.06.29 23:59:02 Ask: 1.16848 Bid: 1.16835
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 5 Date: 2018.06.29 23:59:02 Ask: 1.16846 Bid: 1.16833
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 6 Date: 2018.06.29 23:59:01 Ask: 1.16845 Bid: 1.16832
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 7 Date: 2018.06.29 23:59:01 Ask: 1.16846 Bid: 1.16833
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 8 Date: 2018.06.29 23:59:00 Ask: 1.16848 Bid: 1.16835
2018.06.30 23:10:52.874 Ticks__1 (EURUSD,M1)    Tick #: 9 Date: 2018.06.29 23:59:00 Ask: 1.16845 Bid: 1.16832
 
Спасибо за скрипт.

Не понимаю каким магическим образом, но сейчас все работает правильно и для US Stocks, и для Forex, как на реале, так и на демо, как в скрипте, так и в индикаторе...

Хотя ... иногда тиковый график в обзоре рынка отличается ... 

  1. при включенном Auto Scroll он иногда неправильный
  2. при отключенном Auto Scroll график = CopyTicks

https://i.imgur.com/8YUZ7kX.png