Algos

Skew

Estratégia de três pernas para expressar uma visão de valor relativo entre duas opções do mesmo ativo-objeto, com o próprio ativo-objeto servindo como hedge de delta (ou vega). O algo gerencia as três pernas juntas para que a posição combinada mantenha o skew de volatilidade desejado.

Quando usar

  • Você está operando um par de volatilidade no mesmo ativo-objeto e quer a posição delta-neutra ou vega-neutra.
  • Quer que a plataforma coordene as execuções para que a estrutura permaneça balanceada.
  • Está protegendo risco direcional enquanto expressa uma visão sobre o diferencial relativo de preço entre duas opções.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import Skew
from investflex.models.common import DeltaType, ExecutionLimit, ExecutionMode, Side

skew = Skew(
    name="petr-skew",
    init_time="09:00:00",
    end_time="17:00:00",
    trigger_value=2.0,                # limiar do vol-spread (%)
    execution_limit=ExecutionLimit.MARKET,
    execution_limit_value=200.0,
    delta_type=DeltaType.FIXED,
    execution_mode=ExecutionMode.OPTION_ARBITRAGE,
    delta_fixed_value_1=0.001,
    delta_fixed_value_2=0.001,
    interest_rate=6.5,
    days_to_expiration_1=1,
    days_to_expiration_2=1,
    legs=[
        dict(symbol="PETRL215", side=Side.BUY,  quantity=10000,
             alloc_account="YOUR_ACCOUNT", resting="Y", max_clip_size=100),
        dict(symbol="PETRL102", side=Side.SELL, quantity=10000,
             alloc_account="YOUR_ACCOUNT", resting="Y", max_clip_size=100),
        dict(symbol="PETR4",    side=Side.BUY,  quantity=10000,
             alloc_account="YOUR_ACCOUNT", resting="N", max_clip_size=100),
    ],
)

async with AsyncInvestflexClient.from_env() as client:
    handle = await client.algos.create(skew)
    print(handle.clord_id, handle.status.name)
import {
  InvestflexClient,
  Skew,
  DeltaType,
  ExecutionLimit,
  ExecutionMode,
  Side,
} from "@investflex/sdk";

const skew = new Skew({
  name: "petr-skew",
  initTime: "09:00:00",
  endTime: "17:00:00",
  triggerValue: 2.0, // limiar do vol-spread (%)
  executionLimit: ExecutionLimit.MARKET,
  executionLimitValue: 200.0,
  deltaType: DeltaType.FIXED,
  executionMode: ExecutionMode.OPTION_ARBITRAGE,
  deltaFixedValue1: 0.001,
  deltaFixedValue2: 0.001,
  interestRate: 6.5,
  daysToExpiration1: 1,
  daysToExpiration2: 1,
  legs: [
    {
      symbol: "PETRL215",
      side: Side.BUY,
      quantity: 10000,
      allocAccount: "YOUR_ACCOUNT",
      resting: "Y",
      maxClipSize: 100,
    },
    {
      symbol: "PETRL102",
      side: Side.SELL,
      quantity: 10000,
      allocAccount: "YOUR_ACCOUNT",
      resting: "Y",
      maxClipSize: 100,
    },
    {
      symbol: "PETR4",
      side: Side.BUY,
      quantity: 10000,
      allocAccount: "YOUR_ACCOUNT",
      resting: "N",
      maxClipSize: 100,
    },
  ],
});

const client = InvestflexClient.fromEnv();
const handle = await client.algos.create(skew);
console.log(handle.clOrdId, handle.status);

await client.close();

Parâmetros

Estratégia

Campo Tipo Obrigatório Editável Padrão Observações
name str sim não — Rótulo.
init_time HH:MM:SS sim não — Início da janela.
end_time HH:MM:SS sim não — Fim da janela.
expire_date YYYYMMDD não não 20380101 Validade da ordem-dia.
text str não não — Comentário livre.
basket_id str não não — Chave opcional de agrupamento.
trigger_value número sim sim — Limiar do spread de volatilidade, em %.
execution_limit ExecutionLimit sim não — ExecutionLimit.MARKET (fechamento em desbalanço), ExecutionLimit.TOLERANCE_PER_LEG.
execution_limit_value número sim não — Tolerância em BRL acima do spread.
delta_type DeltaType sim não — DeltaType.FIXED, DeltaType.AUTOMATIC.
execution_mode ExecutionMode sim não — ExecutionMode.OPTION_ARBITRAGE, ZERO_DELTA_BY_ASSET, ZERO_DELTA_BY_OPTION, ZERO_VEGA_NO_DELTA_HEDGE, ZERO_VEGA_DELTA_HEDGE.
delta_fixed_value_1 número condicional não — Delta fixo da opção 1 (usado quando execution_mode ∈ {ExecutionMode.OPTION_ARBITRAGE, ExecutionMode.ZERO_VEGA_NO_DELTA_HEDGE} ou delta_type=DeltaType.FIXED).
delta_fixed_value_2 número condicional não — Delta fixo da opção 2.
interest_rate número não não — Taxa de juros anual (%) usada no cálculo de delta.
days_to_expiration_1 int não não — Dias até o vencimento da opção 1.
days_to_expiration_2 int não não — Dias até o vencimento da opção 2.

Pernas

Exatamente três pernas, nesta ordem: opção 1, opção 2, ativo-objeto.

Campo Tipo Obrigatório Editável Observações
symbol str sim não Código do instrumento.
side Side.BUY / Side.SELL sim não
quantity int sim sim Quantidade total (> 0).
alloc_account str sim não Conta da corretora.
security_exchange str não não Padrão XBSP.
resting "Y" / "N" não sim Tipicamente Y nas opções, N no ativo-objeto.
max_clip_size int não sim Maior pedaço visível por ordem filha.

Editando um Skew em execução

await client.algos.edit(handle.clord_id, TriggerValue=0.04)
await client.algos.edit(
  handle.clOrdId,
  {
    TriggerValue: 0.04,
  },
  { strategyCode: "skew" },
);

Editável: TriggerValue.

Comandos de ciclo de vida

await client.algos.commands.cancel(handle.clord_id)
await client.algos.commands.suspend(handle.clord_id)
await client.algos.commands.resume(handle.clord_id)
await client.commands.cancel(handle.clOrdId);
await client.commands.suspend(handle.clOrdId);
await client.commands.resume(handle.clOrdId);

Notas de comportamento

  • A terceira perna (ativo-objeto) é o hedge — sua quantity deve ser dimensionada pelos deltas das opções, não como exposição direta.
  • execution_mode escolhe o estilo de hedge; modos 4/5 miram neutralidade de vega e requerem entradas de sensibilidade do par de opções (delta_fixed_value_*, interest_rate, days_to_expiration_*).
  • execution_limit_value é a tolerância em BRL que a engine aceita antes de forçar o rebalanceamento via ativo-objeto.