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

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

Примеры тестирования:

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

Для первых тестов я выбрал мем-коин Doge, предполагая, что малокапитализированные монеты минимально повлияют на общий портфель. В тестах использовался минимальный баланс — 10 USDT, чтобы оценить поведение модели при небольших инвестициях.

Баланс: 10 USDT
Баланс: 10 USDT

И результаты показали, что максимальное значение достигло 10.25 USDT. Несмотря на минимальный прирост, модель не торговала в минус, что уже можно считать успехом, но не достигла заданной ею задачи. Но с одной стороны модель проходила обучение всего пару десятков минут, чтобы уловить тот самый паттерн торговли.

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


И теперь мы увеличим торговый баланс до 50 USDT и увеличим данные на пару дней торговли:

Баланс: 50 USDT
Баланс: 50 USDT

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

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


И теперь мы увеличим баланс портфеля до 1 000 USDT:

Баланс: 1 000 USDT
Баланс: 1 000 USDT

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

Использование stable_baselines3 для Обучения Моделей Трейдинга

В процессе разработки автоматизированной системы крипто-торговли ключевым компонентом стала библиотека stable_baselines3. За последние несколько месяцев я активно работал с этой библиотекой, и могу поделиться своими впечатлениями и наблюдениями.

Первые Шаги с stable_baselines3

stable_baselines3
stable_baselines3

Stable_baselines3 представляет собой мощный инструмент для реализации алгоритмов обучения с подкреплением (RL). Его основное преимущество заключается в простоте использования и гибкости, что позволяет быстро прототипировать и тестировать различные стратегии.

При интеграции stable_baselines3 в проект я начал с выбора подходящего алгоритма. Для моей задачи автоматизированной торговли на бирже наиболее подходящим оказался алгоритм Proximal Policy Optimization (PPO). PPO зарекомендовал себя как стабильный и эффективный метод, способный хорошо справляться с непрерывными и сложными задачами, характерными для финансовых рынков.

Обучение Агентов и Настройка Гиперпараметров

Одной из ключевых задач было обучение модели на исторических данных. Используя созданную среду TradingEnvironment, я настроил процесс обучения следующим образом:

model = PPO('MlpPolicy', env, tensorboard_log="./ppo_tensorboard/", verbose=1)
model.learn(total_timesteps=500000)
model.save(model_path)

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

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

1RLBasket
1RLBasket

Оптимизация Гиперпараметров с Помощью Optuna

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

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

def objective_sync(trial, train_df, test_df):
    learning_rate = trial.suggest_float('learning_rate', 1e-5, 1e-3, log=True)
    n_steps = trial.suggest_categorical('n_steps', [128, 256, 512])
    # Другие параметры...
    model = PPO('MlpPolicy', env, learning_rate=learning_rate, n_steps=n_steps, ...)
    model.learn(total_timesteps=100000)
    # Оценка модели...
    return total_reward

Внедрение в Реальный Трейдинг

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

Заключение

Работа с stable_baselines3 ещё не завершена, и мне предстоит доработать концепцию «мало вложил, много получил». Этот процесс требует значительного времени и усилий, однако, как мы видим, он вполне реализуем.

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

Большое спасибо за прочтение моей статьи! Надеюсь, что в ближайшее время появятся новые части, в которых я поделюсь новыми стратегиями и моделями, которые я протестировал.

