Statistikreferenz

Der StatisticManager verwaltet eine Sammlung von IStatisticParameter-Instanzen. Jeder Parameter verfolgt während der Strategieausführung eine bestimmte Kennzahl. Alle verfügbaren Parameter werden über die StatisticParameterRegistry erstellt.

Eine allgemeine Übersicht zur Arbeit mit Strategiestatistiken finden Sie im Abschnitt Statistiken.

Schnittstellen

Das Statistiksystem basiert auf einer Hierarchie von Schnittstellen. Jede Schnittstelle definiert die Datenquelle für die Berechnung des Parameters:

Schnittstelle Beschreibung
IStatisticParameter Basisschnittstelle: Eigenschaften Name, Type, Value, DisplayName, Description, Category, Order; Methode Reset()
IPnLStatisticParameter Parameter auf Basis von Gewinn/Verlust: Methode Add(marketTime, pnl, commission)
ITradeStatisticParameter Parameter auf Basis von Trades: Methode Add(PnLInfo)
IOrderStatisticParameter Parameter auf Basis von Orders: Methoden New(order), Changed(order), RegisterFailed(fail), CancelFailed(fail)
IPositionStatisticParameter Parameter auf Basis von Positionen: Methode Add(marketTime, position)
IRiskFreeRateStatisticParameter Parameter mit risikofreiem Zinssatz: Eigenschaft RiskFreeRate
IBeginValueStatisticParameter Parameter mit Anfangswert: Eigenschaft BeginValue

Gewinn-und-Verlust-Parameter (P&L)

Alle Parameter in dieser Gruppe implementieren die Schnittstelle IPnLStatisticParameter und erben von BasePnLStatisticParameter. Sie erhalten Daten bei jeder Aktualisierung des P&L-Werts der Strategie.

Klasse Beschreibung Werttyp
NetProfitParameter Nettogewinn für den gesamten Zeitraum. Wird dem aktuellen P&L-Wert gleichgesetzt decimal
NetProfitPercentParameter Nettogewinn in Prozent. Erfordert das Setzen von BeginValue (Anfangskapital). Formel: pnl * 100 / BeginValue decimal
MaxProfitParameter Maximaler Gewinn (höchster P&L-Wert im gesamten Zeitraum) decimal
MaxProfitPercentParameter Maximaler Gewinn in Prozent. Erfordert BeginValue. Formel: MaxProfit * 100 / BeginValue decimal
MaxProfitDateParameter Datum, an dem der maximale Gewinn erreicht wurde DateTime
MaxDrawdownParameter Maximaler absoluter Drawdown. Differenz zwischen Hochpunkt und Tiefpunkt der Equity-Kurve decimal
MaxDrawdownPercentParameter Maximaler Drawdown in Prozent. Formel: MaxDrawdown * 100 / MaxEquity decimal
MaxDrawdownDateParameter Datum des maximalen Drawdowns DateTime
MaxRelativeDrawdownParameter Maximaler relativer Drawdown. Wird als Verhältnis des Drawdowns zum Spitzenwert der Equity berechnet decimal
ReturnParameter Relative Rendite für den gesamten Zeitraum. Maximales Wachstum vom Tiefpunkt bis zum aktuellen Wert in relativen Größen decimal
CommissionParameter Gesamte gezahlte Kommission. Akkumuliert alle Kommissionswerte decimal
AverageDrawdownParameter Durchschnittlicher Drawdown. Arithmetischer Mittelwert aller abgeschlossenen und aktuellen Drawdowns decimal
RecoveryFactorParameter Recovery-Faktor. Formel: NetProfit / MaxDrawdown decimal
SharpeRatioParameter Sharpe Ratio. Formel: (annualized return - risk-free rate) / annualized standard deviation decimal
SortinoRatioParameter Sortino Ratio. Ähnlich wie Sharpe, berücksichtigt aber nur negative Abweichungen decimal
CalmarRatioParameter Calmar Ratio. Formel: NetProfit / MaxDrawdown decimal
SterlingRatioParameter Sterling Ratio. Formel: NetProfit / AverageDrawdown decimal

Risikokoeffizienten

Der SharpeRatioParameter und der SortinoRatioParameter erben von der Basisklasse RiskAdjustedRatioParameter und implementieren die Schnittstelle IRiskFreeRateStatisticParameter.

Sie unterstützen die folgenden Einstellungen:

  • RiskFreeRate -- jährlicher risikofreier Zinssatz (z. B. 0.03m = 3 %)
  • Period -- Periode für die Renditeberechnung (Standardwert TimeSpan.FromDays(1))

Der CalmarRatioParameter und der SterlingRatioParameter hängen von anderen Parametern ab (NetProfitParameter, MaxDrawdownParameter, AverageDrawdownParameter) und werden automatisch verknüpft, wenn sie über die StatisticParameterRegistry erstellt werden.

Trade-Parameter

Alle Parameter in dieser Gruppe implementieren die Schnittstelle ITradeStatisticParameter. Sie erhalten Daten über das Objekt PnLInfo für jeden ausgeführten Trade.

