選擇權 Stop Order 如何觸發?
選擇權 stop order 通常由券商監控最後成交價、bid、ask 或 mark price,達到 stop price 後才送出;價格來源會影響是否觸發與最終成交。
什麼會觸發 option 的 stop order?在多數零售帳戶中,交易所根本看不到 stop:券商會將其留在自己的系統內,等契約的最後成交價、買價、賣價或 mark price 達到 stop price 後,才轉換成有效訂單。券商監看的價格類型,會決定 stop 是否在你預期的價位觸發,甚至是否會觸發;而 bid-ask spread 則決定觸發後的成交結果。
Option 的 stop order 實際上放在哪裡?
Options exchanges 仍定義 stop order 類型。Cboe Exchange 規則手冊截至2026年8月14日的版本,在 Rule 5.6(c) 下列出「Stop (Stop-Loss)」order 與「Stop-Limit」order,並說明交易所自身的觸發條件:
「『Stop (Stop-Loss)』order 是一項買進(賣出)訂單;當特定 option contract 的綜合最後成交價(若複合訂單交易價格位於 NBBO 之外,則不包括該價格),或 NBB(NBO)等於或高於(低於)User 指定的 stop price 時,該訂單會轉為 market order。User 不得將 Stop Order 指定為 All Sessions、RTH 或 Curb。」(Rules of Cboe Exchange, Inc., Rule 5.6(c),截至2026年8月14日更新)
有兩項細節適用於每家券商。交易所的觸發條件是最後成交價或全國最佳買價/賣價(NBB/NBO),因此 sell stop 可能因 bid 觸及 stop price 而觸發,即使完全沒有成交。其次,該訂單不能指定為全時段或 Curb session:在交易所層級,stop 是僅適用於正常交易時段的工具。
零售訂單幾乎不會直接適用這項規則。多數零售券商會把 stop 留在自己的伺服器上,等自有觸發條件成立後,才將 market order 或 limit order 送往交易所或 wholesaler。訂單介面雖然寫著「stop」,但觸發邏輯屬於券商,並記載於其 order-type disclosure,而非任何交易所規則手冊。
什麼價格會觸發 option stop:last、bid、ask,還是 mark?
幾乎所有券商都採用以下三種慣例之一。假設一張 long put 以 $1.80 設定 sell stop,設定時該 put 的報價為 $1.90 bid/$2.10 ask。
- Last trade。 只有在出現 $1.80 或更低的成交價時,stop 才會觸發。如果該契約沒有成交,無論報價跌得多深,都不會發生任何事。
- Bid 或 ask。 當 bid(部分券商監看 ask,或任一側)觸及 $1.80 時,stop 便會觸發。不需要成交;只要一個 market maker 下調報價就足以觸發。
- Mark。 當 bid 與 ask 的中間價達到 $1.80 時,stop 便會觸發。在 $0.40 寬的報價中,即使兩側都沒有成交,mark 也可能移動 $0.20。
為什麼在交易清淡的契約上,last trade 不可靠
Options chain 在螢幕上看似連續,但其中多數契約每天只成交數次。下方面板將2026年7月15日曾有成交的所有 AAPL contract,依全天成交量分組;一口代表一張 contract。
| 成交量區間 | 合約數 | 占比 |
|---|---|---|
| 1 to 5 lots | 414 | 23.4 |
| 6 to 25 lots | 323 | 18.2 |
| 26 to 100 lots | 358 | 20.2 |
| 101 to 1,000 lots | 486 | 27.4 |
| over 1,000 lots | 190 | 10.7 |
每個數據背後的精確 SQL 語法
WITH traded AS
(
SELECT
ticker,
max(volume) AS contracts_traded
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-07-15')
AND volume > 0
GROUP BY ticker
)
SELECT
multiIf(contracts_traded <= 5, '1 to 5 lots',
contracts_traded <= 25, '6 to 25 lots',
contracts_traded <= 100, '26 to 100 lots',
contracts_traded <= 1000, '101 to 1,000 lots',
'over 1,000 lots') AS volume_bucket,
count() AS contracts,
round(100 * count() / (SELECT count() FROM traded), 1) AS share_pct
FROM traded
GROUP BY volume_bucket
ORDER BY min(contracts_traded)當天有 23.4% 的契約整個交易時段只成交五口或更少,另有 18.2% 的契約成交六至25口。一張成交量為三口的契約,最多只會產生三筆成交,因此以 last trade 為觸發依據的 stop,全天最多只有三次觸發機會,而且成交價取決於這些成交的價格。在兩筆成交之間,報價可能從你的 stop price 直接移動到遠低於該價位,而完全沒有被觀察到。表格另一端有 190 的契約各自成交超過1,000口;對這些契約而言,last-trade stop 的表現比較接近股票 stop。
為什麼 stop-market 會在 spread 的遠端成交
現在假設某 put 的報價為 $1.60 bid/$2.00 ask,市場寬度為 $0.40,並以 mark 為觸發依據設定 $1.80 的 sell stop-market。報價滑落至 $1.55/$1.95。此時 mark 為 $1.75,stop 觸發,券商送出 market order 賣出。Market order 會成交於可得的最佳 bid,即 $1.55,因此成交價比 stop price 低 $0.25,約低14%;而且 $1.80 附近從未出現成交。如果 bid 在訂單送達時因一次報價更新短暫跌至 $1.20,成交價就會是 $1.20。在交易清淡的契約上,bid-ask spread 是 stop-market 必然承受的最低滑價;一般的 market order vs limit order 取捨,也會因 options 報價寬度而被放大。
為什麼 stop-limit 可能讓部位無法平倉
將 market order 改為限價 $1.75 的 stop-limit。報價滑落至 $1.55/$1.95,stop 觸發後,產生一筆以 $1.75 或更高價格賣出的訂單;該訂單比 bid 高 $0.20,沒有任何人有義務以這個價格買進。如果 put 繼續下跌,訂單會維持未成交,部位仍然開放,損失持續擴大,這正好與 stop 原本的目的相反。兩種類型的比較請見 stop order vs stop-limit order;resting limit leg 無法成交的情況則見 why options orders don't get filled。
為什麼對 option 而言,20% 的 stop 距離只是正常的一天
對股票而言看似寬鬆的 stop 距離,例如低於進場價10%或20%,對 option 來說可能只落在日常波動範圍內。下方追蹤一張 SPY put:截至2026年7月6日,其履約價最接近平值,距到期日25至35天;圖中同時列出接下來兩週的收盤價,以及 ETF 本身每日的變動。
| 交易日期 | 日曆標籤 | Put 收盤價 | Put 變動幅度 | SPY 變動幅度 |
|---|---|---|---|---|
| 2026-07-06 | Jul 6 | 8.79 | -41.3 | 0.66 |
| 2026-07-07 | Jul 7 | 11.21 | 27.5 | -0.6 |
| 2026-07-08 | Jul 8 | 12.03 | 7.3 | -0.11 |
| 2026-07-09 | Jul 9 | 8.31 | -30.9 | 0.82 |
| 2026-07-10 | Jul 10 | 6.5 | -21.8 | 0.45 |
| 2026-07-13 | Jul 13 | 9.28 | 42.8 | -0.88 |
| 2026-07-14 | Jul 14 | 7.49 | -19.3 | 0.66 |
| 2026-07-15 | Jul 15 | 5.92 | -21 | 0.21 |
| 2026-07-16 | Jul 16 | 7.94 | 34.1 | -0.74 |
| 2026-07-17 | Jul 17 | 11.5 | 44.8 | -0.88 |
每個數據背後的精確 SQL 語法
WITH pick AS
(
SELECT ticker
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND lower(toString(option_type)) IN ('put', 'p')
AND date = toDate('2026-07-06')
AND days_to_expiry BETWEEN 25 AND 35
AND volume > 0
ORDER BY abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) ASC,
expiration_date ASC,
ticker ASC
LIMIT 1
),
daily AS
(
SELECT
date,
max(toFloat64(option_close)) AS put_close_raw,
max(toFloat64(underlying_close)) AS spy_close_raw
FROM global_markets.options_greeks
WHERE ticker IN (SELECT ticker FROM pick)
AND date >= toDate('2026-07-02')
AND date < toDate('2026-07-18')
AND volume > 0
GROUP BY date
),
chained AS
(
SELECT
date,
put_close_raw,
spy_close_raw,
lagInFrame(put_close_raw, 1) OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_put,
lagInFrame(spy_close_raw, 1) OVER (ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_spy
FROM daily
)
SELECT
toString(date) AS session_date,
concat(formatDateTime(date, '%b'), ' ', toString(toDayOfMonth(date))) AS calendar_label,
round(put_close_raw, 2) AS put_close,
round(100 * (put_close_raw / prev_put - 1), 1) AS put_move_pct,
round(100 * (spy_close_raw / prev_spy - 1), 2) AS spy_move_pct
FROM chained
WHERE prev_put > 0
AND prev_spy > 0
AND date >= toDate('2026-07-06')
ORDER BY date該 put 在 Jul 6 收於 $8.79,在 Jul 17 收於 $11.5。將兩個百分比欄並列比較:ETF 的日對日變動只有百分之幾,put 的變動則可達完整的百分點,且經常達到數十個百分點。這項差距表示,將 stop 設在 put 價格下方20%,可能落在單日波動區間內。若將觀察範圍擴大至2026年7月期間所有距平值且距到期日20至45天的 SPY put,便能將單一契約轉化為分布。
| 變動幅度區間 | 合約天數 | 占比 |
|---|---|---|
| under 5% | 396 | 16.7 |
| 5% to 10% | 339 | 14.3 |
| 10% to 20% | 591 | 25 |
| 20% or more | 1039 | 43.9 |
每個數據背後的精確 SQL 語法
WITH daily AS
(
SELECT
ticker,
date,
max(toFloat64(option_close)) AS put_close,
max(toFloat64(underlying_close)) AS spy_close,
max(toFloat64(strike_price)) AS strike,
max(days_to_expiry) AS dte
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND lower(toString(option_type)) IN ('put', 'p')
AND date >= toDate('2026-06-29')
AND date < toDate('2026-08-01')
AND days_to_expiry BETWEEN 15 AND 50
AND volume > 0
GROUP BY ticker, date
),
chained AS
(
SELECT
date,
put_close,
spy_close,
strike,
dte,
lagInFrame(put_close, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_put,
lagInFrame(date, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_date
FROM daily
),
moves AS
(
SELECT abs(100 * (put_close / prev_put - 1)) AS move_pct
FROM chained
WHERE prev_put > 0
AND dateDiff('day', prev_date, date) <= 4
AND date >= toDate('2026-07-01')
AND dte BETWEEN 20 AND 45
AND abs(strike / spy_close - 1) < 0.02
)
SELECT
multiIf(move_pct < 5, 'under 5%',
move_pct < 10, '5% to 10%',
move_pct < 20, '10% to 20%',
'20% or more') AS move_bucket,
count() AS contract_days,
round(100 * count() / (SELECT count() FROM moves), 1) AS share_pct
FROM moves
GROUP BY move_bucket
ORDER BY min(move_pct)其中有 43.9% 的 contract-days 較前一日收盤價變動20%或以上,另有 16.7% 的變動低於5%。若 stop 設在前一日收盤價下方20%,約有 43.9 的每100個 contract-days 會觸及該價位;而這還未計入逐日收盤價序列無法呈現的盤中波動。
下單前應查閱的券商限制
券商對 options stop 的規則各不相同,也可能變更。因此,以下應視為你需要在自家券商 order-type disclosure 中確認的類別,而非任何單一券商的固定規則:
- 是否完全接受 options 的 stop-market order。有些券商在 options 上只接受 stop-limit order;這雖可避免在 spread 遠端成交,卻會引入部位無法平倉的問題。
- 適用哪一種觸發慣例(last、bid、ask 或 mark),以及是否可逐筆訂單選擇。
- 是否只在正常交易時段評估觸發條件。Cboe 規則中的交易所層級 stop 僅適用於正常交易時段,券商代持的 stop 也常有相同限制;對具有延長交易時段的指數 options 而言,這點尤其重要。
- 是否允許 multi-leg order 使用 stop;若允許,觸發條件監看哪一種價格(通常是 spread 的 net mark),以及 stop 可採用哪些 time-in-force 選項。
普通 stop 以外的做法
- 設定 debit target 的 bracket 或 OCO exit。 一筆訂單在獲利目標平倉,另一筆是 stop-limit,且將限價設得足夠寬,以穿過正常 spread;其中一筆成交後,另一筆便會取消。Bracket and OCO orders 說明相關機制;在 options 上,獲利那一腿是以特定 debit 或 credit 報價,而不是百分比。
- 以標的資產價格為依據的 contingent order。 該訂單監看股票,而不是每天只成交十多次的 put。股票每小時可產生成千上萬筆成交;當股票交易至指定價位時,訂單便送出 option 的 limit order。上方走勢圖說明了這種觸發方式為何更清楚:ETF 是平滑的序列,put 則充滿雜訊。
- 對 defined-risk spread 完全不設定 stop。 Vertical spread 在進場時便已確定最大損失。Spread 的 stop 監看兩個寬幅報價的綜合 mark,該價格可能因雜訊大幅波動,並在最差的價格組合下同時平倉兩腿。改以調整交易取代 stop,例如 how to roll an option position,可維持既定風險。
常見問答
Stop order 對 options 有效嗎?
有效,但有一項限制。Cboe 規則手冊仍定義 options 的交易所層級 stop 與 stop-limit order,但多數零售券商會自行持有 stop,並根據自己的觸發條件執行:last trade、bid 或 ask,或 mark。實際採用的方式取決於券商慣例,並會寫在你帳戶適用的 order-type disclosure 中。
什麼會觸發 option stop order:bid、ask,還是 last trade?
取決於券商。常見慣例包括 last trade price、bid 或 ask,以及 mark(報價的中間價)。Cboe 自行持有於交易所的 stop,則會在綜合最後成交價或全國最佳買價/賣價達到條件時觸發。
為什麼我的 options stop order 會在遠低於 stop price 的位置成交?
Stop-market 觸發後會立即轉為 market order,而賣出的 market order 會以當時的 bid 成交。如果報價寬度為 $0.40,且觸發依據是 mark,那麼在 $2 的契約上,成交價會落在 bid,約比觸發價低10%,之後還可能進一步滑價。
我可以對 options spread 設定 stop-loss 嗎?
部分券商允許對 multi-leg order 設定 stop,通常以 spread 的 net mark 為觸發依據;也有券商不允許。Defined-risk spread 本身已具有固定的最大損失,stop 可能因報價雜訊觸發,並以不利價格同時平倉兩腿。許多交易人會改以 roll 或調整 spread 來管理部位。
上方每個面板都附有產生該面板的 SQL。若要在不同 ticker 或日期上執行相同的逐契約成交量統計,請以自然語言在 Strasmore terminal 中提出要求。