ブラケット注文とOCO注文をわかりやすく解説
ブラケット注文とは何か、利益確定と保護ストップがOCOでどう連動するか、部分約定時の動き、連動の仕組みがどこにあるかを解説します。
ブラケット注文とは、三つの注文を固定された関係で一つにまとめた注文です。エントリー注文に加え、その両側に連動する二つの決済注文を置きます。この二つがOCOです。OCOはone cancels the otherの略で、一方が約定すると他方が自動的に取り消されます。利益確定の指値はエントリー価格より上に置き、保護用のストップは下に置きます。ブラケット注文は小さな状態機械のようなもので、想定外の動きの多くは状態が切り替わる途中で起きます。
ブラケット注文とは
トレーダーが50ドル付近で200株を買い、うまくいけば53ドル付近で決済し、うまくいかなければ48.50ドル付近で手仕舞うケースを考えます。これを別々の注文票にすると三つの注文になり、手作業も必要です。利益確定注文が約定した瞬間にストップを取り消さなければ、200株を二度売るリスクがあるためです。ブラケット注文なら、同じ意図を一つの発注にまとめられます。エントリーは通常の成行注文または指値注文です。二つの決済注文は子注文で、利益確定価格で決済する指値注文と、保護水準で決済するストップ注文またはストップリミット注文です。
呼び方はさまざまです。ブラケット、アタッチド注文、OCOブラケット、OTOCOはいずれもこの形を指します。OTOCOはone triggers a one-cancels-the-otherの略で、注文の流れを最も直接的に表す名称です。エントリーが二つの子注文を有効にし、その後、二つの注文が一方だけを残して相互に取り消します。
ブラケット注文におけるOCOとは
OCOは、取り消しリンクで結ばれた二つの待機注文です。両方が同時に板で有効になります。一方が約定すると、もう一方が取り消されます。一方が一部約定した場合、もう一方は全量取り消しではなく、約定数量分だけ減らされます。これにより、保有ポジションとそのヘッジが一株単位で一致します。
200株のロング・ブラケット注文では、全体の流れは次のようになります。
- エントリーだけが有効です。利益確定注文とストップ注文はブローカーのシステム内に存在しますが、まだ有効な注文ではありません。そのため、エントリーが未約定の間に株価が利益確定価格を通過しても、何も起きません。
- エントリーが200株約定します。二つの子注文がそれぞれ200株で有効になります。
- 株価がストップ価格に到達します。ストップ注文が有効な売り注文に変わり、板で執行されます。
- 相場が離れる前にストップが120株約定します。残るポジションに合わせ、利益確定の指値注文は200株から80株に減ります。
- その日の後半に残り80株が利益確定価格で約定します。ストップ注文の残り80株が取り消され、ブラケット注文が完了します。
エントリーの一部約定では、プラットフォーム間の違いが最も大きくなります。一部のブローカーは、約定した数量分の子注文をすぐに有効にし、エントリーの残りが約定するにつれて数量を増やします。別のブローカーはエントリー全量の約定を待つため、その間、ポジションが保護されない状態になります。こうした仕様の違いは見た目の問題ではありません。一部約定時に子注文が有効になるか、一方の子注文を編集すると他方との取り消しリンクが切れるかは、ブローカーによって異なります。
二つの注文はどれほど離して置くのか
二つの注文は、その銘柄の通常の値動きによるノイズの外側に置く必要があります。同時に、実際に到達可能な値幅の内側にも置かなければなりません。日中レンジは、そのための最初の大まかな指標です。下のパネルは、代表的な六銘柄について直近一年を調べています。始値に対する高値から安値までのレンジの中央値と、始値から終値までの絶対変動幅の中央値を並べています。
各数値の背後にある正確なSQL
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は六銘柄の中で通常のセッション幅が最も広く、2.72%です。SPYは最も狭く、0.86%です。すべての行で、二列目が一列目を大きく下回っている点に注目してください。一般的な銘柄は、始値から終値までの差よりも、セッション中に大きく動きます。二つのブラケット注文はその値動きの中に置かれます。利益確定注文とストップ注文が、同じ通常の取引日にそれぞれ到達することもあります。
ブラケット注文の一方に触れる頻度はどの程度か
エントリーからの距離は、トレーダーが実際に調整できるつまみです。次のパネルでは、SPYの三つの固定年のセッションを対象に、始値から一定の距離を設定した場合、その日の途中でその距離まで下落したセッションの割合と、上昇したセッションの割合を示しています。
各数値の背後にある正確なSQL
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始値から0.25%の距離では、62.3%のセッションがその水準まで下落し、64.7%がその水準まで上昇しました。距離を3%まで広げると、下落側の数値は0.5%まで低下します。二つの曲線は同時に低下します。これがブラケット注文の幅を決める際の本質的な難しさです。狭いストップは、目立った材料のない日に約定しやすいストップです。遠い利益確定水準は、未約定のまま期限を迎えやすい水準です。
ストップロスは常にストップ価格で約定するのか
いいえ。ストップ注文は、トリガー価格が付いた時点で注文を送る指示です。通常のストップ注文は成行注文を送るため、約定価格はその瞬間の板の状況で決まります。ストップリミット注文は、設定した価格の指値注文を送ります。価格を守れる一方、まったく約定しないリスクを受け入れる必要があります。このトレードオフについては、ストップ注文とストップリミット注文の違いで説明しています。
最も分かりやすい例が、夜間のギャップです。取引所が閉まっている時間帯も保護用ストップは残り、始値がトリガー価格を大きく超えて付くことがあります。AAPLについて三年半の期間から十例を示します。
各数値の背後にある正確なSQL
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最大のギャップは-9.45%に達し、Aug 5, 2024に発生しました。リスト十番目の例でも-2.96%でした。こうしたギャップの内側に保護用ストップを置いていた場合、注文はトリガー価格ではなく始値で成行化されます。日中レンジだけを基にブラケット注文の幅を決めると、この距離をモデルに組み込めません。
OCOリンクは実際にはどこに存在するのか
取引所にあることはほとんどありません。二つの子注文を結ぶ取り消しリンクは、ブローカーの注文管理システムに保持されます。あるいは、利用者の端末上で動く取引プラットフォームに保持される場合もあります。取引所が受け取るのは、相互に関係のない二つの通常注文です。
この配置によって、障害時に何が残るかが決まります。ブローカー側のブラケット注文では、両方の注文と取り消しロジックがブローカーのサーバーに保持されるため、ノートパソコンを閉じても機能し続けます。チャートアプリケーションなどがローカルで実行するプラットフォーム側のブラケット注文では、アプリケーションが起動し、接続されている必要があります。トリガー価格に達するまで、ローカルメモリーにしか存在しない疑似ストップを使うプラットフォームもあります。ノートパソコンを閉じると、そのストップは送信されません。
同じ点は自作コードにも当てはまります。稼働中のプロセス内にしか存在しないストップは、そのプロセスが停止すると板に残りません。トレーディングボットのサーキットブレーカーでは、自動売買システムの設計パターンを説明しています。最悪のタイミングでプロセスが停止すると仮定し、その時点でブローカー側で何が有効かを確認します。
有効期間は各注文に適用される
各注文には独自の有効期間設定があります。デイ注文のエントリーにGTCの子注文を組み合わせるのは、一般的ですが扱いにくい組み合わせです。エントリーは取引終了時に失効する一方、子注文は一度も有効になりません。その結果、ブラケット注文は翌朝も静かに何もしないまま残ります。逆の組み合わせでは、翌日に持ち越したポジションに対する保護注文が米国東部時間午後4時に失効します。
通常取引時間外では、板そのものの性質が変わります。下のパネルは、終日分のSPYの分足を米国東部時間の時刻ごとにまとめています。各30分区間について、一分間の値動きの平均をベーシスポイントで示し、同時に一分間の出来高の中央値を示しています。一ベーシスポイントは百分の一パーセントです。
各数値の背後にある正確なSQL
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パネルは、04:00から19:30までの米国東部時間を、32個の30分区間に分けて示しています。左から右へ読むと、形状から特徴が分かります。両系列はプレマーケット時間帯に底に近い水準で推移し、午前9時30分の取引開始に向けて急上昇し、午後4時以降に再び低下します。午前5時に残るGTCストップは、この曲線の薄い部分に置かれます。板が薄い時間帯のストップ成行注文は、トリガー価格から大きく離れて約定する可能性があります。
よくある質問
ブラケット注文とOCO注文の違いは何か
OCOは、取り消しリンクで結ばれた二つの待機注文の組み合わせです。一方が約定すると、もう一方が取り消されます。ブラケット注文は、OCOの組み合わせを付けたエントリー注文です。エントリーが約定して初めて、OCOの組み合わせが有効になります。すべてのブラケット注文にはOCOが含まれます。一方、OCOの組み合わせだけを単独で使うケースも多くあります。
パソコンの電源を切ってもブラケット注文は機能するか
リンクがどこに保持されているかによります。ブローカー側のブラケット注文はブローカーのサーバーに残るため、プラットフォームを閉じても機能し続けます。プラットフォーム側または疑似的なブラケット注文では、アプリケーションが起動し、接続されている必要があります。そうでなければ、子注文が市場に届かない可能性があります。
利益確定注文が一部約定した場合、ストップはどうなるか
ストップは取り消されず、約定数量分だけ減ります。200株の利益確定注文が60株約定した場合、ストップは140株に減り、残るポジションと一致します。ポジションの最後の株が決済された時点で、取り消しが実行されます。
プレマーケットやアフターアワーズでブラケット注文を使えるか
対応はブローカーによって異なります。多くのブローカーは、通常取引時間中だけブラケットの子注文を発注します。特に米国株では、午前9時30分から午後4時までの米国東部時間以外では、ストップ注文が拒否または保留されることがよくあります。各注文の有効期間設定によって、その注文が時間外取引の対象になるかどうかが決まります。
二つの注文がリンクされていることを取引所は把握しているか
いいえ。米国株では、取り消しリンクはブローカーまたはプラットフォームが保持します。取引所が受け取るのは、独立した二つの注文です。一方の注文の約定が報告された後、リンクを保持するシステムが、残った注文を取り消すメッセージを送信します。
ここに示したすべてのパネルには、基になったSQLがそのまま付いています。追跡している銘柄のレンジとギャップリスクを測定するには、Strasmore terminalで質問を平易な英語にしてください。