Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
Многие трейдеры зачастую не задумываются над тем, как быстро доходит их заявка до биржи, как долго она там исполняется и когда торговый терминал трейдера узнает о результате.
В результате они не знают, что легко могут улучшить качество исполнения своих сделок за счет более быстрой реакции и скорости проведения транзакций.
- Тестирование синхронных операций — серия из 10 синхронных последовательных торговых операций Buy с подтверждением успешности выполнения каждой транзакции на бирже. Последующая операция не производится, пока не будет получено подтверждение от торгового сервера, что операция прошла/не прошла на бирже. Скорость выполнения зависит от всей цепочки терминал — торговый сервер — биржа — торговый сервер — терминал. Чем меньше будет среднее время торговой синхронной операции, тем лучше.
- Тестирование асинхронных операций — серия из 10 асинхронных торговых операций Buy без подтверждения успешности выполнения транзакции. Это чистый тест на скорострельность, измеряющий скорость отправки заявок на биржу. Тут также лучшим будет тот терминал, у которого время выполнения 10-ти асинхронных покупок будет меньше.
- Тестирование обновления стакана заявок — замер скорости изменений заявок в Стакане. Это простой подсчет количества тиков (обновлений) Стакана в единицу времени. Чем чаще приходят котировки с биржи в торговый терминал, тем быстрее будет обновляться Стакан. Следовательно, чем больше тиков за секунду поступает в программу автоматической торговли, тем быстрее она может среагировать на изменения в структуре спроса/предложения на рынке. Лучшим будет тот терминал, в котором скорость обновления Стакана выше.
Условия испытаний
Оба терминала установлены на арендованном сервере VPS в Москве, как и сами торговые серверы БД "Открытие". Торговля велась на одном и том же реальном счете в срочной секции Московской биржи инструментом Si-9.6.
Мы записали на видео все три теста одним роликом, чтобы было видно:
- торговые операции проводились на одном и том же реальном счете;
- и на одном и том же инструменте Si-9.16;
- на одном и том же компьютере;
- торговые операции проводились в одно и то же время;
- в одних и тех же рыночных условиях;
- скорости обновления стаканов замерялись на одном и том же инструменте и в одно и то же время;
- сетевая задержка до серверов Открытия была 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.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() на первом вызове в момент, когда приходило событие о совершении сделки на бирже. Разница между этими событиями и есть время, потраченное на выполнение торговой операции.
#2 Тестирование скорости асинхронных торговых операций
В этом тесте все значительно проще. Десять раз подряд на биржу отправляется приказ на покупку одного контракта фьючерса Si-9.16. Это позволило нам измерить среднее время асинхронной передачи в QLUA с точностью 1 ms / 10 = 0.10 ms. В MetaTrader 5 погрешности нет, так как в нем используется микросекундный таймер.
Мы не ждем никакого результата наших операций, за каждой отправкой заявки торговому серверу сразу же делается отправка новой заявки:
- AsyncTradeTest.mq5
- AsyncTradeTest.lua
#3 Тестирование обновления стакана заявок
Ряд торговых стратегий строится на анализе потока заявок в стакане. В языке MQL5 событие изменения стакана можно отлавливать в обработчике OnBookEvent(), а в QLUA через OnQuote().
Тесты скорости обновления стаканов проводились с помощью следующих программ, которые доступны в приложенном ZIP-архиве:
- MarketUpdateTest.mq5
- MarketUpdateTest.lua
В результате последовательного запуска этих программ на двух разных терминалах было зафиксировано, что стакан в MetaTrader 5 обновляется примерно в 5 раза чаще. Скорее всего QUIK просто лимитирует частоту обновлений стакана и не показывает все изменения.
Почему такая разница?
Мы фанатично относимся к производительности и боремся за каждый десяток микросекунд, годами оптимизируя торговую платформу.
Именно поэтому мы показываем потрясающую производительность встроенного алгоритмического языка MQL5 и скорость торговых транзакций.- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вы сначала докажите свои слова своим кодом в противовес нашим доказательствам.
Чего словами разбрасываетесь на уровне банальной эрудиции и не зная, что из себя представляет LUA?
Есть два языка, которые сравнивались.
И один проигрывает другому в 50-600 раз по скорости, а в связке с торговой платформой на чистых торговых транзакциях, где минимум языковой обвязки в 28 раз.
Сам Квик не имеет глубокой интеграции с языком, который просто прилеплен сбоку. А MetaTrader 5 построен вокруг обеспечения нужд MQL5, когда все данные готовы именно под использование в MQL5. Причем язык LUA создавался именно как обвязка между высокоуровневыми вызовами, но никак не для расчетных операций.
Написать модули на С++, а потом их распространять? Кто рискнет ставить себе чужие EXE/DLL в торговое окружение?
А вот на MQL5 это безопасно, так как на MQL5 получаешь безопасный код и практически такую же скорость, как и в С++.
Тем, кто живет в Квике, неведомы понятия настоящих данных.
Вот когда сможете в LUA повторить следующий код, возвращайтесь обсуждать "огромные массивы":
Запуск холодный, за 2.6 секунды было выдано 17 миллионов реальных тиков RTS-9.17 и 60 278 минутных баров.
Внутри платформы используются неограниченные пределы для данных. Эти данные используются для построения индикаторов, анализа и тд.
Вот именно такими данными и оперируют MQL программы. И сам терминал оперирует именно такими данными при своей работе.
А вы про какие-то таблички говорите.
Вы просто не в курсе языка и его внутренностей. Поэтому для вас все языки одинаковы.
Вообще хотя бы понимаете, что общаетесь с человеком, который создает языки программирования и борется за эффективность и производительность ?
Видимо, слишком вы старый для соревнования. На словах тут не выигрывают.
С богом.
Блин, да какая разница во сколько раз быстрее?!!!!
На ФОРТС, например, на один логин 30 тразакций в секунду!!!
По-барабану, что МТ5, что КВИК + сети брокеров оставляют желать лучшего!
А вот что не по-барабану, то это возможность ПОЛНОЦЕННОЙ торговли на бирже - Опционы + Фьючерсы + Валюта + Спот!!!!
На рынке нет ни одного ПО для полноценной биржевой торговли роботами (LUA, QLUA - ПРОСТО ОТСТОЙ)!
Блин, да какая разница во сколько раз быстрее?!!!!
На ФОРТС, например, на один логин 30 тразакций в секунду!!!
У брокерских шлюзов лимиты больше.
Даже один клиент брокера может получить больше 30 транзакций в секунду через MetaTrader 5. Но понятно, что до какого-то момента будут терпеть.
К сожалению, российская биржа не может или не хочет кардинально обновиться и унифицировать свою систему. Отсюда и удручающая ситуация с трейдинговыми технологиями российского сектора на протяжении 20 лет - туда никто вкладываться не хочет.
Блин, да какая разница во сколько раз быстрее?!!!!
На ФОРТС, например, на один логин 30 тразакций в секунду!!!
За доп плату можно до 600 довести))