Referência de Estatísticas

O StatisticManager gere uma coleção de instâncias IStatisticParameter. Cada parâmetro acompanha uma métrica específica durante a execução da estratégia. Todos os parâmetros disponíveis são criados usando o StatisticParameterRegistry.

Para uma visão geral do trabalho com estatísticas de estratégia, consulte a secção Estatísticas.

Interfaces

O sistema de estatísticas é construído sobre uma hierarquia de interfaces. Cada interface define a fonte de dados para calcular o parâmetro:

Interface Descrição
IStatisticParameter Interface base: propriedades Name, Type, Value, DisplayName, Description, Category, Order; método Reset()
IPnLStatisticParameter Parâmetros baseados em lucro/perda: método Add(marketTime, pnl, commission)
ITradeStatisticParameter Parâmetros baseados em transações: método Add(PnLInfo)
IOrderStatisticParameter Parâmetros baseados em ordens: métodos New(order), Changed(order), RegisterFailed(fail), CancelFailed(fail)
IPositionStatisticParameter Parâmetros baseados em posições: método Add(marketTime, position)
IRiskFreeRateStatisticParameter Parâmetros com taxa sem risco: propriedade RiskFreeRate
IBeginValueStatisticParameter Parâmetros com valor inicial: propriedade BeginValue

Parâmetros de Lucro e Perda (P&L)

Todos os parâmetros deste grupo implementam a interface IPnLStatisticParameter e herdam de BasePnLStatisticParameter. Recebem dados em cada atualização do valor de P&L da estratégia.

Classe Descrição Tipo de Valor
NetProfitParameter Lucro líquido de todo o período. Definido igual ao valor atual de P&L decimal
NetProfitPercentParameter Lucro líquido em percentagem. Requer definir BeginValue (capital inicial). Fórmula: pnl * 100 / BeginValue decimal
MaxProfitParameter Lucro máximo (valor de P&L mais alto em todo o período) decimal
MaxProfitPercentParameter Lucro máximo em percentagem. Requer BeginValue. Fórmula: MaxProfit * 100 / BeginValue decimal
MaxProfitDateParameter Data em que o lucro máximo foi atingido DateTime
MaxDrawdownParameter Drawdown absoluto máximo. Diferença entre o pico e o vale da curva de capital decimal
MaxDrawdownPercentParameter Drawdown máximo em percentagem. Fórmula: MaxDrawdown * 100 / MaxEquity decimal
MaxDrawdownDateParameter Data do drawdown máximo DateTime
MaxRelativeDrawdownParameter Drawdown relativo máximo. Calculado como o rácio entre o drawdown e o valor máximo do capital decimal
ReturnParameter Retorno relativo de todo o período. Crescimento máximo do vale até ao valor atual em termos relativos decimal
CommissionParameter Comissão total paga. Acumula todos os valores de comissão decimal
AverageDrawdownParameter Drawdown médio. Média aritmética de todos os drawdowns concluídos e atuais decimal
RecoveryFactorParameter Fator de recuperação. Fórmula: NetProfit / MaxDrawdown decimal
SharpeRatioParameter Rácio de Sharpe. Fórmula: (retorno anualizado - taxa sem risco) / desvio padrão anualizado decimal
SortinoRatioParameter Rácio de Sortino. Semelhante ao Sharpe, mas considera apenas desvios negativos decimal
CalmarRatioParameter Rácio de Calmar. Fórmula: NetProfit / MaxDrawdown decimal
SterlingRatioParameter Rácio de Sterling. Fórmula: NetProfit / AverageDrawdown decimal

Coeficientes de Risco

O SharpeRatioParameter e o SortinoRatioParameter herdam da classe base RiskAdjustedRatioParameter e implementam a interface IRiskFreeRateStatisticParameter.

Suportam as seguintes definições:

  • RiskFreeRate -- taxa anual sem risco (por exemplo, 0.03m = 3%)
  • Period -- período de cálculo do retorno (predefinição TimeSpan.FromDays(1))

O CalmarRatioParameter e o SterlingRatioParameter dependem de outros parâmetros (NetProfitParameter, MaxDrawdownParameter, AverageDrawdownParameter) e são automaticamente associados quando criados através de StatisticParameterRegistry.

Parâmetros de Transações

Todos os parâmetros deste grupo implementam a interface ITradeStatisticParameter. Recebem dados através do objeto PnLInfo para cada transação executada.

