Medição de Deslizamento
S# calcula o deslizamento através do SlippageManager. O deslizamento é a diferença entre o preço de execução esperado de uma ordem e o preço real do negócio.
Interface ISlippageManager
A interface ISlippageManager define o contrato base:
- Slippage - deslizamento total acumulado (decimal).
- Reset() - reinicia o estado do gestor.
- ProcessMessage(Message) - processa uma mensagem; devolve o deslizamento para a execução indicada ou
null.
Como Funciona
O gestor de deslizamento funciona em três etapas:
1. Atualizar Preços de Mercado
Quando é recebido um Level1ChangeMessage ou QuoteChangeMessage, o gestor guarda os melhores preços bid e ask para cada instrumento.
2. Guardar o Preço Planeado
Quando é recebida uma OrderRegisterMessage, o gestor guarda o "preço planeado" - o melhor preço de mercado no momento do registo da ordem:
- Para uma compra (
Buy), é usado o melhor ask. - Para uma venda (
Sell), é usado o melhor bid.
3. Calcular Deslizamento
Quando é recebida uma ExecutionMessage com um negócio, o gestor calcula o deslizamento:
- Para uma compra:
(TradePrice - PlannedPrice) * TradeVolume - Para uma venda:
(PlannedPrice - TradePrice) * TradeVolume
Um valor positivo significa deslizamento desfavorável (preço pior do que o esperado), enquanto um valor negativo significa deslizamento favorável (preço melhor do que o esperado).
Estado: ISlippageManagerState
A interface ISlippageManagerState armazena o estado interno do gestor:
- Melhores preços bid/ask para cada instrumento (SecurityId).
- Preços planeados e direções para cada transação (
TransactionId). - Deslizamento total acumulado.
A implementação predefinida é SlippageManagerState.
Definições
| Propriedade | Predefinição | Descrição |
|---|---|---|
CalculateNegative |
true |
Contabilizar deslizamento favorável. Se false, os valores negativos são substituídos por zero. |
Integração via adaptador
A classe SlippageMessageAdapter envolve um adaptador interno e calcula automaticamente o deslizamento para todos os negócios.
Integração com Estratégia
A estratégia (Strategy) expõe a propriedade Slippage para acompanhar o deslizamento global.
Exemplo de Utilização
// Criar gerenciador com armazenamento de estado
var manager = new SlippageManager(new SlippageManagerState());
// Considerar apenas deslizamento desfavorável
manager.CalculateNegative = false;
// Processar dados de mercado (atualizar melhores preços)
manager.ProcessMessage(level1Msg);
manager.ProcessMessage(quoteChangeMsg);
// Processar registo de ordem (guardar o preço planeado)
manager.ProcessMessage(orderRegisterMsg);
// Processar uma negociação (calcular deslizamento)
decimal? slippage = manager.ProcessMessage(executionMsg);
if (slippage != null)
{
Console.WriteLine($"Deslizamento: {slippage.Value}");
}
// Deslizamento acumulado total
Console.WriteLine($"Deslizamento total: {manager.Slippage}");
Reiniciar o Estado
O método Reset() limpa completamente o estado interno: melhores preços, preços planeados e deslizamento acumulado:
manager.Reset();