Strasmore Research
Educación Matt ConnorPor Matt Connor · data as of August 15, 2026 · refreshed weekly

Bracket orders y OCO: explicación clara

Qué es una bracket order, cómo se vinculan el objetivo de ganancia y el stop de protección como OCO, qué ocurre con un llenado parcial y dónde opera esa relación.

Una bracket order es una sola instrucción que envía tres órdenes con una relación fija: una entrada y un par de salidas vinculadas, colocadas a ambos lados de ella. El par es la OCO, abreviatura de one cancels the other. Una orden limit de toma de ganancias se coloca por encima del precio de entrada y un stop de protección por debajo. La ejecución de cualquiera de las dos cancela automáticamente la otra. En realidad, una bracket order funciona como una pequeña máquina de estados. La mayoría de las sorpresas ocurren en los momentos entre un estado y otro.

¿Qué es una bracket order?

Imagina a un operador que quiere comprar 200 acciones cerca de $50, cerrar la posición cerca de $53 si la operación resulta favorable y salir cerca de $48.50 si no lo hace. Como órdenes separadas, son tres instrucciones y una tarea manual: cancelar el stop en cuanto se ejecuta el objetivo, o arriesgarse a vender 200 acciones dos veces. Una bracket order agrupa la misma intención en una sola instrucción. La entrada es una orden de mercado o una orden limit. Las dos salidas son sus órdenes hijas: una limit para cerrar en el objetivo y una orden stop o stop limit para cerrar en el nivel de protección.

La terminología varía. Bracket, attached order, OCO bracket y OTOCO describen esta estructura. OTOCO, one triggers a one-cancels-the-other, es el nombre más literal para la secuencia: la entrada activa el par y luego el par se reduce a una sola orden mediante la cancelación de la otra.

¿Qué significa OCO en una bracket order?

Una OCO son dos órdenes pendientes con un vínculo de cancelación entre ellas. Ambas permanecen activas en el libro al mismo tiempo. Cuando una se ejecuta, la otra se retira. Si una se ejecuta parcialmente, la otra se reduce en la cantidad ejecutada en lugar de retirarse por completo. Esa reducción mantiene la posición y su protección emparejadas acción por acción.

La secuencia completa para una bracket order larga de 200 acciones es la siguiente.

  1. La entrada trabaja sola. El objetivo y el stop existen dentro del sistema del broker, pero no son órdenes activas. Por eso, un print que atraviese el precio objetivo mientras la entrada no se ha ejecutado no produce ningún efecto.
  2. La entrada se ejecuta por 200 acciones. Ambas órdenes hijas pasan a estar activas, cada una por 200 acciones.
  3. El mercado alcanza el precio del stop. El stop se convierte en una orden de venta activa y empieza a ejecutarse contra el libro.
  4. El stop ejecuta 120 acciones antes de que el mercado se aleje. La orden limit del objetivo se reduce de 200 a 80 acciones, en línea con la posición restante.
  5. Las últimas 80 acciones se ejecutan posteriormente en el objetivo durante la sesión. Las 80 acciones restantes del stop se cancelan y la bracket order queda cerrada.

Las ejecuciones parciales de la entrada son el punto donde más difieren las plataformas. Algunos brokers activan de inmediato las órdenes hijas por la cantidad ejecutada y las amplían a medida que se completa el resto de la entrada. Otros esperan a que la entrada se ejecute por completo. Eso deja la posición sin protección durante ese intervalo. La semántica varía según el broker en aspectos que no son meramente cosméticos: si las órdenes hijas se activan con una ejecución parcial de la entrada y si editar una de ellas rompe el vínculo de cancelación con la otra.

¿Qué distancia debe haber entre las dos salidas?

Ambas salidas deben quedar fuera del ruido que un valor muestra en un día normal y dentro de la distancia que realmente puede recorrer. El rango diario es la primera medida aproximada. El panel siguiente muestra seis nombres conocidos durante el último año: la mediana del rango entre máximo y mínimo como porcentaje de la apertura, junto con la mediana del movimiento absoluto entre la apertura y el cierre.

