В общее пользование выложен исходник тикового тестера. Разберем его особенности.
Лаконичность.
Все спрятано в обертку, поэтому весь исходник выглядит так.
#property script_show_inputs #define REPORT_TESTER // В тестере будут автоматически записываться отчеты #define REPORT_BROWSER // Создание отчета с запуском браузера - требует разрешения DLL. #define VIRTUAL_LIMITS_TP_SLIPPAGE // Лимитники и TP исполняются по первой цене акцепта - положительные проскальзывания #define VIRTUAL_ALTERNATIVE // Альтернативная скорость расчетов #include <fxsaber\Virtual\VirtualTester_Script.mqh> // https://www.mql5.com/ru/code/22577 // Сюда прописываем советник. #include "EA.mq4" // https://www.mql5.com/ru/blogs/post/756829
Код несложный, поэтому можно сразу добраться до строки вызова ядра самого Тестера.
VIRTUAL::TesterMulti(this.Symbols, this.TicksArray, StrategyMulti, this.Balance, StopFlag, Netting)
Встроить Тестер для своих нужд несложно.
Мультисимвольная OnTick-функция.
В mq4-файле можно видеть, что из себя представляет функция, вызываемая на каждом тике.
// Мультисимвольный OnTick. void OnTickMulti( const string &Symb, const int &Index )
Тестер мультисимвольный, поэтому работает и в моносимвольном режиме.
Пока работает в режиме по пипсам (TickValue = 1). Пример адаптации под TickValue/Commission/Swap можно посмотреть здесь.
Пример.
Исходник выше - это повторение ранее выложенного советника для MT5-тестера. Что дает наглядную возможность сравнить два тестера между собой.
Логи.
Логи EA_Tester.ex5 в MT5-Тестере.
final balance 9950.82 pips OnTester result -49.17999999999999 TESTER_EURUSD,M1: 2711808 ticks, 78596 bars generated. Environment synchronized in 0:00:00.038. Test passed in 0:00:07.104 (including ticks preprocessing 0:00:01.047). TESTER_EURUSD,M1: total time from login to stop testing 0:00:07.142 (including 0:00:00.038 for history data synchronization) 6309318 total ticks for all symbols TESTER_EURUSD: generate 2711808 ticks in 0:00:00.453, passed to tester 2711809 ticks TESTER_USDJPY: generate 3597511 ticks in 0:00:00.594, passed to tester 3597510 ticks
Логи EA_VirtualTester.ex5 (прикреплен) в MT5-Терминале (скрипт).
Getting Ticks (2024.01.01 00:00:00 - 2024.03.19 00:00:00)... "TESTER_EURUSD" "TESTER_USDJPY" 1. TESTER_EURUSD: 2711808 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:55) 2. TESTER_USDJPY: 3597511 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:59) Calculating (CLASSIC) 6309319 ticks... final balance 9950.82 pips OnTester result -49.18000000001757 Test passed in 00:00:02.059 (including ticks preprocessing 00:00:00.529). total ticks for all symbols 6309319 (2024.01.02 00:00:00 - 2024.03.18 23:59:59) TESTER_EURUSD: generate 2711808 ticks in 00:00:00.232 TESTER_USDJPY: generate 3597511 ticks in 00:00:00.296 Performance: 4 122 051.3 ticks/sec., 00:00:01.530
Итоговый результат совпадает, различие только в скорости.
Benchmark-режим.
VirtualTester поддерживает Apart-режим для мультисимвольных ТС. Это дополнительный интерес к замеру скорости.
Логи Classic-режима при Benchmark=5.
Benchmark mode. Getting Ticks (2024.01.01 00:00:00 - 2024.03.19 00:00:00)... "TESTER_EURUSD" "TESTER_USDJPY" 1. TESTER_EURUSD: 2711808 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:55) 2. TESTER_USDJPY: 3597511 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:59) Calculating (CLASSIC) 6309319 ticks... 1/5: Performance = 4 119 069.6 [00:00:01.531](100.00%), Best = 4 119 069.6 ticks/sec [00:00:01.531] Calculating (CLASSIC) 6309319 ticks... 2/5: Performance = 4 120 985.1 [00:00:01.531](100.00%), Best = 4 120 985.1 ticks/sec [00:00:01.531] Calculating (CLASSIC) 6309319 ticks... 3/5: Performance = 4 127 131.3 [00:00:01.528](100.00%), Best = 4 127 131.3 ticks/sec [00:00:01.528] Calculating (CLASSIC) 6309319 ticks... 4/5: Performance = 4 103 139.0 [00:00:01.537](99.42%), Best = 4 127 131.3 ticks/sec [00:00:01.528] Calculating (CLASSIC) 6309319 ticks... 5/5: Performance = 4 093 449.0 [00:00:01.541](99.18%), Best = 4 127 131.3 ticks/sec [00:00:01.528] ----------------- BestPerformance = 4 127 131.3 ticks/sec [00:00:01.528]
Логи Apart-режима при Benchmark=5.
Benchmark mode. Getting Ticks (2024.01.01 00:00:00 - 2024.03.19 00:00:00)... "TESTER_EURUSD" "TESTER_USDJPY" 1. TESTER_EURUSD: 2711808 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:55) 2. TESTER_USDJPY: 3597511 ticks (2024.01.02 00:00:00 - 2024.03.18 23:59:59) Calculating (APART) 6309319 ticks... 1/5: Performance = 14 942 530.1 [00:00:00.422](100.00%), Best = 14 942 530.1 ticks/sec [00:00:00.422] Calculating (APART) 6309319 ticks... 2/5: Performance = 15 290 796.4 [00:00:00.412](100.00%), Best = 15 290 796.4 ticks/sec [00:00:00.412] Calculating (APART) 6309319 ticks... 3/5: Performance = 15 306 302.2 [00:00:00.412](100.00%), Best = 15 306 302.2 ticks/sec [00:00:00.412] Calculating (APART) 6309319 ticks... 4/5: Performance = 15 331 072.7 [00:00:00.411](100.00%), Best = 15 331 072.7 ticks/sec [00:00:00.411] Calculating (APART) 6309319 ticks... 5/5: Performance = 15 389 784.0 [00:00:00.409](100.00%), Best = 15 389 784.0 ticks/sec [00:00:00.409] ----------------- BestPerformance = 15 389 784.0 ticks/sec [00:00:00.409]
В данной конфигурации Apart-режим дает четырехкратное увеличение скорости. Это примерно соответствует VirtualTester для моносимвольной ТС.
Stop-режим.
Возможно избежать принудительного закрытия позиций под конец бэктеста.
Report.
VirtualTester автоматически создает HTML-отчет (открывается автоматически, если разрешить использование DLL), где визуализированы данные торговли.
Оптимизация.
VirtualTester независим от MT5-Тестера, но при этом может участвовать в многоядерной (облачной) оптимизации MT5-тестера в математическом режиме. Эта возможность выходит за рамки данного поста.
Также VirtualTester может выступать в качестве ФФ-функции для множества алгоритмов Оптимизации, реализуя смелые сценарии использования: автооптимизация и т.д.
Бары/Индикаторы.
VirtualTester не поддерживает бары/индикаторы. Бары возможно встроить в виде соответсвующих OHLC-тиков. Кто-то работает только с тиками...
Огромное количество ордеров.
Производительность слабо зависит от количества ордеров. Можно смело использовать безумные гридеры, портфели ТС и т.д.
Вывод.
Тестер рабочий и, возможно, самый быстрый из тиковых. Чтобы попробовать, прикреплен соответствующий EX5-файл.
Ссылка на блог автора.