Обсуждение статьи "Применение модели машинного обучения CatBoost в качестве фильтра для трендовых стратегий"

 

Опубликована статья Применение модели машинного обучения CatBoost в качестве фильтра для трендовых стратегий:

CatBoost – это эффективная модель машинного обучения на основе деревьев, которая специализируется на принятии решений на основе статических признаков. Другие модели на основе деревьев, такие как XGBoost и Random Forest, обладают схожими характеристиками в плане надежности, интерпретируемости и способности работать со сложными паттернами. Эти модели имеют широкий спектр применения: от анализа признаков до управления рисками. В данной статье мы пройдемся по процедуре использования обученной модели CatBoost в качестве фильтра для классической трендовой стратегии на основе пересечения скользящих средних. Цель данной статьи заключается в том, чтобы дать представление о процессе разработки стратегии, а также предоставить решения задач, с которыми можно при этом столкнуться. Я представлю свой рабочий процесс по выборке данных из MetaTrader 5, обучению модели машинного обучения на языке Python и обратной интеграции в советники MetaTrader 5. К концу данной статьи мы проверим стратегию посредством статистического тестирования и обсудим планы на будущее, основанные на текущем подходе.

В нашей отрасли, когда речь заходит о разработке стратегий для советников по торговле товарными активами (CTA, Commodity Trading Advisor), правило большого пальца заключается в том, что лучше всего, когда за каждой идеей для стратегии стоит четкое, интуитивное объяснение. Именно в таком ключе люди в первую очередь размышляют об идеях для стратегий, не говоря о том, что это позволяет также избежать переобучения. Данный тезис применим даже при работе с моделями машинного обучения. Мы попытаемся объяснить интуитивную основу предлагаемой идеи.

Почему это может сработать:

Модель CatBoost создает деревья решений, которые принимают на вход признаки, а затем выдают вероятность каждого из исходов. В данном случае мы обучаем модель только на двоичных исходах (где 1 – это выигрыш, а 0 – потеря). Модель будет изменять правила в деревьях решений таким образом, чтобы минимизировать функцию потерь в обучающем наборе данных. Если модель продемонстрирует определенный уровень предсказуемости на результатах тестирования за пределами выборки, мы можем считать, что ее использование отфильтровывает сделки, которые имеют низкую вероятность выигрыша, что может, в свою очередь, повысить общую прибыльность.

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

CatBoost ML model


Автор: Zhuo Kai Chen

 

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

 
Krzysztof Tadeusz Kanacki #:

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

Ваше замечание абсолютно справедливо. По моему опыту, я также считаю, что использование последних данных облегчает обучение модели, которая дает лучшие результаты. Однако главная проблема заключается в том, что такой подход ограничивает размер обучающего набора, если только вы не используете очень короткий таймфрейм. Согласно научным исследованиям, стратегии следования за трендом лучше работают на длинных таймфреймах по сравнению с короткими. Таким образом, вы можете обучить модель с более высокой предсказуемостью, но с меньшим количеством обучающих образцов, что чревато переоценкой, а исходная стратегия изначально имеет меньшие преимущества. Существует компромисс между этими факторами, не говоря уже о том, что спреды также играют свою роль.

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

 
Zhuo Kai Chen #:

Ваша точка зрения абсолютно верна. По моему опыту, я также считаю, что использование свежих данных упрощает обучение модели, которая дает лучшие результаты. Однако главная проблема заключается в том, что такой подход ограничивает размер обучающего набора, если только вы не используете очень короткий таймфрейм. Согласно научным исследованиям, стратегии следования за трендом лучше работают на длинных таймфреймах по сравнению с короткими. Таким образом, вы можете обучить модель с более высокой предсказуемостью, но с меньшим количеством обучающих образцов, что чревато переоценкой, а исходная стратегия изначально имеет меньшие преимущества. Существует компромисс между этими факторами, не говоря уже о том, что спреды также играют свою роль.

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

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

 

Я пытаюсь следовать вашим инструкциям и, к сожалению, из-за отсутствия деталей не могу довести дело до конца из-за отсутствия ссылок на файлы и ссылок на скачивание.

Я найду время, чтобы научить вас тому, что вы упустили, потому что это выглядит как хороший процесс.

Вам не хватает;

1. прямой ссылки на файл FileCSV.mqh, для получения которой необходимо пройти через другую статью.

2. декларация всех обрабатываемых функций

3. Адекватное объяснение процесса создания или загрузки файлов

CatOnnx.mqh

"\\\Files\\\CatBoost_Momentum_test.onnx"

4. Прямые ссылки и соответствующие инструкции по установке catboot с помощью pip или аналогичных программ, убедившись, что у вас установлены зависимости, необходимые для python. (Не для меня, но другим будет полезно знать).

5. Инструкция по прочтению инструкций и рабочего процесса CB2.ipynb.


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

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

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


PS

Рекомендации по адаптации этой стратегии к другим стратегиям были бы замечательными!

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

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