ConsultaRango diario típico y movimiento de apertura a cierre, último año
El SQL exacto detrás de cada cifra
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 DESC
Run this yourself

NVDA registra la sesión típica más amplia de los seis, con 2.72%, y SPY la más estrecha, con 0.86%. Observa cuánto menor es la segunda columna que la primera en todas las filas. Un valor típico recorre una distancia considerablemente mayor durante la sesión que la que acumula entre la apertura y el cierre. Ambas salidas de la bracket order quedan dentro de ese recorrido. Tanto el objetivo como el stop pueden alcanzarse en el mismo día normal.

¿Con qué frecuencia se toca una de las salidas de una bracket order?

La distancia desde la entrada es el parámetro que el operador realmente controla. El panel siguiente centra la pregunta en tres años completos de sesiones de SPY. Para varias distancias desde el precio de apertura, muestra qué proporción de sesiones alcanzó esa distancia a la baja y qué proporción la alcanzó al alza en algún momento del día.

ConsultaPorcentaje de sesiones de SPY que alcanzan una distancia dada desde la apertura (ago 2023 a jul 2026)
El SQL exacto detrás de cada cifra
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.dist
Run this yourself

A un cuarto de punto porcentual de la apertura, 62.3% de las sesiones cotizó al menos esa distancia a la baja y 64.7% lo hizo al alza. Al ampliar la distancia a 3%, la cifra de movimientos a la baja cae a 0.5%. Ambas curvas descienden juntas. Esa es la tensión central al definir el tamaño de una bracket order. Un stop ajustado es un stop que se ejecuta en días sin nada extraordinario. Un objetivo distante es un objetivo que, en la mayoría de los casos, termina la sesión sin ejecutarse.

¿Un stop loss siempre se ejecuta al precio del stop?

No. Un stop es una instrucción para enviar una orden cuando se registra un precio de activación. Un stop simple envía una orden de mercado y la ejecución se produce al precio que esté disponible en el libro en ese momento. Un stop limit envía una orden limit al precio que estableces. Protege el precio, pero acepta el riesgo de que la orden no se ejecute. Este intercambio es el tema de orden stop frente a orden stop limit.

El gap overnight es el caso más claro. Un stop de protección permanece activo durante las horas en que el mercado está cerrado y el print de apertura puede quedar muy lejos del nivel de activación. Estos son diez ejemplos de AAPL durante tres años y medio:

ConsultaLas diez mayores brechas nocturnas a la baja de AAPL, ene 2023 a jun 2026
El SQL exacto detrás de cada cifra
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 10
Run this yourself

El mayor midió -9.45% el Aug 5, 2024, y el décimo de la lista todavía midió -2.96%. Un stop de protección colocado dentro de cualquiera de esos gaps se convirtió en una orden ejecutable al print de apertura, no al precio de activación. Definir el tamaño de una bracket order solo a partir del rango intradía deja esa distancia sin modelar.

¿Dónde reside realmente el vínculo OCO?

Casi nunca en la bolsa. El vínculo de cancelación entre las dos órdenes hijas se mantiene en el sistema de gestión de órdenes del broker o, un nivel más allá, en una plataforma de trading que se ejecuta en tu propio equipo. La bolsa ve dos órdenes ordinarias e independientes.

Esa ubicación determina qué ocurre durante una interrupción. Una bracket order gestionada por el broker sigue funcionando aunque se cierre la laptop, porque los servidores del broker mantienen ambas salidas y la lógica de cancelación. Una bracket order gestionada por la plataforma, como las que algunas aplicaciones de gráficos implementan de forma local, requiere que la aplicación siga abierta y conectada. Algunas plataformas mantienen un stop simulado que existe solo en la memoria local hasta que se registra el precio de activación. Si cierras la laptop, ese stop nunca se envía.

