Полторы минуты разницы между локальным временем и временем свежего тика. Что делать.

 

Написал небольшой советник, который показывает максимальную разницу между локальным временем компьютера и временем нового тика time_msc (только что полученного).

Т.е грубо говоря стал измерять   TimeLocal() только в миллисекундах минyc время последнего тика Tick.teme_msc . Тик получен с помощью SymbolInfoTick.

Особо издеваться не стал. 24 символа в обзоре рынка. Через OnTimer() с периодом вызова 1 миллисекунда.  Опрашиваю все символы с помощью SymbolInfoTick. Если тик новый делаю замеры.

Советник запустил на вечерке. Вот такие результаты:

Поймано новых тиков 46800

Минимальное время между локальным временем компьютера и временем тика -7048 миллисекунд ( с минусом )

Среднее время между локальным временем компьютера и временем тика -6819 миллисекунд ( с минусом )

Максимальное  время между локальным временем компьютера и временем тика  97082 миллисекунд ( с плюсом )


Как с этим бороться ?

 
pivomoe:

Написал небольшой советник, который показывает максимальную разницу между локальным временем компьютера и временем нового тика time_msc (только что полученного).

Т.е грубо говоря стал измерять   TimeLocal() только в миллисекундах минyc время последнего тика Tick.teme_msc . Тик получен с помощью SymbolInfoTick.

Особо издеваться не стал. 24 символа в обзоре рынка. Через OnTimer() с периодом вызова 1 миллисекунда.  Опрашиваю все символы с помощью SymbolInfoTick. Если тик новый делаю замеры.

Советник запустил на вечерке. Вот такие результаты:

Поймано новых тиков 46800

Минимальное время между локальным временем компьютера и временем тика -7048 миллисекунд ( с минусом )

Среднее время между локальным временем компьютера и временем тика -6819 миллисекунд ( с минусом )

Максимальное  время между локальным временем компьютера и временем тика  97082 миллисекунд ( с плюсом )


Как с этим бороться ?

Посмотрел Ваш код...

Вы вообще все не правильно делаете.

Нужно добавить в Обзор рынка самые ликвидные инструменты.

Затем, добавить стаканы этих инструментов.

И, при срабатывании OnBookEvent(), копировать 1 тик (последний) там будет время и тут же брать локальное время и сравнивать.

А вообще зачем Вам нужно сравнивать локальное время со временем тиков?

Если Вам нужно знать можно ли торговать, то вот Вам функция

//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  MqlDateTime cur_time, sv_time;
  cur_time.year = 0;
  TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.
  if(cur_time.year > 0)
  {
    sv_time.year = 0;
    TimeCurrent(sv_time); //Возвращает последнее известное время сервера
    if(sv_time.year > 0)
    {
    //  if((cur_time.day_of_week == int(FirstDay)) ||
    //     (cur_time.day_of_week == int(SecondDay))) return(false); //Проверка на выходные
      if(cur_time.day_of_week == sv_time.day_of_week)
      {
        ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
        if(((tr_time >= time_st_mon) && (tr_time < 50370)) ||  //10:00:01 - 13:59:30
           ((tr_time >= time_st_day) && (tr_time < 67470)) ||  //14:05:01 - 19:44:30 
           ((tr_time >= time_st_evn) && (tr_time < 85770)))    //19:05:01 - 23:49:30
        {
          return(true);
        }  
      }  
    } 
  }   
  return(false);
}
 

На тему актуальности тиков посмотрите этот индикатор с комментариями.

Ping
Ping
  • www.mql5.com
Для торговли важным параметром является актуальность текущей цены. На него влияет множество факторов, самый популярный из которых - сетевой пинг между терминалом и торговым сервером. Но часто из виду упускается другой параметр: так называемый "внутренний пинг терминала" - дополнительный лаг котировок внутри самого терминала (платформы). Даже...
 
prostotrader:

Посмотрел Ваш код...

Вы вообще все не правильно делаете.

