2026年十月31日 · 市場微結構

我們在 Binance 回測、在 Bybit 模擬交易。優勢其實是領先落後。

我們在 Binance 回測、在 Bybit 模擬交易。優勢其實是領先落後。

我們有一套 1 分鐘 BTC 動能策略,在 Binance 上看起來很誠實。taker 手續費、資金費率、一項我們已經調得稍嫌嚴苛的平方根衝擊項。一組不讓人丟臉的 walk-forward。模擬帳戶住在 Bybit,因為金鑰在那裡。我跟自己說 BTC 就是 BTC。到了週五,我手上是一套一直在交易我們成交不到的領先落後的策略,以及一個屬於我們沒有帳戶的那家交易所的 Sharpe。

週一:一份乾淨的 Binance 回測

那個 agent 吐出的東西幾乎無聊:15 根 K 線報酬對上慢速均線,在下一根開盤做多或做空,觸及停損或 12 分鐘後平倉。我們把它強制套到 Binance USD-M BTCUSDT,2023 年到 2026 年初,而且拒絕看任何未扣成本的數字。

扣完 4.0 bps taker、每小時資金費率與衝擊之後,walk-forward Sharpe 落在 1.6。每筆成交的平均淨優勢是 3.4 bps。交易筆數高到我不再去戳 bootstrap。我們自己這套系統本來就會加的延遲緩衝(訊號到下單,狀況好時 40 毫秒)幾乎沒推動它。我記得自己隱約有點惱,它居然沒有更脆弱。

週二:模擬帳戶開始「滑價」

模擬在 09:12 UTC 上線。同一份程式、同一組參數、同一條「下一根開盤」規則,指向 Bybit 的 linear BTCUSDT。第一個下午看起來像倒楣連發。我們的成交比同一分鐘的 Binance 重播差 2–8 bps,而且永遠朝交易方向偏。成交紀錄寫的是滑價。我信了成交紀錄,直到那些錯過開始聚集在 Binance 已經先跑起來的那些分鐘。

隔夜,缺口並沒有像嘈雜成交模型那樣均值回歸。它就坐在那裡。Bybit 上的一筆買單,成交在 Binance 早一拍就出現過的價格,然後 Bybit 才趕到,然後我們付了那個價。而策略想做的那些分鐘,正是兩條行情帶意見不合的分鐘。平靜的分鐘,收盤價疊在彼此上頭,策略毫不在意。它在挑選分歧,還把那叫做 alpha。

3.4 bpsBinance 每筆成交的平均淨優勢
4.1 bps我們實際交易那些分鐘的收盤價差中位數
1.6 → 0.4以 Bybit 原生資料重跑後的 walk-forward Sharpe

週三:兩條行情帶,同一座時鐘

我們把兩邊的最新成交行情拉下來,用交易所時間戳對齊,然後問了一個不客氣的問題:當 BTC 至少走 2 個 tick 時,哪家交易所先印出來?平靜時段,Binance 在這類突波裡約有 2/3 領先 Bybit,領先中位數約 40 毫秒,這落在很多「我們有加延遲」的對話裡,卻在 1 分鐘 K 線之外。週二 CPI 公布期間,領先被拉長到數百毫秒,有幾秒很難看,兩邊最新價相差 $80。我坐在那裡,兩邊盤口都開著,看著 Bybit 去追一部 Binance 已經放完的電影。

那就是這週的味道,而且它不在 Sharpe 裡。你理智上可以知道,加密貨幣的最新成交價是交易所本地的。但親眼看同一個幣開在兩個視窗,然後發現其中一個活在過去,是另一回事。

然後我們做了我週一就該要求的測試。訊號留在 Binance。在 Bybit 的下一根開盤成交。那才是你偷看流動性較好的行情帶、卻在別處交易時,模擬帳戶真正的資訊集合;那也是一種你永遠無法在規模上拿到的前視:你在用執行交易所還沒印出來的價格。優勢掉到 0.6 bps。反過來(Bybit 訊號、Binance 成交)你就鑄出一場幻想。同所 Binance 仍是 3.4。「策略」多半只是待在較快的那本掛單簿上。

若你的訊號交易所領先你的執行交易所,研究行情帶裡每一筆下一根成交,都是帳戶還沒被報過的價格。把這兩座時鐘混在一起,不是滑價參數。那是捏造的成交。

我們交易過的那些分鐘,1 分鐘收盤價差的中位數是 4.1 bps。無條件、涵蓋所有分鐘,大約是 1.5。當然。訊號是在有人已經開始動的時候觸發的。我們一直在被挑選過的樣本上量優勢,而那正是交易所分歧棲身之處。

