Bracket order e OCO: como funcionam
Entenda a bracket order, o alvo de lucro e o stop de proteção ligados como OCO, os efeitos do preenchimento parcial e onde essa relação é mantida.
Uma bracket order é uma única instrução que envia três ordens em uma relação fixa: uma entrada e um par de saídas vinculadas, posicionadas em lados opostos da entrada. Esse par é o OCO, abreviação de one cancels the other. Uma ordem limite de realização de lucro fica acima do preço de entrada, e um stop de proteção fica abaixo dele. A execução de qualquer uma das pernas cancela automaticamente a outra. Na prática, uma bracket é uma pequena máquina de estados. A maioria das surpresas ocorre nos intervalos entre esses estados.
O que é uma bracket order?
Imagine um trader que queira comprar 200 ações perto de US$ 50, encerrar a posição perto de US$ 53 se a operação der certo e sair perto de US$ 48,50 se der errado. Como ordens separadas, isso exige três tickets e uma tarefa manual: cancelar o stop no momento em que o alvo for executado. Caso contrário, o trader corre o risco de vender 200 ações duas vezes. A bracket reúne a mesma intenção em uma única submissão. A entrada é uma ordem a mercado ou ordem limite comum. As duas saídas são suas ordens-filhas: uma ordem limite para encerrar a posição no alvo e uma ordem stop ou stop-limit para encerrar a posição no nível de proteção.
A terminologia varia. Bracket, attached order, OCO bracket e OTOCO descrevem essa estrutura. OTOCO, one triggers a one-cancels-the-other, é o nome mais literal para a sequência: a entrada ativa o par, e depois o par se reduz a uma única ordem por meio do cancelamento da outra.
O que significa OCO em uma bracket order?
OCO é um par de ordens pendentes com um vínculo de cancelamento entre elas. As duas permanecem ativas no livro ao mesmo tempo. Quando uma é executada, a outra é retirada. Quando uma é executada parcialmente, a outra é reduzida pela quantidade executada, em vez de ser retirada por completo. Essa redução mantém a posição e sua proteção correspondentes ação por ação.
A sequência completa de uma bracket comprada de 200 ações funciona assim.
- A entrada trabalha sozinha. O alvo e o stop existem dentro do sistema da corretora, mas ainda não são ordens ativas. Portanto, uma negociação acima do preço-alvo enquanto a entrada não foi executada não produz efeito algum.
- A entrada é executada para 200 ações. As duas ordens-filhas ficam ativas, cada uma para 200 ações.
- A negociação atinge o preço do stop. O stop se converte em uma ordem de venda ativa e passa a trabalhar no livro.
- O stop executa 120 ações antes de o mercado se afastar. A ordem limite do alvo é reduzida de 200 para 80 ações, correspondendo ao tamanho restante da posição.
- As 80 ações restantes são executadas posteriormente no alvo, ainda durante a sessão. As 80 ações remanescentes do stop são canceladas, e a bracket é encerrada.
As execuções parciais da entrada são o ponto em que as plataformas mais divergem. Algumas corretoras ativam imediatamente as ordens-filhas na quantidade executada e aumentam esse volume à medida que o restante da entrada é concluído. Outras aguardam a execução integral da entrada, deixando a posição sem proteção nesse intervalo. As regras variam entre corretoras em aspectos que não são meramente cosméticos: se as ordens-filhas são ativadas após uma execução parcial da entrada e se a edição de uma ordem-filha rompe o vínculo de cancelamento da outra.
Qual é a distância entre as duas pernas?
As duas pernas precisam ficar fora do ruído que o ativo costuma apresentar em um dia normal, mas dentro da distância que ele efetivamente consegue percorrer. A amplitude diária é a primeira medida, ainda rudimentar, para essa análise. O painel abaixo analisa seis nomes conhecidos ao longo do último ano: a mediana da amplitude entre a máxima e a mínima, como percentual da abertura, ao lado da mediana do movimento absoluto entre a abertura e o fechamento.
O SQL exato por trás de cada número
SELECT
ticker,
round(quantileDeterministic(0.5)(
(toFloat64(high) - toFloat64(low)) / toFloat64(open) * 100,
toUInt32(date)), 2) AS median_range_pct,
round(quantileDeterministic(0.5)(
abs(toFloat64(close) - toFloat64(open)) / toFloat64(open) * 100,
toUInt32(date)), 2) AS median_open_to_close_pct
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'JNJ')
AND date >= today() - 370
AND date < today() - 2
GROUP BY ticker
ORDER BY median_range_pct DESCNVDA apresenta a maior amplitude típica de sessão entre os seis, em 2.72%, e SPY apresenta a menor, em 0.86%. Observe como a segunda coluna fica abaixo da primeira em todas as linhas. Um ativo típico percorre uma distância consideravelmente maior durante a sessão do que a variação líquida entre a abertura e o fechamento, e as duas pernas da bracket ficam dentro desse percurso. Um alvo e um stop podem ser atingidos no mesmo dia normal.
Com que frequência uma perna da bracket é tocada?
A distância em relação à entrada é o parâmetro que o trader realmente controla. O painel seguinte fixa a análise em três anos específicos de sessões do SPY e pergunta, para um conjunto de distâncias em relação ao preço de abertura, qual parcela das sessões atingiu essa distância para baixo e qual parcela atingiu essa distância para cima em algum momento do dia.
O SQL exato por trás de cada número
SELECT
concat(toString(d.dist), '%') AS distance_from_open,
round(100 * countIf(
(toFloat64(a.open) - toFloat64(a.low)) / toFloat64(a.open) * 100 >= d.dist
) / count(), 1) AS reached_below_pct,
round(100 * countIf(
(toFloat64(a.high) - toFloat64(a.open)) / toFloat64(a.open) * 100 >= d.dist
) / count(), 1) AS reached_above_pct
FROM global_markets.stocks_daily_aggs AS a
CROSS JOIN
(
SELECT arrayJoin([0.25, 0.5, 1.0, 1.5, 2.0, 3.0]) AS dist
) AS d
WHERE a.ticker = 'SPY'
AND a.date >= '2023-08-01'
AND a.date < '2026-08-01'
GROUP BY d.dist
ORDER BY d.distA um quarto de ponto percentual da abertura, 62.3% das sessões negociaram nessa distância para baixo em algum momento, e 64.7% negociaram nessa distância para cima. Ao ampliar a distância para 3%, o percentual para baixo cai para 0.5%. As duas curvas caem juntas. Essa é a principal tensão no dimensionamento de uma bracket. Um stop curto é um stop que pode ser acionado em dias sem nada de excepcional. Um alvo distante é um alvo que, na maioria das vezes, termina a sessão sem execução.
Um stop loss sempre é executado no preço do stop?
Não. Um stop é uma instrução para enviar uma ordem quando um preço de disparo é negociado. Um stop simples envia uma ordem a mercado, e a execução ocorre onde quer que o livro esteja naquele instante. Um stop-limit envia uma ordem limite ao preço definido pelo trader. Ele protege o preço, mas aceita o risco de não haver execução. Esse é o trade-off discutido em ordem stop versus ordem stop-limit.
O gap durante a noite é o caso mais claro. Um stop de proteção permanece pendente durante o período em que a bolsa está fechada, e o primeiro negócio da abertura pode ocorrer muito além do gatilho. Dez exemplos da AAPL ao longo de três anos e meio:
O SQL exato por trás de cada número
SELECT
formatDateTime(session_date, '%b %e, %Y') AS gap_label,
round((day_open / prev_close - 1) * 100, 2) AS overnight_gap_pct
FROM
(
SELECT
session_date,
day_open,
lagInFrame(day_close) OVER (
ORDER BY session_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS prev_close
FROM
(
SELECT
date AS session_date,
toFloat64(any(open)) AS day_open,
toFloat64(any(close)) AS day_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2023-01-01'
AND date < '2026-07-01'
GROUP BY date
)
)
WHERE prev_close > 0
ORDER BY overnight_gap_pct ASC
LIMIT 10O maior deles mediu -9.45% em Aug 5, 2024, e o décimo da lista ainda mediu -2.96%. Um stop de proteção posicionado dentro de qualquer um desses gaps seria convertido no primeiro negócio da abertura, e não no preço de disparo. Dimensionar uma bracket apenas com base na amplitude intradiária deixa essa distância sem modelagem.
Onde o vínculo OCO realmente fica?
Quase nunca na bolsa. O vínculo de cancelamento entre as duas ordens-filhas é mantido no sistema de gerenciamento de ordens da corretora ou, um nível além, em uma plataforma de negociação executada no próprio computador do trader. A bolsa recebe duas ordens comuns e independentes.
Essa localização determina o que continua funcionando durante uma interrupção. Uma bracket mantida na corretora continua ativa quando o notebook é fechado, porque os servidores da corretora mantêm as duas pernas e a lógica de cancelamento. Uma bracket mantida na plataforma, como as implementadas localmente por alguns aplicativos de gráficos, exige que o aplicativo permaneça aberto e conectado. Algumas plataformas mantêm um stop simulado que existe apenas na memória local até que o preço de disparo seja atingido. Se o notebook for fechado, esse stop nunca será enviado.
A mesma pergunta vale para o seu próprio código. Um stop que existe apenas dentro de um processo em execução não deixa nenhuma ordem pendente no livro quando o processo é interrompido. Disjuntores para robôs de negociação aborda esse padrão para sistemas automatizados: suponha que o processo pare no pior momento possível e verifique o que ainda permanece ativo na corretora.
A validade se aplica a cada perna
Cada perna tem sua própria configuração de validade da ordem. Uma entrada válida apenas no dia, combinada com ordens-filhas GTC, é uma configuração comum e problemática: a entrada expira no fechamento, enquanto as ordens-filhas nunca são ativadas. O resultado é uma bracket que permanece inativa na manhã seguinte. A combinação inversa deixa uma proteção que expira às 16h ET em uma posição carregada durante a noite.
Fora do horário regular, o próprio livro muda de características. O painel abaixo agrupa barras de um minuto do SPY pelo horário do relógio em ET ao longo de todo o dia e apresenta duas medidas por intervalo de meia hora: o tamanho médio do movimento de um minuto, em pontos-base (um ponto-base corresponde a um centésimo de um por cento), e o volume mediano negociado em um minuto.
O SQL exato por trás de cada número
SELECT
formatDateTime(
toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE),
'%H:%i') AS et_time,
round(avg(abs(toFloat64(close) - toFloat64(open)) / toFloat64(open) * 10000), 1) AS avg_move_bps,
round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(window_start)), 0) AS median_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 120
AND window_start < today() - 2
GROUP BY et_time
ORDER BY et_timeO painel apresenta 32 intervalos de meia hora, de 04:00 a 19:30 ET. Leia-o da esquerda para a direita para entender o formato. As duas séries permanecem próximas do piso durante o pré-mercado, sobem acentuadamente na abertura das 9h30 e recuam novamente depois das 16h. Um stop GTC mantido às 5h fica na parte de baixa liquidez dessa curva, e uma execução de stop-market em um livro tão pouco líquido pode ocorrer muito longe do gatilho.
Perguntas frequentes
Qual é a diferença entre uma bracket order e uma ordem OCO?
O OCO é o próprio par: duas ordens pendentes com um vínculo de cancelamento, em que a execução de uma remove a outra. A bracket é uma ordem de entrada com um par OCO anexado. O par só fica ativo depois que a entrada é executada. Toda bracket contém um OCO. Muitos pares OCO são usados de forma independente.
Uma bracket order continua funcionando se meu computador estiver desligado?
Depende de onde o vínculo está mantido. Uma bracket mantida na corretora fica nos servidores da corretora e continua funcionando com a plataforma fechada. Uma bracket mantida na plataforma ou uma bracket simulada exige que o aplicativo esteja aberto e conectado. Sem isso, as ordens-filhas podem nunca chegar ao mercado.
O que acontece com o stop se o alvo de lucro for parcialmente executado?
O stop é reduzido pela quantidade executada, em vez de ser cancelado. Se um alvo de 200 ações executar 60 ações, o stop passa a ter 140 ações, correspondendo à posição ainda aberta. O cancelamento ocorre apenas quando a última ação da posição é encerrada.
Posso usar uma bracket order no pré-mercado ou no after-hours?
O comportamento varia entre as corretoras, e muitas encaminham as ordens-filhas da bracket apenas durante o horário regular. As ordens stop, em particular, costumam ser rejeitadas ou mantidas fora do intervalo das 9h30 às 16h ET nas ações dos EUA. A configuração de validade de cada perna determina se ela pode participar da sessão estendida.
As bolsas sabem que minhas duas ordens estão vinculadas?
Não. No mercado de ações dos EUA, o vínculo de cancelamento é mantido pela corretora ou pela plataforma, e a bolsa recebe duas ordens independentes. A mensagem de cancelamento da perna que permanece ativa é enviada pelo sistema que mantém o vínculo, depois que a outra perna informa sua execução.
Todos os painéis deste artigo vêm acompanhados do SQL exato usado em sua construção. Para medir a amplitude e o risco de gap de um ativo que você acompanha, formule a pergunta em inglês simples no terminal Strasmore.