PS

Рекомендации по адаптации этой стратегии к другим стратегиям были бы очень кстати!

Спасибо за отзыв. К сожалению, я ограничился кратким описанием соответствующих статей, потому что решил, что это займет слишком много места, и не стал включать ссылки на скачивание из-за проблем с авторскими правами. Подробную информацию все равно лучше получить из первоисточника. Тем не менее, мне кажется, что я упустил из виду некоторые тщательные инструкции для моего кода на python и прямые ссылки на инструкции по python, хотя я добавил комментарии к каждой строке. Если у вас есть конкретные препятствия в вашем собственном процессе реализации, вы можете обсудить их здесь или добавить меня в чат.

 
CatOnnx.mqh, вызываемый в файле ML-Momentum.mq5, - это тот же CatBoost.mqh, который я приводил в этой статье. Извините, что вызвал путаницу в названиях файлов.
Data Science and ML (Part 31): Using CatBoost AI Models for Trading
Data Science and ML (Part 31): Using CatBoost AI Models for Trading
  • www.mql5.com
CatBoost AI models have gained massive popularity recently among machine learning communities due to their predictive accuracy, efficiency, and robustness to scattered and difficult datasets. In this article, we are going to discuss in detail how to implement these types of models in an attempt to beat the forex market.
 
Zhuo Kai Chen #:
CatOnnx.mqh, вызванный в файле ML-Momentum.mq5, такой же, как CatBoost.mqh, который я цитировал в этой статье. Извините, что вызвал путаницу в именах файлов.

Спасибо за разъяснения, это выглядит очень интересно, когда я вернусь и попытаюсь снова завершить руководство в этой статье, я сохраню некоторые заметки в стороне для последующего удобрения форума.

Если кто-то еще интересуется кошачьим хозяйством...

 

Здравствуйте. Я играю с CatBoost и дошел до того, что стратегия, обученная на данных (всех) 2024 года, дает >300% прибыли при бэктесте (в MetaTrader) на 2024 году, но плохо работает на других годах. Есть ли у кого-нибудь подобный опыт? Интуитивно кажется, что это перебор, но даже если я тренируюсь с гораздо меньшим количеством итераций (например, 1k), я получаю тот же результат.

Я обучаюсь с ~40-50 признаками на минутных данных, так что получается что-то около 250 000 строк в год. Размер файла .cbm, как правило, получается в 1000 раз больше количества итераций (например, 1000 итераций = 1 МБ, 10 000 итераций = 10 МБ и так далее). Бэктестирование в Metatrader ограничивает меня примерно 100 000 МБ, после чего бэктестер останавливается. Я могу проводить бэктесты на C++ до произвольно больших размеров, но мои результаты в metatrader и C++ дико отличаются.

 
johnboy85 CatBoost и дошел до того, что стратегия, обученная на данных (всех) 2024 года, дает >300% прибыли при бэктесте (в MetaTrader) на 2024 году, но плохо работает на других годах. Есть ли у кого-нибудь подобный опыт? Интуитивно кажется, что это перебор, но даже если я тренируюсь с гораздо меньшим количеством итераций (например, 1k), я получаю тот же результат.

Я обучаюсь с ~40-50 признаками на минутных данных, так что получается что-то около 250 000 строк в год. Размер файла .cbm, как правило, получается в 1000 раз больше количества итераций (например, 1000 итераций = 1 МБ, 10 000 итераций = 10 МБ и так далее). Бэктестирование в Metatrader ограничивает меня примерно 100 000 МБ, после чего бэктестер останавливается. Я могу проводить бэктесты на C++ до произвольно больших размеров, но мои результаты в metatrader и C++ дико отличаются.

Здравствуйте. Во-первых, бэктестер Metatrader учитывает спреды и комиссии, что может объяснить, почему он отличается от ваших результатов на C++. Во-вторых, на мой взгляд, машинное обучение - это, по сути, процесс оверфиттинга. Существует множество способов уменьшить перебор, таких как ансамбль, отсев и инженерия признаков. Но в конечном счете выборка в выборке всегда намного лучше, чем вне выборки. Использование машинного обучения для прогнозирования финансовых временных рядов - старая проблема. Если вы пытаетесь предсказать доходность (я предполагаю, потому что вы говорите о 250 тыс. рядов), то следует ожидать шума, потому что у вас и других игроков одна и та же цель прогнозирования. В то время как то, что я представил в этой статье, - это метод метамаркировки, где меньше шума, потому что цель прогнозирования сужается до вашей собственной стратегии, но у него будет меньше образцов для обучения, что делает ограничение сложности еще более строгим. Я бы посоветовал снизить ожидания при использовании метода ML и изучить способы уменьшения избыточной подгонки.

 

Спасибо, что так быстро ответили на тему, которой уже более 6 месяцев. Здесь есть над чем подумать. Я привыкаю к огромному пространству параметров и пытаюсь найти способы уменьшить перебор.

Еще раз спасибо!