2026年十一月14日 · 研究

你的回測在耶穌受難日交易了。股市沒開。

你的回測在耶穌受難日交易了。股市沒開。

星期四,4 月 2 日,美東時間 16:02。模擬帳本看起來正如我們設計的那樣:做多約 $240,000 的 BTCUSDT 永續合約,做空以 beta 加權的 COIN、MSTR、MARA 和 RIOT 籃子,殘差低於 $500。上週的週五對沖作業已在 15:45 跑完。16:00 UTC 的資金費率只是捨入誤差。我下線時心想,我們終於有了一個不只是在重現 Nasdaq beta 的加密貨幣部位。

星期五是耶穌受難日。我之所以注意到,只是因為加密貨幣群組還在貼爆倉截圖,而股票群組安靜成一種特定的安靜——代表根本沒人坐在位子上。NYSE 和 Nasdaq 休市。Binance 沒有。從星期四現貨收盤到星期五美東時間 16:00,永續合約跌了 4.8%。那天股票空頭根本不成市場。它們只是風險面板上的一排星期四價格。

風險機器人還是發了。

對沖籃子 beta:0.04。殘差 1d:−$11,184。狀態:NEUTRAL

我還留著那張截圖。一位同事把它印出來,貼在我們幾乎沒在用的辦公室冰箱上。綠色的 NEUTRAL 承擔了太多工作。機器人用手上最後的股票成交價來算 beta,那是星期四的收盤競價,對上已經走了 24 小時的 BTC 標記價。凍結的標記價是星期四的一張照片。把那張照片叫做對沖,就是這樣走進復活節週末:手上是裸的加密貨幣部位,報告還在為此恭喜你。

星期一現貨市場開盤。籃子向下跳空,但不是 4.8%,也不是齊步走。COIN 開在 −2.1%。MSTR 跌得更多。MARA 跌得比較少。整個早上我們都在交易一個多活了整整一個我們無法對沖的時段的帳本,然後把當初為這套設計背書的回測揪出來,問了它一個不客氣的問題。上一個耶穌受難日你做了什麼?再上一個呢?還有每一個股市放假、BTC 卻照常交易過完假期的平日?

寫出第一版的研究 agent 把所有資料重採樣成 15 分鐘 K 線並向前填補。notebook 裡用了 Pandas freq='B',看起來像成熟大人的選擇,直到你想起它實際在做什麼。'B' 代表星期一到星期五。耶穌受難日是星期五。2026 年的 Juneteenth 是星期五。美國獨立紀念日補假也是星期五。那個日曆函式根本沒有日曆。它只有平日篩選器。

對沖作業在每週五美東時間 15:45 執行,一般週次用來朝現貨收盤交易,這是合理的時間。耶穌受難日永遠是星期五。在 2023–2026 這段期間,那項作業對上了 4 個耶穌受難日、Juneteenth、7 月 3 日的全日休市,以及 4 個感恩節翌日時段——那些時段的收盤鈴早已在 1:00 PM 響過。一共 10 個星期五時段。每一次模擬器都接受了股票訂單。成交價是星期四收盤價,或把星期五最後一筆常規成交向前遞延,在交易紀錄裡打扮成即時成交。加密貨幣標記價是即時跑的。殘差序列把一條腿根本沒機會回應的對沖波動都算進了功勞。

10現貨市場沒開、無法再平衡的星期五時段
4.8%股票對沖停在星期四成交價時,永續合約的走勢
1.14 → 0.61時段日曆變成真的之後的殘差 Sharpe

週末是同一個 bug,只是發生在我們至少喝啤酒時拿來開玩笑的時程上。假日則是沒人拿來開玩笑的版本,因為 notebook 寫的是營業日,而耶穌受難日在直覺上仍然像是成熟金融體系正在運轉的一天。銀行開門。Fedwire 在線。券商 API 可以看起來醒著,卻沒地方送出 COIN 訂單。

耶穌受難日不是聯邦假日。如果你的時段檢查是「銀行日曆是不是放假」,你就會在休市的股市裡交易。哥倫布日則是鏡像:現貨股票開盤,債券市場休市。交易場所的營業時間是 join key,不是感覺。

提早收盤更安靜,在交易紀錄裡也更無禮。2025 年 11 月 28 日,感恩節翌日,NYSE 在 1:00 PM 收盤。我們的作業仍在 15:45 醒來,看著一條已經把 12:59 最後一筆成交價往前帶了將近 3 小時的 15 分鐘序列,然後「交易收盤」。成交模型甚至還向我們收取收盤競價滑價。16:00 根本沒有競價。競價在 13:00 就發生了,沒有我們。那天下午,模擬盤的失敗比較誠實:新訂單被拒絕,未完成訂單在提早收盤時被取消,成交率為 0。

時段現貨市場回測成交模擬盤
2026 年耶穌受難日全日休市籃子以星期四收盤價成交拒絕;標記價從星期四起就過期
2026 年 Juneteenth全日休市同一週五作業,同一批幽靈成交後來在回放中才抓到
2026 年 7 月 3 日休市(7 月 4 日補假)星期五 15:45 對上星期四成交價沒有現貨時段可以加入
2025 年 11 月 28 日1:00 PM 收盤15:45 再平衡,12:59 最後成交,競價滑價13:00 之後拒絕
普通星期六休市向前填補的股票 K 線,即時永續合約凍結的標的,即時永續合約

我們用一份依交易場所區分的時段檔重跑帳本:常規交易時段、假日、提早收盤、16:00 vs 13:00 收盤,以及每個標記價上的過期時數計數器。進入已休市現貨時段的訂單不會以最新價成交。它們會被拒絕。只要任何一條對沖腿過期超過數小時,風險面板就不准印出 NEUTRAL。單元測試很醜,我喜歡:拿一個普通星期五,把它塗成休市,斷言 COIN 成交為 0、籃子上有過期旗標。然後把收盤畫成 13:00,斷言 15:45 的作業連看都不看競價模型。

殘差 Sharpe 從 1.14 變成 0.61。這兩個數字我都不當成交易的理由。我把這段差距當成自白。我們一直稱為對沖殘差的東西,很大一部分是加密貨幣的假日波動,是在股票空頭腿還是上一時段紀念品的那些日子裡撿來的。週末也做了一部分這種事,我們聊天時已經打過折扣。假日卻藏在營業日重採樣裡,那是一個丟臉得多的藏身之處。

我們仍在跑星期五 15:45 的作業。它現在讀一份 2026 年有 12 列的檔案,其中 2 列還沒發生。感恩節是 26 日。隔天,現貨市場在 13:00 就沒了。我把那個 1:00 PM 收盤在日曆裡放了 2 次、用 2 個不同的名稱,因為我信不過 11 月的自己,也因為如果我放任不管,pandas 仍會開心地把那個星期五叫做營業日。

假日多元資產加密貨幣股票回測
← 所有文章