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);

Ver también