Slippage-Messung
S# berechnet Slippage über den SlippageManager. Slippage ist die Differenz zwischen dem erwarteten Ausführungspreis einer Order und dem tatsächlichen Trade-Preis.
ISlippageManager-Interface
Das Interface ISlippageManager definiert den Basisvertrag:
- Slippage - insgesamt akkumulierte Slippage (decimal).
- Reset() - setzt den Zustand des Managers zurück.
- ProcessMessage(Message) - verarbeitet eine Nachricht; gibt die Slippage für die angegebene Ausführung oder
nullzurück.
Funktionsweise
Der Slippage-Manager arbeitet in drei Stufen:
1. Aktualisieren von Marktpreisen
Wenn eine Level1ChangeMessage oder QuoteChangeMessage empfangen wird, speichert der Manager die besten Bid- und Ask-Preise für jedes Instrument.
2. Speichern des geplanten Preises
Wenn eine OrderRegisterMessage empfangen wird, speichert der Manager den "geplanten Preis" - den besten Marktpreis zum Zeitpunkt der Orderregistrierung:
- Für einen Kauf (
Buy) wird das beste Ask verwendet. - Für einen Verkauf (
Sell) wird das beste Bid verwendet.
3. Berechnen der Slippage
Wenn eine ExecutionMessage mit einem Trade empfangen wird, berechnet der Manager die Slippage:
- Für einen Kauf:
(TradePrice - PlannedPrice) * TradeVolume - Für einen Verkauf:
(PlannedPrice - TradePrice) * TradeVolume
Ein positiver Wert bedeutet ungünstige Slippage (Preis schlechter als erwartet), während ein negativer Wert günstige Slippage bedeutet (Preis besser als erwartet).
Zustand: ISlippageManagerState
Das Interface ISlippageManagerState speichert den internen Zustand des Managers:
- Beste Bid-/Ask-Preise für jedes Instrument (SecurityId).
- Geplante Preise und Richtungen für jede Transaktion (
TransactionId). - Insgesamt akkumulierte Slippage.
Die Standardimplementierung ist SlippageManagerState.
Einstellungen
| Eigenschaft | Standard | Beschreibung |
|---|---|---|
CalculateNegative |
true |
Günstige Slippage berücksichtigen. Wenn false, werden negative Werte durch null ersetzt. |
Integration über Adapter
Die Klasse SlippageMessageAdapter kapselt einen inneren Adapter und berechnet automatisch die Slippage für alle Trades.
Integration mit Strategy
Die Strategie (Strategy) stellt die Eigenschaft Slippage zur Verfolgung der gesamten Slippage bereit.
Verwendungsbeispiel
// Manager mit Zustandsspeicher erstellen
var manager = new SlippageManager(new SlippageManagerState());
// Nur ungünstige Slippage berücksichtigen
manager.CalculateNegative = false;
// Marktdaten verarbeiten (beste Preise aktualisieren)
manager.ProcessMessage(level1Msg);
manager.ProcessMessage(quoteChangeMsg);
// Orderregistrierung verarbeiten (geplanten Preis speichern)
manager.ProcessMessage(orderRegisterMsg);
// Trade verarbeiten (Slippage berechnen)
decimal? slippage = manager.ProcessMessage(executionMsg);
if (slippage != null)
{
Console.WriteLine($"Berechnete Slippage: {slippage.Value}");
}
// Insgesamt akkumulierte Slippage
Console.WriteLine($"Gesamte Slippage: {manager.Slippage}");
Zustand zurücksetzen
Die Methode Reset() löscht den internen Zustand vollständig: beste Preise, geplante Preise und akkumulierte Slippage:
manager.Reset();