В результате они не знают, что легко могут улучшить качество исполнения своих сделок за счет более быстрой реакции и скорости проведения транзакций.
12 сентября 2016 года были проведены три замера скорости на реальном счете БД «Открытие» на MetaTrader 5 build 1415 и Quik 7.2.23 в одно и то же время.Оба терминала установлены на арендованном сервере VPS в Москве, как и сами торговые серверы БД «Открытие». Торговля велась на одном и том же реальном счете в срочной секции Московской биржи инструментом Si-9.6.
Мы записали на видео все три теста одним роликом, чтобы было видно:
Результаты всех трех тестов собраны в сводной таблице, детальные результаты по каждому тесту представлены ниже отдельными разделами этой статьи.
Тест 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 опережает по всем трем тестам со значительным отрывом. Желающие могут самостоятельно провести подобные испытания с помощью приложенных исходных кодов. Само тестирование представлено на видео выше.
Проведенные замеры показали, что язык 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 лотом:
Измерение времени, затраченного на синхронную транзакцию, проводилось следующим образом:
#2 Тестирование скорости асинхронных торговых операций
В этом тесте все значительно проще. Десять раз подряд на биржу отправляется приказ на покупкуодного контракта фьючерса Si-9.16. Это позволило нам измерить среднее время асинхронной передачи в QLUA с точностью 1 ms / 10 = 0.10 ms. В MetaTrader 5 погрешности нет, так как в нем используется микросекундный таймер.
Мы не ждем никакого результата наших операций, за каждой отправкой заявки торговому серверу сразу же делается отправка новой заявки:
#3 Тестирование обновления стакана заявок
Ряд торговых стратегий строится на анализе потока заявок в стакане. В языке MQL5 событие изменения стакана можно отлавливать в обработчике OnBookEvent(), а в QLUA через OnQuote().
Тесты скорости обновления стаканов проводились с помощью следующих программ, которые доступны в приложенном ZIP-архиве:
В результате последовательного запуска этих программ на двух разных терминалах было зафиксировано, что стакан в MetaTrader 5 обновляется примерно в 5 раза чаще, чем в QUIK. Скорее всего QUIK просто лимитирует частоту обновлений стакана и не показывает все изменения.
Так как все исходные коды приложены тут же, любой желающий может самостоятельно воспроизвести эти тесты и убедиться лично в представленных результатах.
Мы фанатично относимся к производительности и боремся за каждый десяток микросекунд, годами оптимизируя торговую платформу.
Именно поэтому мы показываем потрясающую производительность встроенного алгоритмического языка MQL5 и скорость торговых транзакций.
www.metatrader5.com/ru/releasenotes