Сравнение скорости тестирования в MetaTrader 4 и MetaTrader 5

 

При разработке MetaTrader 5 мы с самого начала во главу угла поставили максимальную точность моделирования рыночного окружения.

Причем даже для режима "По ценам открытия баров" мы продолжали контролировать срабатывание ордеров при каждом тике, что в результате требовало гораздо больше времени при обработке миллионов промежуточных тиков. Нам справедливо указывали, что из-за такого подхода этот режим тестирования в MetaTrader 5 сильно отставал от аналогичного режима в MetaTrader 4. Это не давало возможности проводить в пятерке быстрые оценочные тесты по ценам открытия баров.

В результате мы приняли решение применить в MetaTrader 5 упрощенный режим тестирования с сохранением механизмов мутивалютного анализа.

Ниже я привожу результаты тестов MetaTrader 4 build 418 и MetaTrader 5 build 617. Это новые версии программ, которые выйдут в эту пятницу.

Условия тестирования:

  • компьютер: Windows 7 x64, RAM 8Gb, i7-2600 3.4Ghz, 8 ядер
  • одинаковые штатные советники Moving Average из поставки терминалов МТ5 и MT4
  • символ EURUSD, H1
  • период тестирования 2011.01.01 - 2011.10.01
  • история одинаковая (MetaQuotes-Demo MT5 и MetaQuotes-Demo MT4 + History Center), в History Center 100% совпадающая минутная история из МТ5
  • депозит 10 000 USD
  • настройки экспертов


Используется полностью идентичная история и полностью одинаковые настройки символов - для этого минутная история инструментов из МТ5(как наиболее точная) скопирована на History Center MT4. Эксперты абсолютно одинаковые и показывают одинаковые по сути результаты операций как в МТ4, так и в МТ5. Количество сделок совпадает, входы/выходы - тоже. Небольшая разница в итоговом профите проявляется из-за того, что в МТ5 происходит точное моделирование спреда, а в МТ4 - спред фиксированный.

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

Терминал
 Все тики
По ценам открытия
Баланс
MetaTrader 4 build 418
13 сек (12 520 048 тиков)
0.5 сек (10 323 тика)
 8515.64
MetaTrader 5 build 617 x64
16 сек (15 515 315 тиков)
0.2 сек (17 971 тиков) 8972.70


Видно, что в режиме моделирования всех тиков время у MT4 и MT5 практически совпадает: 13 сек при 12 млн тиков у МТ4 и 16 сек при 15 млн тиков у MT5. С учетом того, что МТ5 смоделировал и просчитал на 3 млн тиков больше, скоростные характеристики одинаковые:

  • MetaTrader 4:  12 520 048 тиков / 13 секунд = 963 080 тиков в секунду
  • MetaTrader 5:  15 515 315 тиков / 16 секунд = 969 707 тиков в секунду  (даже чуть быстрее)

Интересная ситуация с режимом тестирования по ценам открытия. MetaTrader 5 даже при бОльшем количестве сгенерированных тиков смог обогнать MetaTrader 4 в одиночном прогоне. Хотя время в пределах секунды очень малое и тут может играть роль погрешность измерения.


Проведем оптимизацию с указанными выше пределами в настройках. Для того, чтобы уложиться в разумное время, тесты велись на 1 254 прохода в режиме по ценам открытия. MetaTrader 4 использовал одно ядро, а MetaTrader 5 восемь локальных ядер.

Терминал
Время тестирования 1254 проходов по ценам открытия
MetaTrader 4 build 4188 сек
MetaTrader 5 build 617 x6413 сек


Видно, что время тестирования в MetaTrader 5 близкое ко времени MetaTrader 4. Отставание связано с накладными расходами на старт 8 независимых процессов тестерных агентов, перекачкой истории в них и восьмикратной подготовкой рыночного окружения к тестам (генерация тестовой последовательности и тд). У MetaTrader 4 нет внешних тестерных агентов и накладные расходы сведены к минимуму. Да и мультивалютного режима нет, что тоже требует ресурсов и архитектурно гораздо сложнее.

При выборе задач со временем прохода больше долей секунды MetaTrader 5 безусловно вырывается вперед даже в режиме по открытию баров. С применением MQL5 Cloud Network скорость еще больше возрастает.


Это небольшое доказательство скоростных характеристик MetaTrader 5. С субботы новый 617 билд MetaTrader 5 будет доступен через LiveUpdate.

 
  1. MT5 (несколько ядер задействовано) быстрее MT4 (одно ядро задействовано) в одиночном прогоне.
  2. 1254 одиночных прогонов на MT5 (8 агентов) медленнее такого же количества прогонов на MT4 (1 "агент").

Если вместо 8-ми агентов использовать один для оптимизации в MT5, то кто быстрее будет?

