Полный справочник статистик

Менеджер статистик StatisticManager управляет коллекцией экземпляров IStatisticParameter. Каждый параметр отслеживает определенную метрику во время выполнения стратегии. Все доступные параметры создаются при помощи реестра StatisticParameterRegistry.

Общий обзор работы со статистикой стратегий см. в разделе Статистика.

Интерфейсы

Система статистик построена на иерархии интерфейсов. Каждый интерфейс определяет источник данных для расчета параметра:

Интерфейс Описание
IStatisticParameter Базовый интерфейс: свойства Name, Type, Value, DisplayName, Description, Category, Order; метод Reset()
IPnLStatisticParameter Параметры на основе прибыли/убытков: метод Add(marketTime, pnl, commission)
ITradeStatisticParameter Параметры на основе сделок: метод Add(PnLInfo)
IOrderStatisticParameter Параметры на основе заявок: методы New(order), Changed(order), RegisterFailed(fail), CancelFailed(fail)
IPositionStatisticParameter Параметры на основе позиций: метод Add(marketTime, position)
IRiskFreeRateStatisticParameter Параметры с безрисковой ставкой: свойство RiskFreeRate
IBeginValueStatisticParameter Параметры с начальным значением: свойство BeginValue

Параметры прибыли и убытков (P&L)

Все параметры данной группы реализуют интерфейс IPnLStatisticParameter и наследуют от BasePnLStatisticParameter. Они получают данные при каждом обновлении значения P&L стратегии.

Класс Описание Тип значения
NetProfitParameter Чистая прибыль за весь период. Устанавливается равной текущему значению P&L decimal
NetProfitPercentParameter Чистая прибыль в процентах. Требует установки BeginValue (начальный капитал). Формула: pnl * 100 / BeginValue decimal
MaxProfitParameter Максимальная прибыль (максимальное значение P&L за весь период) decimal
MaxProfitPercentParameter Максимальная прибыль в процентах. Требует BeginValue. Формула: MaxProfit * 100 / BeginValue decimal
MaxProfitDateParameter Дата достижения максимальной прибыли DateTime
MaxDrawdownParameter Максимальная абсолютная просадка. Разница между пиком и минимумом кривой эквити decimal
MaxDrawdownPercentParameter Максимальная просадка в процентах. Формула: MaxDrawdown * 100 / MaxEquity decimal
MaxDrawdownDateParameter Дата максимальной просадки DateTime
MaxRelativeDrawdownParameter Максимальная относительная просадка. Вычисляется как отношение просадки к пиковому значению эквити decimal
ReturnParameter Относительная доходность за весь период. Максимальный рост от минимума к текущему значению в относительном выражении decimal
CommissionParameter Общая уплаченная комиссия. Накапливает все значения комиссий decimal
AverageDrawdownParameter Средняя просадка. Среднее арифметическое всех завершенных и текущей просадок decimal
RecoveryFactorParameter Фактор восстановления. Формула: NetProfit / MaxDrawdown decimal
SharpeRatioParameter Коэффициент Шарпа. Формула: (годовая доходность - безрисковая ставка) / годовое стандартное отклонение decimal
SortinoRatioParameter Коэффициент Сортино. Аналогичен Шарпу, но учитывает только нисходящие отклонения decimal
CalmarRatioParameter Коэффициент Калмара. Формула: NetProfit / MaxDrawdown decimal
SterlingRatioParameter Коэффициент Стерлинга. Формула: NetProfit / AverageDrawdown decimal

Коэффициенты риска

Коэффициенты SharpeRatioParameter и SortinoRatioParameter наследуют от базового класса RiskAdjustedRatioParameter и реализуют интерфейс IRiskFreeRateStatisticParameter.

Они поддерживают следующие настройки:

  • RiskFreeRate -- годовая безрисковая ставка (например, 0.03m = 3%)
  • Period -- период расчета доходности (по умолчанию TimeSpan.FromDays(1))

Коэффициенты CalmarRatioParameter и SterlingRatioParameter зависят от других параметров (NetProfitParameter, MaxDrawdownParameter, AverageDrawdownParameter) и автоматически связываются при создании через StatisticParameterRegistry.

Параметры сделок (Trades)

Все параметры данной группы реализуют интерфейс ITradeStatisticParameter. Они получают данные через объект PnLInfo при каждом совершении сделки.

