Thomas 問 Claude:「NVDA 這週到期的 ATM put call 價格是多少?」
聽起來很簡單,對吧?結果踩了四個坑,以下是完整的解決過程。
| 方法 | 優點 | 缺點 | 適合場景 |
|---|---|---|---|
| Alpaca MCP | Claude 可以自然語言呼叫工具 | 新對話要重新激活;對話內每步都需要批准 | 互動式探索,不急 |
| Python 直接 API | 一條指令出結果;可打包所有步驟;不依賴 MCP 狀態 | 需要自己寫腳本 | 已知要查什麼,要快速出結果 |
在對話開頭說:「請使用 Alpaca MCP 工具查詢……」就能提示 Claude 去找對應工具。但如果你只是要查固定數據,直接 Python 腳本更省事。
Thomas:「NVDA 這週到期的 ATM put call 價格是多少?」
Claude(很認真地):「好的,我先查一下 NVDA 現價,然後找本週到期的合約代號,再查 snapshot……」
| 方式 | 步驟數 | 批准次數 | 等待時間 | 適合場景 |
|---|---|---|---|---|
| 探索式(Claude 預設) | 4~8 步 | 4~8 次 | 2~5 分鐘 | 不確定要查什麼 |
| 打包式(Python 腳本) | 1 步 | 1 次 | 5~10 秒 | 目標明確,要快速出結果 |
如果你不確定合約代號、不知道哪個到期日有流動性、或者要 Claude 幫你分析「這個期權值不值得買」——探索式才是對的。打包式適合「我知道我要什麼,只是懶得手打 API 呼叫」的情境。
ap(Ask Price):願意賣出的最低價
https://data.alpaca.markets/v1beta1/options/snapshots ?symbols=NVDA260402C00180000,NVDA260402P00180000 &feed=indicative # symbols : 合約代號,多個用逗號分開 # feed : indicative = 指示性報價(不需要 live data 訂閱也能查) # opra = 官方交易所數據(需要付費訂閱)
免費帳戶用 indicative,數據有 15 分鐘延遲但基本夠用。付費訂閱 Options Data 後可用 opra 取得即時報價。做研究分析用 indicative 完全沒問題。
| 合約 | 行使價 | 基準股價(盤後數據) | 狀態 | 價格 | 原因 |
|---|---|---|---|---|---|
| $180 Put | $180 | $174(3/31 收盤) | ITM 實值 | $5.79 | $180 > $174,已有 $6 內在價值,貴 |
| $180 Call | $180 | $174(3/31 收盤) | OTM 虛值 | $0.28 | $180 > $174,需要漲 $6 才有價值,便宜 |
# 查市場狀態 clock = get('https://paper-api.alpaca.markets/v2/clock') print(clock) # 返回示例: # {"is_open": false, "next_open": "2026-04-02T13:30:00Z", "next_close": "2026-04-02T20:00:00Z"} # is_open: false = 現在是收盤時間,數據是上一個交易日的 # is_open: true = 現在是開盤時間,數據接近即時
盤後查詢到的股價(透過 quotes/latest)可能是盤後交易的價格,而期權 snapshot 使用的基準價格通常是當日收盤價,兩個數字可能不一致。查詢到「反常」的 Put/Call 價差時,先確認市場是否開盤。
踩完四個坑之後,這是最終整理出來的一條指令。把所有 API 呼叫打包,直接輸出市場狀態 + 股價 + 期權數據的完整表格。
alpaca-paper-api-key 和 alpaca-paper-secret-key(詳見 Alpaca MCP 指南)gcloud auth login 確認可以存取 Secret ManagerPYTHONUTF8=1 py -c "
import urllib.request, json, urllib.parse, subprocess
def secret(name):
r = subprocess.run(
'gcloud secrets versions access latest --secret=' + name + ' --project=nvda-strategy',
capture_output=True, text=True, shell=True)
return r.stdout.strip()
KEY = secret('alpaca-paper-api-key')
SEC = secret('alpaca-paper-secret-key')
H = {'APCA-API-KEY-ID': KEY, 'APCA-API-SECRET-KEY': SEC}
def get(url):
req = urllib.request.Request(url, headers=H)
with urllib.request.urlopen(req) as r: return json.loads(r.read())
# 市場狀態 + 股價
clock = get('https://paper-api.alpaca.markets/v2/clock')
spot = get('https://data.alpaca.markets/v2/stocks/NVDA/quotes/latest')['quote']['ap']
print(f'市場: {\"開盤\" if clock[\"is_open\"] else \"收盤\"} NVDA: \${spot}')
# 期權 snapshot(把 symbols 換成你要的合約代號)
symbols = 'NVDA260402C00180000,NVDA260402P00180000,NVDA260402C00182500,NVDA260402P00182500'
params = urllib.parse.urlencode({'symbols': symbols, 'feed': 'indicative'})
snaps = get(f'https://data.alpaca.markets/v1beta1/options/snapshots?{params}')['snapshots']
print(f'\n{\"合約代號\":<30} {\"類型\":>5} {\"行使價\":>8} {\"Bid\":>7} {\"Ask\":>7} {\"中間價\":>7} {\"IV\":>7} {\"Delta\":>8}')
print('-'*82)
for sym in sorted(snaps):
s = snaps[sym]; q = s['latestQuote']; g = s['greeks']
typ = 'CALL' if 'C' in sym[4:] else 'PUT '
strike = float(sym[-8:]) / 1000
bp, ap = q['bp'], q['ap']
print(f'{sym:<30} {typ:>5} {strike:>8.1f} {bp:>7.2f} {ap:>7.2f} {(bp+ap)/2:>7.2f} {s[\"impliedVolatility\"]:>7.1%} {g[\"delta\"]:>8.3f}')
"
| 代號 | 意思 |
|---|---|
| NVDA260402C00180000 | NVDA 2026/04/02 到期 Call $180 |
| NVDA260402P00180000 | NVDA 2026/04/02 到期 Put $180 |
| NVDA260404P00182500 | NVDA 2026/04/04 到期 Put $182.5 |
| AAPL260117C00200000 | AAPL 2026/01/17 到期 Call $200 |
可以先用 Alpaca 的合約查詢端點:https://data.alpaca.markets/v1beta1/options/contracts?underlying_symbols=NVDA&expiration_date_lte=2026-04-06,這會列出所有本週到期的 NVDA 合約代號,再挑選你要查的放進腳本。
市場: 收盤 NVDA: $182.30 合約代號 類型 行使價 Bid Ask 中間價 IV Delta ---------------------------------------------------------------------------------- NVDA260402C00180000 CALL 180.0 0.20 0.36 0.28 85.2% 0.350 NVDA260402C00182500 CALL 182.5 0.08 0.20 0.14 88.1% 0.210 NVDA260402P00180000 PUT 180.0 5.60 5.98 5.79 112.3% -0.650 NVDA260402P00182500 PUT 182.5 7.20 7.65 7.43 115.8% -0.795
(bid+ask)/2,通常是「比較公平」的理論價格。掛限價單時的參考價。feed=opra(需要付費訂閱),或嘗試查詢離到期日更遠的合約(通常至少 1 週以上)。也可以用 Black-Scholes 公式自己計算 delta,但那就比較複雜了。[股票代號][到期日YYMMDD][C/P][行使價x1000 8位]。大多數美股期權都支援,ETF 期權(如 SPY、QQQ)也可以查。set APCA_API_KEY=你的key(Windows)或 export APCA_API_KEY=你的key(Unix),然後在腳本中用 os.environ['APCA_API_KEY'] 讀取。