Пример торгового робота для Tinkoff Invest API (Node.js)

Overview

tinkoff-robot

Пример торгового робота на Node.js с использованием Tinkoff Invest Api v2.

  • использует комбинацию нескольких сигналов
  • работает одновременно с несколькими figi
  • учитывает комиссию брокера
  • не требует баз данных

Содержание

Подготовка

  1. Склонируйте репозиторий
    git clone https://github.com/vitalets/tinkoff-robot.git
    
  2. Установите зависимости
    cd tinkoff-robot && npm ci
    

Настройка окружения

Создайте в корне файл .env и положите в него токен и номера счетов:

# Тинькоф API токен
TINKOFF_API_TOKEN=...
# ID боевого счете
REAL_ACCOUNT_ID=...
# ID счета в песочнице
SANDBOX_ACCOUNT_ID=...

Для создания счета в песочнице запустите: npx ts-node-esm scripts/create-account.ts

Для просмотра информации по всем счетам запустите: npm run accounts

Конфигурация робота

Конфиг находится в файле src/config.ts, все поля с комментариями. Роботу можно одновременно задать несколько figi с разными параметрами стратегии.

Описание стратегии

Cтратегия использует комбинацию 3-х сигналов на покупку / продажу:

  • отклонение текущей цены (takeProfit / stopLoss)
  • пересечение скользящих средних (SMA)
  • индекс относительной силы (RSI)

Сейчас используется простейший вариант - если сработал хотя бы один сигнал, применяем его.

После срабатывания сигнала проверяется достаточно ли средств для этого действия. Если средств достаточно, выставляется лимит-заявка. При повторном сигнале заявка перевыставляется с более актуальной ценой. Также алгоритм сейчас действует аккуратно: больше инструмент уже куплен, то дополнительно он не докупается.

Запуск на исторических данных

Проверка робота на исторических данных сделана с помощью tinkoff-local-broker.

  1. Запустите локальный брокер в отдельном окне терминала
  2. Установите нужный диапазон дат в файле scripts/run-bakctest.ts
  3. Запустите
    npm run backtest
    
Примерный вывод:
[robot]: Запуск робота (песочница)
[portfolio]: Позиции загружены: 1
[portfolio]:      BBG004731354 1 x 401.05
[orders]: Заявки загружены: 0
[instrument_BBG004731354]: Загружаю 31 свечей для ROSN ...
[instrument_BBG004731354]: Свечи загружены: 525, текущая цена: 409
[strategy_BBG004731354]: Сигналы: profit=wait, rsi=wait, sma=wait (29.04.2022, 18:49:00)
Операции:
     29.04.2022, 15:54:00 Покупка ЦБ BBG004731354 (1) -404.3 rub
     29.04.2022, 16:04:00 Продажа ЦБ BBG004731354 (1) 403.95 rub
     29.04.2022, 16:35:00 Покупка ЦБ BBG004731354 (1) -404.05 rub
     29.04.2022, 17:11:00 Продажа ЦБ BBG004731354 (1) 406.1 rub
     29.04.2022, 18:11:00 Покупка ЦБ BBG004731354 (1) -408.9 rub
Прибыль: -0.010868%

Запуск на рыночных данных

Запуск робота на рыночных данных возможен в разных вариантах: по расписанию, либо в виде постоянного процесса. На длинных таймфреймах (>1мин) лучше запускать по расписанию.

Запуск робота в песочнице:

npm run market

Запуск робота на реальном счете:

npm run market:real

Также доступны еще два флага:

  • --dry-run - в этом случае производятся все действия кроме создания заявок (даже на боевом счете)
  • --cron - разовый запуск, а не процесс

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

npm run market:real -- --dry-run --cron

Визуализация

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

npm run chart

Пример графика: image

Деплой

Деплой робота в виде serverless-функции на Яндекс.Облако, запускаемой по расписанию:

  1. Установите и настройте yc-cli
  2. Создайте сервисный аккаунт tinkoff-robot-sa и выдайте ему роль serverless.functions.invoker
  3. Запустите деплой функции:
    npm run deploy
  4. Создайте триггер типа таймер с cron-выражением 0/5 7-16 ? * 2-6 * - запуск каждые 5 минут с 10 до 19 (msk) по будням. В качестве функции укажите триггеру tinkoff-robot
  5. Проверьте в логах функции, что вызовы происходят

В последующем для деплоя новой версии достаточно вызвать:

npm run deploy

Связанные проекты

Лицензия

Apache 2.0

You might also like...

Hospital - Умная система для Госпиталей

Hospital - Умная система для Госпиталей

Hospital - Умная система для Госпиталей Эта аналогичная система но с дополненными функциями для удобства. Врачам больше не придется бегать по всем кой

Oct 18, 2022

This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js

This is a vanilla Node.js rest API created to show that it is possible to create a rest API using only vanilla Node.js. But in most cases, I would recommend you to use something like Express in a production project for productivity purposes.

