Code Monkey home page Code Monkey logo

xiva-wgt / hackathon-finam-nn-trade-robot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from wiseplat/hackathon-finam-nn-trade-robot

0.0 0.0 0.0 370.89 MB

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

Python 100.00%

hackathon-finam-nn-trade-robot's Introduction

Торговый робот с использованием нейросетей

Hackathon-Finam-NN-Trade-Robot

Сделан в рамках соревнования Хакатон «Финам Trade API» 
по созданию торговых систем на основе открытого торгового API «Финама»

Почему я выбрал использование нейросетей для торгового робота?

  1. Тема использования искусственного интеллекта актуальна:

    • для прогнозирования поведения фондового рынка в целом,
    • для осуществления предсказаний поведения цены отдельных акций и/или фьючерсов и других инструментов
    • для поиска определенных торговых формаций на графиках цен
  2. Широкое применение искусственного интеллекта очень активно развивается на Западных рынках, на Российском всё только начинается.

  3. В открытом доступе нет полноценных примеров по использованию нейросетей для прогнозирования цен акций/фьючерсов, а те которые есть

    • или не работают
    • или чего-то для их работы постоянно не хватает.
      • По крайней мере лично мне ещё ни разу не встретились полноценно работающие примеры.

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

Какие есть скрытые цели? )))

Т.к. этот пример торгового робота с использованием нейросетей хорошо документирован и последовательно проходит через все этапы:

  • получение исторических данных по акциям
  • подготовка датасета с картинками формаций из графика акций по определенной логике
  • обучение нейросети и выбор лучшей обученной модели по параметрам loss, accuracy, val_loss, val_accuracy
  • проверка предсказаний сделанных нейросетью
  • проверка подключения к API Финама
  • запуск live стратегии с использованием выбранной лучшей модели обученной нейросети
  • записано обучающее видео как запускать и работать с этим кодом, выложенное на YouTube и на RuTube

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

  • По крайней мере появился +1 рабочий пример использования нейросетей для аналитики цен графика акций.

Тем самым, станет больше роботов с использованием искусственного интеллекта,

- это повлечет большую волатильность нашего фондового рынка
- большую ликвидность за счет большего количества сделок
- и соответственно больший приток капитала в фондовый рынок

Зарабатывает ли сейчас этот робот?

Торговая стратегия заложенная в этом роботе не даст ему заработать, т.к. мы открываем позицию по подтвержденной нейросетью формации на графике (т.е. когда нейросеть предсказывает, что вероятно будет рост), но мы не ждем роста и закрываем позицию через +1 бар старшего таймфрейма. Как вариант, можно заходить в сделку 1 к 3 или 1 к 5 со стоп-лоссом. Т.е. ждать профита или стоп-лосса.))

==========================================================================

Установка

  1. Самый простой способ:
git clone https://github.com/WISEPLAT/Hackathon-Finam-NN-Trade-Robot
  1. Или через PyCharm:
  • нажмите на кнопку Get from VCS: alt text

Вот ссылка на этот проект:

https://github.com/WISEPLAT/Hackathon-Finam-NN-Trade-Robot
  • вставьте эту ссылку в поле URL и нажмите на кнопку Clone alt text

  • Теперь у нас появился проект торгового робота: alt text

Установка дополнительных библиотек

Для работы торгового робота с использованием нейросетей, есть некоторые библиотеки, которые вам необходимо установить:

pip install aiohttp aiomoex pandas matplotlib tensorflow finam-trade-api

так же их можно установить такой командой

pip install -r requirements.txt

Обязательно! Выполните в корне вашего проекта через терминал эту команду:

git clone https://github.com/cia76/FinamPy

для клонирования библиотеки, которая позволяет работать с функционалом API брокера Финам.

P.S. Библиотека finam-trade-api - тоже позволяет работать с API Финам, просто для тестов я использовал обе.))) А для live торговли FinamPy.

Теперь наш проект выглядит вот так: alt text