Klasse Beschreibung Werttyp
TradeCountParameter Gesamtzahl der Trades (nur Trades mit ClosedVolume > 0 werden gezählt) int
WinningTradesParameter Anzahl profitabler Trades (ClosedVolume > 0 und PnL > 0) int
LossingTradesParameter Anzahl verlustbringender Trades (ClosedVolume > 0 und PnL < 0) int
RoundtripCountParameter Anzahl abgeschlossener Roundtrips (schließende Trades mit ClosedVolume > 0) int
AverageTradeProfitParameter Durchschnittlicher Gewinn pro Trade. Formel: SumPnL / Count decimal
AverageWinTradeParameter Durchschnittlicher Gewinn profitabler Trades. Es werden nur Trades mit PnL > 0 berücksichtigt decimal
AverageLossTradeParameter Durchschnittlicher Verlust verlustbringender Trades. Es werden nur Trades mit PnL < 0 berücksichtigt decimal
ProfitFactorParameter Profit-Faktor. Formel: GrossProfit / GrossLoss decimal
ExpectancyParameter Mathematische Erwartung. Formel: P(win) * AvgWin + P(loss) * AvgLoss decimal
PerMonthTradeParameter Durchschnittliche Anzahl von Trades pro Monat decimal
PerDayTradeParameter Durchschnittliche Anzahl von Trades pro Tag decimal
GrossProfitParameter Bruttogewinn. Summe der P&L aller profitablen Trades (PnL > 0) decimal
GrossLossParameter Bruttoverlust. Summe der P&L aller verlustbringenden Trades (PnL < 0, Wert ist negativ) decimal

Positionsparameter

Parameter in dieser Gruppe implementieren die Schnittstelle IPositionStatisticParameter. Sie erhalten Daten bei jeder Positionsänderung.

Klasse Beschreibung Werttyp
MaxLongPositionParameter Maximale Long-Position. Höchster positiver Positionswert decimal
MaxShortPositionParameter Maximale Short-Position. Höchster absoluter negativer Positionswert decimal

Order-Parameter

Alle Parameter in dieser Gruppe implementieren die Schnittstelle IOrderStatisticParameter und erben von BaseOrderStatisticParameter. Sie erhalten Daten bei Order-Registrierung, Änderungen und Fehlern.

Klasse Beschreibung Werttyp
OrderCountParameter Gesamtzahl registrierter Orders int
OrderRegisterErrorCountParameter Anzahl von Fehlern bei der Order-Registrierung int
OrderInsufficientFundErrorCountParameter Anzahl von Fehlern wegen "insufficient funds" (Typ InsufficientFundException) int
OrderCancelErrorCountParameter Anzahl von Fehlern bei der Order-Stornierung int

Latenzparameter

Latenzparameter implementieren ebenfalls IOrderStatisticParameter, verfolgen aber die Zeitcharakteristiken der Order-Verarbeitung.

Klasse Beschreibung Werttyp
MaxLatencyRegistrationParameter Maximale Latenz der Order-Registrierung (Eigenschaft Order.LatencyRegistration) TimeSpan
MinLatencyRegistrationParameter Minimale Latenz der Order-Registrierung TimeSpan
MaxLatencyCancellationParameter Maximale Latenz der Order-Stornierung (Eigenschaft Order.LatencyCancellation) TimeSpan
MinLatencyCancellationParameter Minimale Latenz der Order-Stornierung TimeSpan

Verwendung

Zugriff auf Strategiestatistiken

var strategy = new MyStrategy();

// Nach der Ausführung auf Statistiken zugreifen
foreach (var param in strategy.StatisticManager.Parameters)
{
    Console.WriteLine($"{param.DisplayName}: {param.Value}");
}

Einen bestimmten Parameter abrufen

// Nettogewinnwert abrufen
var netProfit = strategy.StatisticManager.Parameters
    .OfType<NetProfitParameter>()
    .First();

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

Risikofreien Zinssatz für Koeffizienten konfigurieren

Für die korrekte Berechnung der Sharpe- und Sortino-Ratio muss der risikofreie Zinssatz gesetzt werden:

// Risikofreien Zinssatz von 3 % für alle Koeffizienten setzen
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IRiskFreeRateStatisticParameter>())
{
    param.RiskFreeRate = 0.03m;
}

Anfangskapital für Prozentparameter konfigurieren

Die Parameter NetProfitPercentParameter und MaxProfitPercentParameter erfordern das Setzen des Anfangskapitals:

// Anfangskapital für Prozentberechnungen setzen
foreach (var param in strategy.StatisticManager.Parameters
    .OfType<IBeginValueStatisticParameter>())
{
    param.BeginValue = 1_000_000m; // 1,000,000
}

Statistiken zurücksetzen

// Alle Statistikparameter zurücksetzen
strategy.StatisticManager.Reset();

Zustand speichern und laden

Alle Parameter unterstützen die Serialisierung über die Schnittstelle IPersistable:

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

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

Siehe auch