Jul 19, 2022

Node 18's node:test, as a node module

node-core-test This is a user-land port of node:test, the experimental test runner introduced in Node.js 18. This module makes it available in Node.js

Dec 15, 2022

Apilytics for Node.js - Easy API analytics for Node backends

apilytics-node Apilytics is a service that lets you analyze operational, performance and security metrics from your APIs without infrastructure-level

Sep 2, 2022

Spin node create spin api for node

Links Contract api JS api @spinfi/core @spinfi/node @spinfi/node Spin node create spin api for node How to install yarn add @spinfi/node How to init i

Oct 18, 2022

A Weather API project inspired by The Ultimate API Challenge / Weather API.

Weather API Project A Weather API project inspired by The Ultimate API Challenge / Weather API. Tech Stack: React.js Tailwind Axios Inspiration The Pr

Dec 29, 2021

This project is built with JavaScript, Webpack, HTML & CSS, Leaderboard api. When user clicks on Refresh button it hits the api and responds with the data, The user can also post data to the api

This project is built with JavaScript, Webpack, HTML & CSS, Leaderboard api. When user clicks on Refresh button it hits the api and responds with the data, The user can also post data to the api

leaderboad Description the project. this project is about the leaderboad i did during Microverse to build a website for adding Data to the API and fet

May 30, 2022

Node-cli-starter - Basic starter kit for building Node CLI applications with TypeScript.

node-cli-starter Minimal starter kit for building Node CLI applications with TypeScript. Getting Started To get started clone repo locally and run npm

May 17, 2022

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Inter Process Communication Module for node supporting Unix sockets, TCP, TLS, and UDP. Giving lightning speed on Linux, Mac, and Windows. Neural Networking in Node.JS

Dec 9, 2022
Owner
Vitaliy Potapov
Vitaliy Potapov
Обучающий пример бота Telegram на Node.js с использованием Telegraf. Структура, сцены типа Base, Wizard, работа с api сторонних сервисов

NODE TG BOT TUTORIAL | WEATHER Обучающий пример Telegram bot по определению погоды с меcтоположения человека. Сервис бесплатного API погоды База данны

Владимир Бондаренко 13 Dec 22, 2022
Utility to automatically fill foreign income section of 3-NDFL report based on tax report from Tinkoff broker

Заполнение дохода за пределами РФ в декларации 3-НДФЛ Disclaimer Автор не несет ответственности за корректное заполнение налоговой декларации. Вы запу

Oleg Elifantiev 12 Dec 9, 2022
Демонстрационный пример к мастер-классу (Infostart Event 2022)

Backend For Frontend Репозиторий с примерами кода для мастер-класса «Backend For Frontend», конференция «Infostart Event 2022». Как запустить Загрузит

Igor Antonov 3 Oct 8, 2022
Шаблон для ботів discord.js v14.8.0 із 100% охопленням Discord API, обробником команд, тощо на основі https://discordjs.guide/

Ласкаво просимо до шаблону дискорд бота Шаблон бота з відкритим вихідним кодом discord.js, який базується на офіційному посібнику з discord.js, щоб ро

GamesTwoLife 4 Mar 18, 2023
Скрипт для добавления дивидендов от иностранных компаний в 3-НДФЛ на сайте налоговой

Скрипт для добавления дивидендов от иностранных компаний в 3-НДФЛ на сайте налоговой Заточено под XLSX-отчет от Тинькофф. Подробная информация о запол

Dmitry Kirilyuk 7 Apr 23, 2022
exteraWeb - веб-клиент для Telegram

exteraWeb Интерфейс Детали Веб клиент для Telegram разработанный с использованием ReactJS и TDLib. Посмотреть можно здесь. Запуск Получите API ключи.

exteraSquad 6 Jun 23, 2022
AutoSend Letters HeadHunter — это скрипт для автоматической отправки откликов на HeadHunter (hh).

AutoSend Letters HeadHunter Описание проекта AutoSend Letters HeadHunter — это скрипт для автоматической отправки откликов на HeadHunter (hh). Для чег

Igor Stepanov 22 Dec 21, 2022
Плагин для браузера, позволяющий сохранить информацию о вашем голосе в файл

deg-plugin После подключения плагина нужно открыть Инструменты разработчика (Developer tools), нажав Ctrl-Shift-I (Windows/Linux) или Command-Option-I

null 3 Sep 12, 2022
Потоковый курс информатики для 1 курса Политехнического университета

Информатика 2022 ?? Web Курс по информатике в Политехе. В репозитории вы можете найти слайды и комментарии к темам занятий. № Название Слайды Коммента

Constantine Korikov 5 Sep 15, 2022
Тестовое задание для RDX-lab

NestJs Api Для начала нужно переименовать файл .env.template в .env и заполнить его данными, которых не хватает Далее выполняем: docker-compose -f doc

Ivan 3 Nov 3, 2022