Strasmore Research
Edukacja Matt ConnorAutor: Matt Connor · data as of August 15, 2026 · refreshed weekly

Zlecenie typu bracket i OCO: jak działają w praktyce

Wyjaśniamy mechanizm działania zleceń typu bracket oraz OCO. Analizujemy powiązania między limitem zysku a zleceniem stop oraz sposób obsługi częściowej realizacji pozycji.

Zlecenie typu bracket to instrukcja obejmująca trzy powiązane ze sobą zlecenia: zlecenie wejścia oraz parę powiązanych zleceń wyjścia. Para ta stanowi zlecenie OCO (ang. one cancels the other – jedno anuluje drugie). Limit realizacji zysku znajduje się powyżej ceny wejścia, a zlecenie obronne stop poniżej niej; realizacja którejkolwiek z tych nóg powoduje automatyczne anulowanie drugiej. Bracket jest w istocie prostym automatem stanów, a większość nieprzewidzianych sytuacji wynika z momentów przejścia między tymi stanami.

Czym jest zlecenie typu bracket?

Wyobraźmy sobie tradera, który chce kupić 200 akcji w pobliżu ceny 50 USD, zamknąć pozycję w okolicach 53 USD, jeśli transakcja będzie zyskowna, lub wyjść przy 48,50 USD, jeśli nie będzie. W formie oddzielnych zleceń wymagałoby to trzech operacji i ręcznego zarządzania: anulowania zlecenia stop w momencie realizacji zlecenia docelowego, w przeciwnym razie istnieje ryzyko sprzedaży 200 akcji dwukrotnie. Bracket łączy te same intencje w jednym zgłoszeniu. Wejście jest standardowym zleceniem rynkowym lub zleceniem z limitem ceny. Dwa wyjścia są jego „dziećmi”: zlecenie z limitem ceny w celu zamknięcia na poziomie docelowym oraz zlecenie stop lub stop z limitem ceny w celu zamknięcia na poziomie obronnym.

Terminologia bywa różna. Bracket, zlecenie powiązane, bracket OCO oraz OTOCO opisują tę samą strukturę. OTOCO (ang. one triggers a one-cancels-the-other – jedno aktywuje parę, w której jedno anuluje drugie) to najbardziej precyzyjna nazwa dla tej sekwencji: wejście aktywuje parę, a następnie para sama się redukuje do jednego zlecenia.

Co oznacza OCO w zleceniu typu bracket?

OCO to dwa oczekujące zlecenia z powiązaniem typu „anuluj”. Oba znajdują się jednocześnie w arkuszu zleceń. Gdy jedno zostanie zrealizowane, drugie zostaje wycofane. Gdy jedno zostanie zrealizowane częściowo, drugie zostaje zredukowane o zrealizowaną ilość zamiast całkowitego wycofania; ta redukcja pozwala utrzymać zgodność pozycji i jej zabezpieczenia co do jednej akcji.

Pełna sekwencja dla bracketu na 200 akcji wygląda następująco:

  1. Zlecenie wejścia oczekuje samodzielnie. Zlecenie docelowe i stop znajdują się w systemie brokera, ale nie są aktywne, więc transakcja po cenie docelowej, gdy wejście nie zostało jeszcze zrealizowane, nie wywołuje żadnego efektu.
  2. Zlecenie wejścia zostaje zrealizowane dla 200 akcji. Oba zlecenia podrzędne stają się aktywne, każde na 200 akcji.
  3. Kurs osiąga poziom zlecenia stop. Stop zamienia się w aktywne zlecenie sprzedaży i trafia do arkusza.
  4. Zlecenie stop realizuje 120 akcji, zanim rynek zmieni kierunek. Limit docelowy zostaje zredukowany z 200 do 80, co odpowiada pozostałej wielkości pozycji.
  5. Ostatnie 80 akcji zostaje zrealizowanych po cenie docelowej w dalszej części sesji. Pozostałe 80 akcji zlecenia stop zostaje anulowane, a bracket zamknięty.

Realizacje częściowe zlecenia wejścia to obszar, w którym platformy różnią się najbardziej. Niektórzy brokerzy aktywują zlecenia podrzędne dla zrealizowanej ilości natychmiast i zwiększają je w miarę realizacji reszty wejścia. Inni czekają na pełną realizację wejścia, co pozostawia pozycję niezabezpieczoną w międzyczasie. Różnice w semantyce u brokerów nie są kosmetyczne: dotyczą tego, czy zlecenia podrzędne aktywują się przy częściowej realizacji wejścia oraz czy edycja jednego zlecenia podrzędnego nie przerywa powiązania z drugim.

W jakiej odległości od siebie znajdują się obie nogi?

