Algos
OCO (novo)
A nova geração do One-Cancels-the-Other: uma entrada de uma perna (mercado, start, stop, limite ou leilão) protegida por um stop-loss e, opcionalmente, por um lado de ganho. Quando uma saída dispara, a outra é cancelada. Suporta a mesma escada de realização parcial (L1 / L2 / L3) do Flex Order.
Quando usar
- Você quer stop-loss (e opcionalmente take-profit) anexado a uma única ordem, sem gerenciar as pernas manualmente.
- Quer encerrar a posição em fatias, em níveis crescentes de ganho.
- Está migrando do fluxo legado
fxorder: ooco2coloca a quantidade na perna, exige apenasstop_losse deixa o engine assumir o resto.
Início rápido
from investflex import AsyncInvestflexClient
from investflex.models.algos import OCO2
from investflex.models.common import (
CustomOrdType,
Side,
StopTypeOCO,
TriggerEntryType,
)
oco = OCO2(
name="petr-oco2",
init_time="10:00:00",
end_time="17:00:00",
# entrada
custom_ord_type=CustomOrdType.LIMIT,
start_trigger_price=38.0,
# stops
stop_type=StopTypeOCO.GAIN_LOSS,
trigger_entry_type=TriggerEntryType.POINTS,
stop_loss=0.50,
stop_gain=1.00,
# perna
symbol="PETR4",
side=Side.BUY,
quantity=1000,
account="SUA_CONTA",
)
async with AsyncInvestflexClient.from_env() as client:
handle = await client.algos.create(oco)
print(handle.clord_id, handle.status.name)
import {
InvestflexClient,
OCO2,
CustomOrdType,
Side,
StopTypeOCO,
TriggerEntryType,
} from "@investflex/sdk";
const oco = new OCO2({
name: "petr-oco2",
initTime: "10:00:00",
endTime: "17:00:00",
// entrada
customOrdType: CustomOrdType.LIMIT,
startTriggerPrice: 38.0,
// stops
stopType: StopTypeOCO.GAIN_LOSS,
triggerEntryType: TriggerEntryType.POINTS,
stopLoss: 0.5,
stopGain: 1.0,
// perna
symbol: "PETR4",
side: Side.BUY,
quantity: 1000,
account: "SUA_CONTA",
});
const client = InvestflexClient.fromEnv();
const handle = await client.algos.create(oco);
console.log(handle.clOrdId, handle.status);
await client.close();
Parâmetros
FlexOrderStrategy. Apenas stop_loss (além da perna) é obrigatório;
os demais campos são opcionais e o engine aplica seus defaults.
Estratégia — entrada
| Campo | Tipo | Obrigatório | Editável | Observações |
|---|---|---|---|---|
custom_ord_type |
CustomOrdType |
não | não | MARKET, START, STOP, LIMIT, AUCTION. Enviado como string ("1".."5"). |
use_auction_order |
"Y" / "N" |
não | não | Usa ordem de leilão na entrada. |
start_trigger_price |
número | condicional | sim | Preço de disparo / limite para entradas START, LIMIT e AUCTION. |
entrance_exec_price |
número | condicional | não | Preço de entrada para entradas STOP. |
Estratégia — stops
| Campo | Tipo | Obrigatório | Editável | Observações |
|---|---|---|---|---|
trigger_entry_type |
TriggerEntryType |
não | não | POINTS (ticks) ou PERCENTAGE — unidade de todos os stops abaixo. |
stop_loss |
número | sim | sim | Distância de perda a partir do preço de entrada. |
stop_type |
StopTypeOCO |
não | não | GAIN_LOSS, TRAILING, PARTIAL. |
stop_gain |
número | não | sim | Distância de ganho (com stop_type=GAIN_LOSS). |
reversion_type |
ReversionType |
não | não | END_TIME_OR_CANCEL, AUCTION_OR_CANCEL, JUST_ON_GAIN_OR_LOSS, DO_NOT_REVERT. |
Estratégia — níveis parciais de ganho
Usados com stop_type=StopTypeOCO.PARTIAL.
| Campo | Tipo | Obrigatório | Editável | Observações |
|---|---|---|---|---|
use_level3 |
"Y" / "N" |
não | não | Três níveis parciais ("Y") ou dois ("N"). |
stop_gain_l1 / l2 / l3 |
número | não | sim | Distâncias de ganho crescentes. |
order_quantity_l1 / l2 / l3 |
int | não | sim | Quantidade encerrada em cada nível (> 0). |
bypass_firewall |
"Y" / "N" |
não | não | Ignora o firewall pré-trade. Default "N". |
Perna
Perna única, passada de forma plana. Diferente do fxorder, a
quantity fica na perna.
| 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 | não | Quantidade total (> 0). |
account |
str | sim | não | Conta na corretora. |
security_exchange |
str | não | não | Default XBSP. |
Editando um OCO em execução
await client.algos.edit(
handle.clord_id,
StartTriggerPrice=38.2,
StopLoss=0.4,
StopGain=1.2,
)
await client.algos.edit(
handle.clOrdId,
{ StartTriggerPrice: 38.2, StopLoss: 0.4, StopGain: 1.2 },
{ strategyCode: "oco2" },
);
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
stop_type=StopTypeOCO.TRAILINGarrasta ostop_lossatrás do melhor preço atingido.stop_type=StopTypeOCO.PARTIALencerraorder_quantity_l1..l3emstop_gain_l1..l3; useuse_level3="N"para apenas dois níveis.trigger_entry_type=TriggerEntryType.PERCENTAGEinterpreta todos os stops como percentual em vez de ticks.reversion_type=ReversionType.DO_NOT_REVERTnão pode ser combinado com entradaSTOP.