Нужно добавить в Обзор рынка самые ликвидные инструменты.

Затем, добавить стаканы этих инструментов.

И, при срабатывании OnBookEvent(), копировать 1 тик (последний) там будет время и тут же брать локальное время и сравнивать.

А вообще зачем Вам нужно сравнивать локальное время со временем тиков?

Зачем все делать, через стакан ? Просто для того, чтобы код лучше выглядел ? Если у меня символ в обзоре рынка разве, это не означает, что идет постоянная синхронизация и мне доступны последние 4096 тиков  по символу прямо из кеша ( т.е мгновенно ) ? В любом случае ваша идею нужно опробовать. Единственное я не понял, что значит  "копировать 1 тик (последний)" по изменению стакана вычислять тик ? 

А вообще зачем Вам нужно сравнивать локальное время со временем тиков?

Принимать торговые решения по вчерашним ценам не очень хорошая идея. Вчера SBER по 100 купить с точки зрения алгоритма может быть хорошей идей, а сегодня его уже по 80 надо продавать.

 
pivomoe:

Зачем все делать, через стакан ? Просто для того, чтобы код лучше выглядел ? Если у меня символ в обзоре рынка разве, это не означает, что идет постоянная синхронизация и мне доступны последние 4096 тиков  по символу прямо из кеша ( т.е мгновенно ) ? В любом случае ваша идею нужно опробовать. Единственное я не понял, что значит  "копировать 1 тик (последний)" по изменению стакана вычислять тик ? 

А вообще зачем Вам нужно сравнивать локальное время со временем тиков?

Принимать торговые решения по вчерашним ценам не очень хорошая идея. Вчера SBER по 100 купить с точки зрения алгоритма может быть хорошей идей, а сегодня его уже по 80 надо продавать.

Зачем Вы задаете вопрос, если сами всё знаете.

Делайте, как считаете нужным.

 
prostotrader:

Зачем Вы задаете вопрос, если сами всё знаете.

Делайте, как считаете нужным.

Я спрашиваю совершенно серьёзно. Программируя на MQL я понял, что верить нельзя не справке, не информации которую отдает терминал. Все это не более чем информация к размышлению. Вполне возможно, что стакан отдает информацию раньше(стабильнее), чем  SymbolInfoTick.

Вот кстати тот тик, который пришел с задержкой полторы минуты:

Новая МАКсимальная разница 97082 SBPR-3.19 Локальное время 2019.03.15 21:05:31.842 Время тика 2019.03.15 21:03:54.760

В истории тиков ничего криминального в эту минуту не было. Два тика за минуту.

 
pivomoe:

Я спрашиваю совершенно серьёзно. Программируя на MQL я понял, что верить нельзя не справке, не информации которую отдает терминал. Все это не более чем информация к размышлению. Вполне возможно, что стакан отдает информацию раньше(стабильнее), чем  SymbolInfoTick.

Вот кстати тот тик, который пришел с задержкой полторы минуты:

Новая МАКсимальная разница 97082 SBPR-3.19 Локальное время 2019.03.15 21:05:31.842 Время тика 2019.03.15 21:03:54.760

В истории тиков ничего криминального в эту минуту не было. Два тика за минуту.

Вы, совершенно не понимаете суть вопроса!

Совсем наплевать на Ваше локальное время.

Вожно толко время ТОРГОВОГО сервера!

Есть торговые сессии, в течении этого времени можно торговать.

Торговое время определяется на Вашим локальным временем,

а временем торгового сервера.

 
prostotrader:

Вы, совершенно не понимаете суть вопроса!

Совсем наплевать на Ваше локальное время.

Вожно толко время ТОРГОВОГО сервера!

Есть торговые сессии, в течении этого времени можно торговать.

Торговое время определяется на Вашим локальным временем,

а временем торгового сервера.

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

Попытаюсь объяснить на пальцах.

