Package: tinvest-robot-perevalov
Tinvest Robot PerevalovTinvest Robot Perevalov - этоPython Библиотека, реализующая функциональность торгового робота на основеTinkoff Invest API для Pythonс торговой стратегией,основанной на анализе тональности новостей.Описание торговой стратегииТорговая стратегияоснована наанализе тональности новостей. При получении новой новости производится анализ её тональности, в результате которого получаем один из трёх классов:positive,negative, илиneutral.
После чего,проверяется наличие упоминания той или иной компании в заголовке новости.
Если компания упомянута, то в случае новости с классомpositiveпосылается сигнал напокупкуакций в заданном количестве.
Если новость с классомnegative, то посылается сигнал напродажуакций в заданном количестве.Ниже на рисунке представлена концептуальная схема стратегии на определённом примере.Как видно, ключевым звеном является модуль анализа тональности, в качестве которого используется предобученная нейронная языковая модель (neural language model).Тестирование торговой стратегии (Backtesting)Тестирование стратегии проводилось на наборе данных новостей"Historical financial news archive", который содержит в себе новостные данные по 800 компаниям из США за 12 лет (2008-2020).В ходе тестирования был выбран диапазонс 2012 по 2020 годывключительно по100 наиболее упоминаемым компаниямиз набора данных. Поскольку некоторые компании оказались недоступны через сервис Тинькофф Инвестиции, в итоге в процедуру тестирования было включено90 компаний.В рамках наблюдаемого года (например 2013) бралось соответствующее подмножество новостейупорядоченных по датепо возрастанию. После чего по каждой из компаний проверялось упоминание в той или иной новости и далее использовался алгоритмстратегииописанной выше соследующими условиями:Комиссия за операции не учитывалась;Покупка в шорт (в минус) недоступна;Покупка и продажа производится по одному лоту за раз;Финансовый результат считался по определённой бумаге за конкретный год;Данные по цене (свечи) брались из API Тинькофф Инвестиции;Если на конец года на балансе имелось ненулевой число акций, то финальный баланс на год рассчитывался по цене закрытия бумаг в последний торговый день года.Ниже представленые некоторые графики по результатам тестирования.На графике мы видим, что доходность была положительной почти на всех годах, за исключением 2018. Также, очевидно что доходность не зависит от количества операций по бумагам (это было так же подтверждено анализом коррелляции).На графике не уместились все тикеры, однако в топ-3 самых доходных компаний входят: TSLA (64.72%), NFLX (28.62%), AAPL (18.68%) в среднем за год. Также, очевидно, что большинство бумаг оказались с положительной доходностью.Тестирование можно воспроизвести с помощью данногоноутбукаскачав перед этимдатасет. Экспериментальные данные тестирования доступнытут.Как запустить решение (How to run)Для запуска решения необходимо установитьDockerиDocker Composeна вашей машине. После чего, необходимо перейти в директориюexamplesи запустить там следующие команды:docker-composebuild
docker-composeupПосле чего, запустится 3 контейнера:fetch-- контейнер для получения новостей из интернета (запускается сразу или через интервал, указанный впримере);trade-- контейнер для совершения торговых операций, мониторит полученные новости через определённый интервал, указанныйтут.sqlite-web-- позволяет следить за полученными новостями и исполненными операциями в базе данных через веб-интерфейс (по умолчанию порт8080).Внимание, перед тем как запускать решение, необходимо создать.envфайл с вашими конфигурационными параметрами. Пример конфигурационного файла:TINVEST_ACCOUNT_ID=200000000
TINVEST_DB_NAME=../data/tinvest-perevalov.sqlite
SENTIMENT_MODEL=cardiffnlp/twitter-roberta-base-sentiment
TINVEST_TOKEN=t.YoUr.tInVeSt.token
IS_SANDBOX=True
TINVEST_TICKERS=CSCO,AAPLОписание параметров:TINVEST_ACCOUNT_ID: Идентификатор счета в тинькофф инвестициях (или в песочнице)TINVEST_DB_NAME: Имя базы данных где будуn храниться новости и данные об операциях (если меняете относительный путь, то необходимо изменить volume вdocker-compose.yml)SENTIMENT_MODEL: Имя модели для обработки новостей (в данный момент поддерживается только эта модель)TINVEST_TOKEN: Токен для доступа к тинькофф инвестициямIS_SANDBOX: Признак того, работаем ли мы в песочницеTINVEST_TICKERS: Список тикеров для торговли через запятуюОграничения и планы на будущееОсновными ограничениями решения можно считать:Торговля только на СПб Бирже (из-за использования англоязычной модели анализа новостей);Торговля по одному лоту на бумагу;Стратегия "захардкожена" внутри библиотеки.Однако, в будущем планируются следующие улучшения:Поддержка нескольких бирж для торговли;Поддержка нескольких моделей анализа новостей;Кастомизация стратегии;Коннекторы для использования разных БД.