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

Модуль stats

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

TradeStatisticsAnalyzer

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

Класс предоставляет возможность преобразовать формат отчета, а также сгенерировать короткую сводку. Для этого необходимо реализовать классы, унаследованные от TradeStatisticsProcessorBase и TradeStatisticsCalculatorBase соответственно и передать объекты этих классов в параметры функции get_report. Подробнее см. примеры использования.

Методы

init

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

Field Type Description
positions int Значение
money float Значение nano (при использовании необходимо value типа int)
instrument_info tinkoff.invest.Instrument Информация об инструменте тоговли
logger logging.Logger Логгер

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

add_trade

Запись операции в статистику. Этот метод в основном используется роботом, не рекомендуется вызывать его самостоятельно.

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

Field Type Description
trade tinkoff.invest.OrderState Операция

cancel_order

Отмена операции, удаление из статистики. Этот метод в основном используется роботом, не рекомендуется вызывать его самостоятельно.

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

Field Type Description
order_id int ID операции

get_positions

Получение количества ценных бумаг на счету на текущий момент.

Выходные данные: int, количество бумаг.

get_money

Получение баланса на текущий момент.

Выходные данные: float, баланс.

get_pending_orders

Получение списка нереализованных торговых заявок.

Выходные данные: list[tinkoff.invest.OrderState], список заявок.

save_to_file

Сохранение статистики в файл.

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

Field Type Description
filename str Название файла

load_from_file

Чтение статистики из файла.

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

Field Type Description
filename str Название файла

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

add_backtest_trade

Запись в статистику операции из бэктеста.

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

Field Type Description
quantity int Количество лотов
price Quotation Цена лота
direction tinkoff.invest.OrderDirection Направление сделки

get_report

Получение отчета о статистике.

Метод собирает датафрейм с полной статистикой об операциях, после чего последовательно запускает на нем пользовательские обработчики. Для получения краткого отчета запускаются пользовательские генераторы краткой сводки, и их результаты объединяются в один dict.

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

Field Type Description
processors list[TradeStatisticsProcessorBase] Обработчики статистики
calculators list[TradeStatisticsCalculatorBase] Генераторы краткой сводки

Выходные данные: dict[str, any], pandas.DataFrame: словарь с краткой сводкой, полная статистика по операциям.

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

Генерация отчета

import pandas as pd
from robotlib.stats import TradeStatisticsAnalyzer, TradeStatisticsProcessorBase, TradeStatisticsCalculatorBase

class BalanceProcessor(TradeStatisticsProcessorBase):
    def process(self, df: pd.DataFrame) -> pd.DataFrame:
        df['balance'] = -(df['total_order_amount'] * df['sign']).cumsum()
        df['instrument_balance'] = (df['lots_executed'] * df['sign']).cumsum()
        return df


class BalanceCalculator(TradeStatisticsCalculatorBase):
    def calculate(self, df: pd.DataFrame) -> dict[str, any]:
        final_balance = df['balance'][len(df) - 1]
        final_instrument_balance = df['instrument_balance'][len(df) - 1]
        final_price = df['average_position_price'][len(df) - 1]
        return {
            'final_balance': final_balance,
            'max_loss': -df['balance'].min(),
            'final_instrument_balance': final_instrument_balance,
            'income': final_balance + final_instrument_balance * final_price  # todo: * instrument_info.lot
        }


stats: TradeStatisticsAnalyzer
# предположим, что эта статистика уже содержит данные

short_summary, full_report = stats.get_report(processors=[BalanceProcessor()], calculators=[BalanceCalculator()])

print(short_summary)
# output: {'final_balance': -1764.8, 'max_loss': 1889.2, 'final_instrument_balance': 1, 'income': -177.39999999999986}
print(full_report)
# output: dataframe with all the trades

TradeStatisticsProcessorBase

Интерфейс, который необходимо реализовать при необходимости преобразования отчета.

Методы

process

Преобразования отчета

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

Field Type Description
df pandas.DataFrame Полный отчет

Выходные данные: pandas.DataFrame: преобразованный отчет.

TradeStatisticsCalculatorBase

Интерфейс, который необходимо реализовать для преобразования краткой сводки.

Методы

calculate

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

Field Type Description
df pandas.DataFrame Полный отчет

Выходные данные: dict[str, any]: словарь ключ-значение, содержащий краткую сводку.