ARV ML Dataset Export
- Утилиты
-
Roman Amirov
На Форексе уже более 5 лет. За это время успел протестировать кучу сторонних советников и понял одну простую вещь: если хочешь сделать хорошо — сделай это сам! Именно поэтому вместо бесконечного поиска “идеального” готового решения я начал оформлять собственные торговые идеи в виде советников. - Версия: 1.0
- Активации: 5
ARV ML Dataset Export превращает историю цен в датасет для машинного обучения, готовый к обучению
ONNX-модели вне терминала. Один запуск на любом графике создаёт два файла:
- "ARV_ML_<SYMBOL>_H1.csv" - матрица признаков, метки TP/SL, экскурсии и разбиение train/test.
- "ARV_ML_Norm_<SYMBOL>_H1.json" - статистики нормализации, посчитанные только по обучающей части, и отчёт о причинности.
Скрипт только читает историю и пишет файлы внутри песочницы терминала. Он не торгует, не выставляет
ордера и никуда не передаёт данные.
Почему нормализация считается только по обучающей части
Именно здесь большинство экспортёров датасетов ошибаются.
Если среднее и стандартное отклонение посчитать по всей истории, а модель обучать на части этой же
истории, в обучающие данные утекает будущее: ранние бары масштабируются статистикой, которая уже
включает более поздние бары. В результате модель выглядит на валидации лучше, чем есть на самом деле.
Поэтому в JSON лежат два набора статистик: "means" и "stds", посчитанные только по строкам train, и
"full_means" и "full_stds", посчитанные по всей выборке. Блок "causal_check" сравнивает их и печатает
"max_rel_diff". Если расхождение больше допуска из "InpCausalTolPct", в журнал выводится строка FAIL
ещё до начала обучения.
Разбиение train/test задаётся датой (`InpSplitDate`), а не случайным перемешиванием. Финансовые ряды
не независимы, и случайное разбиение положило бы соседние бары одного и того же режима рынка сразу в
обе части.
Что на выходе: колонки CSV
Строка заголовка:
| time,f0,f1,f2,f3,f4,f5,close,atr,dir,label,mfe_r,mae_r,split |
|---|
| Колонка | Значение |
|---|---|
| time | время открытия бара-сигнала, `YYYY.MM.DD HH:MM |
| f0..f5 | сырые, ненормализованные признаки закрытого бара H1 |
| close | цена закрытия бара-сигнала |
| atr | ATR(14) серии H1 на баре-сигнале |
| dir | направление сделки `1` / `-1` / `0` |
| label | `1`, если TP достигнут раньше SL; `0`, если первым был SL; пусто, если за горизонт не сработало ни то, ни другое |
| mfe_r, mae_r | максимальное благоприятное и неблагоприятное отклонение за горизонт, в единицах R |
| split | train или test |
Признаки:
f0 = |EMA20(H1) - EMA50(H1)| / ATR14(H1) f1 = (EMA20(H1) - EMA20(H1) 5 баров назад) / ATR14(H1) f2 = (Close(H1) - EMA200(H1)) / ATR14(H1) f3 = (BB_upper(H4) - BB_lower(H4)) / EMA20(H4) Bollinger 20, 2.0 f4 = ATR14(M15) / Close(M15) * 100 f5 = StdDev20(H1, SMA) / EMA20(H1)
Что на выходе: ключи JSON
version, means[6], stds[6], schema, symbol, timeframe, split_date, rows_train, rows_test, features[], full_means[6], full_stds[6], causal_check{max_rel_diff, threshold, passed}
Входные параметры:
| Вход | По умолчанию | Значение |
|---|---|---|
| InpFrom | 2015.01.01 | Начало выгрузки, время сервера |
| InpSplitDate | 2023.01.01 | Граница между частями train и test |
| InpHorizonBars | 48 | Сколько баров H1 просматривается в поиске исхода TP/SL |
| InpSL_ATR_Mult | 1.5 | Дистанция стоп-лосса в множителях ATR(14,H1) |
| InpTP_ATR_Mult | 3.0 | Дистанция тейк-профита в множителях ATR(14,H1 |
| InpAmbigPessimistic | true | Бар задел и TP, и SL: считать убытком |
| InpUseCommon | true | Писать в общую папку терминала вместо `MQL5\Files` |
| InpPrefix | ARV_ML | Префикс имён выходных файлов |
| InpCausalTolPct | 5.0 | Допуск отчёта о причинности, процент |
Как запустить
1. Скопируйте `ARV_ML_Export.ex5` в папку `MQL5\Scripts` каталога данных терминала.
2. Нажмите F5 в Навигаторе, чтобы скрипт появился в списке.
3. Откройте график инструмента, который нужно выгрузить. Период графика не важен: скрипт берёт серии H1, H4 и M15 этого символа.
4. Перетащите `ARV_ML_Export` на график, проверьте входы и нажмите OK.
5. Дождитесь строки `ARV ML Export: done, ... rows` в разделе Инструменты - Эксперты.
Обучение вне терминала
Обучение намеренно вынесено за пределы терминала. Загрузите CSV, нормализуйте признаки значениями
`means` и `stds` из JSON, обучите любую модель, которую можно выгрузить в ONNX, и загрузите её в
MetaTrader 5 вызовом `OnnxCreateFromBuffer`. Формат выгрузки не привязан к фреймворку: подойдёт любой
инструмент, читающий CSV и JSON. Статья-компаньон на MQL5.com описывает весь путь от этого датасета
до ONNX-модели, работающей в MetaTrader 5.
Совместимость
MetaTrader 5 сборки 3000 и выше. Чистый MQL5: без DLL, без WebRequest, без внешних сервисов и без
лицензионных запросов. По отношению к счёту скрипт работает только на чтение: он никогда не
открывает, не изменяет и не закрывает позиции и ордера.
