Algos

Financiamento

Estratégia de duas pernas que captura o spread de financiamento entre uma posição à vista e o seu equivalente a termo (operações clássicas de termo na B3): ambas as pernas são executadas juntas na taxa de financiamento desejada.

Quando usar

  • Você está rolando ou iniciando uma operação de financiamento (vista vs. termo).
  • Precisa de execução atômica para travar a taxa implícita de funding.
  • Não quer gerenciar as pernas à vista e a termo separadamente.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import Financiamento
from investflex.models.common import ExecutionType, Side, Trigger

f = Financiamento(
    name="petr-financ",
    init_time="09:00:00",
    end_time="17:00:00",
    execution_type=ExecutionType.ENTRY,
    trigger=Trigger.FINANCIAMENTO,    # também: Trigger.SPREAD, Trigger.FINANCIAL_DIFF
    trigger_value=30,
    book_depth=1,
    init_suspended="N",
    legs=[
        dict(symbol="PETRG23", side=Side.SELL, quantity=100,
             alloc_account="YOUR_ACCOUNT", resting="N",
             max_clip_size=100, first_timeout=5000),
        dict(symbol="PETR3",   side=Side.BUY,  quantity=1000,
             alloc_account="YOUR_ACCOUNT", resting="Y",
             max_clip_size=1000, first_timeout=5000),
    ],
)

async with AsyncInvestflexClient.from_env() as client:
    handle = await client.algos.create(f)
    print(handle.clord_id, handle.status.name)
import {
  InvestflexClient,
  Financiamento,
  ExecutionType,
  Side,
  Trigger,
} from "@investflex/sdk";

const f = new Financiamento({
  name: "petr-financ",
  initTime: "09:00:00",
  endTime: "17:00:00",
  executionType: ExecutionType.ENTRY,
  trigger: Trigger.FINANCIAMENTO, // também: Trigger.SPREAD, Trigger.FINANCIAL_DIFF
  triggerValue: 30,
  bookDepth: 1,
  initSuspended: "N",
  legs: [
    {
      symbol: "PETRG23",
      side: Side.SELL,
      quantity: 100,
      allocAccount: "YOUR_ACCOUNT",
      resting: "N",
      maxClipSize: 100,
      firstTimeout: 5000,
    },
    {
      symbol: "PETR3",
      side: Side.BUY,
      quantity: 1000,
      allocAccount: "YOUR_ACCOUNT",
      resting: "Y",
      maxClipSize: 1000,
      firstTimeout: 5000,
    },
  ],
});

const client = InvestflexClient.fromEnv();
const handle = await client.algos.create(f);
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.
execution_type ExecutionType sim não — ExecutionType.ENTRY, ExecutionType.GAIN_LOSS.
trigger Trigger não não Trigger.FINANCIAMENTO Trigger.SPREAD, Trigger.FINANCIAL_DIFF, Trigger.FINANCIAMENTO.
trigger_value número sim sim — Valor de entrada ou alvo de ganho.
to_market_trigger_value número condicional sim — Alvo de perda quando execution_type=ExecutionType.GAIN_LOSS.
to_market_trigger_value_enabled "Y" / "N" não não — Y apenas quando execution_type=ExecutionType.GAIN_LOSS.
compensate_exec int não não — Flag opcional de rebalanceamento.
book_depth int não sim — Profundidade (1..N) usada para avaliar o gatilho.
init_suspended "Y" / "N" não não — Inicia o algo pausado.
ignore_offers_lt int não sim — Ignora ofertas contrárias menores que este tamanho.
simulate_sniper_on_resting "Y" / "N" não não — Simula varredura sniper na perna passiva.

Pernas

Exatamente duas pernas.

Campo Tipo Obrigatório Editável Observações
symbol str sim não Código do instrumento (uma à vista + uma a termo).
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 Y passiva, N agressora.
max_clip_size int não sim Maior pedaço visível por ordem filha.
first_timeout int não não Milissegundos até a primeira reavaliação.

Editando um Financiamento em execução

await client.algos.edit(
    handle.clord_id,
    TriggerValue=29,
    ToMarketTriggerValue=0,
    BookDepth=2,
    IgnoreOffersLT=100,
)
await client.algos.edit(
  handle.clOrdId,
  {
    TriggerValue: 29,
    ToMarketTriggerValue: 0,
    BookDepth: 2,
    IgnoreOffersLT: 100,
  },
  { strategyCode: "financ" },
);

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

  • trigger=Trigger.FINANCIAMENTO é a configuração mais comum em termo B3: o valor do gatilho é a diferença financeira absoluta entre as pernas à vista e a termo.
  • Em geral a perna à vista fica passiva enquanto a perna a termo agride (ou vice-versa) — defina resting="Y" na perna que quer expor.
  • Use init_suspended="Y" para carregar o algo sem começar; depois chame resume quando estiver pronto.