La misma pregunta se aplica a tu propio código. Un stop que existe únicamente dentro de un proceso en ejecución deja de estar colocado en el libro cuando el proceso se detiene. Interruptores automáticos para bots de trading explica el patrón para los sistemas automatizados: asume que el proceso se detendrá en el peor momento posible y luego pregunta qué órdenes siguen activas en el broker.

El time in force se aplica a cada salida

Cada salida tiene su propia configuración de time in force. Una entrada válida por el día combinada con órdenes hijas GTC es una configuración común y problemática: la entrada vence al cierre, mientras que las órdenes hijas nunca se activan. El resultado es una bracket order que no hace nada discretamente a la mañana siguiente. La combinación inversa deja una protección que vence a las 4:00 p. m. ET sobre una posición mantenida overnight.

Fuera del horario regular, el propio libro cambia de características. El panel siguiente agrupa las barras de un minuto de SPY por hora ET durante todo el día y muestra dos datos por cada media hora: el tamaño promedio de un movimiento de un minuto, en puntos básicos —un punto básico es una centésima de punto porcentual—, y el volumen mediano negociado en un minuto.

ConsultaMovimiento y volumen de SPY por hora del día ET
El SQL exacto detrás de cada cifra
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_time
Run this yourself

El panel presenta 32 intervalos de media hora, desde 04:00 hasta 19:30 ET. Léelo de izquierda a derecha y la forma muestra la conclusión. Ambas series se mantienen cerca de sus mínimos durante el premarket, suben con fuerza hacia la apertura de las 09:30 y vuelven a caer después de las 16:00. Un stop GTC colocado a las 5 a. m. permanece en la parte de menor liquidez de esa curva. Una ejecución stop-market en un libro tan poco líquido puede quedar muy lejos del precio de activación.

Preguntas frecuentes

¿Cuál es la diferencia entre una bracket order y una orden OCO?

Una OCO es el par en sí: dos órdenes pendientes con un vínculo de cancelación, donde la ejecución de una elimina la otra. Una bracket order es una orden de entrada con un par OCO vinculado. El par solo se activa cuando se ejecuta la entrada. Toda bracket order contiene una OCO. Muchos pares OCO se utilizan de forma independiente.

¿Una bracket order sigue funcionando si mi computadora está apagada?

Depende de dónde se encuentre el vínculo. Una bracket order gestionada por el broker permanece en los servidores del broker y sigue funcionando aunque la plataforma esté cerrada. Una bracket order gestionada por la plataforma o simulada requiere que la aplicación esté abierta y conectada. Sin ella, las órdenes hijas podrían no llegar nunca al mercado.

¿Qué ocurre con el stop si el objetivo de ganancias se ejecuta parcialmente?

El stop se reduce en la cantidad ejecutada, en lugar de cancelarse. Si un objetivo de 200 acciones ejecuta 60, el stop se reduce a 140 acciones, en línea con la posición que sigue abierta. La cancelación solo se activa cuando se cierra la última parte de la posición.

¿Puedo utilizar una bracket order en el premarket o fuera del horario regular?

El comportamiento varía según el broker y muchos brokers solo envían las órdenes hijas durante el horario regular. En particular, las órdenes stop suelen rechazarse o mantenerse pendientes fuera del horario de 9:30 a. m. a 4:00 p. m. ET para acciones estadounidenses. La configuración de time in force de cada salida determina si esa salida puede operar durante la sesión extendida.

¿Las bolsas saben que mis dos órdenes están vinculadas?

No. En las acciones estadounidenses, el vínculo de cancelación lo mantiene el broker o la plataforma, y la bolsa recibe dos órdenes independientes. El sistema que mantiene el vínculo envía el mensaje de cancelación de la salida restante después de que la otra informa su ejecución.


Cada panel incluye el SQL exacto que lo sustenta. Para medir el rango y el riesgo de gap de un valor que sigues, formula la pregunta en inglés sencillo en la terminal de Strasmore.

#order types#oco#bracket orders#stop orders#execution