數據是怎麼調取的?
第一步:取得 NVDA 現價
GET /v2/stocks/NVDA/snapshot
從 Alpaca Market Data API 取得最新成交價和買賣報價。
第二步:搜索期權合約
GET /v2/options/contracts?underlying_symbols=NVDA&expiration_date=...&strike_price_gte=...&strike_price_lte=...
搜索指定到期日、ATM 附近行使價的活躍合約。回傳合約代碼如 NVDA260417C00175000(= NVDA / 2026-04-17 / Call / $175.00)。
第三步:取得快照和希臘字母
GET /v1beta1/options/snapshots?symbols=...&feed=indicative
回傳每個合約的買賣價、隱含波動率(IV)和希臘字母(Delta、Theta、Gamma)。feed=indicative 參數提供計算後的希臘值。
完整 Python 腳本(一條指令出結果)
# 一條指令,所有數據 - 在 Claude Code 終端直接跑
PYTHONUTF8=1 py -c "
import urllib.request, json, urllib.parse, subprocess, datetime
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())
# 1. Spot price
snap = get('https://data.alpaca.markets/v2/stocks/NVDA/snapshot')
price = snap['latestTrade']['p']
atm = round(price)
# 2. Find contracts for target expiry
exp = '2026-04-17'
params = urllib.parse.urlencode({
'underlying_symbols': 'NVDA',
'expiration_date': exp,
'strike_price_gte': str(atm - 15),
'strike_price_lte': str(atm + 15),
'status': 'active', 'limit': 100
})
resp = get(f'https://paper-api.alpaca.markets/v2/options/contracts?{params}')
contracts = resp['option_contracts']
# 3. Snapshots with greeks
syms = ','.join(c['symbol'] for c in contracts)
snap_p = urllib.parse.urlencode({'symbols': syms, 'feed': 'indicative'})
snaps = get(f'https://data.alpaca.markets/v1beta1/options/snapshots?{snap_p}')['snapshots']
# 4. Print
for c in sorted(contracts, key=lambda x: (float(x['strike_price']), x['type'])):
s = snaps.get(c['symbol'], {})
q = s.get('latestQuote', {})
g = s.get('greeks', {})
print(f'{c[\"type\"]:<5} {float(c[\"strike_price\"]):>7.1f}'
f' bid={q.get(\"bp\",0):>.2f} ask={q.get(\"ap\",0):>.2f}'
f' IV={s.get(\"impliedVolatility\",0):.1%}'
f' d={g.get(\"delta\",0):.3f} th={g.get(\"theta\",0):.3f}')
"
重點說明
- 認證方式:API 密鑰存放在 GCP Secret Manager(project: nvda-strategy),不寫死在代碼裡
- 模擬交易:合約查詢用 paper-api.alpaca.markets,行情數據用 data.alpaca.markets
- 希臘字母:透過 snapshots 端點的
feed=indicative 參數取得
- 合約代碼格式:NVDA260417C00175000 = NVDA / 2026-04-17 / Call / $175.00
- 一條指令設計:單一
py -c 命令,無需臨時文件,只依賴 Python 標準庫 + gcloud CLI