Futuros Contínuos por Volume (VolumeContinuousSecurity)

Visão Geral

A classe VolumeContinuousSecurity representa um contrato de futuros contínuo em que a transição (rollover) entre contratos ocorre com base no volume de negociação ou no juro em aberto. Isto difere de ExpirationContinuousSecurity, onde a mudança é realizada de acordo com datas de vencimento predefinidas.

Ambas as classes herdam de ContinuousSecurity, que por sua vez herda de BasketSecurity.

Diferença em Relação a ExpirationContinuousSecurity

Característica ExpirationContinuousSecurity VolumeContinuousSecurity
Condição de rollover Data de vencimento (fixa) Limiar de volume ou juro em aberto
Configuração Dicionário SecurityId -> DateTime Lista SecurityId + VolumeLevel
Previsibilidade Mudança por calendário Mudança por condições de mercado
Código do cabaz CE CV

ExpirationContinuousSecurity requer a especificação manual das datas de transição para cada contrato. VolumeContinuousSecurity muda automaticamente para o contrato seguinte quando o seu volume de negociação (ou juro em aberto) excede o limiar especificado.

Propriedades Principais

public class VolumeContinuousSecurity : ContinuousSecurity
{
    // Lista de instrumentos internos (contratos), ordenada pela sequência de rollover
    public SynchronizedList<SecurityId> InnerSecurities { get; }

    // Utilizar juro em aberto em vez de volume para determinar o rollover
    public bool IsOpenInterest { get; set; }

    // Limiar de volume no qual ocorre a mudança para o contrato seguinte
    public Unit VolumeLevel { get; set; }
}

A propriedade VolumeLevel tem o tipo Unit, que permite especificar valores absolutos e percentuais.

Exemplo de Utilização

using StockSharp.Algo;
using StockSharp.Messages;

// Criar um futuro contínuo baseado em volume
var continuous = new VolumeContinuousSecurity
{
    Id = "ES-CONT@CME",
    Board = ExchangeBoard.Cme,
};

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

// Definir limiar de volume para mudança
continuous.VolumeLevel = new Unit(10000);

// Ou utilizar juro em aberto
continuous.IsOpenInterest = true;
continuous.VolumeLevel = new Unit(50000);

Exemplo com ExpirationContinuousSecurity para Comparação

using StockSharp.Algo;
using StockSharp.Messages;

// Futuro contínuo baseado em vencimento
var expContinuous = new ExpirationContinuousSecurity
{
    Id = "ES-CONT-EXP@CME",
    Board = ExchangeBoard.Cme,
};

// Especificar datas de transição exactas 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)
);

Quando Utilizar

VolumeContinuousSecurity é adequado para situações em que:

  • As datas exactas de rollover não são conhecidas antecipadamente
  • É necessária mudança baseada na liquidez (volume de negociação ou juro em aberto)
  • É necessária uma transição mais adaptativa que responda às condições de mercado

ExpirationContinuousSecurity é preferível quando as datas de vencimento são conhecidas antecipadamente e é necessário um rollover determinístico.