Cara Kerja Bracket Order dan OCO Order dalam Trading
Pelajari mekanisme bracket order serta hubungan profit target dan protective stop sebagai OCO. Pahami proses eksekusi parsial dan cara kerja sistem ini dalam mengelola risiko.
Bracket order adalah satu instruksi yang mengirimkan tiga order dalam hubungan tetap: satu entry, ditambah sepasang exit terkait yang berada di kedua sisi entry tersebut. Pasangan ini adalah OCO, singkatan dari one cancels the other. Limit profit-target berada di atas harga entry dan stop protektif berada di bawahnya, dan eksekusi pada salah satu sisi akan membatalkan sisi lainnya secara otomatis. Bracket sebenarnya adalah mesin status (state machine) kecil, dan sebagian besar kejutan terjadi pada saat-saat di antara status-status tersebut.
Apa itu bracket order?
Bayangkan seorang trader yang ingin membeli 200 saham di dekat harga $50, menutup posisi di dekat $53 jika berhasil, dan keluar di dekat $48,50 jika tidak. Jika ditulis sebagai tiket terpisah, itu adalah tiga order dan tugas manual: membatalkan stop saat target terpenuhi, atau berisiko menjual 200 saham dua kali. Bracket mengemas maksud yang sama dalam satu pengajuan. Entry-nya adalah market order atau limit order biasa. Dua exit-nya adalah turunannya: limit untuk menutup di target, dan stop atau stop limit order untuk menutup di level protektif.
Kosakatanya bervariasi. Bracket, attached order, OCO bracket, dan OTOCO semuanya menggambarkan bentuk ini. OTOCO, one triggers a one-cancels-the-other, adalah nama yang paling literal untuk urutan tersebut: entry mengaktifkan pasangan tersebut, kemudian pasangan tersebut membatalkan dirinya sendiri menjadi satu.
Apa arti OCO dalam bracket order?
OCO adalah dua order yang menunggu (resting orders) dengan tautan pembatalan di antara keduanya. Keduanya aktif di dalam buku order pada saat yang bersamaan. Ketika satu terpenuhi, yang lain ditarik. Ketika satu terpenuhi sebagian, yang lain dikurangi sebesar jumlah yang terpenuhi alih-alih ditarik sepenuhnya, dan pengurangan itulah yang menjaga posisi dan proteksinya tetap seimbang per lembar saham.
Urutan lengkap untuk bracket posisi long 200 saham berjalan seperti ini.
- Entry bekerja sendiri. Target dan stop ada di dalam sistem broker tetapi bukan order yang aktif, jadi print melalui harga target saat entry belum terpenuhi tidak akan melakukan apa pun.
- Entry terpenuhi untuk 200 saham. Kedua anak order menjadi aktif, masing-masing untuk 200 saham.
- Perdagangan mencapai harga stop. Stop berubah menjadi order jual aktif dan masuk ke dalam buku.
- Stop terpenuhi 120 saham sebelum pasar bergerak menjauh. Limit target dikurangi dari 200 menjadi 80, menyesuaikan dengan posisi yang tersisa.
- 80 saham terakhir tersebut terpenuhi di target di sesi berikutnya. Sisa 80 saham pada stop dibatalkan dan bracket ditutup.
Eksekusi sebagian (partial fills) pada entry adalah tempat platform paling berbeda. Beberapa broker langsung mengaktifkan anak order untuk jumlah yang terpenuhi dan menambahkannya saat sisa entry selesai. Yang lain menunggu entry terpenuhi sepenuhnya, yang membuat posisi tidak terlindungi di interval tersebut. Semantik berbeda antar broker dalam cara yang bukan sekadar kosmetik: apakah anak order aktif pada partial entry fill, dan apakah mengedit satu anak order memutus tautan pembatalan pada yang lain.
Seberapa jauh jarak kedua sisi?
Kedua sisi harus berada di luar kebisingan yang dibuat suatu instrumen pada hari biasa dan di dalam jarak yang sebenarnya dapat ditempuh. Rentang harian (daily range) adalah ukuran kasar pertama untuk itu. Panel di bawah ini membaca enam nama populer selama setahun terakhir: rentang median tertinggi-ke-terendah sebagai persentase dari harga pembukaan, di samping pergerakan absolut median dari pembukaan ke penutupan.
SQL tepat di balik setiap angka
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 memiliki sesi tipikal terlebar dari keenamnya sebesar 2.72%, dan SPY yang tersempit sebesar 0.86%. Perhatikan seberapa jauh kolom kedua berada di bawah kolom pertama di setiap baris. Nama tipikal bergerak jauh lebih jauh selama satu sesi daripada hasil bersih dari pembukaan ke penutupan, dan kedua sisi bracket berada di dalam pergerakan tersebut. Target dan stop masing-masing bisa dicapai pada hari biasa yang sama.
Seberapa sering sisi bracket tersentuh?
Jarak dari entry adalah tombol yang sebenarnya dikendalikan oleh trader. Panel berikutnya mengaitkan pertanyaan tersebut dengan tiga tahun sesi SPY tetap dan menanyakan, untuk serangkaian jarak dari print pembukaan, berapa bagian sesi yang mencapai sejauh itu ke bawah dan berapa bagian yang mencapai sejauh itu ke atas pada titik tertentu di hari tersebut.
SQL tepat di balik setiap angka
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.distPada seperempat persen dari pembukaan, 62.3% sesi diperdagangkan sejauh itu ke bawah pada titik tertentu dan 64.7% diperdagangkan sejauh itu ke atas. Perlebar jarak ke 3% dan angka sisi bawah turun menjadi 0.5%. Kedua kurva meluruh bersamaan, yang merupakan seluruh ketegangan dalam penentuan ukuran bracket. Stop yang ketat adalah stop yang terkena pada hari-hari yang tidak luar biasa. Target yang jauh adalah target yang sebagian besar kedaluwarsa tanpa terpenuhi.
Apakah stop loss selalu terpenuhi pada harga stop?
Tidak. Stop adalah instruksi untuk mengirim order setelah harga pemicu (trigger price) tercetak. Stop biasa mengirimkan market order, dan eksekusi mendarat di mana pun buku order berada pada saat itu. Stop limit mengirimkan limit order pada harga yang Anda tetapkan, yang mempertahankan harga dan menerima risiko tidak ada eksekusi sama sekali. Trade-off tersebut adalah subjek dari stop order versus stop limit order.
Celah semalam (overnight gap) adalah kasus yang paling jelas. Stop protektif berada selama berjam-jam ketika bursa tutup, dan print pembukaan bisa mendarat jauh melewati pemicu. Sepuluh contoh dari AAPL selama tiga setengah tahun:
SQL tepat di balik setiap angka
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 10Yang terbesar di antaranya mengukur -9.45% pada Aug 5, 2024, dan yang kesepuluh dalam daftar masih mengukur -2.96%. Stop protektif yang berada di mana pun di dalam celah tersebut dikonversi pada print pembukaan, bukan pada harga pemicunya. Menentukan ukuran bracket dari rentang intraday saja membuat jarak tersebut tidak dimodelkan.
Di mana tautan OCO sebenarnya berada?
Hampir tidak pernah di bursa. Tautan pembatalan antara dua anak order disimpan di sistem manajemen order broker, atau satu lapisan lebih jauh di platform perdagangan yang berjalan di mesin Anda sendiri. Bursa melihat dua order biasa yang tidak terkait.
Penempatan itu menentukan apa yang bertahan dari pemadaman. Bracket sisi broker tetap bekerja saat laptop ditutup, karena server broker menyimpan kedua sisi dan logika pembatalan. Bracket sisi platform, jenis yang diimplementasikan secara lokal oleh beberapa aplikasi charting, memerlukan aplikasi yang berjalan dan terhubung. Beberapa platform menyimpan stop simulasi yang hanya ada di memori lokal sampai harga pemicu tercetak. Tutup laptop dan stop itu tidak pernah dikirim.
Pertanyaan yang sama berlaku untuk kode Anda sendiri. Stop yang hanya hidup di dalam proses yang berjalan tidak meninggalkan apa pun di buku order setelah proses berhenti. Circuit breakers for trading bots mencakup pola untuk sistem otomatis: asumsikan proses mati pada saat yang paling tidak tepat, lalu tanyakan apa yang masih bekerja di broker.
Time in force berlaku untuk setiap sisi
Setiap sisi membawa pengaturan time in force-nya sendiri. Entry harian yang dipasangkan dengan anak order GTC adalah kombinasi yang umum dan canggung: entry kedaluwarsa saat penutupan sementara anak order tidak pernah aktif, meninggalkan bracket yang diam saja di pagi berikutnya. Pasangan sebaliknya meninggalkan proteksi yang kedaluwarsa pada pukul 16:00 ET pada posisi yang dibawa semalam.
Di luar jam reguler, buku order itu sendiri berubah karakter. Panel di bawah ini mengelompokkan bar menit SPY berdasarkan waktu jam ET sepanjang hari dan membaca dua hal per setengah jam: ukuran rata-rata pergerakan satu menit, dalam basis poin (satu basis poin adalah seperseratus persen), dan volume median yang tercetak dalam satu menit.
SQL tepat di balik setiap angka
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_timePanel mengembalikan 32 bucket setengah jam, dari 04:00 hingga 19:30 ET. Baca dari kiri ke kanan dan bentuknya memberikan pelajaran. Kedua seri berada di dekat lantai mereka selama jam premarket, naik tajam ke pembukaan 09:30, dan jatuh lagi setelah 16:00. Stop GTC yang berada pada pukul 5 pagi berada di bagian tipis dari kurva itu, dan eksekusi stop-market di buku yang setipis itu bisa mendarat jauh dari pemicunya.
FAQ
Apa perbedaan antara bracket order dan OCO order?
OCO adalah pasangan itu sendiri: dua order yang menunggu dengan tautan pembatalan, di mana eksekusi pada satu order menghapus yang lain. Bracket adalah order entry dengan pasangan OCO terlampir, dan pasangan tersebut hanya aktif setelah entry terpenuhi. Setiap bracket berisi OCO. Banyak pasangan OCO digunakan sendiri.
Apakah bracket order tetap berfungsi jika komputer saya mati?
Itu tergantung di mana tautan tersebut berada. Bracket sisi broker berada di server broker dan tetap bekerja dengan platform tertutup. Bracket sisi platform atau simulasi memerlukan aplikasi yang berjalan dan terhubung, dan anak order mungkin tidak pernah mencapai pasar tanpanya.
Apa yang terjadi pada stop jika profit target terpenuhi sebagian?
Stop dikurangi sebesar jumlah yang terpenuhi alih-alih dibatalkan. Jika target 200 saham terpenuhi 60 saham, stop turun menjadi 140 saham, menyesuaikan dengan posisi yang masih terbuka. Pembatalan hanya terjadi ketika posisi terakhir ditutup.
Bisakah saya menggunakan bracket order dalam perdagangan premarket atau after-hours?
Perilaku bervariasi menurut broker, dan banyak yang merutekan anak order bracket hanya selama jam reguler. Stop order khususnya sering ditolak atau ditahan di luar pukul 09:30 hingga 16:00 ET pada ekuitas AS. Pengaturan time-in-force pada setiap sisi mengatur apakah sisi tersebut memenuhi syarat untuk sesi tambahan sama sekali.
Apakah bursa tahu bahwa dua order saya terkait?
Tidak. Dalam ekuitas AS, tautan pembatalan dipegang oleh broker atau platform, dan bursa menerima dua order independen. Pesan pembatalan untuk sisi yang bertahan dikirim oleh sistem mana pun yang memegang tautan tersebut, setelah sisi lainnya melaporkan eksekusinya.
Setiap panel di sini dikirimkan dengan SQL yang tepat di bawahnya. Untuk mengukur rentang dan risiko celah pada nama yang Anda ikuti, ajukan pertanyaan dalam bahasa Inggris yang sederhana di terminal Strasmore.