English 中文 Español Deutsch 日本語 Português
Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?

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

MetaTrader 5Примеры | 13 сентября 2016, 11:11
143 768 69
MetaQuotes
MetaQuotes

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

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

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 ms277.80 ms28.96 раз
Среднее время асинхронной операции0.09 ms0.30 ms 3.33 раза
Скорость обновления стакана заявок
42.7 раза за сек8.4 раз за сек5.08 раза

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


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




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

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

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

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

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

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

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

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


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

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

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

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


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

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

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

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

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

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


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

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

Именно поэтому мы показываем потрясающую производительность встроенного алгоритмического языка MQL5 и скорость торговых транзакций.
Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (69)
s_mike
s_mike | 5 сент. 2017 в 16:04
Renat Fatkhullin:

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

Чего словами разбрасываетесь на уровне банальной эрудиции и не зная, что из себя представляет LUA?


Есть два языка, которые сравнивались.

И один проигрывает другому в 50-600 раз по скорости, а в связке с торговой платформой на чистых торговых транзакциях, где минимум языковой обвязки в 28 раз.

Сам Квик не имеет глубокой интеграции с языком, который просто прилеплен сбоку. А MetaTrader 5 построен вокруг обеспечения нужд MQL5, когда все данные готовы именно под использование в MQL5. Причем язык LUA создавался именно как обвязка между высокоуровневыми вызовами, но никак не для расчетных операций.


Написать модули на С++, а потом их распространять? Кто рискнет ставить себе чужие EXE/DLL в торговое окружение?

А вот на MQL5 это безопасно, так как на MQL5 получаешь безопасный код и практически такую же скорость, как и в С++.


Тем, кто живет в Квике, неведомы понятия настоящих данных.

Вот когда сможете в LUA повторить следующий код, возвращайтесь обсуждать "огромные массивы":

Запуск холодный, за 2.6 секунды было выдано 17 миллионов реальных тиков RTS-9.17 и 60 278 минутных баров.

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

Вот именно такими данными и оперируют MQL программы. И сам терминал оперирует именно такими данными при своей работе.

А вы про какие-то таблички говорите.


Вы просто не в курсе языка и его внутренностей. Поэтому для вас все языки одинаковы.

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

А вы понимаете с кем разговариваете вы?

Когда вас ещё в планах не было, человек, ваш собеседник спортировал компилятор ansi C  vax на pdp-11. 

Не могу удeржаться: баран.

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

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

"Мы написали тестер, теперь  амиброкер и велслаб вам не нужен." Тоже в 600 раз быстрее? Клоуны.

"Мы можем отправить в 28 раз больше транзакций чем Квик. Нахрена??? Для
 Этого есть fix, он ещё в 28 раз быстрее.

Мы можем в 100 раз быстрее сложить 1+1. Даже если так (а это не так) нахрена? Пропускная способность инфраструктуры все равно определяюща. Вы на феррари быстрее доедете из Химок в Видное, чем на солярисе? 

Все это пузыри и болтовня. Пиар для привлечения лошков. Впрочем это и есть ваша целевая аудитория.



Блокируйте меня уж. Стихоплеты.
MetaQuotes
Renat Fatkhullin | 5 сент. 2017 в 16:06

Видимо, слишком вы старый для соревнования. На словах тут не выигрывают.

С богом.

prostotrader
prostotrader | 5 сент. 2017 в 16:23

Блин, да какая разница во сколько раз быстрее?!!!!

На ФОРТС, например, на один логин 30 тразакций в секунду!!!

По-барабану, что МТ5, что КВИК + сети брокеров оставляют желать лучшего!

А вот что не по-барабану, то это возможность ПОЛНОЦЕННОЙ торговли на бирже - Опционы + Фьючерсы + Валюта + Спот!!!!

На рынке нет ни одного ПО для полноценной биржевой торговли роботами (LUA, QLUA - ПРОСТО ОТСТОЙ)!

MetaQuotes
Renat Fatkhullin | 5 сент. 2017 в 16:30
prostotrader:

Блин, да какая разница во сколько раз быстрее?!!!!

На ФОРТС, например, на один логин 30 тразакций в секунду!!!

У брокерских шлюзов лимиты больше.

Даже один клиент брокера может получить больше 30 транзакций в секунду через MetaTrader 5. Но понятно, что до какого-то момента будут терпеть.


К сожалению, российская биржа не может или не хочет кардинально обновиться и унифицировать свою систему. Отсюда и удручающая ситуация с трейдинговыми технологиями российского сектора на протяжении 20 лет - туда никто вкладываться не хочет.

Dmitriy Skub
Dmitriy Skub | 5 сент. 2017 в 16:34
prostotrader:

Блин, да какая разница во сколько раз быстрее?!!!!

На ФОРТС, например, на один логин 30 тразакций в секунду!!!

За доп плату можно до 600 довести))

LifeHack для трейдера: "Тихая" оптимизация или Строим распределения трейдов LifeHack для трейдера: "Тихая" оптимизация или Строим распределения трейдов
Анализ торговой истории и построение HTML графиков распределения результатов торговли в зависимости от времени входа в позицию. Графики отображаются в трех разрезах – по часам, дням недели и месяцам.
Портфельная торговля в MetaTrader 4 Портфельная торговля в MetaTrader 4
В статье обсуждаются принципы портфельной торговли и особенности применения к валютному рынку. Рассматриваются несколько простых математических моделей для формирования портфеля. Приводятся примеры практической реализации портфельной торговли в MetaTrader 4: портфельный индикатор и советник для полуавтоматической торговли. Описываются элементы торговых стратегий, их достоинства и "подводные камни".
Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 3) Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 3)
В этой статье представлена следующая версия библиотеки Easy And Fast (версия 3). Исправлены некоторые недоработки и добавлены новые возможности. Подробнее читайте далее в статье.
Рецепты MQL5 - Торговые сигналы скользящих каналов Рецепты MQL5 - Торговые сигналы скользящих каналов
В статье представлен процесс разработки и реализации класса-сигнальщика на основе скользящих каналов. За каждой из версий сигнала следует торговая стратегия с результатами тестирования. Используются классы Стандартной библиотеки для создания производных классов.