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