В 16:39.59.999 по локальному времени советник в первый раз получает последний тик, по каждому символу из обзора рынка и запоминает его.

В 16:40.00.000 опять идет опрос последнего тика по каждому символу. По некоторым мы получаем новые тики.

Большинство новых тиков со временем ( time_msc ) примерно равным 16:39.59.000. А вот один пришёл со временем 16:38.30.335.

Т.е получается, что В 16:39.59.999( по локальному) это тика не было, а спустя миллисекунду он вдруг появился  да ещё и современен 16:38:30 хотя обычно тики приходят со временем отличающимся лишь на секунду. 

После таких тиков возникают не хорошие мысли. Допустим мы запрашиваем последний тик с малоликвидного символа в реальной торговле. Получаем время тика (time_msc)

отличающееся на две минуты от локального. Сразу возникают предположения, о том, что кто-то уже знает о тике который произошел 90, 60, или 30 секунд назад, а наш советник об этом не знает и его за этого могут наказать ударом в лимитный ордер допустим. 

С этой проблемой нужно бороться.

 
pivomoe:

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

Попытаюсь объяснить на пальцах.

В 16:39.59.999 по локальному времени советник в первый раз получает последний тик, по каждому символу из обзора рынка и запоминает его.

В 16:40.00.000 опять идет опрос последнего тика по каждому символу. По некоторым мы получаем новые тики.

Большинство новых тиков со временем ( time_msc ) примерно равным 16:39.59.000. А вот один пришёл со временем 16:38.30.335.

Т.е получается, что В 16:39.59.999( по локальному) это тика не было, а спустя миллисекунду он вдруг появился  да ещё и современен 16:38:30 хотя обычно тики приходят со временем отличающимся лишь на секунду. 

После таких тиков возникают не хорошие мысли. Допустим мы запрашиваем последний тик с малоликвидного символа в реальной торговле. Получаем время тика (time_msc)

отличающееся на две минуты от локального. Сразу возникают предположения, о том, что кто-то уже знает о тике который произошел 90, 60, или 30 секунд назад, а наш советник об этом не знает и его за этого могут наказать ударом в лимитный ордер допустим. 

С этой проблемой нужно бороться.

"Бороться" ни с чем не нужно, а нужно понимать как приходят тики в терминал и правильно

их обрабатывать!

https://www.mql5.com/ru/code/16210

Лента всех сделок
Лента всех сделок
  • www.mql5.com
Хитрый усреднитель Hello Smart Эксперт усредняет убыточные позиции по определенному алгоритму. ColorJSatl_Digit Сглаженный быстрый цифровой фильтр JSatl с цветовой индикацией направления движения, с отображением последнего значения в виде ценовой метки и с возможностью округлять уровни...
 
prostotrader:

"Бороться" ни с чем не нужно, а нужно понимать как приходят тики в терминал и правильно

их обрабатывать!

Может вы наконец поделитесь  этим знанием ? Даже если через ваш метод, можно получить событие новый тик раньше, получается что вы даете мне рыбу, а не удочку т.е не объясняете почему так происходит.

Откуда у вас взялась уверенность, что ваш метод быстрее моего ?  Я что то пропустил в документации ? Может быть экспериментальным путем вы установили, что подписавшись на стакан новые тики терминал отдает более охотно ?

Реализую переключатель в этом советнике с моего способа отлова новых, на ваш. 

 
pivomoe:

Может вы наконец поделитесь  этим знанием ? Даже если через ваш метод, можно получить событие новый тик раньше, получается что вы даете мне рыбу, а не удочку т.е не объясняете почему так происходит.

Откуда у вас взялась уверенность, что ваш метод быстрее моего ?  Я что то пропустил в документации ? Может быть экспериментальным путем вы установили, что подписавшись на стакан новые тики терминал отдает более охотно ?

Реализую переключатель в этом советнике с моего способа отлова новых, на ваш. 

Есть исходный код с комментариями.

Лень посмотреть? Или что-то не понятно?

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