Полный справочник статистик
Менеджер статистик 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);