Quoting-Referenz
Überblick
Dieser Abschnitt enthält eine vollständige Referenz zur Architektur und zu den Komponenten des Quoting-Systems in StockSharp. Alle verfügbaren Quoting-Verhalten, Aktionstypen und Schnittstellen werden beschrieben. Eine grundlegende Einführung finden Sie unter Quoting-Algorithmus.
Architektur
QuotingStrategy (Veraltet)
Die Klasse QuotingStrategy ist veraltet. Es wird empfohlen, stattdessen QuotingProcessor zu verwenden.
Hauptparameter der veralteten Klasse:
QuotingSide-- Quoting-Richtung (Buy/Sell)QuotingVolume-- Quoting-VolumenTimeOut-- Ausführungs-TimeoutUseBidAsk-- Orderbuchpreise verwendenUseLastTradePrice-- Preis des letzten Trades verwenden
QuotingEngine
QuotingEngine -- der funktionale Kern des Quoting-Systems. Er berechnet verbleibendes Volumen und Timeouts und gibt Aktionsempfehlungen ohne Seiteneffekte zurück.
QuotingBehaviorAlgo
QuotingBehaviorAlgo -- Implementierung der Schnittstelle IPositionModifyAlgo für algorithmische Positionsverwaltung.
Hauptmethoden:
| Methode | Beschreibung |
|---|---|
UpdateMarketData(time, price, volume) |
Marktdaten aktualisieren |
UpdateOrderBook(depth) |
Orderbuch aktualisieren |
GetNextAction() |
Nächste Quoting-Aktion abrufen |
Unterstützt VWAP- und TWAP-Modi.
QuotingProcessor
QuotingProcessor -- der Hauptprozessor zur Ausführung von Quoting innerhalb einer Strategie. Verwaltet den Order-Lebenszyklus: Platzierung, Änderung, Stornierung.
QuotingAction-Typen
Der Prozessor gibt Aktionen vom Typ QuotingAction zurück:
| Typ | Beschreibung |
|---|---|
None(reason) |
Keine Aktion erforderlich |
PlaceOrder(price, volume) |
Neue Order platzieren |
ModifyOrder(price, volume) |
Bestehende Order ändern |
CancelOrder() |
Order stornieren |
Finish(success, reason) |
Quoting beenden |
Quoting-Verhalten
StockSharp stellt 10 Arten von Quoting-Verhalten bereit, die jeweils die Schnittstelle IQuotingBehavior implementieren:
| # | Klasse | Beschreibung | Schlüsselparameter |
|---|---|---|---|
| 1 | BestByPriceQuotingBehavior | Bester Preis aus dem Orderbuch | BestPriceOffset |
| 2 | LastTradeQuotingBehavior | Preis des letzten Trades | BestPriceOffset |
| 3 | LimitQuotingBehavior | Fester Limitpreis | LimitPrice |
| 4 | MarketQuotingBehavior | Marktpreis mit Abstand | PriceOffset, PriceType (Following/Opposite/Middle) |
| 5 | VolatilityQuotingBehavior | Optionsvolatilität (Black-Scholes) | IVRange, Model |
| 6 | TheorPriceQuotingBehavior | Theoretischer Optionspreis | TheorPriceOffset |
| 7 | BestByVolumeQuotingBehavior | Kumuliertes Volumen im Orderbuch | VolumeExchange |
| 8 | LevelQuotingBehavior | Orderbuchtiefen-Level | Level (Range<int>), OwnLevel |
| 9 | VWAPQuotingBehavior | VWAP -- volumengewichteter Durchschnitt | BestPriceOffset |
| 10 | TWAPQuotingBehavior | TWAP -- zeitgewichteter Durchschnitt | TimeInterval, PriceBufferSize (Standardwert 10) |
IQuotingBehavior-Schnittstelle
Die Schnittstelle IQuotingBehavior definiert zwei zentrale Methoden:
CalculateBestPrice
Berechnet den besten Preis zum Platzieren einer Order:
decimal? CalculateBestPrice(
Security security,
IMarketDataProvider provider,
Sides quotingDirection,
decimal? bestBid,
decimal? bestAsk,
decimal? lastTradePrice,
decimal? lastTradeVolume,
IEnumerable<QuoteChange> bids,
IEnumerable<QuoteChange> asks);
NeedQuoting
Bestimmt, ob die aktuelle Order aktualisiert werden muss:
decimal? NeedQuoting(
Security security,
IMarketDataProvider provider,
DateTimeOffset currentTime,
decimal? currentPrice,
decimal? currentVolume,
decimal? newVolume,
decimal? bestPrice);
Gibt null zurück, wenn keine Aktualisierung erforderlich ist, oder den neuen Preis zum Platzieren der Order.
Verwendungsbeispiele
Market Quoting mit Abstand
var behavior = new MarketQuotingBehavior
{
PriceOffset = new Unit(2, UnitTypes.Absolute),
PriceType = MarketPriceTypes.Following,
BestPriceOffset = new Unit(0.5m),
};
VWAP-Quoting
var behavior = new VWAPQuotingBehavior
{
BestPriceOffset = new Unit(1),
};
Quoting der Optionsvolatilität
var behavior = new VolatilityQuotingBehavior
{
IVRange = new Range<decimal>(0.2m, 0.3m),
Model = new BlackScholes(option, connector),
};
Vollständiges Beispiel mit Prozessor
// Quoting-Verhalten auswählen
var behavior = new BestByPriceQuotingBehavior
{
BestPriceOffset = new Unit(0.01m),
};
// Prozessor erstellen
var processor = new QuotingProcessor(
behavior,
Security,
Portfolio,
Sides.Buy,
volume: 10,
maxOrderVolume: 10,
timeout: TimeSpan.FromMinutes(5),
subscriptionProvider: this,
ruleContainer: this,
transactionProvider: this,
timeProvider: this,
marketDataProvider: this,
isTradingAllowed: IsFormedAndOnlineAndAllowTrading,
useBidAsk: true,
useLastTradePrice: true)
{
Parent = this,
};
processor.Finished += isOk =>
{
this.AddInfoLog($"Quoting abgeschlossen: {isOk}");
processor?.Dispose();
};
processor.Start();