Модуль 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]
: словарь ключ-значение, содержащий краткую сводку.