Обсуждение статьи "Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?"

 

Опубликована статья Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?:

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

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

12 сентября 2016 года были проведены три замера скорости на реальном счете БД "Открытие" на MetaTrader 5 build 1415 и Quik 7.2.23 в одно и то же время. Каждый тест был призван измерить конкретную скоростную характеристику, важную с точки зрения алгоритмического трейдинга:
  1. Тестирование синхронных операций  — серия из 10 синхронных последовательных торговых операций Buy с подтверждением успешности выполнения каждой транзакции на бирже. Последующая операция не производится, пока не будет  получено подтверждение от торгового сервера, что операция прошла/не прошла на бирже. Скорость выполнения зависит от всей цепочки терминал — торговый сервер — биржа — торговый сервер — терминал. Чем меньше будет среднее время торговой синхронной операции, тем лучше.
  2. Тестирование асинхронных операций — серия из 10 асинхронных торговых операций Buy без подтверждения успешности выполнения транзакции. Это чистый тест на скорострельность, измеряющий скорость отправки заявок на биржу. Тут также лучшим будет тот терминал, у которого время выполнения 10-ти асинхронных покупок будет меньше.
  3. Тестирование обновления стакана заявок — замер скорости изменений заявок в Стакане. Это простой подсчет количества тиков (обновлений) Стакана в единицу времени. Чем чаще приходят котировки с биржи в торговый терминал, тем быстрее будет обновляться Стакан. Следовательно, чем больше тиков за секунду поступает в программу автоматической торговли, тем быстрее она может среагировать на изменения в структуре спроса/предложения на рынке. Лучшим будет тот терминал, в котором скорость обновления Стакана выше.

Результаты всех трех тестов собраны в сводной таблице, детальные результаты по каждому тесту представлены ниже отдельными разделами этой статьи.

Тест
MetaTrader 5
QUIK
Выигрыш MT5
Среднее время синхронной операции
9.59 ms277.80 ms28.96 раз
Среднее время асинхронной операции0.09 ms0.30 ms 3.33 раза
Скорость обновления стакана заявок
42.7 раза за сек8.4 раз за сек5.08 раза

Как видно из таблицы, MetaTrader 5 опережает по всем трем тестам со значительным отрывом. Желающие могут самостоятельно провести подобные испытания с помощью приложенных исходных кодов. Само тестирование представлено на видео ниже.


Автор: MetaQuotes Software Corp.

 

Пожалуйста, сделайте еще один тест скорости MT5 на реальном счете

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

Тестируем 'CopyTicks'

fxsaber, 2016.09.13 11:11

если через OrderSendAsync отправить два лимитника (BuyLimit1_price < BuyLimit2_price) внутрь спреда, то будет порождено биржей два подряд идущих тика с улучшением bid-цены в одно и то же время (с точностью до 1мс)?


 

Комментарии политических хейтеров на эту статью

MetaQuotes Software Corp. / Клуб трейдеров sMart-Lab. Мы делаем деньги на бирже.
MetaQuotes Software Corp. / Клуб трейдеров sMart-Lab. Мы делаем деньги на бирже.
  • smart-lab.ru
Мы рады сообщить об интеграции с LMAX Exchange — многосторонней площадкой (Multilateral Trading Facility, MTF) для торговли валютами, драгоценными металлами и индексами. Шлюз MetaTrader 5 к LMAX Exchange предлагает брокерам, фондам и профессиональным трейдерам доступ к потоковой ликвидности с использованием лимитных ордеров, прозрачное...
 
//--- пропускаем первые тики для первичной очистки очереди и разогрева
   tickcounter++;
   if(tickcounter<ExtSkipFirstTicks)
      return;

 

Требуется пояснение про влияние очереди и разогрева на производительность.

 

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

Скорость исполнения ордеров

Renat Fatkhullin, 2016.09.01 17:53

Не МТ5 теряет, а Plaza II. Именно у нее удивительный для 2016 года механизм снапшотинга на подтверждениях в 10 мс. То есть, она отдает подтверждения блоками раз в 10 мс.

