Algoritmo de Cotação

Visão Geral

Um algoritmo de cotação é um mecanismo que permite colocar e atualizar automaticamente ordens no mercado com o objetivo de obter o melhor preço de execução. Em vez de colocar ordens de mercado agressivas, a cotação utiliza ordens limitadas, o que ajuda a minimizar o slippage e a reduzir os custos de negociação.

Componentes Principais

StockSharp fornece dois componentes essenciais para cotação:

  1. QuotingProcessor — o processador principal que analisa dados de mercado e o estado das ordens para recomendar ações de cotação.

  2. IQuotingBehavior — uma interface que define o comportamento de cotação, incluindo o cálculo do preço ideal e a determinação da necessidade de atualizar ordens.

Exemplos de Estratégias com Cotação

A documentação apresenta exemplos de estratégias que demonstram a utilização do mecanismo de cotação:

  • MqStrategy — um exemplo de estratégia que utiliza o mecanismo de cotação para gerir uma posição no mercado.
  • MqSpreadStrategy — um exemplo de estratégia que cria um spread no mercado ao colocar simultaneamente cotações de compra e venda.
  • StairsCountertrendStrategy — um exemplo de estratégia contra tendência que utiliza cotação para uma entrada mais precisa no mercado.

Estes exemplos ajudam a compreender como integrar o mecanismo de cotação nos seus próprios algoritmos de negociação.

Comportamentos de Cotação

StockSharp suporta vários comportamentos de cotação:

Utilização na Sua Própria Estratégia

Passo 1: Criar um Comportamento de Cotação

// Criar um comportamento para cotação de mercado
var behavior = new MarketQuotingBehavior(
	new Unit(0.01m), // Desvio do preço em relação à melhor cotação
	new Unit(0.1m, UnitTypes.Percent), // Desvio mínimo para atualização da cotação
	MarketPriceTypes.Following // Tipo de preço de mercado para cotação
);

Passo 2: Criar e Inicializar o Processador

// Criar um processador de cotação
_quotingProcessor = new QuotingProcessor(
	behavior,
	Security, // Instrumento
	Portfolio, // Portefólio
	Sides.Buy, // Direção da cotação
	Volume, // Volume da cotação
	Volume, // Volume máximo da ordem
	TimeSpan.Zero, // Sem timeout
	this, // A estratégia implementa ISubscriptionProvider
	this, // A estratégia implementa IMarketRuleContainer
	this, // A estratégia implementa ITransactionProvider
	this, // A estratégia implementa ITimeProvider
	this, // A estratégia implementa IMarketDataProvider
	IsFormedAndOnlineAndAllowTrading, // Verificar permissão de negociação
	true, // Utilizar preços do livro de ordens
	true  // Utilizar o preço da última transação se o livro de ordens estiver vazio
)
{
	Parent = this
};

Passo 3: Subscrever Eventos do Processador

// Subscrever eventos do processador para logging e tratamento
_quotingProcessor.OrderRegistered += order =>
	this.AddInfoLog($"Ordem {order.TransactionId} registada ao preço {order.Price}");

_quotingProcessor.OrderFailed += fail =>
	this.AddInfoLog($"Falha na ordem: {fail.Error.Message}");

_quotingProcessor.OwnTrade += trade =>
	this.AddInfoLog($"Negócio executado: {trade.Trade.Volume} ao preço {trade.Trade.Price}");

_quotingProcessor.Finished += isOk => {
	this.AddInfoLog($"Cotação concluída com sucesso: {isOk}");
	_quotingProcessor?.Dispose();
	_quotingProcessor = null;
};

Passo 4: Iniciar o Processador

// Iniciar o processador
_quotingProcessor.Start();

Passo 5: Libertar Recursos

Não se esqueça de limpar os recursos do processador ao parar a estratégia:

protected override void OnStopped()
{
	// Libertar recursos do processador atual
	_quotingProcessor?.Dispose();
	_quotingProcessor = null;
	
	base.OnStopped();
}

Vantagens da Utilização

  1. Slippage Reduzido — a cotação ajuda a obter um melhor preço de execução em comparação com ordens de mercado.

  2. Flexibilidade de Configuração — vários comportamentos de cotação para diferentes situações de mercado.

  3. Atualizações Automáticas — o processador acompanha automaticamente as alterações do mercado e atualiza as ordens quando necessário.

  4. Controlo Total — possibilidade de configurar parâmetros de cotação, incluindo desvio de preço, desvio mínimo e tipo de preço de mercado.

  5. Gestão de Risco — possibilidade de definir um timeout para limitar o tempo de execução.

Casos de Utilização Aplicados

  • Market Making — criação de liquidez no mercado através da colocação de cotações nos dois lados.
  • Negociação Algorítmica — melhoria do preço de execução em estratégias automatizadas.
  • Negociação Contra Tendência — entrada mais precisa no mercado contra a tendência.
  • Arbitragem — cotação simultânea em vários mercados para tirar partido de discrepâncias de preço.

Implementar o mecanismo de cotação na sua estratégia pode melhorar significativamente a execução das ordens e aumentar a sua eficiência.