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:
QuotingProcessor — o processador principal que analisa dados de mercado e o estado das ordens para recomendar ações de cotação.
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:
- MarketQuotingBehavior — cotação baseada no preço de mercado com desvio e tipo configuráveis.
- BestByPriceQuotingBehavior — cotação baseada no melhor preço com desvio configurável.
- LimitQuotingBehavior — cotação a um preço fixo.
- BestByVolumeQuotingBehavior — cotação baseada no melhor preço por volume.
- LevelQuotingBehavior — cotação baseada num nível especificado no livro de ordens.
- LastTradeQuotingBehavior — cotação baseada no preço da última transação.
- TheorPriceQuotingBehavior — cotação de opções baseada no preço teórico.
- VolatilityQuotingBehavior — cotação de opções baseada na volatilidade.
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
Slippage Reduzido — a cotação ajuda a obter um melhor preço de execução em comparação com ordens de mercado.
Flexibilidade de Configuração — vários comportamentos de cotação para diferentes situações de mercado.
Atualizações Automáticas — o processador acompanha automaticamente as alterações do mercado e atualiza as ordens quando necessário.
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.
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.