輸入
- 價格來源。Binance 公開端點
GET /api/v3/klines,參數symbol=BTCUSDT、interval=1d。每根日 K 只保留收盤價 —— 本儲存庫不轉發原始 OHLCV 資料。 - 回填起點。
2017-08-17,Binance 為 BTCUSDT 提供的最早日 K。 - 截止。
今日 UTC − 1 天,即最後一個完整收盤的 UTC 日。當日 UTC 是未完成的 K,會讓quantile5y在日內抖動。
常數
| 名稱 | 取值 | 作用 |
|---|---|---|
GENESIS | 2009-01-03 | BTC 創世區塊日期;幣齡錨點。 |
MA_WINDOW | 200 | ma200 的滾動視窗。 |
FIT_A | 5.84 | log-log 擬合公允價曲線的斜率。 |
FIT_B | −17.01 | 擬合曲線的截距。 |
QUANTILE_MIN_OBS | 365 | 報告 quantile5y 前所需的最少有效 AHR 觀測數。 |
QUANTILE_WINDOW | 1825 | 觀測足夠後的滾動視窗大小(5 × 365)。 |
逐步計算
對每個收盤價為 c_d 的 UTC 日 d:
1 · 200 日均價
ma200_d = mean(close[d-199 .. d])
若已觀測的收盤價不足 200 個(含 d),則 ma200_d = null,所有下游欄位均為 null,且 windowKind = "insufficient_samples"。
2 · 擬合公允價
擬合曲線把 BTC 視作以幣齡錨定的資產,按距創世區塊的天數索引:
coin_age_days_d = floor((d − GENESIS) / 1 天)
fitted_d = 10 ^ (FIT_A · log10(coin_age_days_d) + FIT_B)
= 10 ^ (5.84 · log10(coin_age_days_d) − 17.01)
3 · AHR999
ahr999_d = (c_d / ma200_d) · (c_d / fitted_d)
兩個比值相乘:
- 動量 ——
c_d / ma200_d:當前價相對自身 200 日成本的高低。大於 1 表示高於定投成本,小於 1 表示低於。 - 幣齡錨定的便宜程度 ——
c_d / fitted_d:當前價相對擬合長期軌跡的高低。
乘積把兩個訊號壓縮成一個純量。各儀表板上常見的經驗閾值:
| 區間 | 檔位 |
|---|---|
< 0.45 | 抄底區 · bargain |
0.45 – 1.20 | 定投區 · DCA |
1.20 – 3.00 | 謹慎區 · caution |
> 3.00 | 泡沫區 · bubble |
這些閾值是經驗性的,不屬於公式的正式定義。
4 · 5 年分位
quantile5y_d 是 ahr999_d 在最近有效 AHR 值視窗(含當前值)中的經驗排名:
quantile5y_d = count(window 中 v : v ≤ ahr999_d) / window.length
視窗取決於到目前為止有多少個有效 AHR 觀測:
| 有效觀測數 | 視窗 | windowKind | quantile5y |
|---|---|---|---|
< 365 | — | insufficient_samples | null |
365 – 1824 | 截至當前的全部觀測(擴張) | expanding | 報告 |
≥ 1825 | 最近 1,825 個觀測(滾動) | rolling_5y | 報告 |
離散排名 vs. 內插
分位用的是離散排名 count(v ≤ current) / N,而非 numpy 預設的線性內插分位。理由:
- 九神社區的原始實作都用離散排名。
- 約 1,800 個觀測下,排名解析度 ≈ 0.00055 —— 已比對該數值的任何可操作解讀都更細。
- 它含義清晰:「過去五年裡有多大比例的時間比現在更便宜或一樣便宜?」
你可以在首個非空分位列 2019-03-03 手動驗證,那裡 quantile5y = 78 / 365 = 0.2136986301369863,精確成立。
與其他實作的差異
vs. 九神原始公式
我們使用完全相同的常數(FIT_A = 5.84、FIT_B = −17.01、MA_WINDOW = 200、5 年分位)。僅有的、你需要知道的有意選擇:
- 價格來源。Binance BTCUSDT。部分舊分析用 CoinMarketCap 或 OKX;它們在 2018 年前有分歧,但在 BTCUSDT 成交量佔主導後收斂到 ≤ 0.1%。
- 顯式視窗類型。暴露
windowKind,便於消費者過濾掉 365 至 1,825 的擴張視窗預熱期。
vs. 9992100.xyz
9992100.xyz 是最流行的中文 AHR999 儀表板。每日出現小幅分歧(AHR999 絕對值 ≤ 0.02)是正常的,因為它可能在不同的 UTC 鄰近截止點更新,且其價格來源與收盤時間戳記語意未公開。兩個網站在任一天都應在檔位上一致;不要去追不同實作之間的數值完全相等。
端到端重現
pnpm sync:backfill
pnpm export:csv
pnpm verify # 儲存庫檢查點精確斷言首個分位 / 滾動列
設定 AHR999_SOURCE_BASELINE_PATH=/path/to/ahr999-daily.jsonl 後,pnpm verify 會額外逐列對比,相對誤差容忍度 < 1e-9。不設定時,該指令仍會強制驗證儲存庫內的檢查點與資料集不變量。完整原始碼見 GitHub 儲存庫。