Algos

Flex Order

Uma ordem flexível de uma perna com lógica rica de entrada / reversão / stop: você escolhe o modo de entrada (mercado, start, stop, limite, leilão), o comportamento de reversão (fim de janela, leilão, somente em ganho/perda, sem reversão) e o tipo de stop (ganho & perda, trailing, parcial).

Quando usar

  • Você quer take-profit e stop-loss anexados a uma única ordem, sem gerenciar manualmente.
  • Precisa deixar uma posição protegida quando não pode acompanhar o mercado.
  • Quer lógica de saída simétrica (incluindo níveis de realização parcial) embutida na própria ordem.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import FlexOrder
from investflex.models.common import (
    CustomOrdType,
    ReversionType,
    Side,
    StopTypeOCO,
    TriggerEntryType,
)

fx = FlexOrder(
    name="winq-flex",
    init_time="09:00:00",
    end_time="17:00:00",
    # entrada
    order_quantity=1,
    custom_ord_type=CustomOrdType.MARKET,
    # reversão + stops
    reversion_type=ReversionType.END_TIME_OR_CANCEL,
    stop_type=StopTypeOCO.GAIN_LOSS,
    trigger_entry_type=TriggerEntryType.POINTS,
    stop_loss=5,
    stop_gain=5,
    # perna
    symbol="WINQ19",
    side=Side.BUY,
    account="YOUR_ACCOUNT",
)

async with AsyncInvestflexClient.from_env() as client:
    handle = await client.algos.create(fx)
    print(handle.clord_id, handle.status.name)

Parâmetros

Estratégia — entrada

Campo Tipo Obrigatório Editável Observações
order_quantity int sim sim Quantidade total (> 0).
custom_ord_type CustomOrdType sim não Modo de entrada: CustomOrdType.MARKET, CustomOrdType.START, CustomOrdType.STOP, CustomOrdType.LIMIT, CustomOrdType.AUCTION.
start_price_trigger número condicional sim Preço-gatilho para custom_ord_type ∈ {2, 4, 5} (quando use_auction_open_price="N").
entrance_exec_price número condicional não Preço de entrada quando custom_ord_type=CustomOrdType.STOP.
use_auction_open_price "Y" / "N" não não Para custom_ord_type=CustomOrdType.AUCTION — usa o preço de abertura do leilão.

Estratégia — reversão + stops

Campo Tipo Obrigatório Editável Observações
reversion_type ReversionType sim não ReversionType.END_TIME_OR_CANCEL, ReversionType.AUCTION_OR_CANCEL, ReversionType.JUST_ON_GAIN_OR_LOSS, ReversionType.DO_NOT_REVERT (sem stops).
stop_type StopTypeOCO condicional não Quando reversion_type ≠ ReversionType.DO_NOT_REVERT: StopTypeOCO.GAIN_LOSS, StopTypeOCO.TRAILING, StopTypeOCO.PARTIAL.
trigger_entry_type TriggerEntryType não não TriggerEntryType.POINTS (ticks), TriggerEntryType.PERCENTAGE.
stop_loss número condicional sim Distância de perda (usada quando stop_type ∈ {1,2}).
stop_gain número condicional sim Distância de ganho (usada quando stop_type=StopTypeOCO.GAIN_LOSS).

Estratégia — níveis de realização parcial

Usados quando stop_type=StopTypeOCO.PARTIAL.

Campo Tipo Obrigatório Editável Observações
use_level3 "Y" / "N" não não Habilita um terceiro nível parcial.
stop_gain_l1 número sim sim Distância de ganho no nível 1.
order_quantity_l1 int sim sim Quantidade a realizar no nível 1.
stop_gain_l2 número sim sim Distância de ganho no nível 2.
order_quantity_l2 int sim sim Quantidade a realizar no nível 2.
stop_gain_l3 número condicional sim Distância de ganho no nível 3 (quando use_level3="Y").
order_quantity_l3 int condicional sim Quantidade a realizar no nível 3.

Perna

Perna única, passada de forma plana. quantity não é usado aqui — o total é order_quantity 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
account str sim não Conta da corretora.
security_exchange str não não Padrão XBSP.

Editando um Flex Order em execução

await client.algos.edit(
    handle.clord_id,
    OrderQuantity=2,
    StartPriceTrigger=4100,
    StopGain=5,
    StopLoss=5,
    StopGainL1=2,
    OrderQuantityL1=1,
)

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

  • reversion_type=ReversionType.DO_NOT_REVERT ignora todos os stops — a ordem se comporta como uma ordem comum. Os outros modos anexam um bracket OCO.
  • stop_type=StopTypeOCO.TRAILING trilha stop_loss ticks atrás do melhor preço alcançado.
  • stop_type=StopTypeOCO.PARTIAL executa até três fatias de take-profit em stop_gain_l1..l3 — defina use_level3="N" para usar apenas dois níveis.
  • trigger_entry_type=TriggerEntryType.PERCENTAGE interpreta stop_loss / stop_gain / stop_gain_l* como percentuais em vez de ticks.