Algos

Sniper

Dispara ordens agressivas que varrem toda a liquidez disponível ao seu preço (ou melhor), de uma só vez, e em seguida encerra.

Quando usar

  • Você tem um preço-limite e quer varrer o livro até esse nível na hora.
  • Velocidade importa mais do que melhora de preço.
  • Está reagindo a uma oportunidade pontual, não trabalhando uma ordem ao longo do tempo.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import Sniper
from investflex.models.common import SecurityExchange, Side

sniper = Sniper(
    name="winj-sweep",
    init_time="09:00:00",
    end_time="17:00:00",
    price_limit=30.05,
    symbol="WINJ19",
    side=Side.SELL,
    quantity=100,
    account="YOUR_ACCOUNT",
    security_exchange=SecurityExchange.XBSP,
)

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

const sniper = new Sniper({
  name: "winj-sweep",
  initTime: "09:00:00",
  endTime: "17:00:00",
  priceLimit: 30.05,
  symbol: "WINJ19",
  side: Side.SELL,
  quantity: 100,
  account: "YOUR_ACCOUNT",
  securityExchange: SecurityExchange.XBSP,
});

const client = InvestflexClient.fromEnv();
const handle = await client.algos.create(sniper);
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.
price_limit número sim sim — Pior preço que você atravessa.

Perna

Perna única, passada de forma plana na estratégia.

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).
account str sim não Conta da corretora.
security_exchange str não não Padrão XBSP.

Editando um Sniper em execução

await client.algos.edit(handle.clord_id, PriceLimit=31.00)
await client.algos.edit(
  handle.clOrdId,
  {
    PriceLimit: 31.0,
  },
  { strategyCode: "sniper" },
);

Apenas PriceLimit é editável.

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

  • Sniper é único disparo: ao executar, não recoloca ordem.
  • O algo se cancela se o preço se mover de forma adversa além do price_limit.
  • Para um taker simples sem a lógica de monitoramento de preço, use a API direta de ordens (client.orders.create(...)) — veja Orders API.