選擇權回測:為什麼比期貨難,以及該怎麼做
選擇權回測比期貨回測難,因為每一口選擇權都會隨時間、履約價、隱含波動率與標的走勢路徑重新定價,所以測試需要完整的選擇權鏈報價、每一腳的價差成本,以及逐根 K 棒重新定價。最便宜又誠實的第一步,是先用標的期貨加上真實成本測試進出場時機的想法。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
選擇權回測比期貨回測難,因為選擇權策略需要一整條選擇權鏈的合約,每根 K 棒都要依時間、履約價、隱含波動率與標的走過的路徑重新定價。要做出貼近實際的測試,需要歷史買價與賣價報價、每一腳的價差成本,以及到期處理。最便宜又誠實的起點,是先用標的期貨測試進出場時機的想法。
為什麼選擇權回測比期貨回測難?
一條價格序列對上一整條選擇權鏈,差別就在這裡,而且資料、成交與帳務會同時受到衝擊。回測一條期貨規則,就像在公路上盯著一輛車;回測一條選擇權規則,則像同時盯著四十輛車,而且每輛車都隨著時間流逝越跑越慢。
選擇權鏈是同一個標的上所有買權與賣權合約的完整清單,涵蓋所有掛牌的履約價與到期日,每一口都有報價。期貨回測每根 K 棒只問一個問題:價格是多少?選擇權回測每根 K 棒要問這個問題四十次以上,接著對每個未平倉部位再問第二個問題:考慮到剩餘時間與市場的緊張程度,它現在值多少?
| 回測的部分 | 期貨策略 | 選擇權策略 |
|---|---|---|
| 每根 K 棒的資料 | 單一合約的開盤、最高、最低、收盤與成交量 | 每個履約價與到期日的買價、賣價與隱含波動率 |
| 成交模型 | 每邊一個跳動點的滑價是常見的起點 | 每一腳半個買賣價差,開盤與快市時更寬 |
| 進場到出場之間的價值 | 只隨標的價格變動 | 隨價格、時間、隱含波動率與利率變動 |
| 出場事件 | 你的出場規則或轉倉日 | 你的出場規則、轉倉、到期、履約或被指派 |
| 部位帳務 | 一個口數、一個每點價值 | 多隻腳,履約價、到期日與保證金各不相同 |
如果你還在決定要交易哪種商品,新手的期貨與選擇權比較說明了為什麼期貨測試比較容易做對。
需要哪些選擇權鏈資料,為什麼這麼貴?
誠實的選擇權回測,需要你的規則可能碰到的每個履約價與到期日的買價與賣價報價,而且要涵蓋規則做決策的每個時間點;在下面這種中等規模的設定中,資料量大約是單一期貨序列的一百倍。這是廠商對選擇權歷史資料收費遠高於期貨歷史資料的原因之一,資料清理的工作量也更大。
決策時間點的影響比多數交易者預期的更大。每天收盤交易一次的策略,每天需要一份選擇權鏈快照。每 15 分鐘檢查一次的策略,則每 15 分鐘就需要一份快照,因為收盤時的報價無法告訴你 10:15 時你會付出多大的價差。快照必須與標的 K 棒取自同一時刻,否則回測會用過時的價格成交。
假設性範例
一檔指數期貨的中等規模選擇權鏈:4 個到期日、價平附近 20 個履約價、每個履約價一個買權與一個賣權,每口合約三個欄位(買價、賣價、隱含波動率)。也就是每根標的 K 棒有 4 × 20 × 2 × 3 = 480 個數值。期貨 K 棒本身只有 5 個數值:開盤、最高、最低、收盤與成交量。對一個跑好幾年的 15 分鐘策略而言,選擇權檔案在尚未清理之前,大小就約為期貨檔案的一百倍。
清理是第二項成本。深度價外的履約價常常買價為零、賣價遠高於合理價值,所以在這些履約價以中間價成交的回測,是在從未存在過的價格上交易。當某個履約價好幾個小時沒有成交,報價也會過時。第一次執行之前,先決定你的規則可以使用哪些履約價與到期日,把其餘的移除。這樣你保留了需要的資料,也去掉了大部分雜訊。
Greeks、隱含波動率與路徑相依如何改變回測?
選擇權部位可能在標的恰好收在交易者預期的位置時仍然虧損,因為它的價值還取決於時間流逝、隱含波動率變動,以及價格走過的路徑,所以回測必須逐根 K 棒為部位重新定價,而不是只在進場與出場時定價。期貨部位是一條直線:獲利等於變動點數乘以每點價值。選擇權部位則是一個曲面,回測必須在上面走過一遍。
隱含波動率是目前的選擇權價格所隱含的未來價格波動程度,以年化百分比表示。Greeks 是選擇權價格對單一輸入因素的敏感度:delta 對應標的價格,theta 對應一天的時間流逝,vega 對應隱含波動率變動一點,gamma 對應 delta 本身變化的速度。路徑相依是指結果取決於標的走過的路徑,而不只是它最後停在哪裡。
為什麼這會迫使回測逐根 K 棒重新定價?因為讓交易提前結束的事件發生在路徑中間:停損被觸發、保證金追繳來臨,或是某條規則寫著「虧損達到 X 就平倉」。只在進場與出場時重新定價的回測,永遠看不到這些事件,報出的是真實帳戶根本撐不到的回升。
假設性範例
一位交易者在到期前 20 天、標的為 100 時賣出一個賣權,打算持有到期。路徑 A:標的維持在 98 到 102 之間,收在 100。賣權每天因時間價值衰減而損失價值,交易以小幅獲利結束。路徑 B:標的在第 8 天跌到 92,之後回升,同樣收在 100。第 8 天時,賣權的價值是賣出價格的數倍,隱含波動率大幅跳升,保證金要求也提高了。停損規則或券商會在深度虧損時把交易平掉。兩條路徑都收在 100,但只有一條讓交易者能收下權利金。
隱含波動率還多了一條路徑。它可能在價格幾乎不動時上升,這在預定公布前常常發生,公布後又急速下降。用固定波動率輸入來重新定價選擇權的回測,會完全錯過這件事。到期時的損益圖只是故事的一部分;如何計算選擇權獲利與損益圖的限制說明了這張圖遺漏了什麼。
哪些成交與價差假設會毀掉大多數選擇權回測?
以中間價成交、忽略多腳交易的買賣價差,以及假設轉倉或到期不用成本,這三個假設會把虧錢的選擇權策略變成看起來賺錢的回測。每一項在單筆交易上都很小,加在一起卻常常比策略的平均每筆損益還大。
- 中間價成交。中間價是買價與賣價的平均。用市價單沒有人能在那裡成交。買方付的價格接近賣價,賣方收到的價格接近買價,所以貼近實際的成交價,每一腳在進場與出場時都至少距離中間價半個價差。
- 多腳交易的價差。垂直價差有兩腳,鐵禿鷹有四腳。每一腳各付自己的半個價差,所以四腳交易在整個持有期間要付八個半價差。有些券商會把複合單當成一個整體,以較好的淨價成交,但回測無法得知這種情況發生的頻率,所以要把各腳分開建模,把較好的成交視為額外的好處。
- 免費轉倉與到期。轉倉是指平掉一個到期日、再開下一個,等於完整付一輪價差與手續費。到期也不是免費的:收盤時在價平附近的選擇權可能被指派,讓一筆風險有限的交易在週末變成標的部位。
假設性範例
一個兩腳價差,在進場與出場兩腳都以中間價成交時,結果為 +$40。進場時每腳的半個價差成本 $10,所以是 −$20。出場同樣是 −$20。整筆交易中每腳一個跳動點的滑價,合計 −$10。每腳手續費 $2、四次成交,共 −$8。淨結果為 −$18。想法沒有變,只是成交模型變了。
能抓出這個問題的測試,與期貨用的相同:把未計成本的平均每筆損益,與所有腳的完整一買一賣(來回)成本相比。回測中的交易成本用整數示範了這個比較。對選擇權而言,要再加上轉倉成本,並乘以腳數。
能不能先透過標的期貨測試選擇權策略?
多數選擇權策略,本質上是把進出場時機或方向的想法包上一層損益形狀,所以最便宜又誠實的第一步,是先用標的期貨加上真實成本測試時機想法,之後才決定選擇權結構是否有加分。如果時機想法在期貨上沒有優勢,選擇權的包裝只是把價差成本加在擲硬幣上。
看看規則實際上說了什麼。「連跌三天後賣出賣權」是一個持有時間很短的做多想法。「價格突破 20 日高點時買進買權」是突破想法。「隱含波動率高時賣出勒式」則有一部分是標的區間的均值回歸想法。這些都能寫成期貨規則:何時進場、哪個方向、何時出場、停損放多遠。這條規則只需要一條價格序列與一般的期貨成本模型。像這樣寫成進出場條件、再加上參數範圍的規則,就是 AlphaPrime(Valynox) 策略生成在期貨這一側處理的內容。
- 寫下時機規則。用白話寫出進場條件、出場條件與停損,不要提到履約價或到期日。
- 在標的期貨上回測,加入手續費、滑價與下一根 K 棒成交。AlphaPrime的核心工作就是這類測試:回測會用你自己的 K 棒資料,以手續費、滑價與下一根 K 棒成交來評估每一個候選策略。
- 用樣本外與推進分析檢驗。保留規則從未見過的資料,檢查結果在那裡是否成立。
- 只有成立時,才把規則對應到選擇權結構。決定方向、持有時間,以及你想付權利金(買進選擇權)還是收權利金(賣出選擇權)。期貨測試得出的持有時間,會告訴你哪個到期日合適。
- 用選擇權鏈報價重新測試,加入每一腳的價差與轉倉成本,讓選擇權這一層建立在已經有效的時機想法之上。
期貨代理測試有兩件事測不到:隱含波動率的變化,以及損益的形狀。賣出權利金的策略特徵是許多小額獲利與罕見的大額虧損,而帶停損的期貨測試無法重現這一點。把代理測試當成想法的測試,把選擇權鏈測試當成結構的測試。純粹的波動率想法,例如在公布前買進跨式,對應起來沒那麼乾淨,但即使如此,期貨測試仍能回答一個有用的問題:觸發之後,標的的波動是否比平常日更大?
選擇權回測軟體應該具備哪些功能?
選擇權回測軟體必須能依歷史選擇權鏈報價重新定價、為每一腳建立價差與滑價模型、處理到期、被指派與轉倉,並報告回撤與保證金;Greeks 圖表之類的顯示功能很有用,但屬於選填。比較選擇權回測軟體時,先檢查必備清單,因為缺少任何一項必備功能,這個工具產出的每個結果都不可靠。
| 功能 | 必備或選填 | 為什麼重要 |
|---|---|---|
| 每個履約價與到期日的歷史買價與賣價 | 必備 | 沒有真實報價,成交只是猜測,價差也看不見 |
| 每根 K 棒為未平倉部位重新定價 | 必備 | 停損、保證金追繳與回撤都發生在進場與出場之間 |
| 每一腳的價差與滑價 | 必備 | 多腳交易每一買一賣(來回)要付好幾次價差 |
| 到期與被指派處理 | 必備 | 到期時在價平附近的選擇權會變成標的部位 |
| 含成本的轉倉邏輯 | 必備 | 轉倉是一次完整的平倉與開倉,不是免費的延續 |
| 保證金與回撤報告 | 必備 | 賣出權利金的策略往往先在保證金上失敗,才在損益上失敗 |
| Greeks 顯示 | 選填 | 有助於理解;回測結果並不依賴它 |
| 波動率曲面圖表 | 選填 | 對研究有用,計算結果並不需要 |
| 情境假設分析工具 | 選填 | 探索單一部位;回測本身已經走過真實路徑 |
| 連結即時模擬交易 | 選填 | 回測通過之後才有用,回測期間用不到 |
對任何工具再多問一個問題:你能自己設定成交假設,並且修改後重跑嗎?只能以中間價成交、又沒有設定可改的工具,給你的結果是無法壓力測試的。
如何讓選擇權回測保持誠實?
適用與期貨相同的檢驗習慣:保留樣本外資料、做推進分析、對價差與滑價假設做壓力測試,並剔除只在一組成交假設下才存活的策略。選擇權比期貨多了更多自由選擇,例如履約價距離、到期天數與轉倉時機,每多一個選擇,就多一種意外擬合過去的方式。
推進分析是這樣的測試:在一段資料窗口上調整策略,再把選出的設定原封不動地拿去交易接下來的窗口,然後向前推移並重複。對選擇權策略而言,調整的設定包括像「賣出低於市價 5% 的履約價,到期日 30 天」這類內容。推進分析說明如何選擇窗口,以及如何解讀串接後的結果。
- 在第一次執行前固定成交與成本假設。每一腳半個價差、每一腳一個跳動點滑價、每一腳手續費、轉倉成本。把它們寫下來,之後就無法偷偷放寬。
- 保留樣本外資料。在規則定案之前,不要動歷史中最近的那一段。
- 按你真的會遵循的時程做推進分析。重新調整的頻率與實單帳戶一樣,不要更頻繁。
- 壓力測試。把價差與滑價加倍後重跑。只保留平均每筆損益仍為正的策略;在這裡失敗的策略,原本就是靠便宜的成交撐著。
數一數你試了多少種變化。如果你測試了二十種履約價距離與六個到期日,再留下最佳組合,那麼最好的回測有一部分只是運氣最好;關於回測過度最佳化的研究顯示,測試的變化越多,勝出者的結果就被灌水得越多(Bailey, Borwein, López de Prado & Zhu, 2014)。在相鄰的履約價與到期日都站得住的結果,比單一最佳格子更有價值。
如果你使用 AlphaPrime,這代表:你在第 1 步固定的成本與滑價設定只需輸入一次,就會套用到每個候選策略,而策略資料庫會把結果整理好供你檢視,所以在評判最佳變化時,你也能看到自己試過多少個相鄰設定。
常見問題
我可以只用標的價格與定價模型來回測選擇權嗎?
你可以由標的算出模型價格,但模型每根 K 棒都需要一個隱含波動率輸入,而這個輸入正是選擇權鏈資料所提供的。固定的波動率數字,會忽略價格方向之外最大的選擇權損益來源。模型價格也沒有買賣價差,所以除非你手動加入價差假設,否則成交會不切實際。
為什麼我的選擇權回測看起來比實單結果好得多?
常見原因是以中間價成交、每一腳沒有價差成本、轉倉免費,以及進場與出場之間沒有重新定價。每一項都在每筆交易上對你多加一點有利的金額,而交易次數很多的賣出權利金策略,會把這個優勢累積很多次。改用買價與賣價成交、每次轉倉計入完整成本、逐根 K 棒重新定價,重跑測試後再比較。
回測需要多少選擇權鏈資料?
你需要規則可能碰到的履約價與到期日的報價,涵蓋規則做決策的每個時間點,並有足夠長的歷史以包含平靜與波動的時期。日線策略每天需要一份快照;日內策略則每根 K 棒需要一份。離價平很遠、規則從未碰到的履約價可以不要,這樣能降低成本與清理工作。
選擇權想法值得先用期貨測試嗎?
值得,因為多數選擇權策略是在時機或方向想法上加了一層損益形狀,而時機想法可以用一條期貨序列與一般成本來測試。如果在那裡就失敗,選擇權結構也救不了它,而你省下了選擇權鏈資料的成本。如果通過,你接下來只需要在已經有效的想法上測試結構。
選擇權回測軟體中最重要的單一功能是什麼?
每個履約價與到期日的歷史買價與賣價報價,並以每一腳為單位建立成交模型。其餘功能,包括 Greeks 與波動率圖表,都是次要的,因為沒有真實價差,結果就是猜測。第二重要的是為未平倉部位逐根 K 棒重新定價,這樣停損、保證金與回撤才是沿著路徑衡量,而不只是在結束時衡量。
參考資料
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.

