Обсуждение статьи "Разработка робота на Python и MQL5 (Часть 1): Препроцессинг данных"

 

Опубликована статья Разработка робота на Python и MQL5 (Часть 1): Препроцессинг данных:

Разработка торгового робота на основе машинного обучения: подробное руководство. В первой статье цикла осуществлен сбор и подготовка данных и признаков. Для реализации проекта используется язык программирования Python и библиотеки, а также платформа MetaTrader 5.

Рынок становится все сложнее. Сегодня он превращается в битву алгоритмов. Свыше 95% торгового оборота набирают роботы. 

Новый шаг — машинное обучение. Это не сильный ИИ, но и не простые линейные алгоритмы. Модель машинного обучения способна получать прибыль в сложных условиях. Интересно применить машинное обучение для создания торговых систем. Благодаря нейросетям, торговый робот будет анализировать большие данные, находить закономерности и прогнозировать движение цены.

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

Работа через Python имеет преимущества: быстродействие в области машинного обучения, возможность отбора и генерации признаков. Экспорт моделей в ONNX требует в точности повторять логику генерации признаков, как в Python, что непросто. Поэтому выбран путь с онлайн-торговлей через Python.

Автор: Yevgeniy Koshtenko

 
Разумный подход 👍 интересный способ отбора признаков.
 
Спасибо большое за интересную статью. Ранее питоном не пользовался, но вы заинтересовали меня в освоении этого мощного инструмента. Жду новых публикаций и попутного тренда! 
 

В задаче прогнозирования EURUSD мы добавили бинарный столбец "labels", указывающий, превысило ли следующее изменение цены спред и комиссию.

Кстати, из свыше 700 000 единиц данных, цена менялась больше чем на величину спреда только в 70 000 случаях.

EURUSD 90% времени имеет ~0-й спред. Вы работаете с H1-данными. Как получился такой результат?

 
Кстати, искушенный в машинном обучении читатель уже давно понял, что мы в итоге разработаем модель классификации, а не регрессии. Мне больше нравятся регрессионные модели, я в них вижу немного больше логики для прогнозирования, нежели в моделях классификации. 
Вроде, второе предложение противоречит первому.
 

Фича инжиниринг — преобразование исходных данных в набор признаков для обучения моделей машинного обучения. Цель — найти наиболее информативные признаки. Есть ручной подход (человек выбирает признаки) и автоматический (с помощью алгоритмов).

Мы будем использовать автоматический подход. Применим метод создания новых признаков для автоматического извлечения лучших признаков из наших данных. Затем отберем самые информативные из полученного набора.

Лучшим признаком для прогноза цен оказалась сама цена открытия. В топ вошли признаки на основе скользящих средних, приращений цен, стандартного отклонения, дневного и месячного изменения цены. Автоматически сгенерированные признаки оказались неинформативными.

Возникает вопрос к качеству алгоритмов генерации признаков, точнее к его полному отсутствию.


Человек все признаки генерировал из OHLCT-данных - всего пять столбцов. Вы натравливаете алгоритм генерации фич на гораздо большее количество исходных признаков. Сложно представить, что алгоритм генерации фичей не смог воспроизвести простейшую МА-шку.

 
Язык, стиль и форма подачи информации в статье понравились. Спасибо автору!
 

Кластеризация признаков объединяет похожие признаки в группы, чтобы уменьшить их количество. Это помогает избавиться от избыточных данных, снизить корреляцию и упростить модель, не допуская переобучения. Лучшим признаком для прогноза цен оказалась сама цена открытия.

Кластеризация выкинула HLC-цены, т.к. они попали в тот же кластер, что и O-цена?

Если цена оказалось лучшим признаком для ее прогнозирования (а остальные признаки - ее производные), то значит ли это, что про другие признаки стоит забыть и целесообразно добавить больше исходных данных, перейдя на более низкий таймфрейм и взяв в качестве признаков цены других символов?

 

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

Высокая информативность цен возникает из-за уникальности их значений, то есть алгоритму легче запомнить или сопоставить цены с метками. 

В практике МО удаляются не только неинформативные признаки, но и подозрительно оверинформативные, которыми и являются сырые цены.

В идеальном сценарии должно быть несколько признаков, информативность которых +- одинаковая. То есть нет явных лидеров или аутсайдеров. Это значит, что ни один из признаков не мусорит обучение и не тянет на себя одеяло.
 
Maxim Dmitrievsky #:

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

Если перейти к returns, то алгоритм генерации признаков обязан сгенерировать кумулятивную сумму, которая будет теми же ценами. При этом не будет известно, что это цены.

 
fxsaber #:

Если перейти к returns, то алгоритм генерации признаков обязан сгенерировать кумулятивную сумму, которая будет теми же ценами. При этом не будет известно, что это цены.

Не понял ничего

все признаки должны быть псевдостационарными, типа приращений. Сырые цены надо убрать из обучения.
Причина обращения: