Futuros continuos por volumen (VolumeContinuousSecurity)

Descripción general

La clase VolumeContinuousSecurity representa un contrato de futuros continuo donde la transición (rollover) entre contratos ocurre en función del volumen de trading o del interés abierto. Esto difiere de ExpirationContinuousSecurity, donde el cambio se realiza según fechas de vencimiento predefinidas.

Ambas clases heredan de ContinuousSecurity, que a su vez hereda de BasketSecurity.

Diferencia con ExpirationContinuousSecurity

Característica ExpirationContinuousSecurity VolumeContinuousSecurity
Condición de rollover Fecha de vencimiento (fija) Umbral de volumen o interés abierto
Configuración Diccionario SecurityId -> DateTime Lista de SecurityId + VolumeLevel
Previsibilidad Cambio por calendario Cambio por condiciones de mercado
Código de cesta CE CV

ExpirationContinuousSecurity requiere especificar manualmente las fechas de transición para cada contrato. VolumeContinuousSecurity cambia automáticamente al siguiente contrato cuando su volumen de trading (o interés abierto) supera el umbral especificado.

Propiedades principales

public class VolumeContinuousSecurity : ContinuousSecurity
{
    // Lista de instrumentos internos (contratos), ordenados por secuencia de rollover
    public SynchronizedList<SecurityId> InnerSecurities { get; }

    // Usar interés abierto en lugar de volumen para determinar el rollover
    public bool IsOpenInterest { get; set; }

    // Umbral de volumen en el que ocurre el cambio al siguiente contrato
    public Unit VolumeLevel { get; set; }
}

La propiedad VolumeLevel tiene el tipo Unit, que permite especificar valores tanto absolutos como porcentuales.

Ejemplo de uso

using StockSharp.Algo;
using StockSharp.Messages;

// Crear un futuro continuo basado en volumen
var continuous = new VolumeContinuousSecurity
{
    Id = "ES-CONT@CME",
    Board = ExchangeBoard.Cme,
};

// Agregar contratos en orden de rollover
continuous.InnerSecurities.AddRange(new[]
{
    "ES-3.26@CME".ToSecurityId(),
    "ES-6.26@CME".ToSecurityId(),
    "ES-9.26@CME".ToSecurityId(),
});

// Establecer el umbral de volumen para el cambio
continuous.VolumeLevel = new Unit(10000);

// O usar interés abierto
continuous.IsOpenInterest = true;
continuous.VolumeLevel = new Unit(50000);

Ejemplo con ExpirationContinuousSecurity para comparación

using StockSharp.Algo;
using StockSharp.Messages;

// Futuro continuo basado en vencimiento
var expContinuous = new ExpirationContinuousSecurity
{
    Id = "ES-CONT-EXP@CME",
    Board = ExchangeBoard.Cme,
};

// Especificar fechas exactas de transición para cada contrato
expContinuous.ExpirationJumps.Add(
    "ES-3.26@CME".ToSecurityId(),
    new DateTime(2026, 3, 15)
);
expContinuous.ExpirationJumps.Add(
    "ES-6.26@CME".ToSecurityId(),
    new DateTime(2026, 6, 15)
);

Cuándo usarlo

VolumeContinuousSecurity es adecuado para situaciones en las que:

  • Las fechas exactas de rollover no se conocen de antemano
  • Se requiere cambio basado en liquidez (volumen de trading o interés abierto)
  • Se necesita una transición más adaptativa que responda a las condiciones de mercado

ExpirationContinuousSecurity es preferible cuando las fechas de vencimiento se conocen de antemano y se requiere un rollover determinista.