MetaQuotes Software
MetaQuotes Software Блог компании MetaQuotes Software
12 сентября 2016, 15:50

Cравниваем MQL5 и QLUA - почему роботы на MQL5 до 28 раз быстрее?



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

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

12 сентября 2016 года были проведены три замера скорости на реальном счете БД «Открытие» на MetaTrader 5 build 1415 и Quik 7.2.23 в одно и то же время.

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

Условия испытаний

Оба терминала установлены на арендованном сервере VPS в Москве, как и сами торговые серверы БД «Открытие». Торговля велась на одном и том же реальном счете в срочной секции Московской биржи инструментом Si-9.6.

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

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

Результаты сравнения скорости операций: MetaTrader 5 vs QUIK

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

Тест                   MetaTrader 5    QUIK      Выигрыш MT5
Синхронные операции        9.59 ms   277.80 ms  28.96 раз
Асинхронная                0.09 ms     0.30 ms   3.33 раза
Обновлений стакана        42.7 в сек   8.40      5.08 раза

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

 

Видео сравнения скорости торговых операций


MetaTrader 5 быстрее QUIK в торговых операциях до 28 раз

Проведенные замеры показали, что язык MQL5 значительно опережает QLUA как в проведении торговых операций на Московской бирже, так и просто в сканировании стакана заявок. Торговые роботы, написанные на языке MQL5, не только считают в 50-100 раз быстрее, но и торгуют до 28 раз быстрее. И при этом вам не нужно изобретать свои велосипеды — приводы, коннекторы и т.д. К вашим услугам готовые торговые классы стандартной библиотеки и масса статей по автоматизации трейдинга.

Надежный торговый робот просто обязан проверять результаты отправки торговых операций — то есть, дожидаться ответа от торгового сервера. Тесты доказали, что MetaTrader 5 значительно быстрее в синхронных операциях. Если же вам нужны асинхронные операции — то и здесь скорость в 3 раза выше. Требуется анализировать поток заявок — и тут MetaTrader 5 даст вам преимущество по сравнению с QUIK за счет в 5 раз более быстрого потока котировок без снапшотов.

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

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

 

Детальные отчеты по сравнению терминалов

Программа на QLUA при замере времени обращается к системному таймеру операционной системы, который по умолчанию имеет погрешность измерения в пределах в 10…15.6 миллисекунда (чаще всего — 15.6 мс). Поэтому мы повысили точность замеров времени в QLUA простым повышением точности системного таймера до 1 ms.

Сделано это с помощью скрипта на SpeedupSystemTimer.mq5, который вызывает функцию timeBeginPeriod системной библиотеки Winmm.dll

#import "winmm.dll"
int timeBeginPeriod(uint per);
#import

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }

Этот скрипт мы запустили перед началом тестов в терминале MetaTrader 5 и разрешив вызов DLL, в результате чего обеспечили погрешность измерений операций в терминале QUIK не более 1 миллисекунды.

В языке MQL5 есть готовая функция GetMicrosecondCount(), поэтому замеры в терминале MetaTrader 5 делались с точностью 1 микросекунда (1 миллисекунда=1000 микросекунд).

#1 Тестирование скорости синхронных торговых операций

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

Сначала была проведена серия торговых операций через терминал MetaTrader 5 build 1415, затем такая же серия была произведена через терминал QUIK версии 7.2.23.

Суть испытания заключается в измерении среднего времени 10 синхронных операций покупки по рынку 1 лотом:

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

Измерение времени, затраченного на синхронную транзакцию, проводилось следующим образом:

  • В языке MQL5 есть синхронная функция OrderSend, а время легко замерить в начале и конце серии сделок.

  • В языке QLUA нет синхронной торговой функции и поэтому статус сделки приходится отлавливать отдельно. Время старта торговой операции замерялось непосредственно перед вызовом sendTransaction () с помощью функции os.closck().

    Успешное выполнение транзакции отслеживалось во встроенном обработчике OnOrder() на первом вызове в момент, когда приходило событие о совершении сделки на бирже. Разница между этими событиями и есть время, потраченное на выполнение торговой операции.
Результаты замеров показывают, что в синхронных операциях MetaTrader 5 до 28 раз быстрее, чем QUIK.

 

#2 Тестирование скорости асинхронных торговых операций

В этом тесте все значительно проще. Десять раз подряд на биржу отправляется приказ на покупкуодного контракта фьючерса Si-9.16. Это позволило нам измерить среднее время асинхронной передачи в QLUA с точностью 1 ms / 10 = 0.10 ms. В MetaTrader 5 погрешности нет, так как в нем используется микросекундный таймер.

Мы не ждем никакого результата наших операций, за каждой отправкой заявки торговому серверу сразу же делается отправка новой заявки:

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
Как видно из результатов, в асинхронных операциях MetaTrader 5 в 3.33 раза быстрее, чем QUIK.

 

#3 Тестирование обновления стакана заявок

Ряд торговых стратегий строится на анализе потока заявок в стакане. В языке MQL5 событие изменения стакана можно отлавливать в обработчике OnBookEvent(), а в QLUA через OnQuote().

Тесты скорости обновления стаканов проводились с помощью следующих программ, которые доступны в приложенном ZIP-архиве:

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

В результате последовательного запуска этих программ на двух разных терминалах было зафиксировано, что стакан в MetaTrader 5 обновляется примерно в 5 раза чаще, чем в QUIK. Скорее всего QUIK просто лимитирует частоту обновлений стакана и не показывает все изменения.

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

 

Почему такая разница?

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

Именно поэтому мы показываем потрясающую производительность встроенного алгоритмического языка MQL5 и скорость торговых транзакций.
202 Комментария
  • ICWiener
    12 сентября 2016, 16:04
    Спасибо
  • Евгений
    12 сентября 2016, 16:13
    ТиМ, квик позволяет писать внешние расширения. Поэтому появились приводы, роботы. А вот Метак — система замкнутая. Поэтому она не получит распространения, и будет всегда системой номер 2, которую брокеры используют лишь для ценового давления на Арку.
  • St.Vitaliy
    12 сентября 2016, 16:20
    В МТ5 можно загрузить сторонние котировки?
  • Chepell
    12 сентября 2016, 16:21
    build 1415 мне как клиенту открытия не доступен. Более того, я даже у вас на сайте релиза не вижу
    www.metatrader5.com/ru/releasenotes

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн