Перейти к содержанию

Модуль strategy

Содержит классы стратегии торгового робота.

TradeStrategyBase

Интерфейс стратегии торгового робота. Содержит в себе логику обработки обновлений биржевых данных. Пользователь может использовать одну из представленных реализаций (RandomStrategy, MAEStrategy) или реализовать собственную.

Торговый робот использует bidirectional-stream Тинькофф Инвестиций для получения информации о событиях. Для настройки событий, на которые стратегии необходима подписка следует использовать параметры стратегии candle_subscription_interval, order_book_subscription_depth, trades_subscription

Подробнее см. примеры использования.

Представленные реализации

RandomStrategy - Случайная стратегия

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

MAEStrategy - Стратегия скользящего среднего

Данная стратегия основана на индикаторе скользящей средней. Раз в минуту (при получении новой минутной свечи) рассчитывает два скользящих средних, длины которого можно задать в конструкторе. При изменении знака их разницы (пересечении линии скользящих средних) считает, что текущий тренд цены изменился и отдает распоряжение на покупку / продажу, если "короткое" среднее выше или ниже "длинного" соответственно. Покупает и продает каждый раз фиксированное число, изначально заданное в конструкторе, при условии, что это возможно.

Свойства

Field Type Description
candle_subscription_interval tinkoff.invest.SubscriptionInterval Период свечей для подписки
order_book_subscription_depth Optional[int] Глубина стакана для подписки
trades_subscription bool Подписка на обезличенные операции
strategy_id str id стратегии (используется логгером)

Методы

load_instrument_info

Запись информации об инструменте. Метод вызывается классом TradeRobotFabric.

Входные данные:

Field Type Description
instrument_info tinkoff.invest.Instrument Информация об инструменте

load_candles

Загрузка исторических свечей. Вызывается роботом при начале торгов. Может быть переопределена пользователем для настройки параметров стратегии.

Входные данные:

Field Type Description
candles list[tinkoff.invest.HistoricCandle] Список исторических свечей

decide

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

Входные данные:

Field Type Description
market_data tinkoff.invest.MarketDataResponse Биржевые данные
params TradeStrategyParams Текущие параметры робота

Выходные данные: StrategyDecision - решения о действиях торгового робота.

decide_by_candle

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

Входные данные:

Field Type Description
candle tinkoff.invest.MarketDataResponse Свеча
params TradeStrategyParams Текущие параметры робота

Выходные данные: StrategyDecision - решения о действиях торгового робота.

Структуры данных

TradeStrategyParams

Структура данных, передаваемая на вход стратегии при обновлении данных.

Field Type Description
instrument_balance int Количество лотов инструмента на счету
currency_balance float Баланс счета
pending_orders list[tinkoff.invest.OrderState] Список нереализованных биржевых заявок

RobotTradeOrder

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

Field Type Description
quantity int Количество лотов
direction tinkoff.invest.OrderDirection Направление заявки (покупка / продажа)
prive Optional[Money] Цена заявки (при отсутствии - рыночная цена)
order_type tinkoff.invest.OrderType Тип заявки

StrategyDecision

Структура данных, возвращаемая стратегией и содержащая решение о действиях торгового робота.

Field Type Description
robot_trade_order Optional[RobotTradeOrder] Поручение роботу
cancel_orders list[OrderState] Список биржевых заявок, которые необходимо отменить