Referencia de estadísticas
El StatisticManager gestiona una colección de instancias de IStatisticParameter. Cada parámetro sigue una métrica específica durante la ejecución de la estrategia. Todos los parámetros disponibles se crean mediante StatisticParameterRegistry.
Para una descripción general del trabajo con estadísticas de estrategia, consulte la sección Estadísticas.
Interfaces
El sistema de estadísticas se basa en una jerarquía de interfaces. Cada interfaz define la fuente de datos para calcular el parámetro:
| Interfaz | Descripción |
|---|---|
| IStatisticParameter | Interfaz base: propiedades Name, Type, Value, DisplayName, Description, Category, Order; método Reset() |
| IPnLStatisticParameter | Parámetros basados en beneficios/pérdidas: método Add(marketTime, pnl, commission) |
| ITradeStatisticParameter | Parámetros basados en operaciones: método Add(PnLInfo) |
| IOrderStatisticParameter | Parámetros basados en órdenes: métodos New(order), Changed(order), RegisterFailed(fail), CancelFailed(fail) |
| IPositionStatisticParameter | Parámetros basados en posiciones: método Add(marketTime, position) |
| IRiskFreeRateStatisticParameter | Parámetros con tasa libre de riesgo: propiedad RiskFreeRate |
| IBeginValueStatisticParameter | Parámetros con valor inicial: propiedad BeginValue |
Parámetros de beneficios y pérdidas (P&L)
Todos los parámetros de este grupo implementan la interfaz IPnLStatisticParameter y heredan de BasePnLStatisticParameter. Reciben datos en cada actualización del valor P&L de la estrategia.
| Clase | Descripción | Tipo de valor |
|---|---|---|
| NetProfitParameter | Beneficio neto de todo el periodo. Se establece igual al valor P&L actual | decimal |
| NetProfitPercentParameter | Beneficio neto como porcentaje. Requiere establecer BeginValue (capital inicial). Fórmula: pnl * 100 / BeginValue |
decimal |
| MaxProfitParameter | Beneficio máximo (valor P&L más alto de todo el periodo) | decimal |
| MaxProfitPercentParameter | Beneficio máximo como porcentaje. Requiere BeginValue. Fórmula: MaxProfit * 100 / BeginValue |
decimal |
| MaxProfitDateParameter | Fecha en que se alcanzó el beneficio máximo | DateTime |
| MaxDrawdownParameter | Drawdown absoluto máximo. Diferencia entre el pico y el valle de la curva de equity | decimal |
| MaxDrawdownPercentParameter | Drawdown máximo como porcentaje. Fórmula: MaxDrawdown * 100 / MaxEquity |
decimal |
| MaxDrawdownDateParameter | Fecha del drawdown máximo | DateTime |
| MaxRelativeDrawdownParameter | Drawdown relativo máximo. Calculado como la relación entre drawdown y valor máximo de equity | decimal |
| ReturnParameter | Rentabilidad relativa de todo el periodo. Crecimiento máximo desde el valle hasta el valor actual en términos relativos | decimal |
| CommissionParameter | Comisión total pagada. Acumula todos los valores de comisión | decimal |
| AverageDrawdownParameter | Drawdown medio. Media aritmética de todos los drawdowns completados y actuales | decimal |
| RecoveryFactorParameter | Factor de recuperación. Fórmula: NetProfit / MaxDrawdown |
decimal |
| SharpeRatioParameter | Ratio Sharpe. Fórmula: (rentabilidad anualizada - tasa libre de riesgo) / desviación estándar anualizada |
decimal |
| SortinoRatioParameter | Ratio Sortino. Similar a Sharpe, pero solo considera desviaciones negativas | decimal |
| CalmarRatioParameter | Ratio Calmar. Fórmula: NetProfit / MaxDrawdown |
decimal |
| SterlingRatioParameter | Ratio Sterling. Fórmula: NetProfit / AverageDrawdown |
decimal |
Coeficientes de riesgo
SharpeRatioParameter y SortinoRatioParameter heredan de la clase base RiskAdjustedRatioParameter e implementan la interfaz IRiskFreeRateStatisticParameter.
Admiten los siguientes ajustes:
- RiskFreeRate -- tasa anual libre de riesgo (por ejemplo,
0.03m= 3%) - Period -- periodo de cálculo de rentabilidad (valor predeterminado
TimeSpan.FromDays(1))
CalmarRatioParameter y SterlingRatioParameter dependen de otros parámetros (NetProfitParameter, MaxDrawdownParameter, AverageDrawdownParameter) y se enlazan automáticamente cuando se crean mediante StatisticParameterRegistry.
Parámetros de operaciones
Todos los parámetros de este grupo implementan la interfaz ITradeStatisticParameter. Reciben datos mediante el objeto PnLInfo para cada operación ejecutada.
| Clase | Descripción | Tipo de valor |
|---|---|---|
| TradeCountParameter | Número total de operaciones (solo se cuentan operaciones con ClosedVolume > 0) |
int |
| WinningTradesParameter | Número de operaciones rentables (ClosedVolume > 0 y PnL > 0) |
int |
| LossingTradesParameter | Número de operaciones perdedoras (ClosedVolume > 0 y PnL < 0) |
int |
| RoundtripCountParameter | Número de round-trips completados (operaciones de cierre con ClosedVolume > 0) |
int |
| AverageTradeProfitParameter | Beneficio medio por operación. Fórmula: SumPnL / Count |
decimal |
| AverageWinTradeParameter | Beneficio medio de operaciones rentables. Solo se consideran operaciones con PnL > 0 |
decimal |
| AverageLossTradeParameter | Pérdida media de operaciones perdedoras. Solo se consideran operaciones con PnL < 0 |
decimal |
| ProfitFactorParameter | Factor de beneficio. Fórmula: GrossProfit / GrossLoss |
decimal |
| ExpectancyParameter | Esperanza matemática. Fórmula: P(win) * AvgWin + P(loss) * AvgLoss |
decimal |
| PerMonthTradeParameter | Número medio de operaciones por mes | decimal |
| PerDayTradeParameter | Número medio de operaciones por día | decimal |
| GrossProfitParameter | Beneficio bruto. Suma del P&L de todas las operaciones rentables (PnL > 0) |
decimal |
| GrossLossParameter | Pérdida bruta. Suma del P&L de todas las operaciones perdedoras (PnL < 0, el valor es negativo) |
decimal |
Parámetros de posición
Los parámetros de este grupo implementan la interfaz IPositionStatisticParameter. Reciben datos en cada cambio de posición.
| Clase | Descripción | Tipo de valor |
|---|---|---|
| MaxLongPositionParameter | Posición larga máxima. Valor positivo más alto de posición | decimal |
| MaxShortPositionParameter | Posición corta máxima. Valor negativo absoluto más alto de posición | decimal |
Parámetros de órdenes
Todos los parámetros de este grupo implementan la interfaz IOrderStatisticParameter y heredan de BaseOrderStatisticParameter. Reciben datos sobre registro, cambios y errores de órdenes.
| Clase | Descripción | Tipo de valor |
|---|---|---|
| OrderCountParameter | Número total de órdenes registradas | int |
| OrderRegisterErrorCountParameter | Número de errores de registro de órdenes | int |
| OrderInsufficientFundErrorCountParameter | Número de errores de "fondos insuficientes" (tipo InsufficientFundException) |
int |
| OrderCancelErrorCountParameter | Número de errores de cancelación de órdenes | int |
Parámetros de latencia
Los parámetros de latencia también implementan IOrderStatisticParameter, pero siguen las características temporales del procesamiento de órdenes.
| Clase | Descripción | Tipo de valor |
|---|---|---|
| MaxLatencyRegistrationParameter | Latencia máxima de registro de órdenes (propiedad Order.LatencyRegistration) |
TimeSpan |
| MinLatencyRegistrationParameter | Latencia mínima de registro de órdenes | TimeSpan |
| MaxLatencyCancellationParameter | Latencia máxima de cancelación de órdenes (propiedad Order.LatencyCancellation) |
TimeSpan |
| MinLatencyCancellationParameter | Latencia mínima de cancelación de órdenes | TimeSpan |
Uso
Acceder a estadísticas de estrategia
var strategy = new MyStrategy();
// Acceder a estadísticas después de la ejecución
foreach (var param in strategy.StatisticManager.Parameters)
{
Console.WriteLine($"{param.DisplayName}: {param.Value}");
}
Recuperar un parámetro específico
// Obtener el valor de beneficio neto
var netProfit = strategy.StatisticManager.Parameters
.OfType<NetProfitParameter>()
.First();
Console.WriteLine($"Net profit: {netProfit.Value}");
Configurar la tasa libre de riesgo para coeficientes
Los ratios Sharpe y Sortino requieren establecer la tasa libre de riesgo para el cálculo correcto:
// Establecer una tasa libre de riesgo del 3% para todos los coeficientes
foreach (var param in strategy.StatisticManager.Parameters
.OfType<IRiskFreeRateStatisticParameter>())
{
param.RiskFreeRate = 0.03m;
}
Configurar capital inicial para parámetros porcentuales
Los parámetros NetProfitPercentParameter y MaxProfitPercentParameter requieren establecer el valor de capital inicial:
// Establecer capital inicial para cálculos porcentuales
foreach (var param in strategy.StatisticManager.Parameters
.OfType<IBeginValueStatisticParameter>())
{
param.BeginValue = 1_000_000m; // 1,000,000
}
Restablecer estadísticas
// Restablecer todos los parámetros estadísticos
strategy.StatisticManager.Reset();
Guardar y cargar estado
Todos los parámetros admiten serialización mediante la interfaz IPersistable:
// Guardado
var storage = new SettingsStorage();
strategy.StatisticManager.Save(storage);
// Carga
strategy.StatisticManager.Load(storage);