Classe Descrição Tipo de Valor
TradeCountParameter Número total de transações (apenas são contabilizadas transações com ClosedVolume > 0) int
WinningTradesParameter Número de transações lucrativas (ClosedVolume > 0 e PnL > 0) int
LossingTradesParameter Número de transações perdedoras (ClosedVolume > 0 e PnL < 0) int
RoundtripCountParameter Número de round-trips concluídos (transações de fecho com ClosedVolume > 0) int
AverageTradeProfitParameter Lucro médio por transação. Fórmula: SumPnL / Count decimal
AverageWinTradeParameter Lucro médio das transações lucrativas. Apenas são consideradas transações com PnL > 0 decimal
AverageLossTradeParameter Perda média das transações perdedoras. Apenas são consideradas transações com PnL < 0 decimal
ProfitFactorParameter Fator de lucro. Fórmula: GrossProfit / GrossLoss decimal
ExpectancyParameter Esperança matemática. Fórmula: P(win) * AvgWin + P(loss) * AvgLoss decimal
PerMonthTradeParameter Número médio de transações por mês decimal
PerDayTradeParameter Número médio de transações por dia decimal
GrossProfitParameter Lucro bruto. Soma do P&L de todas as transações lucrativas (PnL > 0) decimal
GrossLossParameter Perda bruta. Soma do P&L de todas as transações perdedoras (PnL < 0, valor negativo) decimal

Parâmetros de Posição

Os parâmetros deste grupo implementam a interface IPositionStatisticParameter. Recebem dados em cada alteração de posição.

Classe Descrição Tipo de Valor
MaxLongPositionParameter Posição longa máxima. Maior valor de posição positivo decimal
MaxShortPositionParameter Posição curta máxima. Maior valor absoluto de posição negativa decimal

Parâmetros de Ordens

Todos os parâmetros deste grupo implementam a interface IOrderStatisticParameter e herdam de BaseOrderStatisticParameter. Recebem dados sobre registo de ordens, alterações e erros.

Classe Descrição Tipo de Valor
OrderCountParameter Número total de ordens registadas int
OrderRegisterErrorCountParameter Número de erros de registo de ordens int
OrderInsufficientFundErrorCountParameter Número de erros de "fundos insuficientes" (tipo InsufficientFundException) int
OrderCancelErrorCountParameter Número de erros de cancelamento de ordens int

Parâmetros de Latência

Os parâmetros de latência também implementam IOrderStatisticParameter, mas acompanham as características temporais do processamento de ordens.

Classe Descrição Tipo de Valor
MaxLatencyRegistrationParameter Latência máxima de registo de ordem (propriedade Order.LatencyRegistration) TimeSpan
MinLatencyRegistrationParameter Latência mínima de registo de ordem TimeSpan
MaxLatencyCancellationParameter Latência máxima de cancelamento de ordem (propriedade Order.LatencyCancellation) TimeSpan
MinLatencyCancellationParameter Latência mínima de cancelamento de ordem TimeSpan

Utilização

Aceder a Estatísticas da Estratégia

var strategy = new MyStrategy();

// Aceder às estatísticas após a execução
foreach (var param in strategy.StatisticManager.Parameters)
{
    Console.WriteLine($"{param.DisplayName}: {param.Value}");
}

Obter um Parâmetro Específico

// Obter o valor de lucro líquido
var netProfit = strategy.StatisticManager.Parameters
    .OfType<NetProfitParameter>()
    .First();

Console.WriteLine($"Net profit: {netProfit.Value}");

Configurar a Taxa Sem Risco para Coeficientes

Os rácios de Sharpe e Sortino exigem a definição da taxa sem risco para um cálculo correto:

// Definir uma taxa sem risco de 3% para todos os coeficientes
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IRiskFreeRateStatisticParameter>())
{
    param.RiskFreeRate = 0.03m;
}

Configurar Capital Inicial para Parâmetros Percentuais

Os parâmetros NetProfitPercentParameter e MaxProfitPercentParameter exigem a definição do valor de capital inicial:

// Definir capital inicial para cálculos percentuais
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IBeginValueStatisticParameter>())
{
    param.BeginValue = 1_000_000m; // 1,000,000
}

Repor Estatísticas

// Repor todos os parâmetros estatísticos
strategy.StatisticManager.Reset();

Guardar e Carregar Estado

Todos os parâmetros suportam serialização através da interface IPersistable:

// Guardar
var storage = new SettingsStorage();
strategy.StatisticManager.Save(storage);

// Carregar
strategy.StatisticManager.Load(storage);

Ver Também