Referencia de cotización
Descripción general
Esta sección contiene una referencia completa de la arquitectura y los componentes del sistema de cotización en StockSharp. Se describen todos los comportamientos de cotización, tipos de acción e interfaces disponibles. Para una introducción básica, consulte Algoritmo de cotización.
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 cotización (compra/venta)QuotingVolume-- volumen de cotizaciónTimeOut-- 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 cotización. 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 cotización |
Admite modos VWAP y TWAP.
QuotingProcessor
QuotingProcessor -- procesador principal para ejecutar cotización 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 cotización |
Comportamientos de cotización
StockSharp proporciona 10 tipos de comportamientos de cotización, 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
Cotización de mercado con desplazamiento
var behavior = new MarketQuotingBehavior
{
PriceOffset = new Unit(2, UnitTypes.Absolute),
PriceType = MarketPriceTypes.Following,
BestPriceOffset = new Unit(0.5m),
};
Cotización VWAP
var behavior = new VWAPQuotingBehavior
{
BestPriceOffset = new Unit(1),
};
Cotización 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 cotización
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($"Cotización finalizada: {isOk}");
processor?.Dispose();
};
processor.Start();