
Мамкин инвестор знает, что если ежедневно ловить сигналы от мощных трейдеров, то скоро карманы будут набиты звенящей цифровой монетой. Но чтобы стать богаче всякого в эпоху ИИ, нужно уметь подавать лопаты желающим.
Собственно идея простая: будущее предопределимо, поэтому стоит сделать хорошую модель, и можно будет купить акции/криптовалюту/все что угодно сегодня подешевле, а завтра продать подороже. В этом уверены все, кто подписан на легендарных трейдеров.
Тут на арену выходит Инвест-гусь. Это интеллектуальный бот, который ̶с̶ы̶п̶л̶е̶т̶ ̶д̶е̶н̶ь̶г̶а̶м̶и̶ обучает мл-модели для анализа рыночных данных, построения прогнозов, генерации сигналов для инвесторов. Проект полностью открыт, что позволяет не только использовать его, но и участвовать в его развитии.
Cобственно, как выглядит этот гусь. Пользователь открывает бота, например, как этот. И видит приветственный экран.

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

Затем пользователь выбирает желаемый актив из раздела, и дальше к работе приступает гусь. Он скачивает данные курса актива за последние 2 года, пользуясь библиотекой yfinance, и использует их для обучения зоопарка ml-моделей. После обучения всех моделей он выбирает лучшую из них по RMSE и уже на основании нее строит прогноз на будущие 30 дней.
Какие именно модели он обучает? Первое время это были линейная регрессия с Ridge-регуляризацией, LSTM, SARIMAX. Модель Ridge регуляризацией показывала какую-то несусветную чушь, поэтому я ее удалил и забыл, что она существовала.
LSTM любила рисовать линию, параллельную оси X.

Хотя конечно давал и что-то похожее на правду


Но впоследствии я заменил LSTM на GRU, которая стабильно рисовала что-то похожее на правду.
Sarimax всегда достраивает некую наклонную к графику.

Конечно, я не использовал всей мощности Sarimax, потому что можно к ней добавить еще и экзогенный фактор в виде... Дайте подумать... В общем я не знаю, какой экзогенный признак можно к ней присобачить, но пусть будет... Количество стоянок во время сезонной миграций гусей с севера на юг или вектор tf-idf, составленный из актуальных новостей на каком-нибудь новостном портале за день. Выбирайте, как ой нужен, я так и не определился, какой лучше объясняет текущий курс.
Также гусь делал некое "ансамблевое" усредненное вычисление всеми моделями. Условно говоря, мы берем всех экспертов, думаем, что они ВСЕ ХОРОШИЕ, и смотрим, какой курс будет исходя из того, если совместить прогнозы ИХ ВСЕХ.

Поначалу, мне казалось, что именно так можно взломать систему и получить предсказания максимальной надежности. Но потом я убрал этот функционал, потому что бот спамил графиками, а надо ли это на самом деле - непонятно.
Впоследствии бесполезную линейную регрессию с Ridge я заменил на Random Forest, у которой графики выглядели правдоподобно и забавно одновременно.

Гусь использует такие библиотеки, как scikit-learn, statsmodels, TensorFlow.
"Почему не Pytorch!" - воскликните вы на этом моменте: "Ведь он гораздо лучше, современнее и без утечек памяти, лучше считает и вообще TensorFlow - старье". На это я отвечу вам: "Просто захотелось для разнообразия".
Кстати, для обучения каждой модели берутся лаги в 20, 30, 60, 90 и 120 дней, среди которых выбирается самый эффективный. То есть гусь в качестве признака подает курс на 20, 30, 60, 90 или 120 дней назад, строит модель и смотрит, с которым лагом у модели RMSE лучше. Таким образом гусь на самом деле обучает на 5 моделей, а 25 моделей. А еще добавил МОЩНЫХ ИНДУСТРИАЛЬНЫХ по мнению чата-гпт моделей: Brownian Motion и NBeats.
Random Forest часто давал лучшие результаты на лаге 20 дней. GRU 60, 90 или 120. Sarimax полюбил 30 дней. Не знаю, как это вообще все связано, но, помимо обучения модели по запросу пользователя, каждый день, пока вы спите, с часу ночи до 9 утра гусь запускает обучение моделей, которые будут строить новые прогнозы, а старые прогнозы и модели само выпиливаться из кэша. То есть прогноз курса каждого ассета считается 1 раз в день, а затем ложится в кэш на 24 часа. После чего умирает, а его место заменяет более новый прогноз и модель. Все как у гусей.
Внимание: если будете запускать проект самостоятельно, то при перезапуске гусь уничтожает все модели и весь кэш.
А дальше что?
Помимо построения графика, гусь предлагает пользователю в нужное время прислать напоминание о том, что пора заработать денежков путем нехитрых манипуляций в виде "купить подешевле - продать подороже"


А еще он дает человекочитаемые советы по позиции.

В общем гусь придумал, как заработать на активе, используя разные сценарии. Осталось придумать, как владелец гуся может заработать сам.
Сценарий 1: делать то, что говорит гусь
Покупать подороже, продавать подешевле, тьфу, наоборот. Советы просты, но, вроде как, если знаешь будущее, то действенны.
Сценарий 2: подписки
Если у вас есть своя аудитория, или какой-нибудь хитрый план, то вы можете рассказать ей про гуся. "Но зачем?" - спросите вы.
Для бесплатных пользователей есть ограничение по количеству прогнозов в день, напоминаний, избранного и нет режима сигнала (раз в сутки указание на наиболее выгодный актив и стратегия по нему).
Пользователи с подпиской (1 Ton/мес) могут подключить режим-сигнала, настроить избранное, получать больше напоминаний и прогнозов в день. А также им будут доступны более продвинутые модели.

Pro режим оформляется по следующей инструкции.

Бот раз в минуту проверяет, поступили ли на указанный в .env кошелек Ton и дает подписку, которая позволяет получать больше прогнозов, включает режим сигнала (раз в день посылает наиболее доходную рекомендацию. В будущем думал добавить зоопарк новых моделей для pro-юзеров,
Через .env можно отключать ненужные модели

Указываем владельца бота

Настройки

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

Ну и конечно база данных для хранения информации о пользователях с pro-подпиской.

Технологический стек кратко:
Backend: Python 3.8+
Машинное обучение: scikit-learn (Random Forest), TensorFlow/Keras (LSTM/GRU), statsmodels (SARIMAX)
Данные: Yahoo Finance API, Stooq API
Интерфейс: Telegram Bot API
Мониторинг: Google Sheets API
Код открытый, пул-риквесты приветствуются
На всякий случай дам список ссылок из статьи:
Репозиторий гит-хаб для разведения своих инвест-гусей
Телеграм канал автора, где он что-то пишет про ML, NLP и разработку
Спасибо за прочтение.