Obie nogi muszą znajdować się poza zakresem szumu rynkowego dla danego instrumentu w typowy dzień, ale wewnątrz zasięgu, jaki może on faktycznie pokonać. Dzienny zakres jest pierwszym, przybliżonym miernikiem. Poniższy panel przedstawia sześć znanych spółek w ciągu ostatniego roku: medianę zakresu od maksimum do minimum jako procent ceny otwarcia oraz medianę bezwzględnego ruchu od otwarcia do zamknięcia.

ZapytanieTypowy dzienny zakres i zmiana od otwarcia do zamknięcia, ostatni rok
Dokładny kod SQL dla każdej liczby
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 charakteryzuje się najszerszą typową sesją spośród sześciu wymienionych, wynoszącą 2.72%, a SPY najwęższą, wynoszącą 0.86%. Należy zwrócić uwagę, jak daleko druga kolumna znajduje się poniżej pierwszej w każdym wierszu. Typowy instrument pokonuje w trakcie sesji znacznie większy dystans, niż wynosi różnica między otwarciem a zamknięciem, a obie nogi bracketu mieszczą się w tym zakresie. Zarówno poziom docelowy, jak i stop mogą zostać osiągnięte podczas tej samej, zwyczajnej sesji.

Jak często noga bracketu jest aktywowana?

Odległość od ceny wejścia to parametr, który trader faktycznie kontroluje. Kolejny panel odnosi to pytanie do trzech pełnych lat sesji SPY i sprawdza, dla określonych odległości od ceny otwarcia, jaki odsetek sesji osiągnął dany poziom w dół i w górę w pewnym momencie dnia.

ZapytanieUdział sesji SPY osiągających określoną odległość od otwarcia (sierpień 2023 – lipiec 2026)
Dokładny kod SQL dla każdej liczby
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

W odległości jednej czwartej procenta od otwarcia, 62.3% sesji osiągnęło ten poziom w dół w pewnym momencie, a 64.7% osiągnęło go w górę. Zwiększenie odległości do 3% powoduje spadek wartości dla strony spadkowej do 0.5%. Obie krzywe opadają jednocześnie, co stanowi istotę problemu przy ustalaniu wielkości bracketu. Zbyt ciasny stop to taki, który zostanie aktywowany w mało istotne dni. Zbyt odległy cel to taki, który najczęściej wygasa niezrealizowany.

Czy zlecenie stop loss zawsze realizuje się po cenie stop?

Nie. Stop to instrukcja wysłania zlecenia po osiągnięciu ceny wyzwalającej. Zwykły stop wysyła zlecenie rynkowe, a realizacja następuje po cenie dostępnej w arkuszu w danej chwili. Stop z limitem ceny wysyła zlecenie z limitem po ustalonej cenie, co chroni cenę, ale wiąże się z ryzykiem braku realizacji. Ten kompromis jest przedmiotem zlecenia stop kontra zlecenie stop z limitem ceny.

Luka otwarcia jest najbardziej wyrazistym przykładem. Zlecenie obronne stop oczekuje przez godziny, gdy giełda jest zamknięta, a cena otwarcia może znacznie odbiegać od ceny wyzwalającej. Dziesięć przykładów z AAPL na przestrzeni trzech i pół roku:

ZapytanieDziesięć największych luk spadkowych AAPL na otwarciu, styczeń 2023 – czerwiec 2026
Dokładny kod SQL dla każdej liczby
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

Największa z nich wyniosła -9.45% w dniu Aug 5, 2024, a dziesiąta na liście nadal wynosiła -2.96%. Zlecenie obronne stop oczekujące wewnątrz tych luk zostało zrealizowane po cenie otwarcia, a nie po cenie wyzwalającej. Ustalanie bracketu wyłącznie na podstawie zakresu wewnątrzsesyjnego pozostawia to ryzyko nieuwzględnionym.

Gdzie faktycznie znajduje się powiązanie OCO?

Prawie nigdy na giełdzie. Powiązanie typu „anuluj” między dwoma zleceniami podrzędnymi znajduje się w systemie zarządzania zleceniami brokera lub warstwę wyżej, w platformie transakcyjnej działającej na komputerze użytkownika. Giełda widzi dwa zwykłe, niezależne zlecenia.

To umiejscowienie decyduje o tym, co przetrwa awarię. Bracket po stronie brokera działa nadal po zamknięciu laptopa, ponieważ serwery brokera przechowują obie nogi i logikę anulowania. Bracket po stronie platformy, implementowany lokalnie przez niektóre aplikacje do wykresów, wymaga uruchomionej i połączonej aplikacji. Niektóre platformy przechowują symulowany stop, który istnieje tylko w pamięci lokalnej do momentu osiągnięcia ceny wyzwalającej. Zamknięcie laptopa powoduje, że zlecenie stop nie zostanie wysłane.

