Algos
Troca Contínua
Rola continuamente uma posição de um instrumento que está vencendo para o próximo contrato, coordenando o fechamento da perna da frente e a abertura da perna seguinte para preservar a exposição durante a rolagem.
Quando usar
- Você está rolando posições em futuros ou em termo antes do vencimento.
- Quer uma rolagem suave e automática, em vez de uma troca abrupta.
- Precisa de execução coordenada para não ficar descoberto durante a troca.
Início rápido
from investflex import AsyncInvestflexClient
from investflex.models.algos import TrocaContinua
from investflex.models.common import ExecutionType, SecurityExchange, Side, TimeInForce, Trigger
c = TrocaContinua(
name="win-roll",
init_time="09:00:00",
end_time="23:53:00",
time_in_force=TimeInForce.DAY,
# gatilhos (NOTA: cont usa entry/exit triggers, não trigger_value)
execution_type=ExecutionType.ENTRY,
trigger=Trigger.SPREAD, # também: Trigger.FINANCIAL_DIFF, Trigger.FINANCIAMENTO
entry_trigger_value=162915.0,
exit_trigger_value=-162900.0,
entry_trigger_type=1, # 1 = Pontos
exit_trigger_type=1,
simultaneous_trigger_mode="Y",
start_on_exit_trigger="N",
allow_partial_exit="Y",
legs=[
dict(symbol="WING25", side=Side.BUY, quantity=1,
alloc_account="YOUR_ACCOUNT", security_exchange=SecurityExchange.XBMF,
resting="Y", max_clip_size=1, first_timeout=5000),
dict(symbol="WDOH25", side=Side.SELL, quantity=1,
alloc_account="YOUR_ACCOUNT", security_exchange=SecurityExchange.XBMF,
resting="Y", max_clip_size=1, first_timeout=5000),
],
)
async with AsyncInvestflexClient.from_env() as client:
handle = await client.algos.create(c)
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. |
time_in_force |
enum | não | não | DAY |
Veja 02-enums.md. |
execution_type |
ExecutionType |
sim | não | — | ExecutionType.ENTRY, ExecutionType.GAIN_LOSS. |
trigger |
Trigger |
sim | não | — | Trigger.SPREAD, Trigger.FINANCIAL_DIFF, Trigger.FINANCIAMENTO. |
entry_trigger_value |
número | sim | sim | — | Limiar de entrada (preço ou diferença financeira). |
exit_trigger_value |
número | sim | sim | — | Limiar de saída (preço ou diferença financeira). |
entry_trigger_type |
int | não | não | — | 1 Pontos (ticks), 2 Percentual. |
exit_trigger_type |
int | não | não | — | Mesmos modos para a saída. |
simultaneous_trigger_mode |
"Y" / "N" |
não | não | — | Y deixa entrada e saída dispararem no mesmo evento; N exige primeiro a entrada e depois arma a saída. |
start_on_exit_trigger |
"Y" / "N" |
não | não | — | Y rearma a entrada após uma execução de saída (modo contínuo). |
allow_partial_exit |
"Y" / "N" |
não | sim | — | Permite que a saída execute parcialmente. |
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. |
Nota: ao contrário de
lgshort/spread/financ, a Troca Contínua não usa um únicotrigger_value— ela sempre tementry_trigger_valueeexit_trigger_value.
Pernas
Duas ou três pernas.
| 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; use XBMF para derivativos B3. |
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 uma Troca Contínua em execução
await client.algos.edit(
handle.clord_id,
EntryTriggerValue=162900,
ExitTriggerValue=-162885,
AllowPartialExit="Y",
)
Editáveis: EntryTriggerValue, ExitTriggerValue,
ToMarketTriggerValue, AllowPartialExit.
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
- O gatilho é avaliado contra a diferença de preço (ou financeira)
entre as pernas — o sinal importa: um
exit_trigger_valuenegativo significa sair quando a diferença cai abaixo desse nível. simultaneous_trigger_mode="Y"é típico de uma rolagem contínua: as condições de entrada e saída são monitoradas em paralelo.start_on_exit_trigger="Y"mantém o algo em ciclo: cada execução de saída rearma uma nova entrada, útil para rolagens repetidas dentro da janela.- Variantes de 2 pernas são típicas de rolagem de futuros (frente → trás); variantes de 3 pernas adicionam um instrumento de hedge ou base.