Комментарии (12)


  1. temadiary
    19.11.2024 04:55

    и с каком таймфреймом наиболее эффективно решение?


    1. Solrikk Автор
      19.11.2024 04:55

      Это хороший вопрос, был момент когда таймфрейм в 80 000 шагов с использованием Optuna утроил капитал, но это, пока единичные случаи. В основном я использую значение в 500k и опять же стоит заметить, что установка на 500 000 - 1 000 000 шагов не гарантирует лучшего обучения если нет хороших параметров, поэтому основная задача "вывести" какой-то оптимум из хаоса, и автоматически сужать круг поиска, так же я иногда наблюдая в консоли, что происходит, чтобы направить в нужное русло модель, добавляя индикаторы RSI, MACD, Bollinger Bands и объемные показатели для оценки тренда, волатильности и объема торгов


      1. temadiary
        19.11.2024 04:55

        у многих индикаторов на основе средних кривых есть же изменения за разные периоды
        возможно это будет гипотезой, но рассматривать и в моменте и в историческом прошлом.
        вот только как быть с мем-коинами, которые могут иметь время жизни пару часов\пару дней.
        ну и объём операций (киты памп-дамп)


  1. CrazyElf
    19.11.2024 04:55

    По-моему это всё рандом. Если есть выигрышные стратегии, то они давно уже найдены и эксплуатируются людьми с большими мощностями и быстрым доступом к рынку. Да и устаревают все такие стратегии довольно быстро.


    1. Solrikk Автор
      19.11.2024 04:55

      Возможно, если торговать не с системной монетой, цена которой увеличиться в 300%, чтобы затем упасть, поэтому модель самообучается во время реальных торгов и торгует с одной определенной монетой, и так же для неё во время обучения не было открытой изложенной информации о торгах для копирования, а всё происходит в полной симуляция как и в реальной торговли, чтобы уловить паттерн корреляции цен на падение или на повышение. Не думаю что она делает что-то сверхъестественное от обычного трейдера на рынке, покупает за дешево и продает за дорого.

      Так же никто не мешает устанавливать свои SL и TP в систему модели, чтобы снизить риск или устанавливать определённое суммарные ограничения на позицию.


  1. GRK404
    19.11.2024 04:55

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

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


    1. Solrikk Автор
      19.11.2024 04:55

      Большое спасибо! Да, всё верно, у неё реализовано 4 действия - открыть long, открыть short, закрыть позицию и ожидать, и она полностью автономно начинает движение с одной точки до конечной, где сама вольна открывать и закрывать позиции, и при успешной сделки получает положительный очки, что способствует обучению или отрицательные, заносит как раз закономерности в свою базу данных, так же мы можем ей подсказывать визуально где открывает и где закрываем, занося так же эту информацию в базу, так же и при реальной торговли, где у неё среда идентична.

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


      1. GRK404
        19.11.2024 04:55

        Так или иначе прекрасная работа, буду ждать следующей статьи.

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

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


  1. peterjohnsons
    19.11.2024 04:55

    Пока что не увидел ничего ценного. Обычно берут временной период и делят его на 2-3 части. Как минимум - обучающая выборка и тестовая. На обучающей модель обучают, на тестовой - проверяют результат, что она усвоила. Обычно отличные результаты на обучающей выборке ничего не говорят о том, насколько она будет прибыльная в будущем, в реальной торговле. Проверка на тестовом периоде хоть и немного приближает нас к реальности, но и она не дает полной уверенности в том, что стратегия будет успешной. Это связано с тем, что рыночные условия постоянно меняются, и модель, хорошо показывающая себя на тестовых данных, может не справляться с новыми, неизведанными сценариями.

    Для более надежной проверки часто используют walk-forward analysis или перекрестную проверку на основе нескольких временных периодов. Это позволяет оценить устойчивость модели к изменениям рыночных условий. Однако даже такие подходы не гарантируют успеха, так как остаются риски переобучения или того, что стратегия оптимизирована под конкретные исторические данные, которые могут не повториться.


  1. 4ai_ka0
    19.11.2024 04:55

    Совсем недавно в it. Не очень понимаю как пользоваться подобными решениями, а пощупать очень бы хотелось. Смотрел проект на GitHub, но удалось только посмотреть код. Может кто нибудь подсказать или скинуть статью которая это объяснит, а то сам я ничего не нашел :( Если я где-то неправ, то извините


    1. Solrikk Автор
      19.11.2024 04:55

      В будущем появятся несколько статей на эту тему с более глубокими техническими подробностями, где будут обсуждаться различные подходы и технологии. Возможно, они все будут доступны и на GitHub в виде кода с пояснениями, который вы сможете протестировать в своём окружении. Так же желаю вам всяческих успехов в IT! :)


  1. qiper
    19.11.2024 04:55

    Не одно десятилетние спекулятивные рынки обложены нейросетями уже