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)

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)

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)

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.