Данная сборка является примером торгового робота в рамках конкурса Тинькоф Инвестиций
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]
Входные параметры:
currentBalance - текущий баланс
Выходные параметры:
Разработка:
/strategy
Сокращенный пример торговой стратегии (Полноценный пример смотрите в примерах торговых стратегий)
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};
}
lib/consoleUI.js
- Набор модулей для управления консольным интерфейсомlib/Web.js
- Набор модулей для управления HTTP версией интерфейса по протоколам HTTP и WebSocket/views
, используется шаблонизатор EJS + expressconsoleUI.render('имя окна','содержимое')
По умолчанию веб-версия доступна по адресу http://ваш_ip_адрес:333/ (demo:demo). Порт и логин/пароль меняются через options.js.
В целом интерфейс использует то же самое расположение основных окон что и консольная версия. Добавлены функции управления, такие как выбор торгового контура, зачисления баланса, выбор инструмента и т.д.
Обновление содержимого окон происходит с помощью функции web.render('имя окна','содержимое')
по протоколу WebSocket
lib/backtest.js
и использует основные методы основного контура для получения максимальной правдоподобности и достижения полиморфизма кода.В контурах Песочница и Бектестинг доступны пополнения счета. В контуре Бэктестинг доступна выгрузка исторических данных и выбор скорости работы симуляции. Визулизация в реальном времени.
Логирование реализовано через глобальную функцию "log" и описано в файле lib/logger.js
Параметры функции:
Отправка уведомления
Статистика считается по методу FIFO, для этого ежеминутно запрашивается информация о завершенных сделках. Каждому трейду покупки ставится в соответствие трейд продажи и высчитывается уплаченная комиссия, прибыль. Так же доступно отображение сводной информации по каждому инструменту.
Система хранения подключается в файле lib/db.js
, по умолчанию используется Sqlite3, но можно переопределить методы query
и select
для использования другой СУБД. Исторические свечи хранятся в папке /cache
. Для очистки БД достаточно удалить файл data/db.sqlite
, после перезапуска приложения его структура автоматически восстановится
Данная система поставляется, как есть. Автор не несет ответсвенности за возможные убытки. Торги на бирже являются высокорисковыми операциями требующими опрделенных навыков и опыта. Не является торговой рекомендацией.
Дистрибутив: Поставляется в рамках торговой системы "bestBot", вкладка "DirectMod".
Недалекое будущее. Ученые научились переносить разум в информационные системы. Ваш разум был перенесен и в результате ошибки затерялся где-то в глубинах API Тинькофф инвестиций. Теперь вы не человек, а биржевая заявка на бирже. Вас окружают трейдеры, которые хотят Вас поймать. Но Вы понимаете, что жизнь биржевой заявки продолжается, пока она не сработает с встречными заявками. Вы вынуждены скитаться по биржевым стаканам избегая заявок других трейдеров...
Данная игра может рассматриваться как пример обработки стакана в режиме реального времени.
PS. Сервис доступен во время работы бирж. Уровень сложности определяется выбором торгового инструмента. Чем выше ликвидность и ниже спред, тем сложнее будет играть.