預測市場回測可能用了看起來正確的代號、正確的價格歷史,卻交易了錯誤的合約。這種錯誤很容易被忽略,因為市場名稱很短、事件頁面會更新,而 YES 份額看起來永遠只是介於 0 和 1 之間的價格。
假設有個市場標示為「《清潔運輸法案》會通過嗎?」策略在收到新聞訊號後,以 0.42 買進 YES。回測後來把部位標記為 1.00。在相信這筆獲利之前,我想先確認合約的承諾究竟是什麼:是哪一項法案、「通過」的定義為何、截止日期是何時,以及由哪個來源進行結算。
標題:「《清潔運輸法案》會通過嗎?」
標題是供顯示的字串,不是穩定的金融商品識別碼。兩個市場的措辭可能幾乎一樣,指的卻是不同的立法會期、修正後的法案或截止日期。平台也可能為了讓市場更清楚而修改標題,但底層條款並未改變。
因此,回測應以平台不可變的市場或合約 ID 作為部位識別依據,並保留完整規則文字及其版本。如果歷史資料只有標題和代號,就無法確認價格序列是否屬於策略原本打算交易的合約。
| 識別欄位 | 確認的內容 | 省略時的風險 |
|---|---|---|
| 平台與市場 ID | 特定的上架市場 | 相似標題的市場被合併 |
| 規則版本 | 參與者同意的條款 | 後續編輯套用到較早的交易 |
| 結果代幣 ID | 正在交易的 YES 或 NO 權益 | YES 和 NO 的價格遭到互換或合併 |
| 結果判定來源 | 用來判定結果的證據 | 回測假設了不同的判定機構 |
規則:「通過」代表什麼?
假設規則寫明,法案必須在 6 月 30 日前通過眾議院和參議院,之後還要由總統簽署。若回測把只要通過任一議院就算成功,賭注就變了。把下一會期同名的法案也算進去,同樣改變了賭注。
請把實際的結果判定標準讀成可執行條件。記錄截止日期與時區、符合條件的事件、任何例外,以及指定的結果判定來源。模糊之處也很重要:如果平台規則沒有涵蓋某種合理情境,就不要悄悄挑選一種恰好符合歷史結果的解讀。
這項工作有個很不起眼、卻很實際的環節:在任何值得關注的事情發生前,先保存規則頁面。等結果出爐後才存下的頁面,可能只會呈現最終措辭,但策略進場時依據的可能是較早版本。
時間軸:策略何時能得知資訊?
現在假設規則沒有問題,新聞訊號在 14:05 UTC 觸發。歷史資料流顯示 14:05 有一筆交易,價格為 0.42。但光憑時間戳記,無法得知資訊是否在交易前已經取得、記錄的價格之後是否仍可成交,或是這根 bar 代表報價、成交,還是區間彙總。
請將訊號可取得時間與市場事件時間分開記錄。接著,應在策略能完成運算並送出委託之後才下單。對流動性稀薄的市場來說,下一筆記錄到的交易可能要等上幾分鐘;這並不能證明你的委託能以該價格成交。
價格:報價不等於成交
YES 報價為 0.42,代表每份價格為 42 美分,但只看最後成交價的序列會隱藏買賣價差和可成交數量。如果最佳賣價是 0.45,只有 20 份,那麼模擬買進 100 份就不可能全部以 0.42 成交。委託可能會逐檔吃單、等待,或完全沒有成交。
預測市場價格也容易讓人走捷徑:把 0.42 當成 42% 的機率,卻忘了這同時也是進場時的現金支出。100 份 YES 部位在扣除費用前要花 $42。若結算為 $1,總收款為 $100;若結算為 $0,則一毛也拿不到。費用、部分成交,以及平台特有的結算機制,都應列入帳目。
結算:什麼時候交易才算結束?
回測常在部位的最終市場價格處結束。但持有到結果判定的合約,是依規則支付,最後一次報價可能已過時、價差很大,或與最終支付金額相去甚遠。請把結果判定建模為獨立事件:結果、結算時間與現金變動都應來自合約紀錄。
如果平台規則有定義無效或有爭議的結果,也要納入考量。這種情況可能退還本金、支付不同金額,或必須延後結算。二元支付的假設無法涵蓋所有結果判定路徑。
回測結果的判定
以這個例子來說,只有在確認不可變的市場 ID、進場時生效的規則版本、YES 代幣、訊號可取得時間、可成交的賣價與數量、費用,以及正式記錄的結算結果之後,我才會接受所報告的獲利。如果價格檔案無法支援這些查核,誠實的做法是提供情境區間,或標示結果尚未驗證。
對一筆小額交易來說,這或許聽起來很嚴格。但如果數千個市場都發生同樣的資料連結錯誤,回測最終可能只是在仔細衡量策略從未交易過的合約。
← 所有文章