Если на MT5 повторно запустить оптимизацию по 8-ми агентам, у которых уже будет вся история, то во сколько уменьшается обшее время оптимизации?

Правильно ли я понимаю, что режим в MT5 "по ценам открытия" совпадает с режимом "по тикам", если считать, что бар имеет тиковый объем <=4? Если так, то такой режим не является аналогом одноименного режима в MT4. На это косвенно указывает почти в 2 раза большее количество "тиков" в режиме "по ценам открытия".

В FastHistory проделывал точно такое же преобразование истории в MT4, чтобы ускорить режим "по тикам" в разы и десятки раз, при этом получив идентичный результат. Но "по ценам открытия" режим еще быстрее, т.к. вся логика советника на баре запускается только один раз, а не до четырех. У вас же, похоже, в MT5 "по ценам открытия" запускается как раз до 4-х раз на бар. Из-за этого доп. тормоза. Конечно, эти тормоза можно почти убрать, внеся в советник в самом начале условие запуска логики только один раз - на открытии бара.

 

Почему в MT5-тестере нельзя запускать логику советника только один раз на бар изначально, а потом отложки сранивать с уровнями High (Bid и Ask) и Low (Bid и Ask) прошедшего бара, чтобы исполнить или нет их? И почему, если я правильно понял, отложники исполняются в этом режиме тестирования не по своим ценам, как это сделано в MT4, а в большинстве случаев, либо по High, либо по Low прошедшего бара?

 

Правильно ли понимаю, что MT5 еще тянет за собой соответствующую история мажоров, чтобы пересчитывать TickValue на каждом "тике"? Если тестировать только на одном символе (например, EURGBP) и в качества валюты депозита выбрать базовую валюту символа (для EURGBP это будет GBP), то никакие другие символы не будут тянуться еще в тестере, чтобы пересчитывать TickValue?

 

Ну и, наконец, вопрос вопросов. Если смоделированные тики в MT5 запихнуть в FXT-файл MT4, при этом не дав MT4-тестеру его пересчитывать, то кто в режиме "по тикам" будет быстрее? И будет ли совпадать результат (символ EURUSD, валюта депозита USD)?

FastHistory - MQL4 Code Base
  • www.mql5.com
FastHistory - MQL4 Code Base: скрипты для MetaTrader 4
 

MetaTrader5 даже загрузив все восемь ядер, не смог обогнать МТ4 работающего на одном ядре?

Круто ...

 
hrenfx:
  1. MT5 (несколько ядер задействовано) быстрее MT4 (одно ядро задействовано) в одиночном прогоне.
  2. 1254 одиночных прогонов на MT5 (8 агентов) медленнее такого же количества прогонов на MT4 (1 "агент").

Если вместо 8-ми агентов использовать один для оптимизации в MT5, то кто быстрее будет?

Проверил, на одиночном ядре получилось 32 секунды по сравнению с 8 секунд на МТ4. С этим будем разбираться - не должно такое получаться.

Если на MT5 повтороно запустить оптимизацию по 8-ми агентам, у которых уже будет вся история, то во сколько уменьшается обшее время оптимизации?

Проверил, тоже практически 13 секунд.


Правильно ли я понимаю, что режим в MT5 "по ценам открытия" совпадает с режимом "по тикам", если считать, что бар содержит имеет тиковый объем <=4? Если так, то такой режим не является аналогом одноименного режима в MT4. На это косвенно указывает почти в 2 раза большее количество "тиков" в режиме "по ценам открытия".

Не совпадает точно: запуск OnTick все равно происходит только на первом тике открытия бара, но все остальные рыночные проверки происходят и на остальных точках High/Low/Close.

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

В FastHistory проделывал точно такое же преобразование истории в MT4, чтобы ускорить режим "по тикам" в разы и десятки раз, при этом получив идентичный результат. Но "по ценам открытия" режим еще быстрее, т.к. вся логика советника на баре запускается только один раз, а не до четырех. У вас же, похоже, в MT5 "по ценам открытия" запускается как раз до 4-х раз на бар. Из-за этого доп. тормоза. 

Проверки идут по всем 4 точкам, но OnTick запускается на первом тике.


Почему в MT5-тестере нельзя запускать один раз, а потом отложки сранивать с уровнями High (Bid и Ask) и Low (Bid и Ask) прошедшего бара, чтобы исполнить или нет их? И почему, если я правильно понял, отложники исполняются в этом режиме тестирования не по своим ценам, как это сделано в MT4, а в большинстве случаев, либо по High, либо по Low прошедшего бара?

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


 Правильно ли понимаю, что MT5 еще тянет за собой соответствующую история мажоров, чтобы пересчитывать TickValue на каждом "тике"? 

Да, безусловно.

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



