Робот на стакане
Стратегия
Робот отслеживает "стакан". Если лотов в заявках на покупку больше, чем в лотах на продажу в BuyRatio
раз,
то поступает сигнал на покупку, в противном случае, если лотов в заявках на продажу больше, чем в лотах на покупку
в SellRatio
раз - поступает сигнал на продажу
Конфигурация
type OrderBookStrategyConfig struct {
// Instruments - слайс идентификаторов инструментов
Instruments []string
// Currency - ISO-код валюты инструментов
Currency string
// RequiredMoneyBalance - Минимальный баланс денежных средств в Currency для начала торгов.
// Для песочницы пополнится автоматически.
RequiredMoneyBalance float64
// Depth - Глубина стакана
Depth int32
// Если кол-во бид/аск больше чем BuyRatio - покупаем
BuyRatio float64
// Если кол-во аск/бид больше чем SellRatio - продаем
SellRatio float64
// MinProfit - Минимальный процент выгоды, с которым можно совершать сделки
MinProfit float64
// SellOut - Если true, то по достижению дедлайна бот выходит из всех активных позиций
SellOut bool
}
Исполнитель
Под стратегию написан простейший исполнитель, который выставляет рыночные поручения.
Пока реализована возможность открывать только long позиции.
Покупка
Заявка на покупку не выставляется если:
- Позиция уже открыта
- На счету недостаточно денежных средств
Продажа
Заявка на продажу не выставляется если:
- Позиция не открыта
- Цена открытия позиции меньше цены последней сделки по этому инструменту
Режим работы
Данный пример ориентирован на торговлю внутри одного дня. За расписанием торгов следит investgo.Timer
,
он сигнализирует о начале и завершении основной торговй сессии на сегодня.
При запуске main investgo.Timer
возвращает канал с событиями, START/STOP - сигналы к запуску и остановке бота,
если выставлен флаг SellOut
в конфигурации стратеги и время cancelAhead
при создании таймера, то бот завершит работу и закроет все
позиции за cancelAhead
до конца торгов текущего дня.
Запуск
Важно! В примерах роботов interval_bot
и загрузчика стаканов order_book_download
используется драйвер
для sqlite, который является cgo пакетом. Перед запуском убедитесь, что
на вашем компьютере установлен gcc.
Клонируете репозиторий
git clone https://github.com/tinkoff/invest-api-go-sdk
Перейдите в папку с ботом
cd invest-api-go-sdk/examples/ob_bot
Создайте файл config.yaml
touch "config.yaml"
И заполните его по примеру example.yaml
AccountId: ""
APIToken: <your_token>
EndPoint: sandbox-invest-public-api.tinkoff.ru:443
AppName: invest-api-go-sdk
DisableResourceExhaustedRetry: false
DisableAllRetry: false
MaxRetries: 3
Для быстрого старта на песочнице достаточно указать только токен, остальное заполнится по умолчанию.
go run cmd/main.go
Обратите внимание, что в одной функции main есть возможность создать несколько клиентов для investAPI c разными
токенами и счетами, а с разными клиентами можно создавать разных ботов и запускать их одновременно.
Дисклеймер
Разработчики не несут ответственность за любые финансовые потери, возникшие в процессе использования ботов из данного репозитория.
Примеры торговых роботов не являются абсолютно верными решениями, их основная цель - продемонстрировать возможности
investAPI и go-sdk в частности. Вы свободно можете использовать код из примеров для развития своих проектов.