ИИ в Крипто-Торговле: Возможен ли Успех? (Часть 1)
В данной статье я постараюсь описать долгий и усердный путь от разработки алгоритмов бота до создания моделей искусственного интеллекта для автоматизированной крипто-торговли на бирже ByBit. Статья будет разделена на несколько частей, так как мне удалось создать три успешные модели с различными тактиками, которые принесли больше прибыли, чем убытков.
Мой профессиональный интерес заключается в автоматизации портфеля с учетом рыночных настроений, без попыток прогнозировать ценовые движения на несколько дней вперед. Цель заключалась в минимальных затратах ресурсов и максимальной краткосрочной отдаче, сосредоточившись на трендах длительностью от одного часа до полудня. Долгосрочная торговля сложна, и существуют эксперты, использующие паттерны для таких стратегий.
Примеры тестирования:
Перед тем как углубиться в процесс разработки, я хотел бы представить примеры результатов тестовых запусков с различными балансами на stable_baselines3. Эти примеры демонстрируют, как изменяется эффективность модели в зависимости от начального капитала и продолжительности тестирования.
Для первых тестов я выбрал мем-коин Doge, предполагая, что малокапитализированные монеты минимально повлияют на общий портфель. В тестах использовался минимальный баланс — 10 USDT, чтобы оценить поведение модели при небольших инвестициях.
Баланс: 10 USDT
И результаты показали, что максимальное значение достигло 10.25 USDT. Несмотря на минимальный прирост, модель не торговала в минус, что уже можно считать успехом, но не достигла заданной ею задачи. Но с одной стороны модель проходила обучение всего пару десятков минут, чтобы уловить тот самый паттерн торговли.
Так же при дальнейшем улучшении гиперпараметров и оптимизации стратегии можно ожидать значительной прибыли за несколько часов торговли. Ещё раз важно отметить, что отсутствие убытков при таком балансе является скорее положительным показателем, указывающим на способность модели избегать неблагоприятных рыночных условий.
И теперь мы увеличим торговый баланс до 50 USDT и увеличим данные на пару дней торговли:
Баланс: 50 USDT
Модель показала минимальное значение 46.5 USDT, что не является критичным, однако, это указывает на то, что модель «съела» данные содержащие шумы или ошибочные сигналы. Таких моментов было на этапе разработке довольно много и, конечно по началу меня больше удручали такие паттерны на графиках и всё же не смогли прекратить меня дальнейшую разработку.
Проблема была ясна и я интегрировал библиотеку Optuna для оптимизации гиперпараметров. Это позволило исключить нерелевантные данные и улучшить общую производительность модели. Оптимизация гиперпараметров помогает модели лучше адаптироваться к рыночным условиям, снижая вероятность ошибок и повышая эффективность торговли.
И теперь мы увеличим баланс портфеля до 1 000 USDT:
Баланс: 1 000 USDT
Модель достигла 1665 USDT, что является уверенным успехом в её обучение. Хоть она не придерживается уже моей изначальной концепции, что является логичным в данном случае, так как наш баланс не подходил для данной монеты, и долгое время она воспринимала колыхание рынка как шум, ожидая значительного сдвига, чтобы уцепиться за него, и как видим успешно.
Использование 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
Оптимизация Гиперпараметров с Помощью 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 ещё не завершена, и мне предстоит доработать концепцию «мало вложил, много получил». Этот процесс требует значительного времени и усилий, однако, как мы видим, он вполне реализуем.
Честно говоря, многие «умные» боты вызывают у меня опасения, поскольку они не всегда предсказуемы и их действия часто зависят от решений человека и момент активации на рынке. И поэтому я стремлюсь свести человеческий фактор к минимуму, чтобы вы могли просыпаться утром с уверенностью, что ваш портфель под надежным контролем. Моя цель — создать систему, которая автоматически управляет инвестициями, предотвращая нежелательные реакции рынка и обеспечивая стабильность. Таким образом, можно наслаждаться утром, не беспокоясь о состоянии своего портфеля и не проверяя постоянно телефон.
Большое спасибо за прочтение моей статьи! Надеюсь, что в ближайшее время появятся новые части, в которых я поделюсь новыми стратегиями и моделями, которые я протестировал.