Простой бот для взаимодействия с Тинькофф Инвестициями с возможностью выполнения заявок на покупку акций с заданными значениями StopLoss и TakeProfit по наступлению которых будет сделана заявка на продажу.
- cats
- doobie
- postgres
- http4s
- circe
- telegramium
- tinvest4s для работы с OpenApi Тинькофф.Инвестиций, который переехал в отдельный репозиторий
- Нужно иметь брокерский счет в Тинькофф.Инвестиции, если есть, то получить в личном кабинете токен для авторизации (для торговли на бирже или в песочнице)
- Зарегистрировать telegram бота и получить токен для авторизации
- Подготовить базу данных - создать пользователя и таблицы (TODO: Следует автоматизировать этот этап)
CREATE TABLE candles (id SERIAL, time TEXT, interval TEXT, figi TEXT, open REAL, close REAL, hight REAL, low REAL, volume REAL);
CREATE TABLE operations (id SERIAL, figi TEXT, stopLoss REAL, takeProfit REAL,
time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
operationStatus TEXT, orderId TEXT, orderStatus TEXT, orderOperation TEXT,
requestedLots INT, executedLots INT, tgUserId bigint);
CREATE TABLE notifications (id SERIAL, userId INT, message TEXT);
- В файле конфигурации
application.conf
задать токены для авторизации telegram-бота и в OpenApi Тинькофф.Инвестиций, и имя/пароль для подключения к базе данных - Запустить проект
$ sbt run
- Выполнение мониторинга стоимости заданных пользователем акций
- Выполнение заявки на покупку акций по значениям StopLoss и TakeProfit
- Уведомление пользователя через telegram о выполняемых действиях
На данном этапе реализован способ взаимодействия через telegram(уведомления и команды), поскольку он проще и быстрее для тестирования и проверки.
-
/portfolio
- Портфель -
/etfs
- Получение списка ETF -
/currencies
- Получение списка валютных пар -
/orderbook.figi.depth
- Получение стакана поFIGI
-
/cancelOrder.orderId
- Отмена заявки поOrderId
-
/limitOrderBuy.figi.lots.price
- Лимитная заявка на покупку -
/limitOrderSell.figi.lots.price
- Лимитная заявка на продажу -
/marketOrderBuy.figi.lots
- Рыночная заявка на покупку -
/marketOrderSell.figi.lots
- Рыночная заявка на продажу
-
/marketOrderBuy.figi.lots.stoploss.takeprofit
- Рыночная заявка на покупку с указанными значениямиstoploss
иtakeprofit
.stoploss
иtakeprofit
имеют типDouble
. Например, команда/marketOrderBuy.BBG009S39JX6.10.100,01.200,02
выполнит покупку 10 лотов акцийBBG009S39JX6
со значениемstoploss=10.100
иtakeprofit=200,02
. При этом значение stoploss не должна превышать значение текущей стоимости акции и, соответственно, значениеtakeprofit
должна превышать текущую стоимость акции. Команда вернет информацию о покупке и id операции. -
/activeOperations
- Список активных операций -
/stopOperations
- Отменить все активные операции -
/completedOperations
- Получить список последних завершенных операций -
/stopOperations.id
- Отменить операцию по id
Под операцией подразумевается процесс подписки на отслеживание стоимости акции по figi
, которая завершится по достижению значений stoploss
и takeprofit
или по команде stop
.