Но в примере с EURUSD моделирования дополнительного курса не требуется.

 Ну и, наконец, вопрос вопросов. Если смоделированные тики в MT5 запихнуть в FXT-файл MT4, при этом не дав MT4-тестеру его пересчитывать, то кто в режиме "по тикам" будет быстрее? И будет ли совпадать результат?

Попробуйте.
 
her.human:

MetaTrader5 даже загрузив все восемь ядер, не смог обогнать МТ4 работающего на одном ядре?

Вы почитайте описание тестов и про разницу тестеров в МТ4 и МТ5.

Это разный уровень моделирования рыночного окружения + мы лишь немного упростили режим по открытию бара в МетаТрейдер 5. В МТ4 этот режим совершенно простой ради скорострельности.

В МетаТрейдер 5 все усилия вложены в точность моделирования на каждом тике с полным построением такого же рыночного окружения по связанным курсам.

То есть, например для кроссов идет параллельное точное потиковое моделирование курсов для пересчета профитов в каждой точке. В итоге результаты тестирования в МетаТрейдер 5 не "шумят" в повторных проходах (например, через неделю) как в MetaTrader 4 где используются разные (последние/текущие из Market Watch) курсы пересчета профитов.

 
Renat:

Проверки идут по всем 4 точкам, но OnTick запускается на первом тике.

На Close бара же нет смысла проверять. Поэтому точек должно быть <= 3 (для Bid и для Ask).

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

Если выбрать CAD валюту в качестве валюты депозита в тестере, то мажоры буду тянуться?

Зачем вы для AUDCAD тянете еще и AUDUSD? Ведь для расчета TickValue достаточно только USDCAD, если валюта депозита USD. Для расчета маржи AUDUSD также не нужен, т.к. AUDUSD = AUDCAD / USDCAD.

Если валюту сделать отличной от USD, то какие символы будут еще тянутся?

Среди доп. проверок MT5-тестера имеется проверка на недопущение арбитража (между AUDUSD, USDCAD и AUDCAD)? Если да, то эта проверка делается на этапе подготовки тиков, или уже в процессе тестирования? Если нет, то мультивалютные граали на основе арбитража легко подорвут репутацию MT5-тестера в режиме "по тикам", и никакие доп. стресс-тесты не позволят такие стратегии загнать в минус (лишь уменьшат прибыль).

Попробуйте.

Попросим энтузиастов.
 
hrenfx:

На Close бара же нет смысла проверять. Поэтому точек должно быть <= 3 (для Bid и для Ask).

Почему нет смысла? Считаете, что Close всегда равен Open следующего бара? Это не так. Особенно в мультивалютном окружении.


Если выбрать CAD валюту в качестве валюты депозита в тестере, то мажоры буду тянуться?

Зачем вы для AUDCAD тянете еще и AUDUSD? Ведь для расчета TickValue достаточно только USDCAD, если валюта депозита USD.

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


Если валюту сделать отличной от USD, то какие символы будут еще тянутся?

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


Среди доп. проверок MT5-тестера имеется проверка на недопущение арбитража (между AUDUSD, USDCAD и AUDCAD)? Если да, то эта проверка делается на этапе подготовки тиков, или уже в процессе тестирования? Если нет, то мультивалютные граали на основе арбитража легко подорвут репутацию MT5-тестера в режиме "по тикам", и никакие доп. стресс-тесты не позволят такие стратегии загнать в минус (лишь уменьшат прибыль).

Нет, такие проверки не делаются - это против правил.

Тиковые граали (пипсовка или попытки арбитража) режутся режимом "произвольная задержка". При необходимости мы легко расширим режимы стресс-тестирования.

 

Renat:
Почему нет смысла? Считаете, что Close всегда равен Open следующего бара? Это не так. Особенно в мультивалютном окружении.

Нет. Просто если отложка сработала/ не сработала на High или/и Low-проверке, то проверка Close ничего не даст. Close - совершенно лишняя точка.

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

Пока вы писали ответ, дополнил свой пост выше мыслью про маржу. Кратко, тянуть AUDUSD все равно нет необходимости. 

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

Значит ли это, что если для AUDCAD выбрать CAD в качестве валюты депозита, то никакие символы, кроме AUDCAD тянутся не будут? И такой простой прием позволит ускорить тестирование?

 Тиковые граали (пипсовка или попытки арбитража) режутся режимом "произвольная задержка". При необходимости мы легко расширим режимы стресс-тестирования.

Раз тиковые граали будут душиться стресс-тестированием, то для чего тогда такая точность проверок в тестере? Ведь если стратегия не пипсовочная, то и супер-точность тестера не нужна. Верно?

Напишите хотя бы самый простой арбитражник на трех  взаимосвязанных символах. И попробуйте его стресс-тестами загнать в минус, это в ваших интересах.

 
hrenfx:

