betslus1 / bestbot

конкурс ТИ
Apache License 2.0
21 stars 5 forks source link

Торговая система "BestBot v.9000"

Данная сборка является примером торгового робота в рамках конкурса Тинькоф Инвестиций

https://github.com/Tinkoff/invest-robot-contest

Зависимости

Данная сборка была протестирована в ОС Debian 11 и в NodeJs 16, но предполагается, что она будет работать и в других системах с установленным nodejs. Так же могут потребоваться стандартные библиотеки:

sudo apt-get install gcc g++ make
sudo apt-get install build-essential
sudo apt install sqlite3
sudo apt-get install python

Используется NodeJS SDK для API Тинькофф Инвестиций GRPC собственной разработки: https://github.com/betslus1/unofficial-tinkoff-invest-api_v2-lazy-sdk-NODEJS

Установка

Скопировать

автоматически

git clone --recurse-submodules git@github.com:betslus1/bestbot.git

вручную

Скопировать данный репозитарий кнопкой Download ZIP

Скопировать репозитарий https://github.com/betslus1/unofficial-tinkoff-invest-api_v2-lazy-sdk-NODEJS в папку lib

Установить зависимости

1) В консоли открыть папку проекта например cd bestbot 2) Установить библиотеки и скомпилировать командой npm i

Настройка системы

Настройка системы осуществляется в файле options.js

В первую очередь необходимо прописать:

Запуск торговой системы

node app.js

OR

node app.js [token]

Функциональные возможности

Схема взаимодействия модулей приложения

Торговая стратегия

Примеры торговых стратегий

Разработка своей стратегии

Входные параметры:

Разработка:

Сокращенный пример торговой стратегии (Полноценный пример смотрите в примерах торговых стратегий)

module.exports.indicators = { 'RSI':{ 'min':0, 'max':100, 'buy':40, 'sell':60 }};

module.exports.step       = function (lastCandles, currentOrder, currentBalance) {
   let indicators['RSI'] = calc_RSI(lastCandles);
   if(indicators['RSI'] > module.exports.indicators['RSI']?.buy){
     commands.push({'type':'Buy', 'price':price.Buy, 'quantity': quantity.Buy});
     logs.push('Покупаем: ${price.Buy} x ${quantity.Buy}');
   }
   if(indicators['RSI'] < module.exports.indicators['RSI']?.sell){
     commands.push({'type':'Sell', 'price':price.Sell, 'quantity': quantity.sell});
     logs.push('Продаем: ${price.Buy} x ${quantity.Buy}');
   }
   return {logs, commands, indicators};
 }

Интерфейс

Все параметры в обоих интерфейсах обновляются в реальном времени во всех режимах

Описание консольного интерфейса

Описание HTTP версии интерфейса

По умолчанию веб-версия доступна по адресу http://ваш_ip_адрес:333/ (demo:demo). Порт и логин/пароль меняются через options.js.

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

Процесс симуляции с визуализацией в реальном времени

Обновление содержимого окон происходит с помощью функции web.render('имя окна','содержимое') по протоколу WebSocket

Поддержка мобильных устройств

Торговые контура

В контурах Песочница и Бектестинг доступны пополнения счета. В контуре Бэктестинг доступна выгрузка исторических данных и выбор скорости работы симуляции. Визулизация в реальном времени.

Логирование

Логирование реализовано через глобальную функцию "log" и описано в файле lib/logger.js Параметры функции:

Отказ от ответственности

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

Номинация "Самое оригинальное использование API Тинькофф Инвестиций"

PS. Сервис доступен во время работы бирж. Уровень сложности определяется выбором торгового инструмента. Чем выше ликвидность и ниже спред, тем сложнее будет играть.