如何讀懂選擇權代號與 OSI 格式
了解選擇權代號的 OSI 格式,拆解根代號、到期日、買權或賣權標記與八位數履約價,並掌握調整後根代號、SPXW 及 00007500 代表 $7.50 的原因。
選擇權代號是一串包含四項資訊的字串:標的資產根代號、到期日、買權或賣權標記,以及履約價。這種格式稱為 OSI,名稱源自美國選擇權業界在 2010 年採用的 Options Symbology Initiative。每張下單單與每個資料串流都以此為基礎。只要掌握這四個欄位,就能直接解讀任何在美國掛牌的選擇權代號。
選擇權代號包含哪四個欄位?
標準 OSI 代號共有 21 個字元,排列順序固定:
- 根代號為六個字元。靠左對齊;若標的根代號少於六個字元,右側以空格補足。
- 到期日為六位數字,格式為 YYMMDD。260116 代表 2026年1月16日。
- 權利別為一個字元:C 代表買權,P 代表賣權。
- 履約價為八位數字,以美元的千分之一表示,不含小數點。
多數券商與網站會去除補上的空格,顯示精簡格式。有些資料串流則會在字串前加上 O: 等標記。這兩種做法都不會改變解析方式。最後 15 個字元一定是日期、權利別與履約價,因此前面的部分就是根代號。下方面板依此規則拆解實際合約,並將解析出的欄位與合約紀錄本身所載的到期日並列。
每個數據背後的精確 SQL 語法
SELECT
contract,
substring(contract, 1, length(contract) - 15) AS root,
substring(contract, length(contract) - 14, 6) AS expiry_field,
substring(contract, length(contract) - 8, 1) AS right_code,
substring(contract, length(contract) - 7, 8) AS strike_field,
toFloat64(substring(contract, length(contract) - 7, 8)) / 1000 AS strike_dollars,
listed_expiration
FROM
(
SELECT
replaceRegexpOne(ticker, '^O:', '') AS contract,
formatDateTime(any(expiration_date), '%b %e, %Y') AS listed_expiration
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND expiration_date = '2026-01-16'
AND toFloat64(strike_price) IN (500, 600, 650, 700)
AND date >= '2025-12-01'
AND date < '2026-01-01'
GROUP BY contract
)
ORDER BY strike_dollars ASC, right_code ASC第一列解析出的根代號為 SPY,日期欄位為 260116,權利別為 C,履約價欄位為 00500000;換算後的履約價為 $500。合約自己的到期日紀錄為 Jan 16, 2026,與字串中的六位數字一致。面板共列出 8 份合約:相同履約價分別以買權與賣權掛牌。一個字元就能區分買權與對應的賣權,因此在下單單上應再次確認這個字元。若這些欄位看起來與券商畫面上的內容相似,閱讀選擇權鏈會說明其周邊欄位。
如何在命令列讀取選擇權代號
解析不需要函式庫,也不需要網路連線。這些欄位從右側起算,寬度固定,因此在 bash 中使用子字串展開即可。將以下內容貼到終端機:
SYM=SPY260116C00650000
echo "root ${SYM:0:$(( ${#SYM} - 15 ))}"
echo "expiry ${SYM: -15:6}"
echo "right ${SYM: -9:1}"
echo "strike ${SYM: -8}"
每個負位移前的空格都是必要的。若省略空格,bash 會將 :- 解讀為預設值展開,並輸出錯誤結果。
若要處理一串代號,awk 也能以從 1 開始的位置執行相同計算:
awk '{
n = length($0)
root = substr($0, 1, n - 15)
expiry = substr($0, n - 14, 6)
right = substr($0, n - 8, 1)
strike = substr($0, n - 7, 8)
printf "%-6s 20%s-%s-%s %-4s $%.3f\n",
root,
substr(expiry, 1, 2), substr(expiry, 3, 2), substr(expiry, 5, 2),
(right == "C" ? "call" : "put"),
strike / 1000
}' <<'EOF'
SPY260116C00650000
SPY260116P00650000
SPXW260116C05500000
XYZ1260116C00007500
EOF
以下 python3 版本可在同一個函式中處理補足至 21 個字元的格式,以及資料串流前綴。它不使用標準函式庫以外的任何元件:
from datetime import datetime
def parse_osi(symbol):
s = symbol.strip()
if s.startswith("O:"):
s = s[2:]
s = s.replace(" ", "")
return {
"root": s[:-15],
"expiry": datetime.strptime(s[-15:-9], "%y%m%d").date(),
"right": "call" if s[-9] == "C" else "put",
"strike": int(s[-8:]) / 1000,
}
samples = [
"SPY 260116C00650000",
"O:SPY260116P00650000",
"SPXW 260116C05500000",
"XYZ1 260116C00007500",
]
for sym in samples:
f = parse_osi(sym)
print("{:<6} {} {:<4} ${:,.3f}".format(f["root"], f["expiry"], f["right"], f["strike"]))
兩段程式都能在只安裝 awk 與 python3 的標準 Ubuntu 環境中執行,也都不會連線至網路。因此無論今天或五年後,輸出結果都相同。
為什麼 00007500 代表 $7.50?
履約價欄位由八位數字組成,不含小數點,單位是美元的千分之一。除以 1,000 後即可得到美元。00007500 是 7,500 個千分之一美元,也就是 $7.50。07500000 是 7,500,000 個千分之一美元,也就是 $7,500。兩者只差三個藏在連續零中的零,這是整個格式最常見的誤讀。固定寬度可讓每個代號維持相同長度,而千分之一美元的單位也能容納企業行動後出現的零點幾美分履約價。
一個欄位必須涵蓋所有掛牌履約價,從低價股到四位數的指數水準都包括在內。下方面板讀取數個標的的最低與最高履約價,並逐字顯示其在代號中的八位數字。
每個數據背後的精確 SQL 語法
SELECT
underlying,
round(toFloat64(min(strike)), 2) AS lowest_strike,
argMin(strike_field, strike) AS lowest_strike_field,
round(toFloat64(max(strike)), 2) AS highest_strike,
argMax(strike_field, strike) AS highest_strike_field,
uniqExact(strike) AS strike_count
FROM
(
SELECT
underlying_symbol AS underlying,
strike_price AS strike,
substring(replaceRegexpOne(ticker, '^O:', ''),
length(replaceRegexpOne(ticker, '^O:', '')) - 7, 8) AS strike_field
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('KO', 'NVDA', 'AAPL', 'SPY', 'SPX')
AND date >= today() - 7
)
GROUP BY underlying
ORDER BY highest_strike ASC在所涵蓋的交易時段中,KO列出的履約價介於 $32.5 至 $125,在代號中分別寫成 00032500 與 00125000。在面板最右端,SPY達到 $1480,即 01480000,涵蓋 462 個不同履約價。無論價格水準為何,八位數字與除數都相同。
調整後選擇權:根代號末尾的數字代表什麼
標準股票選擇權的交割標的是 100 股。企業行動可能改變這項安排,例如非整數比例的股票分割、部分以現金支付的合併、分拆,或超過門檻的特別現金股利。OCC 會調整未平倉合約,並為其指定新的根代號,也就是在原根代號後加上一個數字。ABC 第一次調整後會變成 ABC1,第二次調整後則變成 ABC2。格式本身不變,因此解析器仍可正常運作。但合約背後的交割標的會改變,而代號不會說明這項變化。
末尾數字也用來標示迷你合約,數字 7 代表該合約涵蓋 10 股,而非 100 股。無論是哪種情況,這個數字都表示在比較履約價之前,必須先閱讀合約條款。我們關於股票分割如何影響選擇權的說明,會詳細分析履約價與交割標的的比例計算。
調整後系列很少新增到期日。ABC1 這類根代號會隨掛牌日期陸續到期而逐漸變得不活躍,不會持續加入新的到期日;最後一個合約到期後,甚至可能完全從選擇權鏈中消失。合約條款載於該合約的 OCC 調整備忘錄,而不是代號中。備忘錄會列出修訂後的交割標的、若有的現金成分,以及適用的乘數。在閱讀該備忘錄之前,同一標的上的調整後履約價與標準履約價,即使使用相同的八位數字,也代表兩個不同的合約。
SPX、SPXW,以及 W 的含義
指數選擇權有各自的根代號,而 S&P 500 相關產品是多數人最先接觸的類型。SPX 與 SPXW 指向同一指數,並共用相同的 21 字元格式。W 已不再代表每週掛牌,名稱本身可能造成誤解。SPX 是上午結算的根代號:第三個星期五合約的結算值,依到期週五指數成分股的開盤成交價計算,交易則在前一個星期四結束。SPXW 是下午結算的根代號,涵蓋日曆上的其他合約,包括週一至週五的每日到期合約,以及月底合約;每份合約都交易至自身到期日收市。
日曆也依同一條界線區分。每個月度週期只有一份上午結算的第三個星期五合約使用 SPX 根代號。指數上其他所有未來日期都屬於 SPXW;在完整的選擇權鏈中,這通常是大多數到期日。代號本身不會顯示上述資訊:根代號只能提供提示,合約規格才是最終依據。兩個根代號、同一個指數、同一個畫面,但結算機制不同;上午結算與下午結算選擇權會詳細拆解其中差異。
選擇權代號永遠不會告訴你的資訊
四個欄位能完整識別合約,但幾乎沒有說明合約內容。具體而言:
- 乘數。標準美國股票選擇權涵蓋 100 股,但代號中沒有欄位標示這一點。調整後系列與迷你系列不同,指數產品也有各自的乘數。
- 結算方式。代號不會標示上午或下午結算,也不會標示現金結算或實物交割。對指數根代號而言,慣例可以提供提示,但只有合約規格具有決定性。
- 交割標的。調整後合約不再適用 100 股的假設,而代號除了末尾數字外,看起來完全相同。
- 剩餘時間。日期欄位只提供到期日,不是倒數計時。要換算成距到期日天數,必須自行根據日曆計算。
- 流動性。結構完全相同的兩個代號,在成交量與未平倉量上可能相差數個數量級。
常見問題
選擇權代號有幾個字元?
標準 OSI 格式共有 21 個字元:根代號六個、日期六個、買權或賣權標記一個,以及履約價八個。少於六個字元的根代號會以空格補足,而多數畫面會去除這些空格,因此三個字母的根代號通常顯示為 18 個字元的字串。
選擇權代號中,根代號後面的數字代表什麼?
它代表合約條款已不再是標準條款。OCC 加在根代號後的數字,用來識別企業行動後的調整後系列;數字 7 則代表迷你合約,涵蓋 10 股而非 100 股。日期與履約價欄位的解析方式仍然相同。
為什麼履約價是八位數字?
該欄位以固定寬度整數表示美元千分之一的履約價,可涵蓋從一角美分到 $99,999.999 的範圍,而且不需要小數點。將八位數字除以 1,000 即可換算成美元:00007500 就是 $7.50。
SPXW 與 SPX 相同嗎?
兩者都指向同一指數,也使用相同的代號格式,但結算方式不同。SPX 合約以週五上午開盤成交價計算結算值,並在前一天停止交易;SPXW 合約則交易至到期日收市,並以收盤指數水準結算。
選擇權代號會顯示是每週合約還是月度合約嗎?
對美國股票而言,不會。同一標的的每週合約與月度合約共用同一根代號,只在六位數日期上有所不同。第三個星期五的慣例會讓某個日期看起來像月度到期日,而指數產品則使用不同的根代號。
本頁每個面板下方都會在展開區顯示產生該面板的完整 SQL,讓你查看每個欄位如何從字串中切出。若要拆解你目前看到的選擇權代號,可以用自然語言在 Strasmore terminal 中提出要求。