Индикаторы: Ping

 

Ping:

Реал-тайм индикатор лага котировок внутри самого терминала.

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

Но часто из виду упускается другой параметр: так называемый "внутренний пинг терминала" - дополнительный лаг котировок внутри самого терминала (платформы). Даже при нулевом сетевом пинге это запаздывание может быть существенным.

Оба варианта визуализации индикатора

Данный индикатор показывает динамику изменения этого параметра, который вычисляется следующим образом:

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Получение свежего тика с величиной внутреннего лага котировки (в миллисекундах)
bool SymbolInfoTick( const string &Symb, MqlTick &Tick, double &Ping )
{
  static const bool IsTester = (MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION));
  
  static MqlTick PrevTick = {0};
  static ulong PrevTime = 0;
  
  const ulong NowTime = IsTester ? 0 : GetMicrosecondCount();
  const bool Res = SymbolInfoTick(Symb, Tick);
  
  if ((!IsTester) && Res)
  {
    if (_R(Tick) != PrevTick)
    {
      Ping = PrevTime ? MathAbs(Tick.time_msc - PrevTick.time_msc - (NowTime - PrevTime) / 1e3) : 0;
      
      PrevTime = NowTime;
      PrevTick = Tick;
    }
    else
      Ping = 0;
  }

  return(Res);
}

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

Автор: fxsaber

 

Просьба поделиться статой индикатора на VPS  с мин. сетевым пингом.


У меня на индикаторе бывают всплески до полусекунды на локальной машине, к которой не подхожу.


В советниках не мониторил долго, но десяток миллисекунд - обыденность.


В общем, ложка дегтя в бочке MT5 (в MT4 не лучше).


ЗЫ Кто торгует через отложенники (лимитные заявки на бирже, например), того этот недуг их задевает в гораздо меньшей степени, чем маркет-торговля (особенно скальпинг).

 

Биржевой символ Si-12.17 MetaQuotes-Demo


Лаг достигал двух секунд при сетевом пинге < 0.1 секунды. Возможно, это из-за намешивания котировочного и сделочного потоков задним числом. Плохо, короче.

 

А средний почему-то очень маленький

вот за секунду выброс появился


 
Maxim Dmitrievsky:

А средний почему-то очень маленький

На самом деле не маленький ~ 5 мс. Камень в огород страждущих нулевого пинга.

вот за секунду выброс появился

На фоне таких всплесков среднее, конечно, незаметно.


История вопроса такова, что возникли непонятки при торговле на MT4 ECN, где свои же лимитки влияют на ценообразование и виден стакан. Историю тиков не посмотреть в MT4, но благо есть и MT5 с теми же данными. Поэтому я тупо записал несколько часов на видео сам терминал со всеми стаканами во время активной торговли. И стал анализировать, подключая в качестве источников полученное видео, MT5+ZoomPrice и результаты MQL4-скрипта по реджектам и особенностям исполнения.


В итоге обнаружил, что MT4 показывает какую-то ерунду - либо цен таких не было на истории (MT5+ZoomPrice и стаканы на видео), либо были, но часть пропущена, а часть цен длится гораздо дольше, чем на истории. По итогу понял, что тормозит сам MT4. В истории MT5 все было идеально. Но сомнения закрались нехорошие, индикатор подтвердил.


Теперь есть понимание, что доверять актуальности текущих цен в MT5 нельзя в полной мере. Сторонние приложения (стаканы, записанные на видео), показывают в реал-тайме цены гораздо точнее, чем MT4, и, видимо, MT5. Не знаю пока, как сравнить, чтобы подтвердить, т.к. из сторонних стаканов через MQL не вытащить данные напрямую. Но уже полученного результата хватает, чтобы увидеть реально серьезную проблему лага платформы. И все заявления про высокую скорость просто рушатся, когда наблюдаешь такое.


Да, OrderSendAsync быстр, но перед тем, как его отправлять, надо сориентироваться на текущие цены, а они тормозят.

 
fxsaber:


Да, OrderSendAsync быстр, но перед тем, как его отправлять, надо сориентироваться на текущие цены, а они тормозят.


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

мне такое один брокер рекомендовал помню :))

 
Maxim Dmitrievsky:

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

Оставил только торгуемые пары и 5000 баров на чарт. Сейчас можно точно утверждать, что советники, которые основаны на индикаторах (стандартные или iCustom) тормозят, потому что факт всплесков лагов у индикаторов доказан. Поэтому желательно от iCustom отказываться в пользу встройки в советник через ООП.


Да и, собственно, изначально же было заявлено, что индикаторы в советниках - это узкое горлышко, т.к. все индикаторы в одном потоке выполняются, в отличие от советников. Лаги в советниках требуют отдельного исследования. Функция получения лагов в описании, так что не сложно.

 

Для самоконтроля в коде есть такая строка (раскомментировал):

Print(TickToString(Tick) + TOSTRING(Ping));


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

2017.11.16 20:08:19.602 Ping (EURUSD,M1)         time = 2017.11.16 20:07:58.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_ASK
2017.11.16 20:08:19.602 Ping (EURUSD,M1)        Ping = 2.425000000000182
2017.11.16 20:08:23.142 Ping (EURUSD,M1)         time = 2017.11.16 20:08:01.212 bid = 1.17712 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.142 Ping (EURUSD,M1)        Ping = 541.3899999999999
2017.11.16 20:08:23.603 Ping (EURUSD,M1)         time = 2017.11.16 20:08:02.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.603 Ping (EURUSD,M1)        Ping = 543.261

Желтым помечен столбец времени терминала, когда был получен тик (сам терминал пишет, не индикатор). А красным - время свежего тика.

Можно заметить, что разность между соседними красными записями отличается на ~540 мс по сравнению с разностью между соседними желтыми записями. Это и есть живой пример лагов терминала, когда Вы видите якобы актуальную цену, а ее уже пол секунды, как не существует на самом деле.

 
Если закомментировать следующую строку
  if (SymbolInfoTick(_Symbol, Tick, Ping))// &&
//      (!IsIndicator || (Count++ > 1))) // SymbolInfoTick в индикаторах требует "разогрева" в виде нескольких первых Calculate-событий


то сразу после запуска будет такой результат

2017.11.17 12:00:55.879 Ping (EURUSD,M1)         time = 2017.11.17 12:00:32.418 bid = 1.17925 ask = 1.17928 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.17 12:00:55.879 Ping (EURUSD,M1)        Ping = 0.0
2017.11.17 12:00:56.399 Ping (EURUSD,M1)         time = 2017.11.17 12:00:35.720 bid = 1.17923 ask = 1.17925 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
2017.11.17 12:00:56.399 Ping (EURUSD,M1)        Ping = 2781.549

Почти три секунды "лаг"! Причина простая - при запуске любого индикатора происходит форсированный первый вызов OnCalculate и тик берется старый. Это то же самое, что нажать "Обновить" на чарте.

В таком поведении индикаторов нет ошибки, нужно только осознавать, чем является первый запуск OnCalculate. В советниках форсированного вызова OnTick не происходит, поэтому там все однозначно.

 

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

Но нам этого никогда не узнать без комментариев разработчиков и\или обладания серверной частью

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

 
Maxim Dmitrievsky:

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

Биржевые символы на MetaQuotes-Demo с 15-минутной задержкой никаким фильтром точно не обладают.

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

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

Правда ли, что у некоторых брокеров запаздывают котировки?

fxsaber, 2017.11.17 11:20

В MT4/5 нужно аккуратно относиться к понятию актуальности цены.

Два терминала на одной и той же машине, подключенные к одному и тому же счету, будут рассинхронизированы в довольно большом диапазоне.

Это надо лечить разработчикам, т.к. любую скоростную MT5-характеристику можно вполне аргументировано, мягко говоря, исказить.
Причина обращения: