← 回到筆記
可重現性

前一日高低點的停損獵殺

筆記中的每一個數字及其來源:方法細節足以讓人用手算核對,或以幣安與 OKX 的公開封存資料重建一份等價的研 究。文中的程式片段用來說明邏輯,並非重現正式執行的程式碼。

資料

幣安資料取自 data.binance.vision/data/futures/um/,該來源公開且不需要任何憑證:

  • 各合約的 1 分鐘 K 線,這是本研究唯一讀取的價格序列;
  • 資金費率事件及其真實結算時戳,每一筆事件都附有其週期;
  • 每日 aggTrades 檔案,有兩個用途:量測各合約月的價差,以及判定模糊分鐘內成交的先後順序;
  • 每月成交量最大的十個合約的 1 分鐘標記價格 K 線。

OKX 資料取自該交易所的公開封存,位於 static.okx.com/cdn/okex/traderecords/:

  • USDT 永續的每月 1 分鐘 K 線檔案,自 2021 年 9 月起,含後來下市的合約;
  • 每日成交檔案,用來判定模糊分鐘。

OKX 的兩種序列都以 UTC+8 的月與日為單位。檔案會串接起來,並依 K 線開盤時間去除重複,每個成交檔 案則對應到它所涵蓋的 UTC+8 日。

幣安價格以 32 位元浮點數儲存,因此每一次觸及都是在兩側都用已儲存的數值來比較;整數關卡是唯一不取自已儲存 K 線的價位,會先轉換為相同精度再比較,而 OKX 價格則以 64 位元浮點數解析與比較。

樣本範圍

每個月的第一天,所有具備至少 45 天歷史的幣安 USDT 保證金永續合約,依該日之前 30 天的每日美元成 交量中位數排名,前 50 名構成當月的樣本範圍,並排除 BTCDOMUSDT、DEFIUSDT、FOOTBA LLUSDT 與 BLUEBIRDUSDT 這幾個指數型永續。連結商品與股票的 USDT 永續只要排得進來就 保留:共 25 個合約月,多半是 PAXG 與黃金。

排名依據的是封存資料的完整上市歷史,而不是交易所目前的合約清單,因此後來消失的合約仍以其當時實際交易的日期計 入。2020 年 11 月之前符合條件的合約不到 50 個(2020 年 2 月有 2 個,3 月有 8 個 ,一直到 10 月介於 21 到 40 個之間)。結果是 2020 年 2 月到 2026 年 9 月、30 8 個合約、共 3,751 個合約月。

OKX 的樣本範圍,是與每個幣安成員相同標的的 OKX 永續,做法是去掉 1000 這類乘數前綴後對應到 BASE-USDT-SWAP,只要 OKX 有資料即納入。這樣得到 2021 年 10 月到 2026 年 9 月、201 個永續、共 2,697 個合約月,流動性三分位沿用幣安的排名。

價位

日 K 線由 1 分鐘 K 線依 UTC 日彙整而成,一天要有至少 1,380 根 K 線才算完整。第 D 天的波動率尺度 A,是第 D−14 天到第 D−1 天的平均真實區間,這 14 天都 必須完整;在第 D 天生效的每一個價位都使用當天的 A。

TR[d] = max(H[d], C[d-1]) - min(L[d], C[d-1])     # H - L when day d-1 has no bars
A[D]  = mean(TR[D-14 : D])                          # requires all 14 days complete
價位定義有效期間
可見 (V)UTC 第 D−1 日的高點與低點D 00:00 到 D+1 00:00
I10, I13在第 D 天 10:00 或 13:00 UTC 結束的 24 小時視窗的高點與低點自錨點起 24 小時
週線可見前一個 ISO 週的高點與低點整個星期
週線對照組在週四 10:00 UTC 結束的 7 天視窗接下來 7 天
整數關卡前一日收盤價上下最接近的 g = 10^(floor(log10 C[D−1]) − 1) 的整數倍,且至少相距 0.1·A第 D 天
整數關卡對照組在 (k + 0.37)·g 格線上套用同一規則第 D 天

一個價位只有在其有效期間的第一根開盤價距離近側至少 0.1·A 時才具備資格。兩個價位若位於同 一側、在觸及當根 K 線都仍有效,且彼此相距在 0.1·A 之內,即視為重合。本檢驗只使用在該 事件自身觸及 K 線當下仍有效的價位,因此不會讀到觸及之後的任何資訊。

兩種對照組

登記在案的對照組。 它把 I10 與 I13 合併;任何與 I10 或 I13 價位重合的可見事件都會被剔除,與日線或週線可見價位重合的對 照事件亦然。當 I10 與 I13 價位彼此重合時,保留 I10 的紀錄。

乾淨對照組。 它是 I10 與 I13 價位中,極值形成於第 D−1 天的那個子集合。極值分鐘是視窗內第一個達到該極值的 分鐘;當這個分鐘落在其生效日 00:00 UTC 之前時,該價位即為乾淨:

clean = kind.isin([I10, I13]) & (extreme_minute < activation_day * 1440)

在 10:00 UTC 結束的視窗包含當前 UTC 日的前十個小時,而在這幾個小時內形成的極值就是今天的盤中 高點或低點,日 K 線會把它畫出來。在整個幣安樣本中,已判定的登記對照觸及有 57.7% 屬於這一類:29, 387 次對 21,578 次乾淨觸及。它們另外列為一組回報。

結果判定括弧

在有效期間內第一根成交穿越該價位的 1 分鐘 K 線上,以 h = 0.1·A 的對稱括弧記錄 首次通過。上緣 U = L + h,下緣 D = L − h,此處以低點為例說明,高點的情形對稱 ,觀察期為 1,440 根 K 線。

# touch bar b0
if low[b0] <= D:     outcome = AMBIG_A1 if close[b0] >= U else CONT   # A2 flag if high[b0] >= U
elif close[b0] >= U: outcome = REV
else:                continue to later bars                            # A3 flag if high[b0] >= U
# later bars: both barriers in one bar -> AMBIG_A4; else the first barrier hit decides

若在判定出結果之前出現連續五分鐘以上的資料缺漏,或觀察期結束仍未判定,該事件即被剔除;這使得兩組未判定的比例 都低於 0.01%。

逐筆判定

A1 到 A4 這幾個標記用來標示內部先後順序會影響結果的分鐘,在幣安涵蓋 11.0% 的可見觸及與 12. 7% 的登記對照觸及。幣安的乾淨對照組為 14.8%,OKX 則是可見 10.2%、乾淨 13.3%。

由於各處的比例都高於登記在案的 3% 觸發門檻,每一組各抽取至多 400 個被標記事件的分層隨機樣本,逐筆成 交加以判定。每個事件當日的檔案都會下載並裁切到所需的分鐘:

  • 第一筆落在該價位上或穿越該價位的成交即為觸及;
  • 其後成交先碰到哪一側邊界,就由哪一側決定結果;
  • 由於 K 線極值以 32 位元儲存,觸及比較允許 1e-6 的相對容差。

每個被標記的事件隨後套用其所屬「組別與標記」格的比率。若某一格的逐筆事件少於 10 個,就在同一組之內與另一 個雙邊界標記合併(A1 與 A4 合併),此規則僅適用於乾淨對照組的估計。

樣本已判定事件隨機種子
登記在案的檢驗,幣安799 / 7997
乾淨對照組,幣安(可見事件同上;同一樣本中的 200 個乾淨事件,另加 201 個)800 / 800追加抽樣使用 17
乾淨對照組,OKX802 / 8027

分層與權重

差額為 Δ = Σ ws (pV,s − pC,s) / Σ ws,其中 ws 為第 s 層中已判定的可見事件數。任一組事件數少於 10 的層會被剔除,而每一個三分位切點都取自該市場可見組與對照組合 併後的樣本。

估計式維度分層被剔除事件
登記在案方向 × 觸及所在的 4 小時區塊 × 時期 × 流動性 × 距離 × 速度(三分位)97249%
乾淨對照組,主要設定方向 × 時期 × 流動性 × 距離 × 速度 × 經過時間(三分位)4863.9% Binance, 7.6% OKX

時鐘小時這個區塊幾乎把兩組完全分開,因為可見價位在 00:00 生效,而對照組在 10:00 或 13:00 生效,這也是為什麼登記樣本有一半落在某一組缺席的分層裡。乾淨對照組估計式把時鐘小時換成從生效到觸及所經過的 時間。接近速度定義為 |log(觸及時開盤價 / 60 根 K 線前的開盤價)| 除以 A / C[D&mi nus;1]。

統計推論

登記在案之檢驗的區間,來自以 ISO 日曆週為叢集的自助法,同一週的所有合約視為一個叢集,重抽 10,000 次,隨機種子 20261008。兩階段區間在每一次重抽中,還會在各個「組別與標記」格內重新抽取逐筆判定的事 件,再重新計算比率,最後才算 Δ:

for b in range(10_000):
    w = np.bincount(rng.integers(0, W, W), minlength=W)              # weeks
    rates = {cell: rng.choice(x, len(x)).mean() for cell, x in tick.items()}
    draws[b] = delta(w, rates)

在登記樣本上,這完全重現了登記在案的點估計值 −0.019865,並把區間從 [−0 .0366, −0.0053] 放寬到 [−0.0399, −0.002 6],其中 53.2% 的抽樣結果落在 −0.02 或更低。乾淨對照組檢驗以此為其主要區間(隨機 種子 20261009)。雙尾 p 值取抽樣結果中較小那一尾比例的兩倍。

方法檢核

檢核項目通過條件BinanceOKX
洗牌虛無檢定,20 個種子Δ 平均值在 ±0.005 之內登記 +0.0015(標準差 0.0060);乾淨 −0.0011乾淨 −0.0005
污染檢定,200 個事件價位、A、資格、重合、分層與極值分鐘皆逐位元相同200/200(兩種設計皆是)200/200
洩漏價位(第 D 天自身的高點或低點)|Δ| > 0.1+0.506不適用
時鐘錨點安慰劑(I10 對 I13)區間包含 0,或 |Δ| < 0.01登記 +0.011 [−0.015, +0.037];乾淨 +0.008 [−0.021, +0.038]乾淨 −0.013 [−0.054, +0.027]
編譯核心對照純 Python 參考實作0 處不一致30,000 筆中 0 筆(ETH、BTC、1000PEPE)同一份程式碼

洗牌是把整根 1 分鐘 K 線當作相對形狀(開盤到高點、低點與收盤)在各個日曆月之內重新排列,再從序列最初的 開盤價開始串接,使每一根 K 線都在前一根洗牌後的收盤價開出;價位、A、分層與結果都以未更動的程式碼重新計算 。

錨點安慰劑的檢定力偏低:它約 2.6 個百分點的半寬超過了登記在案的效果量,因此它只能排除大於約 3.7 個 百分點的時鐘錨點效應。

各項檢驗結果

檢驗Δ95% 區間進入估計/已判定的可見事件標籤
登記在案,逐筆校正−0.0199−0.0366 到 −0.005318,689 / 37,355登記在案:「真實但不重大」
登記在案,兩階段區間−0.0199−0.0399 到 −0.0026同上不適用
登記在案,1 分鐘−0.0190−0.0371 到 −0.003418,511不適用
乾淨對照組,幣安−0.0511−0.0673 到 −0.036235,707 / 37,551重大的續勢
乾淨對照組,OKX−0.0436−0.0625 到 −0.026722,717 / 24,841重大的續勢

乾淨對照組的標籤依循增補文件中以區間為準的表格:重大是指區間落在零以下,且點估計值達到或超過 −0.02。

變體BinanceOKX
登記在案的分層−0.041 (−0.061 到 −0.022)−0.034 (−0.059 到 −0.012)
主要分層再加上價位年齡−0.031 (−0.048 到 −0.017)−0.037 (−0.055 到 −0.022)
不含時間分層−0.046 (−0.060 到 −0.032)−0.035 (−0.052 到 −0.020)
不分層−0.046 (−0.059 到 −0.032)−0.034 (−0.050 到 −0.020)
剔除與週線價位重合的可見事件−0.048 (−0.064 到 −0.034)−0.041 (−0.059 到 −0.025)
僅 I10 乾淨−0.045 (−0.062 到 −0.029)−0.035 (−0.055 到 −0.016)
僅 I13 乾淨−0.077 (−0.102 到 −0.054)−0.064 (−0.096 到 −0.035)
以今天的盤中極值作為對照+0.001 (−0.013 到 +0.013)−0.009 (−0.026 到 +0.007)
把登記在案的設計套用到 OKX不適用−0.028 (−0.051 到 −0.007)

乾淨對照組的各種變體,Δ 及其 95% 區間。

探索性分析,在乾淨對照組結果之後進行。 在生效當天就被碰到、且落在前一日區間內的乾淨對照價位,在幣安為 −0.049(−0.065 到 −0.035),在 OKX 為 −0.052(−0.074 到 −0 .034)。若在隔天才被碰到,也就是構成對前一日極值的突破,同樣這些價位得到 −0.004(− 0.024 到 +0.015)與 −0.015(−0.038 到 +0.009)。

次要檢驗。

  • 位移剖析(1 分鐘,登記在案的對照組)。 在價位上為 −0.019,在 0.05 ATR 處為 −0.027,在 0.1 ATR 處為 −0.020,在 0.2 處為 −0.002,在 0.3 處為 +0.005,在 0.5 處為 −0.010。0.75 與 1.0 ATR 的位移未予列出,因為進入那些估計的可見事件不到 2,000 個。
  • 週線價位。 −0.039 (−0.060 到 −0.019).
  • 整數關卡。 在 80,987 次整數觸及與 82,121 次對照觸及上為 −0.029(−0.034 到 −0.024);對照格線的反轉率為 0.517。週線與整數關卡兩項結果在 Holm 校正下皆為拒絕。
  • 異質性。 每一個時期、每一個方向、每一個流動性三分位與每一個觸及小時區塊都是負值,介於 −0.002 到 &minu s;0.028 之間。

交易規則、成本與資金費率

兩條規則在主樣本的每一次觸及上執行,每個價位、每條規則各一筆交易:

  • Sweep 反向操作。 在觸及後 60 根 K 線之內,最深偏離仍維持在 0.3·A 以內、且第一根收回內側的 K 線。進場在下 一根開盤,停損設在偏離之外 0.05·A,目標為風險的兩倍。
  • 突破。 60 根 K 線之內第一根越過價位至少 0.1·A 的收盤,進場在下一根開盤,停損設在 L + 0.05 ·A,目標為風險的兩倍。

出場讀取完整的 1 分鐘 OHLC,當停損與目標落在同一根 K 線時以停損計,若跳空穿越任一邊則以開盤價成交 ,並在進場後 1,440 分鐘以時間出場。滾動前推版本以 12 個月在九種設定中擇一,再測試接下來的 3 個 月,自 2021 年第 1 季起每次推進一季;訓練以進場時間為準且未做淨化,因而有 1,059,975 筆交 易中的 729 筆在下一個測試季內出場。

gross = direction * (exit / entry - 1)
fee   = 2 * 5e-4                                  # taker, both fills
slip  = 2 * 0.75 * spread_month                   # half spread plus half again, per fill
fund  = -direction * sum(rate_k for settlement k in (entry, exit])
net   = gross + fund - fee - slip

價差取主動方翻轉之間成交價彈跳幅度的中位數,於每個合約月的 8 日與 22 日量測,必要時最多往後遞補三次。 在 3,751 個合約月中,有 2,123 個是為本研究量測的,4 個沒有成交檔案,其餘來自以同一估計式所做 的較早量測,並以 2023 年 7 月 15 日 BTCUSDT 的 bookTicker 驗證,結果為 0 .0330 bp。

可見價位上的四項檢驗構成一個 Benjamini-Hochberg 家族,四項的單尾 p 值都是 1.0,而 滾動前推交易簿在 9 次嘗試下的緊縮夏普值實際上為零。

封存的計畫

有三份文件以 SHA-256 封存。可來信 daniel@daru.finance 索取。

文件SHA-256封存時間(UTC)
預先登記(PREREG.md)51a8744e512bb0423f9d7f39f013d6c03186049fcab506b2427c795dc99dcc2f2026-10-08 21:03:57
逐項記錄偏離之處的修訂版(PREREG-v2.md)3694a506513d74a900a5f2b354ccae96b54fd70d2820fb520f6a93222d04889a2026-10-09 02:37:03
乾淨對照組、OKX 與前瞻檢驗計畫(ADDENDUM-A.md)d5f046bb6f53183e583448a20aa6d1c48613e290101681016109476af0f726b12026-10-09 02:39:06
sha256sum PREREG.md PREREG-v2.md ADDENDUM-A.md

預先登記是在任何結果被計算出來之前封存的,而修訂版則是在登記在案的結果出來之後才寫的,並在第一行就說明了這一 點。幣安的乾淨對照組檢驗是在 v1 結果之後登記的;OKX 的重做則是在任何 OKX 價位或結果被計算之前登 記的。

登記在案的結論,原文照錄: 「真實但不重大。」與之搭配的登記答案範本「可量測,但小到不足以移動停損」在修訂版中撤回,因為區間延伸到 − 0.037,已超過 0.02 的重大性門檻。

由增補文件封存規則所產生的答案句: 「不會:它們反而更常被突破,約多 4 個百分點」。其條件全部成立:所有區間都在零以下,兩項乾淨對照組檢驗都達到重大,其 中 N 取較小估計值 4.36 的下取整。

與筆記一同顯示的答案句: 「不會:它們被突破的頻率至少和其他價位一樣高」。這句話只陳述每一種設定都支持的內容,因為探索性切分顯示,那 4 個百分 點的幅度在對照前一日區間內未畫出的價位時成立,而在對照「碰到時同時也突破近期極值」的未畫出價位時則大致消失。

與預先登記的偏離之處

修訂版連同其雜湊值逐項記錄了以下各點。

  1. 洗牌的建構方式。 封存的文字要求每個月都從該月原本的第一個開盤價重新串接,這會在每個月 1 日 00:00 UTC 製造一個價格跳空,因 為洗牌後的月份絕不會剛好結束在下一個真實月份開始的位置。前一天仍然有效的價位會被那根跳空 K 線碰到,在 20 個種子 上共發生 54,391 次,其中 2% 到 3% 判定為反轉;因此依封存文字執行的洗牌檢核回傳 +0.0323 而未通 過,若照封存文字的字面意思,登記在案的檢驗就是「不予採信:方法」。把洗牌後的路徑跨月連續串接可消除該跳空,之後檢核回傳 +0.0015;筆記中的每一項結果都採用連續串接的建構方式。
  2. 整數關卡的精度。 整數關卡與其對照價位一開始是以 64 位元精度對上 32 位元的 K 線極值來比較,這會漏掉一些恰好落在價位上的成交。 改以 32 位元精度後,估計值從 −0.0331 變為 −0.0292,Holm 校正的判定不 變。
  3. 樣本過小規則。 該規則要求 20,000 個已判定的可見事件,並套用在分層篩選之前的已判定事件上:可見 37,355 個、對照 50, 662 個。若改在篩選之後計算,進入估計的可見事件為 18,689 個,依那種讀法,登記在案的檢驗將會是「樣本過小、無 法判定」。
  4. 實作上的解讀。 指數清單、第一個真實區間、切點、時期、逐筆容差、週線與整數價位的重合判定、逐筆校正的適用範圍,以及交易規則的進場 K 線,都寫進了修訂版。其中有些是在執行之後才記錄的,時間取自檔案時戳。
  5. 核心比對的時機。 編譯核心與純 Python 參考實作的比對,是在完整執行之後才做的,而非原計畫的事前,結果有 0 處不一致。
  6. 回報內容的增補與撤回。 新增了兩階段區間。以標記價格做的切分,原本被解讀為停損對強平之別,現予撤回,因為只在最後成交價上看得到的觸及,依其建構 方式本來就是淺影線,所以那項切分量測到的其實是穿越深度。0.5 ATR 之外的位移不予回報。
  7. 一項探索性分析。 依觸及日對乾淨對照組所做的切分,是在乾淨對照組結果出來之後才執行的,出現之處一律標示為探索性。

前瞻檢驗

已在增補文件中定義,尚未執行。它涵蓋 2026 年 9 月 19 日(含)之後生效的幣安與 OKX 價位,採 用乾淨對照組估計式,額外把市場加入作為一個分層,並沿用同一張決策表。

它會在兩個市場合計累積至少 30,000 個已判定可見事件之後的第一個月底執行。每年約累積 10,700 個 ,因此預計在 2029 年前後;若到 2029 年 12 月 31 日仍未達門檻,檢驗就在該日執行,並標示為 檢定力不足。

限制

  • 區間極值。 本設計並未把可見性與「身為區間極值」區分開來。
  • 日界線。 00:00 UTC 同時也是幣安的資金費率時點,而 OKX 的預設 K 線使用 UTC+8。
  • OKX 並非獨立的歷史資料。 它的價格在相同標的上與幣安同步變動,因此這次重做並不是一段獨立的價格歷史。
  • 未被觀察到的委託。 停損與強平始終無法直接觀察。
  • 樣本範圍。 2020 年的合約數不到 50 個,且包含 25 個非加密貨幣的合約月。
  • 樣本範圍邊界的重合判定。 某合約進入樣本範圍期間的第一天或最後一天的價位,只會對照為樣本範圍日所建立的價位來檢查重合,這影響不到 2% 的事件。
  • 逐筆格數偏少。 A1 與 A4 這兩個逐筆格各自只建立在 5 到 17 個事件上。

索取完整流程

筆記中的圖表繪自 本研究公開的結果表。每筆交易的明細、事件表與完整流程並不從本頁散布;如需索取,請來信至 daniel@daru.finance.