У нас тысячи тестов так гоняются.
Вот пример:
E:\Tests\terminal64.exe /portable /config:"E:\Tests\MQL5\Shared Projects\MetaQuotes.MQL5.Tests\StrategyTester\IniSets\Bands_DEMA_EURUSD_M30.ini"
Файлы ini и set лежат в E:\Tests\MQL5\Shared Projects\MetaQuotes.MQL5.Tests\StrategyTester\IniSets, а mq5 в E:\Tests\MQL5\Shared Projects\MetaQuotes.MQL5.Tests\StrategyTester\Experts\Bands_DEMA_EURUSD_M30
В exit code получаете или результат прогона или код возврата, заявленный из эксперта как:
SetReturnError(12345);
А как с запуском Скриптов быть? Сейчас нельзя запустить несколько Скриптов в терминале и при этом не знаю, как закрыть терминал, чтобы запустить следующий Скрипт.
[StartUp] Symbol=EURUSD ;--- таймфрейм графика, который будет открыт при старте платформы для запуска эксперта и/или скрипта Period=M1 Script=Roffild\UnitTests\ArrayList_UnitTest ; следующий скрипт не запустится Script=Roffild\UnitTests\Serialization_UnitTest [StartUp0] ;--- запускаемый эксперт находится в папке каталог_данных_платформы\MQL5\Experts\Examples\MACD\ Expert=Examples\MACD\MACD Sample ;--- параметры запуска эксперта находятся в папке каталог_данных_платформы\MQL5\Presets\ ExpertParameters=MACD Sample.set ;--- запускаемый скрипт находится в папке каталог_данных_платформы\MQL5\Scripts\Examples\ObjectSphere\ Script=Examples\ObjectSphere\SphereSample ;--- график инструмента, который будет открыт при старте платформы для запуска эксперта и/или скрипта Symbol=EURUSD ;--- таймфрейм графика, который будет открыт при старте платформы для запуска эксперта и/или скрипта Period=M1 ;--- шаблон, который будет применен к графику, находится в папке каталог_установки платформы\Profiles\Templates Template=macd.tpl
Посмотрите примеры внимательно и почитайте описания командных ini файлов, пожалуйста.
Несколько скриптов нельзя запустить, а вот по очереди запросто. Тем более, что можете сделать несколько копий терминалов в разных каталогах.
Закрыть терминал автоматически можно следующим параметром:
;--- автоматическое завершение работы платформы по окончании тестирования
ShutdownTerminal=1
Скрипты можно запускать так:
..... [Charts] MaxBars=10000000 [Experts] Enabled=1 [StartUp] ShutdownOnError=1 SkipRecompile=1 Symbol=EURUSD Period=M1 Script=Shared Projects\MetaQuotes.MQL5.Tests\TerminalExecution\OtherFunctions\TestCalendar ScriptParameters=TestCalendar.set
а в set файле прописывать специальный параметр типа
InpShutdown=1
по которому скрипт будет завершать работу терминала:
int OnStart() { .... //--- нужно загасить терминал if(InpShutdown) TerminalClose(result); //--- return(result); }
Возможностей у командных файлов достаточно. Мы сами гоняем громадное количество тестов так.
Просто внимательно все изучите.
Заклинание призыва: @Renat Fatkhullin
import subprocess count = 1 while True: print(count) subprocess.run(r'"C:\Program Files\MetaTrader 5\terminal64.exe" /config:"d:\runtest.ini"', creationflags=subprocess.CREATE_NO_WINDOW) count += 1
[Tester] Expert=runtest Period=M5 ;ExpertParameters=macd sample.set Model=0 ExecutionMode=0 Optimization=0 OptimizationCriterion=0 ForwardMode=0 ;Report=test_macd ;ReplaceReport=1 ShutdownTerminal=1 UseLocal=1 UseRemote=0 UseCloud=0 Visual=0
При запуске с конфигом сбрасываются настройки звуков.
Нужны еще настройки:
ОтключитьЗвуки - достало бряканье
НеАктивироватьОкно - поскольку CREATE_NO_WINDOW не помогает, то хотя бы не забирать фокус у активного окна, а то достало окна переключать. И лучше, чтобы эта настройка была по умолчанию при запуске с конфигом.
ОтложитьОбновление - у меня тест остановился из-за внезапного обновления. При очередном запуске Windows выдал запрос на получение прав для установки обновления и заблокировал весь тест на целый день. А еще - само обновление не устанавливается при запуске с конфигом!
МинимизироватьОкно = СвернутьОкно
Бонус: Не получается использовать видеокарту (CUDA) из DLL. Ситуация с бесконечным ожиданием устройства. Предполагаю, что из-за реализации OpenCL в MQL.
Сейчас у меня есть связка: Jenkins, MT5, Python
НеАктивироватьОкно - поскольку CREATE_NO_WINDOW не помогает, то хотя бы не забирать фокус у активного окна, а то достало окна переключать. И лучше, чтобы эта настройка была по умолчанию при запуске с конфигом.
namespace WindowsFormsApp1 { static class Program { [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] arg) { IntPtr wind = GetForegroundWindow(); Process process = new Process(); process.StartInfo.FileName = arg[0]; process.StartInfo.Arguments = arg[1]; process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; process.Start(); process.WaitForExit(1000); SetForegroundWindow(wind); process.WaitForExit(); } } }
Хотелось бы обойтись без этого хака.
Нормальную бы документацию по ини файлам, хотел организовать схему
for (итераций 100) {
автоправка исходников;
перекомпиляция;
запуск скрипта на 4х графиках (разные пары);
}
Всё накрылось сомнениями:
1. Как подчистить глобальные переменные между запусками терминала? Видимо сидят где-то в настройках, вынести бы в отдельный файл для простого удаления вместо парсинга и правки какой-то портянки.
2.
[Charts]
MaxBars=10000000
Зачем это? Нельзя взять текущие настройки? И вообще - терминал очень долго подгружает историю при открытии, гарантируется ли получение скриптом полной истории?
3. Гарантируется ли порядок запуска на графики в том порядке, в котором они идут в ини файлах? Ещё бы иметь возможность установить паузу между запусками.
4. Завершение через TerminalClose() выглядит костыльно и отпугивает.
5. Вообще хотелось бы не ини файл, а какой-то простейший шел подобный язык.
В общем запускаю руками, разбираться во всём этом не захотелось, на голове шишек и без того хватает.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Сейчас популярна разработка с полной интеграцией - CI
Я хочу запускать тест с нужными параметрами для эксперта из обычного .bat для перебора вариантов нейронной сети.
Сейчас можно подготовить конфиг для запуска терминала, но функционал очень ограничен. Проблема еще в неполной справке по этим командам.
Запуск из .bat должен возвращать результат выполнения в скрипт по завершению теста или выполнение скрипта в терминале.