Класс Описание Тип значения
TradeCountParameter Общее количество сделок (учитываются только сделки с ClosedVolume > 0) int
WinningTradesParameter Количество прибыльных сделок (ClosedVolume > 0 и PnL > 0) int
LossingTradesParameter Количество убыточных сделок (ClosedVolume > 0 и PnL < 0) int
RoundtripCountParameter Количество завершенных раундтрипов (закрывающих сделок с ClosedVolume > 0) int
AverageTradeProfitParameter Средняя прибыль на сделку. Формула: SumPnL / Count decimal
AverageWinTradeParameter Средняя прибыль прибыльных сделок. Учитываются только сделки с PnL > 0 decimal
AverageLossTradeParameter Средний убыток убыточных сделок. Учитываются только сделки с PnL < 0 decimal
ProfitFactorParameter Фактор прибыли. Формула: GrossProfit / GrossLoss decimal
ExpectancyParameter Математическое ожидание. Формула: P(win) * AvgWin + P(loss) * AvgLoss decimal
PerMonthTradeParameter Среднее количество сделок в месяц decimal
PerDayTradeParameter Среднее количество сделок в день decimal
GrossProfitParameter Валовая прибыль. Сумма P&L всех прибыльных сделок (PnL > 0) decimal
GrossLossParameter Валовый убыток. Сумма P&L всех убыточных сделок (PnL < 0, значение отрицательное) decimal

Параметры позиций

Параметры данной группы реализуют интерфейс IPositionStatisticParameter. Они получают данные при каждом изменении позиции.

Класс Описание Тип значения
MaxLongPositionParameter Максимальная длинная позиция. Наибольшее положительное значение позиции decimal
MaxShortPositionParameter Максимальная короткая позиция. Наибольшее по модулю отрицательное значение позиции decimal

Параметры заявок (Orders)

Все параметры данной группы реализуют интерфейс IOrderStatisticParameter и наследуют от BaseOrderStatisticParameter. Они получают данные при регистрации, изменении и ошибках заявок.

Класс Описание Тип значения
OrderCountParameter Общее количество зарегистрированных заявок int
OrderRegisterErrorCountParameter Количество ошибок регистрации заявок int
OrderInsufficientFundErrorCountParameter Количество ошибок "недостаточно средств" (тип InsufficientFundException) int
OrderCancelErrorCountParameter Количество ошибок отмены заявок int

Параметры задержки (Latency)

Параметры задержки также реализуют IOrderStatisticParameter, но отслеживают временные характеристики обработки заявок.

Класс Описание Тип значения
MaxLatencyRegistrationParameter Максимальная задержка регистрации заявки (свойство Order.LatencyRegistration) TimeSpan
MinLatencyRegistrationParameter Минимальная задержка регистрации заявки TimeSpan
MaxLatencyCancellationParameter Максимальная задержка отмены заявки (свойство Order.LatencyCancellation) TimeSpan
MinLatencyCancellationParameter Минимальная задержка отмены заявки TimeSpan

Использование

Доступ к статистике стратегии

var strategy = new MyStrategy();

// Доступ к статистике после выполнения
foreach (var param in strategy.StatisticManager.Parameters)
{
    Console.WriteLine($"{param.DisplayName}: {param.Value}");
}

Получение конкретного параметра

// Получить значение чистой прибыли
var netProfit = strategy.StatisticManager.Parameters
    .OfType<NetProfitParameter>()
    .First();

Console.WriteLine($"Чистая прибыль: {netProfit.Value}");

Настройка безрисковой ставки для коэффициентов

Коэффициенты Шарпа и Сортино требуют установки безрисковой ставки для корректного расчета:

// Установить безрисковую ставку 3% для всех коэффициентов
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IRiskFreeRateStatisticParameter>())
{
    param.RiskFreeRate = 0.03m;
}

Настройка начального капитала для процентных параметров

Параметры NetProfitPercentParameter и MaxProfitPercentParameter требуют установки начального значения капитала:

// Установить начальный капитал для процентных расчетов
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IBeginValueStatisticParameter>())
{
    param.BeginValue = 1_000_000m; // 1 000 000
}

Сброс статистики

// Сбросить все статистические параметры
strategy.StatisticManager.Reset();

Сохранение и загрузка состояния

Все параметры поддерживают сериализацию через интерфейс IPersistable:

// Сохранение
var storage = new SettingsStorage();
strategy.StatisticManager.Save(storage);

// Загрузка
strategy.StatisticManager.Load(storage);

См. также