一筆市場資料即使完全正確,也可能無法作為回測的有效證據。交易確實發生了,價格也沒錯,時間戳記有效;但資料流可能延遲送達,供應商可能事後才修正資料,或者報價所屬的市場根本不是策略能接觸到的市場。
要判斷歷史資料是否可交易,稽核的不能只有事件時間戳記。你還需要知道資料列描述的是什麼、何時可供系統使用、代表哪個交易場所或金融商品,以及該報價或交易是否足以合理支持你的委託。
歷史價格正確,就足以用於回測嗎?
不夠。準確性回答的是:「來源最後記錄的價格是多少?」回測還得回答:「策略在做決策時能掌握哪些資訊?」以及「策略實際上能成交嗎?」這是兩個不同的問題。
假設某筆加密貨幣交易在 12:00:00.120 成交,但資料供應商的資料流直到 12:00:00.480 才把它送到你的程式。策略在 .200 做決策時,無法使用這筆交易,即使事件時間早於決策時間。如果歷史檔案只保留事件時間,回測可能在不知不覺中讓策略取得即時運作時尚未收到的資訊。
| 時間或欄位 | 代表的資訊 | 缺少時的回測問題 |
|---|---|---|
| 事件時間 | 交易所所記錄的事件發生時間 | 把市場時間誤當成策略可用時間 |
| 接收時間 | 資料收集器收到訊息的時間 | 把延遲資料當成即時送達 |
| 序號或更新 ID | 事件在資料流中的順序 | 更新套用順序錯誤,或在沒有察覺的情況下漏掉更新 |
| 修訂時間 | 修正後的歷史值開始可知的時間 | 用原始資料流中不存在的數值進行回測 |
如果你的資料封存沒有接收時間,請如實說明這項缺漏。你可以測試一種延遲假設,或把研究結論限定在事件時間範圍內。你無法從從未儲存的時間戳記還原當時的確切資訊集合。
如何判斷報價是否能實際成交?
先確認你的委託會送達哪個市場。綜合最佳買價與賣價可能彙整了多個交易場所,但這並不能證明你的帳戶能取得顯示的數量、委託抵達時該報價仍然存在,或該交易場所會接受你的委託類型。
對市價單來說,以中間價成交通常只是虛構。較實用的估算方式是依照委託數量逐檔消耗可見掛單,再加上手續費和延遲或衝擊假設。如果你只有最佳買賣價資料,就要限制結論範圍:你可以估算第一檔,但無法推斷從未記錄的深度。
對限價單來說,價格觸及不代表成交。排在你前面的委託可能會先消耗可用數量。一般快照通常無法得知排隊位置,因此以價格觸及判定成交的規則,應視為樂觀情境,而非實際發生的事實。
1 分鐘 K 線可以告訴你,最低價曾跌破你的限價。它無法告訴你,低點出現前你的掛單是否已送達交易場所、當時成交了多少,或你前面排了多少數量。
信任一份市場資料封存前,應該檢查什麼?
我會先檢查那些基本項目。相較於在有問題的資料流上套用精密的執行模型,這些檢查更能找出研究中的錯誤。
- 涵蓋狀況: 是否有缺漏時段、重複事件、序號中斷,或無法解釋的零成交量突增?
- 市場識別: 這個代號是否一直對應相同的交易所、合約、計價貨幣與金融商品規格?
- 可用性: 事件時間與接收時間是否都已保留?如果沒有,用什麼延遲假設來界定結果?
- 修正: 你能否區分原始訊息與供應商事後補入或修訂的資料?
- 單位: 價格、數量、合約乘數與時間戳記是否都採用一致的解讀方式?
最後一項聽起來簡單得不能再簡單。我曾經花了一個早上追查一個看似波動度狀態改變的現象,最後發現只是資料流遷移後,數量欄位的單位變了。圖表很漂亮,單位卻錯了。
如何測試資料可用性會不會改變結果?
針對策略的決策邊界做一組小型敏感度測試。按照合理的延遲調整資料可用時間,剔除序列連續性中斷的更新,並在有實際交易場所委託簿資料時,用它比較成交結果。回報原始結果與劣化後的結果。如果極短的延遲就讓效果消失,策略可能仰賴你的資料收集設定無法穩定提供的資訊優勢。
舉個具體例子,假設最佳買價上漲 1 個 tick 時就會觸發訊號。用交易所事件時間重播一次,再用資料收集器的接收時間重播一次。如果事件時間版本交易 40 次,而接收時間版本交易 27 次,這項差異就是策略證據的一部分。兩種重播各自的績效也是。不要因為較弱的重播看起來不夠漂亮,就把它藏起來。
模擬交易是很實用的下一步檢查,因為它能在研究系統使用的同一條作業流程中,揭露資料流延遲、過時報價、代號對應錯誤與交易場所的限制。它仍無法重現所有實際排隊情況或市場衝擊。要清楚標示這個界線。
實務上,「可交易資料」是什麼意思?
意思是,回測能說明觀測何時發生、策略何時能讀取、資料來自哪個市場,以及哪些執行證據支持假設的成交結果。乾淨的價格序列只是起點。當時間、存取權限與成交假設都經得起檢視,而且調弱這些假設後結果依然合理,研究才真正可信。
← 所有文章


