2026年十月12日 · 研究

我們拆解了一次買錯合約的預測市場回測

我們拆解了一次買錯合約的預測市場回測

預測市場回測可能用了看起來正確的代號、正確的價格歷史,卻交易了錯誤的合約。這種錯誤很容易被忽略,因為市場名稱很短、事件頁面會更新,而 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,則一毛也拿不到。費用、部分成交,以及平台特有的結算機制,都應列入帳目。

$42以 $0.42 買進 100 份 YES 的總成本
$100YES 判定成立時的總結算價值
$0NO 判定成立時的總結算價值

結算:什麼時候交易才算結束?

回測常在部位的最終市場價格處結束。但持有到結果判定的合約,是依規則支付,最後一次報價可能已過時、價差很大,或與最終支付金額相去甚遠。請把結果判定建模為獨立事件:結果、結算時間與現金變動都應來自合約紀錄。

如果平台規則有定義無效或有爭議的結果,也要納入考量。這種情況可能退還本金、支付不同金額,或必須延後結算。二元支付的假設無法涵蓋所有結果判定路徑。

回測結果的判定

以這個例子來說,只有在確認不可變的市場 ID、進場時生效的規則版本、YES 代幣、訊號可取得時間、可成交的賣價與數量、費用,以及正式記錄的結算結果之後,我才會接受所報告的獲利。如果價格檔案無法支援這些查核,誠實的做法是提供情境區間,或標示結果尚未驗證。

對一筆小額交易來說,這或許聽起來很嚴格。但如果數千個市場都發生同樣的資料連結錯誤,回測最終可能只是在仔細衡量策略從未交易過的合約。

預測市場、回測、市場資料、交易執行
← 所有文章