Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2956
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Отрицательное значение размерности означает, что данная размерность не фиксирована и задается через внешний параметр. Поэтому в скрипте явно должна быть задана размерность
Спасибо, стало понятнее.
Как я понял, в машинном обучении есть задачи классификации, например, тренд будет вверх или вниз, или прогнозирования конкретного значения типа цена будет здесь с такой-то погрешностью. Но на финансовых рынках задача несколько по другому стоит - максимизация прибыли при минимизации просадок. А я что-то не видел подобного рода моделей малинного обучения.
Эта задача решается использованием соответствующей функции потерь при обучении моделей МО. Есть две проблемы связанные с этим. Первая, техническая - стандартные функции потерь в пакетах МО связаны с максимизацией прибыли лишь косвенно, что приводит к необходимости создания кастомных. Это довольно трудно сделать - нужно хорошо разбираться в пакетах МО на уровне кода. Если эта проблема решена, то может появиться вторая, математическая, когда кастомная функция потерь плоха для обучения модели.
Если кто-то решит такую сложную задачу, то вряд ли он будет делиться решением.
Если кто-то решит такую сложную задачу, то вряд ли он будет делиться решением.
Если убрать ключ ONNX_NO_CONVERSION, то можно подавать на вход double вектор. На выходе всё равно должен быть float вектор.
После компиляции модель остается отдельным файлом или зашивается в .ex5 ?
Если не "зашивается", то как её продавать? Предполагаю, что становиться ресурсом, как и другие файлы.
Понятно, что пример использования модели ONNX в MQL5 только иллюстрация этого и ничего больше. Но все же хочу обратить внимания на очень важную ошибку. В машинном обучении первый этап -препроцессинг. Сюда входит много чего начиная с тривиальной нормализации и заканчивая уменьшением размерности и др инженерными трюками. Основное правило любых преобразований предикторов и целевой на этом этапе - все параметры преобразований(как то средняя, медиана, sd, mad и т.д) вычисляются на обучающем (train) наборе. Тестовый набор и новые данные обрабатываются с использованием параметров полученных на train наборе.
Поэтому в примере нужно было вычислить mean/sd на train, передать эти данные в часть где делается предикт, обработать новые данные с этими параметрами. После этого сделать денормализацию и получить реальные значения прогнозной цены. Эта последовательность важна.
Понятно, что никто реальные цены не подает на вход модели, но это уже частности.
Удачи
В нашем примере onnx-модели входные цены нормализуются при помощи mean и std на всей серии. Полученный результат потом разнормализуется по тем же правилам
После компиляции модель остается отдельным файлом или зашивается в .ex5 ?
В моём примере нет, остаётся отдельным файлом. В примере Рената (публичный проект ONNX.Price.Prediction) зашивается в .ex5.
В нашем примере onnx-модели входные цены нормализуются при помощи mean и std на всей серии. Полученный результат потом разнормализуется по тем же правилам
Объясняю на пальцах. В ONNX.Price.Prediction.mq5 Вы получаете 10 OHLC. Затем на этих данных Вы определяете mean и sd, и ними же нормируете эти 10 значений. Это не правильно.
Для этих новых данных нужно использовать mean и sd полученные на обучающемся наборе. Т.е. в предыдущем скрипте. Так понятно?
Объясняю на пальцах. В ONNX.Price.Prediction.mq5 Вы получаете 10 OHLC. Затем на этих данных Вы определяете mean и sd, и ними же нормируете эти 10 значений. Это не правильно.
Для этих новых данных нужно использовать mean и sd полученные на обучающемся наборе. Т.е. в предыдущем скрипте. Так понятно?
Конечно понятно и сделано осознанно.
Пример был сделан ради тестирования загрузки onnx модели, а не для извлечения разумного результата модели.