Referencia de quoting
Descripción general
Esta sección contiene una referencia completa de la arquitectura y los componentes del sistema de quoting en StockSharp. Se describen todos los comportamientos de quoting, tipos de acción e interfaces disponibles. Para una introducción básica, consulte Algoritmo de quoting.
Arquitectura
QuotingStrategy (obsoleto)
La clase QuotingStrategy está obsoleta. Se recomienda usar QuotingProcessor en su lugar.
Parámetros principales de la clase obsoleta:
QuotingSide-- dirección de quoting (compra/venta)QuotingVolume-- volumen de quotingTimeOut-- timeout de ejecuciónUseBidAsk-- usar precios del libro de órdenesUseLastTradePrice-- usar precio de la última operación
QuotingEngine
QuotingEngine -- núcleo funcional del sistema de quoting. Calcula volumen restante y timeouts, y devuelve recomendaciones de acción sin efectos secundarios.
QuotingBehaviorAlgo
QuotingBehaviorAlgo -- implementación de la interfaz IPositionModifyAlgo para gestión algorítmica de posiciones.
Métodos principales:
| Método | Descripción |
|---|---|
UpdateMarketData(time, price, volume) |
Actualizar datos de mercado |
UpdateOrderBook(depth) |
Actualizar libro de órdenes |
GetNextAction() |
Obtener la siguiente acción de quoting |
Admite modos VWAP y TWAP.
QuotingProcessor
QuotingProcessor -- procesador principal para ejecutar quoting dentro de una estrategia. Gestiona el ciclo de vida de órdenes: colocación, modificación, cancelación.
Tipos QuotingAction
El procesador devuelve acciones de tipo QuotingAction:
| Tipo | Descripción |
|---|---|
None(reason) |
No se requiere ninguna acción |
PlaceOrder(price, volume) |
Colocar una nueva orden |
ModifyOrder(price, volume) |
Modificar una orden existente |
CancelOrder() |
Cancelar la orden |
Finish(success, reason) |
Finalizar quoting |
Comportamientos de quoting
StockSharp proporciona 10 tipos de comportamientos de quoting, cada uno implementando la interfaz IQuotingBehavior:
| # | Clase | Descripción | Parámetros clave |
|---|---|---|---|
| 1 | BestByPriceQuotingBehavior | Mejor precio del libro de órdenes | BestPriceOffset |
| 2 | LastTradeQuotingBehavior | Precio de la última operación | BestPriceOffset |
| 3 | LimitQuotingBehavior | Precio límite fijo | LimitPrice |
| 4 | MarketQuotingBehavior | Precio de mercado con desplazamiento | PriceOffset, PriceType (Following/Opposite/Middle) |
| 5 | VolatilityQuotingBehavior | Volatilidad de opción (Black-Scholes) | IVRange, Model |
| 6 | TheorPriceQuotingBehavior | Precio teórico de opción | TheorPriceOffset |
| 7 | BestByVolumeQuotingBehavior | Volumen acumulado en el libro de órdenes | VolumeExchange |
| 8 | LevelQuotingBehavior | Nivel de profundidad del libro de órdenes | Level (Range<int>), OwnLevel |
| 9 | VWAPQuotingBehavior | VWAP -- promedio ponderado por volumen | BestPriceOffset |
| 10 | TWAPQuotingBehavior | TWAP -- promedio ponderado por tiempo | TimeInterval, PriceBufferSize (predeterminado 10) |
Interfaz IQuotingBehavior
La interfaz IQuotingBehavior define dos métodos clave:
CalculateBestPrice
Calcula el mejor precio para colocar una orden:
decimal? CalculateBestPrice(
Security security,
IMarketDataProvider provider,
Sides quotingDirection,
decimal? bestBid,
decimal? bestAsk,
decimal? lastTradePrice,
decimal? lastTradeVolume,
IEnumerable<QuoteChange> bids,
IEnumerable<QuoteChange> asks);
NeedQuoting
Determina si la orden actual necesita actualizarse:
decimal? NeedQuoting(
Security security,
IMarketDataProvider provider,
DateTimeOffset currentTime,
decimal? currentPrice,
decimal? currentVolume,
decimal? newVolume,
decimal? bestPrice);
Devuelve null si no se necesita actualización, o el nuevo precio para colocar la orden.
Ejemplos de uso
Quoting de mercado con desplazamiento
var behavior = new MarketQuotingBehavior
{
PriceOffset = new Unit(2, UnitTypes.Absolute),
PriceType = MarketPriceTypes.Following,
BestPriceOffset = new Unit(0.5m),
};
Quoting VWAP
var behavior = new VWAPQuotingBehavior
{
BestPriceOffset = new Unit(1),
};
Quoting de volatilidad de opciones
var behavior = new VolatilityQuotingBehavior
{
IVRange = new Range<decimal>(0.2m, 0.3m),
Model = new BlackScholes(option, connector),
};
Ejemplo completo con procesador
// Elegir el comportamiento de quoting
var behavior = new BestByPriceQuotingBehavior
{
BestPriceOffset = new Unit(0.01m),
};
// Crear el procesador
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 finalizado: {isOk}");
processor?.Dispose();
};
processor.Start();