Referência de Cotação

Visão Geral

Esta secção contém uma referência completa da arquitetura e dos componentes do sistema de cotação no StockSharp. São descritos todos os comportamentos de cotação disponíveis, tipos de ação e interfaces. Para uma introdução básica, consulte Algoritmo de Cotação.

Arquitetura

QuotingStrategy (Obsoleto)

A classe QuotingStrategy está obsoleta. Recomenda-se utilizar QuotingProcessor em alternativa.

Parâmetros principais da classe obsoleta:

  • QuotingSide -- direção da cotação (Buy/Sell)
  • QuotingVolume -- volume da cotação
  • TimeOut -- timeout de execução
  • UseBidAsk -- utilizar preços do livro de ordens
  • UseLastTradePrice -- utilizar o preço da última transação

QuotingEngine

QuotingEngine -- o núcleo funcional do sistema de cotação. Calcula o volume restante e timeouts, devolvendo recomendações de ação sem efeitos secundários.

QuotingBehaviorAlgo

QuotingBehaviorAlgo -- implementação da interface IPositionModifyAlgo para gestão algorítmica de posições.

Métodos principais:

Método Descrição
UpdateMarketData(time, price, volume) Atualizar dados de mercado
UpdateOrderBook(depth) Atualizar livro de ordens
GetNextAction() Obter a próxima ação de cotação

Suporta modos VWAP e TWAP.

QuotingProcessor

QuotingProcessor -- o processador principal para executar cotação dentro de uma estratégia. Gere o ciclo de vida das ordens: colocação, modificação, cancelamento.

Tipos QuotingAction

O processador devolve ações do tipo QuotingAction:

Tipo Descrição
None(reason) Nenhuma ação necessária
PlaceOrder(price, volume) Colocar uma nova ordem
ModifyOrder(price, volume) Modificar uma ordem existente
CancelOrder() Cancelar a ordem
Finish(success, reason) Terminar a cotação

Comportamentos de Cotação

StockSharp fornece 10 tipos de comportamentos de cotação, cada um implementando a interface IQuotingBehavior:

# Classe Descrição Parâmetros Principais
1 BestByPriceQuotingBehavior Melhor preço do livro de ordens BestPriceOffset
2 LastTradeQuotingBehavior Preço da última transação BestPriceOffset
3 LimitQuotingBehavior Preço limite fixo LimitPrice
4 MarketQuotingBehavior Preço de mercado com desvio PriceOffset, PriceType (Following/Opposite/Middle)
5 VolatilityQuotingBehavior Volatilidade de opção (Black-Scholes) IVRange, Model
6 TheorPriceQuotingBehavior Preço teórico de opção TheorPriceOffset
7 BestByVolumeQuotingBehavior Volume cumulativo no livro de ordens VolumeExchange
8 LevelQuotingBehavior Nível de profundidade do livro de ordens Level (Range<int>), OwnLevel
9 VWAPQuotingBehavior VWAP -- média ponderada por volume BestPriceOffset
10 TWAPQuotingBehavior TWAP -- média ponderada por tempo TimeInterval, PriceBufferSize (predefinição 10)

Interface IQuotingBehavior

A interface IQuotingBehavior define dois métodos essenciais:

CalculateBestPrice

Calcula o melhor preço para colocar uma ordem:

decimal? CalculateBestPrice(
	Security security,
	IMarketDataProvider provider,
	Sides quotingDirection,
	decimal? bestBid,
	decimal? bestAsk,
	decimal? lastTradePrice,
	decimal? lastTradeVolume,
	IEnumerable<QuoteChange> bids,
	IEnumerable<QuoteChange> asks);

NeedQuoting

Determina se a ordem atual precisa de ser atualizada:

decimal? NeedQuoting(
	Security security,
	IMarketDataProvider provider,
	DateTimeOffset currentTime,
	decimal? currentPrice,
	decimal? currentVolume,
	decimal? newVolume,
	decimal? bestPrice);

Devolve null se não for necessária atualização, ou o novo preço para colocar a ordem.

Exemplos de Utilização

Cotação de Mercado com Desvio

var behavior = new MarketQuotingBehavior
{
	PriceOffset = new Unit(2, UnitTypes.Absolute),
	PriceType = MarketPriceTypes.Following,
	BestPriceOffset = new Unit(0.5m),
};

Cotação VWAP

var behavior = new VWAPQuotingBehavior
{
	BestPriceOffset = new Unit(1),
};

Cotação de Volatilidade de Opções

var behavior = new VolatilityQuotingBehavior
{
	IVRange = new Range<decimal>(0.2m, 0.3m),
	Model = new BlackScholes(option, connector),
};

Exemplo Completo com Processador

// Escolher o comportamento de cotação
var behavior = new BestByPriceQuotingBehavior
{
	BestPriceOffset = new Unit(0.01m),
};

// Criar o processador
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($"Cotação concluída: {isOk}");
	processor?.Dispose();
};

processor.Start();

Ver Também