To samo pytanie dotyczy własnego kodu. Stop, który istnieje tylko wewnątrz działającego procesu, nie pozostawia nic w arkuszu zleceń po zatrzymaniu procesu. Wyłączniki bezpieczeństwa dla botów transakcyjnych opisują wzorzec dla systemów zautomatyzowanych: należy założyć, że proces zostanie przerwany w najgorszym możliwym momencie, a następnie sprawdzić, co pozostaje aktywne u brokera.

Czas ważności dotyczy każdej nogi

Każda noga posiada własne ustawienie czasu ważności. Wejście typu „dzień” (day) w parze ze zleceniami podrzędnymi GTC (ważne do odwołania) to częsta i kłopotliwa kombinacja: wejście wygasa na koniec sesji, podczas gdy zlecenia podrzędne nigdy się nie aktywują, pozostawiając bracket, który następnego ranka nie podejmuje żadnych działań. Odwrotne połączenie pozostawia zabezpieczenie, które wygasa o 16:00 czasu ET dla pozycji utrzymywanej przez noc.

Poza regularnymi godzinami handlu arkusz zleceń zmienia swój charakter. Poniższy panel grupuje wykresy minutowe SPY według czasu ET w ciągu całego dnia i odczytuje dwie wartości na każde pół godziny: średnią wielkość ruchu w ciągu minuty w punktach bazowych (jeden punkt bazowy to jedna setna procenta) oraz medianę wolumenu w ciągu minuty.

ZapytanieWewnątrzdzienne zmiany cen i wolumen SPY według czasu ET
Dokładny kod SQL dla każdej liczby
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

Panel zwraca 32 półgodzinnych przedziałów, od 04:00 do 19:30 czasu ET. Analiza od lewej do prawej pokazuje charakterystykę rynku. Obie serie utrzymują się blisko swoich minimów w godzinach przedsesyjnych, gwałtownie rosną przed otwarciem o 09:30 i spadają po 16:00. Zlecenie stop typu GTC oczekujące o 5 rano znajduje się w najmniej płynnej części tej krzywej, a realizacja zlecenia stop-market w tak płytkim arkuszu może nastąpić w dużej odległości od ceny wyzwalającej.

FAQ

Jaka jest różnica między zleceniem typu bracket a zleceniem OCO?

OCO to sama para: dwa oczekujące zlecenia z powiązaniem, gdzie realizacja jednego usuwa drugie. Bracket to zlecenie wejścia z dołączoną parą OCO, przy czym para ta staje się aktywna dopiero po realizacji wejścia. Każdy bracket zawiera OCO. Wiele par OCO jest używanych samodzielnie.

Czy zlecenie typu bracket działa, jeśli mój komputer jest wyłączony?

Zależy to od miejsca, w którym znajduje się powiązanie. Bracket po stronie brokera spoczywa na serwerach brokera i działa przy zamkniętej platformie. Bracket po stronie platformy lub symulowany wymaga uruchomionej i połączonej aplikacji, bez której zlecenia podrzędne mogą nigdy nie dotrzeć na rynek.

Co dzieje się ze zleceniem stop, jeśli cel zysku zostanie zrealizowany częściowo?

Zlecenie stop zostaje zredukowane o zrealizowaną ilość, zamiast zostać anulowane. Jeśli cel dla 200 akcji zostanie zrealizowany w 60 akcjach, stop spada do 140 akcji, odpowiadając otwartej pozycji. Anulowanie następuje dopiero po zamknięciu ostatniej części pozycji.

Czy mogę użyć zlecenia typu bracket w handlu przedsesyjnym lub pozasesyjnym?

Zachowanie zależy od brokera; wielu z nich kieruje zlecenia podrzędne bracketu tylko w regularnych godzinach handlu. W szczególności zlecenia stop są często odrzucane lub wstrzymywane poza godzinami 9:30–16:00 czasu ET dla akcji w USA. Ustawienie czasu ważności dla każdej nogi decyduje o tym, czy dana noga kwalifikuje się do sesji rozszerzonej.

Czy giełdy wiedzą, że moje dwa zlecenia są powiązane?

Nie. W przypadku akcji w USA powiązanie typu „anuluj” jest utrzymywane przez brokera lub platformę, a giełda otrzymuje dwa niezależne zlecenia. Komunikat o anulowaniu dla pozostałej nogi jest wysyłany przez system, który przechowuje powiązanie, po tym jak druga noga zgłosi swoją realizację.


Każdy panel tutaj zawiera dokładne zapytanie SQL, na którym bazuje. Aby zmierzyć zakres i ryzyko luki dla instrumentu, który obserwujesz, zadaj pytanie w prostym języku na terminalu Strasmore.

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