Нет. Просто если отложка сработала/ не сработала на High и Low-проверке, то проверка Close ничего не даст. Close - совершенно лишняя точка.

На больших таймфреймах можно активировать отложку на проверки при High, а потом может оказаться, что у этой открытой позиции есть и SL/TP, которые могут сработать прямо на том же баре и во время перехода к Close.

Поэтому нужно и Close отрабатывать, не дожидаясь сработки на Open следующего бара и большим шансов потерять связанный сигнал на новом баре.


Пока вы писали ответ, дополнил свой пост выше мыслью про маржу. Кратко, тянуть AUDUSD все равно нет необходимости. 

Да, можно сыграть синтетическим курсом. Мысль здравая, будем думать. Хотя контраргумент тоже есть - точность, особенно на экзотике.


Значит ли это, что если для AUDCAD выбрать CAD в качестве валюты депозита, то никакие символы, кроме AUDCAD и AUDUSD тянутся не будут? И такой простой прием позволит ускорить тестирование?

Да, тянуться не будут и это даст ускорение. Это можете сами проверить на демо-счете, если найдете компанию с депозитами в CAD.

У нас есть в планах добавить галочку "Упрощенный режим моделирования связанных курсов", когда курсы пересчета будут фиксироваться и работать как в MT4. Это даст еще серьезное ускорение за счет потери точности.

Раз тиковые граали будут душиться стресс-тестированием, то для чего тогда такая точность проверок в тестере? Ведь если стратегия не пипсовочная, то и супер-точность тестера не нужна. Верно?

Не верно.

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

От нас наоборот требуют еще бОльшей точности - достаточно посмотреть на запросы потиковых котировок.


Напишите хотя бы самый простой арбитражник на трех  взаимосвязанных символах. И попробуйте его стресс-тестами загнать в минус, это в ваших интересах.

Писали когда-то давно еще на МТ4. Но сейчас в 2012 году при столь мизерных спредах (а они и дальше будут падать) есть большие сомнения в работоспособности таких арбитражеров.

Пока повторять времени нет, может кто-то сподобится и опубликует тут - это всем интересно будет.

 
Renat:

На больших таймфреймах можно активировать отложку на проверки при High, а потом может оказаться, что у этой открытой позиции есть и SL/TP, которые могут сработать прямо на том же баре и во время перехода к Close.

Согласен, не продумал такую ситуацию. С другой стороны, Close-цена может оказаться зависимой от лимитников (и тэйков) клиента, если речь идет о ECN-ценообразовании или биржевом. Для подобных правил ценообразования имеется возможность повысить точность тестирования прямым влиянием лимитников в тестере на цены. Спасибо за подсказку, внесу соответствующие коррективы в свою считалку. 

Да, можно сыграть синтетическим курсом. Мысль здравая, будем думать. Хотя контраргумент тоже есть - точность, особенно на экзотике.

Проблемы с точностью могут возникнуть только на сверх малоликвидной экзотике - SEK, NOK и подобные валюты в сочетаниях. Но нужна ли эта точность там?

Да, тянуться не будут и это даст ускорение. Это можете сами проверить на демо-счете, если найдете компанию с депозитами в CAD.

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

У нас есть в планах добавить галочку "Упрощенный режим моделирования связанных курсов", когда курсы пересчета будут фиксироваться и работать как в MT4. Это даст еще серьезное ускорение за счет потери точности.

Но не будет повторять режим, что написал выше. Т.е. по сравнению с классическим режимом при фикс. TickValue желательно результат каждого закрытия делить на TickValue. Или просто TickValue = 1 или дать возможность его задавать.

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

От нас наоборот требуют еще бОльшей точности - достаточно посмотреть на запросы потиковых котировок.

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

Понятно же, что стресс-тест точного тестера - это уже не точный тестер.

Критерий оценки точности тестера только один - степень совпадения с реалом.

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

Писали когда-то давно еще на МТ4. Но сейчас в 2012 году при столь мизерных спредах (а они и дальше будут падать) есть большие сомнения в работоспособности таких арбитражеров.

Чем меньше спреды, тем выше вероятность арбитражной ситуации. Более того, арбитраж работоспособен на реале, но это закрытая тема для обсуждения.

Пока повторять времени нет, может кто-то сподобится и опубликует тут - это всем интересно будет.

Попросим энтузиастов.
 
hrenfx:

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

Работающий продукт - это всегда компромисс среди множества противоречий. Есть еще требование - сохранить простоту тестера в режиме "одна кнопка и готово" и не отпугнуть трейдеров панелью из детальных настроек.

Все будет хорошо, и точность сохраним и скорость еще повысим.

А стресс-тесты для самопроверки трейдеру.

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