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