Medición de deslizamiento

S# calcula el deslizamiento mediante SlippageManager. El deslizamiento es la diferencia entre el precio esperado de ejecución de una orden y el precio real de la operación.

Interfaz ISlippageManager

La interfaz ISlippageManager define el contrato base:

  • Slippage — deslizamiento acumulado total (decimal).
  • Reset() — restablece el estado del administrador.
  • ProcessMessage(Message) — procesa un mensaje; devuelve el deslizamiento de la ejecución dada o null.

Cómo funciona

El administrador de deslizamiento funciona en tres etapas:

1. Actualización de precios de mercado

Cuando se recibe un Level1ChangeMessage o QuoteChangeMessage, el administrador guarda los mejores precios bid y ask para cada instrumento.

2. Guardado del precio planificado

Cuando se recibe un OrderRegisterMessage, el administrador guarda el "precio planificado": el mejor precio de mercado en el momento de registrar la orden:

  • Para una compra (Buy), se usa el mejor ask.
  • Para una venta (Sell), se usa el mejor bid.

3. Cálculo de deslizamiento

Cuando se recibe un ExecutionMessage con una operación, el administrador calcula el deslizamiento:

  • Para una compra: (TradePrice - PlannedPrice) * TradeVolume
  • Para una venta: (PlannedPrice - TradePrice) * TradeVolume

Un valor positivo significa deslizamiento desfavorable (precio peor de lo esperado), mientras que un valor negativo significa deslizamiento favorable (precio mejor de lo esperado).

Estado: ISlippageManagerState

La interfaz ISlippageManagerState almacena el estado interno del administrador:

  • Mejores precios bid/ask para cada instrumento (SecurityId).
  • Precios planificados y direcciones para cada transacción (TransactionId).
  • Deslizamiento acumulado total.

La implementación predeterminada es SlippageManagerState.

Ajustes

Propiedad Predeterminado Descripción
CalculateNegative true Tener en cuenta el deslizamiento favorable. Si es false, los valores negativos se sustituyen por cero.

Integración mediante adaptador

La clase SlippageMessageAdapter envuelve un adaptador interno y calcula automáticamente el deslizamiento de todas las operaciones.

Integración con Strategy

La estrategia (Strategy) expone la propiedad Slippage para realizar seguimiento del deslizamiento general.

Ejemplo de uso

// Creación de un administrador con un almacén de estado
var manager = new SlippageManager(new SlippageManagerState());

// Tener en cuenta solo deslizamiento desfavorable
manager.CalculateNegative = false;

// Procesamiento de datos de mercado (actualizar mejores precios)
manager.ProcessMessage(level1Msg);
manager.ProcessMessage(quoteChangeMsg);

// Procesamiento de registro de orden (guardar el precio planificado)
manager.ProcessMessage(orderRegisterMsg);

// Procesamiento de una operación (cálculo de deslizamiento)
decimal? slippage = manager.ProcessMessage(executionMsg);
if (slippage != null)
{
    Console.WriteLine($"Deslizamiento calculado: {slippage.Value}");
}

// Deslizamiento acumulado total
Console.WriteLine($"Deslizamiento total: {manager.Slippage}");

Restablecimiento del estado

El método Reset() borra por completo el estado interno: mejores precios, precios planificados y deslizamiento acumulado:

manager.Reset();