Algos
Long & Short
Combina uma perna comprada com uma perna vendida em uma única estrutura gerenciada: o algo executa as duas pernas juntas, de modo que a posição resultante tenha a exposição de par desejada.
Quando usar
- Você está operando um par long/short, em que a tese é o spread entre dois ativos.
- Quer exposição direcional neutra ou quase-neutra.
- Precisa de execuções sincronizadas para evitar ficar "perneado".
Início rápido
from investflex import AsyncInvestflexClient
from investflex.models.algos import LongShort
from investflex.models.common import ExecutionType, Side, Trigger
ls = LongShort(
name="petr4-petr3",
init_time="09:00:00",
end_time="17:00:00",
trigger=Trigger.BUY_SELL_RATIO,
execution_type=ExecutionType.ENTRY,
trigger_value=1.08,
book_depth=1,
legs=[
dict(symbol="PETR4", side=Side.BUY, quantity=100_000,
alloc_account="YOUR_ACCOUNT", resting="Y", max_clip_size=100),
dict(symbol="PETR3", side=Side.SELL, quantity=100_000,
alloc_account="YOUR_ACCOUNT", resting="Y", max_clip_size=100),
],
)
async with AsyncInvestflexClient.from_env() as client:
handle = await client.algos.create(ls)
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. |
trigger |
Trigger |
sim | não | — | Trigger.BUY_SELL_RATIO, Trigger.SELL_BUY_RATIO, Trigger.BUY_SELL_SPREAD_DIFF, Trigger.SELL_BUY_SPREAD_DIFF, Trigger.FINANCIAL_DIFF. |
execution_type |
ExecutionType |
sim | não | — | ExecutionType.ENTRY, ExecutionType.GAIN_LOSS. |
trigger_value |
número | sim | sim | — | Valor de entrada (execution_type=ExecutionType.ENTRY) ou alvo de ganho (execution_type=ExecutionType.GAIN_LOSS). |
to_market_trigger_value |
número | condicional | sim | — | Alvo de perda; obrigatório quando execution_type=ExecutionType.GAIN_LOSS. |
book_depth |
int | não | sim | — | Nível de profundidade (1..N) usado para avaliar o gatilho. |
ignore_offers_lt |
int | não | sim | — | Ignora ofertas contrárias menores que este tamanho. |
service_group |
str | não | não | — | Interno — roteamento do controlador. |
Pernas
Exatamente duas pernas. Cada perna é um dict (ou LongShortLeg).
| 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 | Uma BUY + uma SELL. |
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 posta passivo nesta perna; N faz dela a perna 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 Long & Short em execução
await client.algos.edit(
handle.clord_id,
TriggerValue=1.10,
ToMarketTriggerValue=0.55,
BookDepth=2,
IgnoreOffersLT=100,
)
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
- Uma perna fica passiva, a outra agride. A agressora só dispara quando a condição do gatilho é atendida e a perna passiva já executou o suficiente para manter a estrutura balanceada.
book_depthpermite avaliar o gatilho contra liquidez mais profunda, não apenas o toque.- Use
execution_type=ExecutionType.GAIN_LOSSapenas quando existir uma posição Long & Short aberta —trigger_valuepassa a ser o alvo de ganho eto_market_trigger_valueo alvo de perda.