我以前覺得最糟的交易所 bug 是商品代碼對應,BTCUSDT 對上 BTC-PERP,一次 join 默默複製出雙倍倉位。那是記帳。這次是在 CPI 期間同時看兩本掛單簿,然後發現我研究的是一個我並沒有在交易的市場。

週四:資金費率、標記價和手續費也不是同一個市場

一旦你承認最新成交價不一樣,就得承認其餘的行情資料契約也不一樣。我們把 Binance 的手續費表複製進 Bybit 模擬帳戶,然後納悶為什麼成本那一列在漂。

輸入Binance 回測那週的 Bybit 模擬
最新成交價Binance USD-MBybit linear
taker 手續費4.0 bps5.5 bps
資金費率間隔每小時00 / 08 / 16 UTC
標記價 / 指數Binance 籃子Bybit 籃子
最小數量 / tick0.001 / 0.100.001 / 0.10
強平計算從未觸及,BTC標記價不同,仍從未觸及

tick 與 lot 在 BTC 上剛好一致。我不會把這點推論成通則。週四晚上我們瞄過的 SOL 掛單簿,tick size 和最小名目金額都不一樣,交易分鐘的收盤價差是 11 bps。資金費率是比較慢的那道滲漏。Binance 每小時收付。Bybit 那檔 linear 仍走 8 小時週期。一筆抱過 01:00 UTC 的倉位,研究帳本裡會記上一筆 Binance 費用,模擬端則是沉默,然後在 08:00 一筆入帳,而回測早已一滴一滴扣完。持倉成本在一週對得上,在一個下午對不上,而那正好是這套策略活著的時間尺度。

手續費幾乎無聊,卻仍吃掉 3.4 bps 故事裡的 1.5 bps。人們把 4.0 對上 5.5 當成註腳,因為跟 2% 的日波動比起來它看起來很小。跟 3.4 bps 的優勢比,它一點也不小。我們早就知道這件事。我們只是把這份知識套到錯誤交易所的費率表上。

週五:以 Bybit 原生資料重跑

整套用 Bybit OHLCV、Bybit 資金費率時間戳、Bybit 5.5 bps 重建。同一條程式路徑、同一組 walk-forward 切點、同一個衝擊函數。Sharpe 0.4。平均淨優勢 0.9 bps,一旦你不再把 Binance 的第一眼當禮物送給它,這就落在 1 分鐘 taker 策略的雜訊裡。

那是一個不同的市場,不是比較吵的市場。模擬打回這次回測,不是因為模擬在抽象意義上「更真實」。模擬一直在研究從未見過的掛單簿裡成交。那個 1.6 內部是自洽的。它自洽的對象是錯誤的交易所。

我們把 Binance 版本留在封存裡,報告上註了一句:不要拿這個帳戶去對這條行情帶做模擬。能繼續跑的是 Bybit 版本,數字沒人會發串文。這才是正確結果。我還是有點想念那個 1.6,而這正表示它在做一份還沒賺到的工。

下次我們會省掉什麼

那條捷徑是社會學的。Binance 是每個資料商、每本研究筆記本、每個 agent 預設都想塞給你的行情帶。帳戶則開在你實際開得成的地方。這兩件事感覺像營運細節。它們就是回測。

  1. 先選執行交易所。用那家交易所的最新成交價、資金費率時間戳、標記價、tick 和手續費等級來建研究行情帶。若資料商的預設是 Binance,那不是預設。那是另一套策略。
  2. 若你拿不到即將模擬的那家交易所的歷史,不要拿一條領先的行情帶頂替,再把缺口叫做滑價。要嘛等,要嘛把外所行情當延遲訊號,把它落後到執行掛單簿裡本來就看得見的時候。
  3. 比對模擬與回測時,把漂移拆開:交易分鐘的最新成交價缺口、手續費那一列、資金費率時間戳、停損用的標記價。週二的成交紀錄把這四項混在一起,貼上滑價的標籤。
  4. 刻意跑交叉測試。訊號在 A,成交在 B。若全部優勢都住在那裡,你沒有策略。你有的是一段無法在規模上成交到的領先落後。

在 Bybit 交易時,我還會偷看 Binance 嗎?當作裁量式的理智檢查,會。當作成交,不會。模擬帳戶已經告訴我們那一眼值多少。它值另一個房間先印出來的 4.1 bps,而那些我們拿不到。

加密貨幣期貨回測模擬交易市場微結構領先落後
← 所有文章