Medición de slippage
S# calcula el slippage mediante SlippageManager. El slippage es la diferencia entre el precio esperado de ejecución de una orden y el precio real del trade.
Interfaz ISlippageManager
La interfaz ISlippageManager define el contrato base:
- Slippage — slippage acumulado total (decimal).
- Reset() — restablece el estado del administrador.
- ProcessMessage(Message) — procesa un mensaje; devuelve el slippage de la ejecución dada o
null.
Cómo funciona
El administrador de slippage 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 slippage
Cuando se recibe un ExecutionMessage con un trade, el administrador calcula el slippage:
- Para una compra:
(TradePrice - PlannedPrice) * TradeVolume - Para una venta:
(PlannedPrice - TradePrice) * TradeVolume
Un valor positivo significa slippage desfavorable (precio peor de lo esperado), mientras que un valor negativo significa slippage 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). - Slippage acumulado total.
La implementación predeterminada es SlippageManagerState.
Ajustes
| Propiedad | Predeterminado | Descripción |
|---|---|---|
CalculateNegative |
true |
Tener en cuenta el slippage 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 slippage de todos los trades.
Integración con Strategy
La estrategia (Strategy) expone la propiedad Slippage para realizar seguimiento del slippage 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 slippage 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 un trade (cálculo de slippage)
decimal? slippage = manager.ProcessMessage(executionMsg);
if (slippage != null)
{
Console.WriteLine($"Slippage calculado: {slippage.Value}");
}
// Slippage acumulado total
Console.WriteLine($"Slippage total: {manager.Slippage}");
Restablecimiento del estado
El método Reset() borra por completo el estado interno: mejores precios, precios planificados y slippage acumulado:
manager.Reset();