Начало работы

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

  1. Нужно получить исторические данные по акциям, для обучения нейросети

    • Исторические данные для обучения нейросети мы получаем с MOEX. Т.к. получаем их бесплатно, то есть задержка в полученных данных на 15 минут.
    • Для этого используется файл 1_get_historical_data_for_strategy_from_moex.py
    • Полученные исторические данные сохраняются в каталоге csv в CSV файлах.
  2. Когда есть исторические данные, теперь мы можем подготовить картинки для обучающего набора данных

    • подготовка датасета с картинками формаций из графика акций по определенной логике:
      • на картинке рисуется цена закрытия и две скользящие средние - картинки рисуются для младшего таймфрейма
      • если на старшем таймфрейме закрытие выше предыдущего закрытия, то такой картинке назначаем класс 1 иначе 0
    • Для этого используется файл 2_prepare_dataset_images_from_historical_data.py
    • Полученные картинки сохраняются в каталоге NN\training_dataset_M1 в подкаталогах классификаций 0 и 1.
  3. Наконец-то есть датасеты для обучения нейросети )) Теперь обучаем нейросеть

    • Используем сверточную нейронную сеть (CNN)
    • Для этого используется файл 3_train_neural_network.py
    • Лог обучения нейросети находится в файле 3_results_of_training_neural_network.txt
    • Сходимость нейросети находится в файле 3_Training and Validation Accuracy and Loss.png
    • При обучении нейросети файлы моделей сохраняются в каталог NN\_models
  4. После успешного обучения нейросети нужно выбрать одну из обученных моделей для нашего торгового робота

    • Выбор лучшей обученной модели происходит по параметрам loss, accuracy, val_loss, val_accuracy
    • Выбранную модель нужно вручную сохранить в каталог NN_winner под именем cnn_Open.hdf5
  5. Теперь нужно сделать проверку предсказаний сделанных нейросетью на части классифицированных картинках

    • Для этого используется файл 4_check_predictions_by_neural_network.py
    • Как говорится просто проверить - что Ок
  6. Наконец-то делаем проверку подключения к API Финама, чтобы мы смогли торговать

    • Для этого используется файл 5_test_api_finam_v1.py - используем FinamPy для тестов

    • и файл 6_test_api_finam_v2.py - используем FinamTradeApiPy для тестов

      Как получить токен API Финам:

      • Открыть счет в "Финаме" https://open.finam.ru/registration
      • Зарегистрироваться в сервисе Comon https://www.comon.ru/
      • В личном кабинете Comon получить токен https://www.comon.ru/my/trade-api/tokens для выбранного торгового счета
      • Скопируйте и вставьте в файл my_config\Config.py полученный Ключ API и номер торгового счета (пример конфиг файла здесь: my_config\Config_example.py)
      # content of my_config\Config.py 
      class Config:
          ClientIds = ('<Торговый счет>',)  # Торговые счёта
          AccessToken = '<Токен>'  # Торговый токен доступа
  7. Теперь мы готовы запустить торгового робота в live режиме

    • Не забываем про Ключ API и номер торгового счета, уже должны быть прописаны в файле my_config\Config.py

    • запуск live стратегии осуществляется с помощью файла 7_live_strategy.py

    • в строке 266 этот параметр days_back отвечает за сколько дней назад взять данные, если запускаете скрипт в понедельник или после выходного/праздничного дня, то увеличьте это значение

      days_back = 1 # на сколько дней назад берем данные

    • строку 206 можно раскомментировать, чтобы скрипт например не запускался, если рынок не открыт (выходные и праздники не учитывает)

      await self.ensure_market_open() # проверяем, что рынок открыт

    • конфигурация торгового робота находится в файле my_config\trade_config.py хотелось бы указать, что т.к. мы берем исторические данные из MOEX, а не по API Финам (т.к. такой функционал будет реализован позже), то доступные тикеры для аналитики и скачивания данных необходимо подбирать вручную.

        training_NN = {"SBER", "VTBR"}  # тикеры по которым обучаем нейросеть
        portfolio = {"SBER", "VTBR"}  # тикеры по которым торгуем и скачиваем исторические данные
      

Теперь можно запускать и смотреть, а предварительно лучше посмотреть видео по работе с этим кодом , выложенное на YouTube и на RuTube

Внимание

Некоторые файлы содержат строку: exit(777) # для запрета запуска кода, иначе перепишет результаты это сделано специально, чтобы случайно не перезаписать данные, её можно закомментировать, когда будете тестировать свои модели и свои настройки.

P.S. В коде стратегии не реализована проверка на доступность денежных средств на счете для входа в сделку.

Код тестировался на M1=>M10 и M10=>H1, для других таймфреймов необходимо создавать большее число обучающих выборок.

Работоспособность проверялась на Python 3.10+ и Python 3.11+ с последними версиями библиотек.

==========================================================================

Спасибо

  • FinamPy: Игорю за библиотеку, которая позволяет работать с функционалом API брокера Финам.
  • FinamTradeApiPy: DBoyara за библиотеку, асинхронного REST-клиента для API Finam.
  • tensorflow: За простую и классную библиотеку для работы с нейросетями.
  • aiomoex: За хорошую реализацию получения данных с moex.

Важно

Исправление ошибок, доработка и развитие кода осуществляется автором и сообществом!

Пушьте ваши коммиты!

Условия использования

Программный код выложенный по адресу https://github.com/WISEPLAT/Hackathon-Finam-NN-Trade-Robot в сети интернет, позволяющий совершать торговые операции на фондовом рынке с использованием нейросетей - это Программа созданная исключительно для удобства работы и изучения применений нейросетей/искусственного интеллекта. При использовании Программы Пользователь обязан соблюдать положения действующего законодательства Российской Федерации или своей страны. Использование Программы предлагается по принципу «Как есть» («AS IS»). Никаких гарантий, как устных, так и письменных не прилагается и не предусматривается. Автор и сообщество не дает гарантии, что все ошибки Программы были устранены, соответственно автор и сообщество не несет никакой ответственности за последствия использования Программы, включая, но, не ограничиваясь любым ущербом оборудованию, компьютерам, мобильным устройствам, программному обеспечению Пользователя вызванным или связанным с использованием Программы, а также за любые финансовые потери, понесенные Пользователем в результате использования Программы. Никто не ответственен за потерю данных, убытки, ущерб, включаю случайный или косвенный, упущенную выгоду, потерю доходов или любые другие потери, связанные с использованием Программы.

Программа распространяется на условиях лицензии MIT.

hackathon-finam-nn-trade-robot's People

Contributors

wiseplat avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.