GithubHelp home page GithubHelp logo

tinkoff-investments-nodejs-bot's Introduction

Бот для Тинькофф Инвестиции

Version 0.3.5

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

Какие проблемы решает бот?

  • Использование бота для покупки/продажи активов по конкретной цене удобнее, чем отслеживание цен и торговля в ручном режиме. Инвестор не может быть в рынке 24/7, инвестор не может следить за активами, которые торгуются то время, пока он не у компьютера/телефона, в том числе, например, ночью.
  • Брокер/биржа не принимают заявки, существенно отклоняющиеся от текущей рыночной цены, поэтому инвестор не может поставить заявку, например, на 20% ниже чем текущая цена. С помощью бота можно установить любую интересующую цену.
  • Брокер/биржа могут не принимать заявки одновременно на покупку и продажу. Бот снимает для инвестора это ограничение.
  • При окончании торгового дня (сессии) активные заявки снимаются брокером/биржей. При использовании бота нет необходимости перевыставлять заявку на следующий торговый день (торговую сессию). Заявка активна до тех пор, пока не остановить бота, или пока триггер не сработается и бот не отправит заявку на рынок.
  • Функционал бота можно воспроизвести с помощью стоп-лосс или тейк-профит ордеров, но их использование имеет ряд ограничений. При использовании стоп-лосс/тейк-профит ордеров для покупки брокер будет резервировать денежные средства под каждый ордер. Таким образом количество интересующих инвестора покупок ограничивается свободными средствами инвестора. С помощью бота можно выставить лоюбое количество возможных заявок, поскольку резервирование средств не требуется. Торговля с помощью стоп/лоссов или тейк/профитов при отсутствующей позиции сложнее для понимания "средним" инвестором.

Как использовать бота

  1. Установите свежую версию NodeJS для вашей операционной системы с официального сайта.
  2. Из директории проекта установите зависимости: npm i.
  3. Переименуйте файл .env.example в .env.
  4. Создайте api-токен для доступа к api Тинькофф. Тут инструкция.
  5. Добавьте в .env в переменную TINKOFF_TOKEN_SECRET значение api-токена для доступа к api Тинькофф.
  6. Запустите скрипт из корневой папки с проектом node index.js.
  7. В меню выберите пункт "Настроить", добавьте сделки.
  8. Перезапустите программу, выберите пункт "Запустить скрипт".

Если все сделано правильно, программа начнет работу.

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

Для удобства использования арендуйте виртуальный сервер. Достаточно минимальной конфигурации. Цены на виртуальные серверы - от 2 долл. в месяц.

Важные рекомендации при торговле

Рыночный или лимитный ордер

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

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

Пример настройки покупки актива с использованием лимитного ордера

Входим в меню настройки, выбираем "Добавить сделку".

  1. Тикер: GAZP
  2. Направление: Купить
  3. Количество лотов: 1
  4. Цена актива, при достижении которой создастся ордер: 310
  5. Тип ордера: Лимитный
  6. Цена ордера: 310.2

Как будет вести себя скрипт в этой ситуации.

Когда в стакане появится цена предложения 310 руб., на рынок выставится ордер с ценой 310,2 руб. В случае если сигнал верный, нет никакой технической ошибки, и это не какой-то мгновенный "прострел", который не успеть выкупить даже роботом, то ордер с вероятностью 99,99% исполнится.

Цена исполнения будет для ликвидных активов максимально близкой к триггерной цене 310 руб. Незначительное отклонение возможно в обе стороны от цены 310 руб. Но с любом случае цена исполнения вашего ордера не превысит 310,2 руб., что избавит вас от сюрпризов.

В случае, если исполнения ордера по каким-то причинам не произошло, хотя сигнал и был получен, нужно отменить заявки через интерфейс Тинькофф Инвестиции, сбросить исполненные заявки в настройках скрипта (Настроить -> Активировать сделку), перезапустить скрипт и ждать нового сигнала.

Бэклог

(!) - приоритет.

  • Логирование ошибок отправки ордеров и прочих ошибок (просмотреть код всего приложения).
  • Отметить в списке те сделки, которые идут вне лимита.
  • Вывести уведомление о том, что лимит на торговлю не установлен, и это может быть опасно.
  • (!) Сделки, действующие до определенной даты.
  • Переименовать заголовок уведомления в Телеграм (что-то типа "Торговый бот Пронина #11 v0.xx.xx"), добавить в сообщение активную ссылку на репозиторий.
  • Автозаполнение при вводе тикера при добавлении сделки.
  • Правильная разрядность при выводе информации о цене при вводе сделки в зависимости от minPriceIncrement.
  • Периодический опрос брокера, сохранение в приложении данных об остатках, активных ордерах, транзакциях.
  • Вывод при настройке в списке активов текущую цену актива.
  • Сохранение вывода консоли в файл, для каждого запуска отдельный файл, ограничить количество файлов (3-5 шт.).
  • (!) Уведомление, если покупка осуществлена за счет маржиналки.
  • (!) Пинг-понг соединения с брокером, или иная проверка наличия соединения.
  • (!) Обработка onError соединения с брокером.
  • (!) Проанализировать, почему срабатывают заявки до того, как достигается триггерная цена, обработать этот кейс.
  • Уведомление при настройке, если триггер-прайс отклоняется от текущей цены больше чем на 20%.
  • Поменять debug и errorHandler местами. Ошибки должны поступать в errorHandler, и оттуда уже в debug при необходимости.
  • При установке лимитов показывать текущий лимит, а также предусмотреть возможность отмены ввода лимита.

Разработчику

https://github.com/tinkoff/invest-openapi/

https://tinkoff.github.io/invest-openapi/

https://tinkoff.github.io/invest-openapi/marketdata/

https://tinkoff.github.io/invest-openapi/swagger-ui/

https://www.npmjs.com/package/@tinkoff/invest-openapi-js-sdk

Контакты

https://t.me/InvestorPronin

Лицензия

Copyright 2021, Igor Pronin

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

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.