На следующей неделе Открытие включит режим снапшотинга Плазы в 3 мс и тем самым мы еще выиграем в среднем от 5 до 7 мс при исполнении.

А сам МТ5 на внутренний процессинг, включая свой шлюз, тратит меньше 1 мс. В новых версиях еще меньше будет тратить за счет очередных оптимизаций процессов на пару сотем микросекунд.

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

Скорость исполнения ордеров

Renat Fatkhullin, 2016.09.01 18:11

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

Если трейдер использует интерпретируемые языки типа QLUA/EasyLanguage, то он просто на обвязке теряет миллисекунды и даже не в курсе этого. Не говоря уже о том, что его программа из ядра платформы может получать уведомления об активности на рынке тоже с существенными задержками в сотни микросекунд и даже миллисекунд.

Именно поэтому мы столько сил тратим на оптимизацию MQL5 и шаг за шагом вылизываем узкие места, выигрывая десятки и сотни микросекунд.


Недавно мы показали скорость отображения данных в трех терминалах Quik, MetaTrader 5 и SmartX на MOEX.

Смотреть открытие рынка надо с 00:50 примерно: победитель сразу виден


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

Скорость исполнения ордеров

Renat Fatkhullin, 2016.09.01 20:29

у нас в чистом виде transaction based механизма доставки данных в отличие от конкурентов с snapshot based. Именно поэтому у нас все одиночные транзакции(тики - это тоже транзакции) доставляются мгновенно и без задержек. 

Например, у Квика графики вообще живут своей снапшотовой жизнью в отрыве от потока тиков. Именно поэтому там графики визуально тормозят по сравнению с МетаТрейдером. Стакан в Квике вообще до 5 раз медленнее обновляется по сравнению с MT5 - мы это точно замеряли. Скорее всего обновления стакана там тоже снапшотами, чтобы не перегружать терминал и инфраструктуру.

А мы честно стримим все данные транзакционно без задержек и снапшотов.



 

Мы записали на видео все три теста одним роликом, чтобы было видно:

  1. торговые операции проводились на одном и том же реальном счете;
  2. и на одном и том же инструменте Si-9.16;
  3. на одном и том же компьютере;
  4. торговые операции проводились в одно и то же время;
  5. в одних и тех же рыночных условиях;
  6. скорости обновления стаканов замерялись на одном и том же инструменте и в одно и то же время;
  7. сетевая задержка до серверов Открытия была 2 мс.

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

А то можно MT5 на спокойном рынке запустить, а QUICK - на новостях. И показатели разойдутся совсем. 

 
fxsaber:


Требуется пояснение про влияние очереди и разогрева на производительность.

Если посмотрите это видео, то увидите, что перед началом торговой сессии проходят несколько одиночных обновлений стакана. Поэтому скрипт пропускает первые N тиков, чтобы убедиться, что пошел настоящий плот поток заявок в стакане. И только после этого начинает считать тики.


 
fxsaber:

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

Все тесты снимались последовательно одним куском за один раз чтобы соблюсти чистоту замеров.
 
Rashid Umarov:
Все тесты снимались последовательно одним куском за один раз чтобы соблюсти чистоту замеров.
Тогда выводы, касаемые стаканов, логично могут быть подвержены сомнению.
 
fxsaber:
Тогда выводы, касаемые стаканов, логично могут быть подвержены сомнению.
Коды предоставлены, любой может проверить самостоятельно и убедиться в обоснованности выводов. Здесь проблем нет.
 
Rashid Umarov:

Если посмотрите это видео, то увидите, что перед началом торговой сессии проходят несколько одиночных обновлений стакана. Поэтому скрипт пропускает первые N тиков, чтобы убедиться, что пошел настоящий плот поток заявок в стакане. И только после этого начинает считать тики.


На видео показано начало сессии. А на видео из статьи - самый "сок". Да и

input ulong ExtSkipFirstTicks=10;  // количество пропускаемых тиков на старте

количество маловато для начала сессии. Раскройте, пожалуйста, что такое "очередь" и "разогрев".

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