Method and backtest transparency (futures)
The four stages (paraphrasing the book)
- Stage 1 · Basing: the MA flattens and price oscillates around it.
- Stage 2 · Advancing: price moves above the MA and the MA turns up.
- Stage 3 · Top area: the MA flattens and price swings widely around it.
- Stage 4 · Declining: price is below a falling MA.
How this site implements it (logic_version = v1w210p, Binance USDⓈ-M perpetuals)
- MA: 210-day simple moving average. Crypto trades 7×24, so 30 weeks = 210 daily bars; the book uses weekly bars, this site decides daily, so the two are not equivalent.
- Slope: 20-day change of the MA; threshold = 0.2% × a volatility factor (60-day close volatility / 2%, clipped to 0.5–2.5), ×1.5 for altcoins.
- Stage 2: close > MA and slope > threshold; Stage 4: close < MA and slope < −threshold; when price hugs a flat MA the stage is 1 (previous clear stage was 4) or 3 (previous clear stage was 2).
- A stage change needs 3 consecutive days. 'Undetermined' means not enough data or no condition met — a category added by this site, not in the book.
- Universe: Binance USDⓈ-M USDT perpetuals (excluding TradFi and index perpetuals, stablecoins, wrapped and leveraged tokens); each day the top 200 by 30-day volume among contracts with ≥ 210 daily bars. The historical universe is rebuilt day by day, including contracts delisted later.
Signal rules
The rules are word for word the former spot long/short rules (v1w210); only the prices, universe and fees are the perpetuals', with funding and liquidation added.
- Long entry: close crosses above the 210-day MA, the MA's 20-day slope > 0, and volume ≥ 1.2 × the 14-day average; altcoins additionally need BTC in Stage 1 or 2 that day (the BTC market gate kept from the original altcoin strategy). Exit: close crosses below the MA, or closes below MA × 0.90.
- Short entry: close below the 210-day MA, slope < 0, and close below the lowest close of the prior 30 days. Exit: close crosses above the MA, or closes ≥ 15% above the short entry.
- Entries only when the coin is in the universe that day; exits regardless. If a held coin has a missing day (no exchange bar, e.g. a trading halt or token swap) it is closed at the last close before the gap (reason: data gap) — prices across a token swap are not comparable.
- Returns assume a fill at the close the day after the signal (the same convention as the research backtests), net of 0.05% taker fees per side and volume-tiered slippage (≥$100M 5 bp, $20–100M 15 bp, $5–20M 40 bp; below $5M is treated as untradeable and gets no entry signal; exits there use 40 bp); longs and shorts are both 1× notional with the actual funding of every period held; short losses are capped at −100% (liquidation). Equal size, each signal independent — not the return of any portfolio.
Relative strength vs BTC
Carried over from the original code: RS = close ÷ BTC's 364-day MA × 100, then normalized against its own 364-day history (×10, capped at ±100). The book defines relative strength as price ÷ market index, computed once a week, and reads it against a "zero line" separating long-term outperformance from underperformance, but it gives no formula for the zero line (Ch. 1 "Definitions", Ch. 4 "Relative Strength"). Our formula is the original code's implementation, not the book's; it is for ranking only and does not drive signals.
Futures conventions
- Prices: the close of the perpetual's last-price daily bar (fapi/v1/klines), not the mark price. The mark price only drives the exchange's liquidation engine; we record at the daily close and do not simulate intraday liquidation.
- Universe: each historical day, among eligible perpetuals that traded that day and already have 210 consecutive valid daily bars, the top 200 by 30-day volume (a missing day disqualifies). The historical universe is rebuilt day by day and includes contracts delisted later.
- Universe below 200 in early years: before 2024-05-14 fewer than 200 contracts had 210 daily bars, so the universe has fewer than 200 names on those days (1,501 days); after first reaching 200 on 05-14 it dipped to 196~199 on 12 more days (05-15 to 05-26), 1,513 days in total; in 2020-03 it is empty — BTCUSDT only reached 210 bars on 2020-04-04. This is a limit of the market itself, not missing data.
- Fees: the whole history uses today's VIP0 taker fee of 0.05% per side (Binance's fee page data, fetched 2026-09-26, no BNB discount). There is no citable official record of past fee levels, so we do not split history by fee period.
- Funding: charged per period on notional value — each period = −direction × rate × previous daily close ÷ entry fill price (longs pay positive rates, shorts receive them; each contract's actual settlement times are used, 1h/4h/8h all occur). At 1× notional the notional moves with the price: the more a long gains, the more the same positive rate costs. Example: 20200924-ADA-L was held 299 days, price part +1,108%, funding −315% — a real cost, checked period by period.
- Liquidation: shorts are 1× notional; if equity at any daily close (1 + price return − entry fee + funding settled so far) is ≤ 0, the short is closed at that close as liquidated with a −100% return; any exit worse than −100% is capped. A 1× long cannot be liquidated.
- Each trade is split into four parts: price (ratio of raw closes) + slippage + fees + funding (plus a cap adjustment on liquidation); the parts add up to the trade's return.
- Contract names are kept as listed: 1000PEPE, 1000000MOG, 1MBABYDOGE and other multiplier-prefixed contracts keep their names; pages add the unit count, e.g. "×1000 units".
- Exclusions: TradFi and index perpetuals (full list below, 203 contracts) plus the same stablecoin/wrapped/leveraged-token rules as spot. PAXG (a gold token) is excluded; WLFI is a governance token that the spot list wrongly treats as a stablecoin, so the futures version puts it back into the universe (2026-09-27).
Shorts = H7: the research verdict is 'rejected'
- The futures short rule is exactly H7 (Stage 4 short) from the B2 pre-registered backtests. Verdict: rejected — Δ Sharpe vs the long-only control = -0.23 ± 0.56, random percentile 5.9, and significantly worse in one window (by-window results below).
- Short signals are still published so that the rejected rule can also be checked out of sample; the badge says 'Research: rejected'.
- The retirement condition (P7) applies to the futures short ledger: 26 weeks after the futures launch (2026-09-29), if the short ledger's 26-week Sharpe is < −1.0 and below the 5th percentile of a random-short baseline, short signals stop being displayed (the historical ledger stays). The 26 weeks count from the futures launch, not from the spot launch.
- The long rule (H1a, 210-day MA) is 'underpowered': the research could show neither that it works nor that it does not.
Differences from the book (B1 fidelity audit)
- The book uses weekly bars and a 30-week MA; we use daily bars and a 210-day MA, classified every day. The book's stated MA formula is a simple average (Ch. 1 note), while the 30-week line on the book's charts is weighted (Ch. 1, "Reading the Weekly Chart"); we use a simple MA.
- The book's buy point is an upside breakout from a Stage 1 base; our long signal is an MA crossover (a different event).
- The book wants breakout-week volume of at least 2× the average weekly volume of the past several months (on daily charts: breakout-day volume ≥ 2× the prior week's average daily volume) (Ch. 4, "The Importance of Volume"); we use 1.2× the 14-day average, a clearly lower bar.
- The book suggests long-term investors buy in two halves: half on the breakout, half on a pullback toward the breakout point (Ch. 3, "How Investors Buy"); our signals open in one go, which matches the book's trader approach.
- The book raises stops as the price rises (Ch. 6); we use fixed rules (close below MA × 0.90, or a cross below the MA).
- The book uses pullback entries and overhead-resistance checks; we do not implement them.
- The book works top-down: market, then sector, then stock (Ch. 3, "What to Buy: The Top-Down Approach"); we implement only the first layer (alt longs gated by BTC's stage). No sector layer; breadth is displayed but does not drive signals.
- The book's breadth measure is the share of stocks in Stages 1 and 2 (Ch. 3); the "% above the 210-day MA" on our breadth page is our own supplementary measure, not the book's.
- The book's diversification rules: roughly equal dollar amounts per position, at most 6 names for a small account and 10–20 at a time for a large one, spread across sectors (Ch. 4, "Don't Put All Your Eggs in One Basket"); we record each trade at equal size and independently, without position-count limits or sector spreading.
- Shorting: the book covers short selling in Ch. 7 and says breakdowns need no volume confirmation; our short rule likewise needs no volume and is our own implementation.
Checked against the book (2026-09-26)
Source: the 2021 Chinese edition (China Renmin University Press, ISBN 978-7-300-28898-7), e-book. The e-book has no page numbers, so citations are by chapter and section.
- 30-week MA: the book's stated formula is a simple average; the lines on its charts are weighted (Ch. 1).
- Breakout volume: the author says there is no fixed number; his rule of thumb is at least 2× the average weekly volume of the past several months (Ch. 4).
- Buying in two halves: for long-term investors; traders buy the full position at the first breakout (Ch. 3, 4).
- Relative strength: price ÷ market index, weekly, read against a zero line; no formula for the zero line is given (Ch. 1, 4).
- Shorting needs no volume: stocks can fall of their own weight (Ch. 7, "When to Sell Short").
- Market breadth: the book's measure is the share of stocks in Stages 1 and 2 (Ch. 3); Ch. 8 lists eight long-term indicators, none of which is "% above the MA".
- Position sizing and diversification: roughly equal dollar amounts, number of names scaled to account size, spread across sectors (Ch. 4).
Backtest transparency (research results, 2026-09-22, static)
These numbers come from a separate research process (A1 baseline replication, B2 pre-registered backtest verdicts) and do not update daily. B2's H7 short leg uses the same rule as the futures short signals here, but the conventions differ: B2's universe is every coin with average daily volume ≥ $5M and its BTC gate uses the original 160-day MA stages; here the universe is the top 200 perpetuals with ≥ 210 daily bars, the BTC gate uses our own 210-day MA stages, and fees are 0.05% per side. The futures rules' own performance is the backfilled track record on the Signals page.
A1 frozen baseline: original logic (BTC 160-day / altcoins 105-day, 46-coin universe) and controls
| Leg | Total return | Sharpe | Max drawdown | Trades | Window |
|---|---|---|---|---|---|
| Original BTC strategy (MA160) | -2.32% | -0.030 | -10.57% | 5 | 2020-02-01~2025-12-31 |
| Control: BTC buy & hold | +833.12% | 0.926 | -76.63% | 1 | 2020-02-01~2025-12-31 |
| Control: single MA160 filter | +298.68% | 1.095 | -31.78% | 27 | 2020-02-01~2025-12-31 |
| Control: same-structure random entry (median) | +9.69% | 0.223 | — | 5 | 同 BTC_native_bt_futures |
| Original altcoin strategy (46 coins, equal weight) | -5.98% | -0.125 | -17.41% | 276 | 2020-01-01~2025-12-31 |
| Control: 46-coin buy & hold | +516.39% | 0.785 | -84.87% | — | 2020-01-01~2025-12-31 |
| Control: single MA105 filter | +612.91% | 0.875 | -76.79% | — | 2020-01-01~2025-12-31 |
The A1 baseline is the original logic before the restart, not this site's v1w210. Its altcoin leg was later corrected by B2: with data extended back to 2017, the same rule on the same 46 coins returns +57.2% (Sharpe 0.81; 45 equal-weight accounts, denominator convention per B2 r1); the A1 result depended on where the data started.
B2 verdicts on the pre-registered upgrade hypotheses (0 of 8 passed)
| Hypothesis | Δ Sharpe | Random pct. | Verdict |
|---|---|---|---|
| H1a 210-day MA (altcoins) | -0.01 ± 0.39 | 21.8 | Underpowered |
| H1a_btc 210-day MA (BTC) | +0.24 ± 0.52 | 45.2 | Underpowered |
| H1b 30-week MA (altcoins) | -0.29 ± 0.39 | 13.8 | Underpowered |
| H2 Exact Stage 1→2 breakout | -0.04 ± 0.40 | 1.9 | Rejected (significantly worse in a window) |
| H3 Volume multiple | -0.23 ± 0.29 | 8.7 | Underpowered |
| H4_mans Book RS zero-line gate | -0.42 ± 0.37 | 3.9 | Rejected |
| H5_breadth Breadth gate | -0.08 ± 0.26 | 23.4 | Rejected (significantly worse in a window) |
| H5_ma MA-breadth gate | -0.17 ± 0.25 | 16.3 | Rejected |
| H6 Trailing stop | +0.04 ± 0.21 | 42.3 | Underpowered |
| H7 Stage 4 short | -0.23 ± 0.56 | 5.9 | Rejected (significantly worse in a window) |
Δ Sharpe = upgrade leg − control leg (full window 2020-07-29 to 2025-12-31), ± standard error; random percentile = the upgrade leg's percentile among 2,000 same-structure random entries.
Short rule (H7) by window (B2, full market, 1× notional, with liquidation rule)
| Leg | Window | Total return | Sharpe | Max drawdown | Trades | Win rate |
|---|---|---|---|---|---|---|
| H7_short | Full window | -1.26% | 0.016 | -18.18% | 2811 | 28.5% |
| H7_short | Bull 2020-07~2021 | -4.44% | -1.682 | -5.03% | 264 | 16.9% |
| H7_short | Bear 2022 | +7.51% | 1.003 | -3.91% | 479 | 44.1% |
| H7_short | 2023~2025 | -3.57% | -0.060 | -18.18% | 2068 | 26.0% |
210-day long (H1a, B2 structure with BTC gate and RS gate), full window
| Leg | Window | Total return | Sharpe | Max drawdown | Trades | Win rate |
|---|---|---|---|---|---|---|
| H1a_alt | Full window | +1.28% | 0.270 | -2.35% | 295 | 24.2% |
| H1a_btc | Full window | +35.91% | 0.432 | -27.24% | 7 | 42.9% |
Stage label as a coin-selection factor (H8): 20-day rank IC = -0.015 ± 0.017 (labels paired with returns from t+1), negative and not distinguishable from zero; the research does not recommend it as a universe pre-filter.
research.json asof 2026-09-22T15:22:40Z · B2-回测裁决/r1-修订/results/verdicts.csv、leg_metrics.csv(r1 修订版) · A1-复现基线/baseline_metrics.csv
Full exclusion list (TradFi and index perpetuals)
AAOIUSDT, AAPLUSDT, ADBEUSDT, AGPUUSDT, ALABUSDT, ALLUSDT, AMATUSDT, AMCUSDT, AMDUSDT, AMZNUSDT, ANETUSDT, ANTHROPICUSDT, APLDUSDT, APPUSDT, ARMUSDT, ASMLUSDT, ASTSUSDT, AVGOUSDT, AXTIUSDT, BABAUSDT, BBXUSDT, BEUSDT, BITOUSDT, BMNRUSDT, BNCUSDT, BOTUSDT, BRKBUSDT, BSPUSDT, BTCDOMUSDT, BXUSDT, BYDUSDT, BZUSDT, CATUSDT, CBRSUSDT, CIENUSDT, CLUSDT, COHRUSDT, COINUSDT, COPPERUSDT, COSTUSDT, CRCLUSDT, CRDOUSDT, CRMUSDT, CRWDUSDT, CRWVUSDT, CSCOUSDT, CSOPSAMSUNG2LUSDT, CSOPSKHYNIX2LUSDT, CXMTUSDT, CYPHUSDT, DDOGUSDT, DEFIUSDT, DELLUSDT, DISUSDT, DJTUSDT, DKNGUSDT, DRAMUSDT, EBAYUSDT, EWJUSDT, EWTUSDT, EWYUSDT, EWZUSDT, FLEXUSDT, FLNCUSDT, FWDIUSDT, GDXUSDT, GEVUSDT, GIGADEVUSDT, GLWUSDT, GMEUSDT, GOOGLUSDT, GPROUSDT, GSUSDT, GTLBUSDT, HANMIUSDT, HDUSDT, HIMSUSDT, HK0625USDT, HK0700USDT, HK0992USDT, HK1810USDT, HOODUSDT, HPEUSDT, HUTUSDT, HYUNDAIUSDT, IBMUSDT, INTCUSDT, INTWUSDT, IONQUSDT, IRENUSDT, IWMUSDT, JPMUSDT, KLACUSDT, KODEX200USDT, KORUUSDT, KOUSDT, KSTRUSDT, KUAISHOUUSDT, LGELECTRONICSUSDT, LITEUSDT, LLYUSDT, LRCXUSDT, LYTEUSDT, MARAUSDT, MDBUSDT, MEITUANUSDT, METAUSDT, MINIMAXUSDT, MOONSHOTUSDT, MRKUSDT, MRNAUSDT, MRVLUSDT, MSFTUSDT, MSTRUSDT, MUUSDT, MUUUSDT, MVLLUSDT, NATGASUSDT, NAVERUSDT, NBISUSDT, NETUSDT, NFLXUSDT, NOKUSDT, NOWUSDT, NVDAUSDT, NVDLUSDT, NVOUSDT, ONDSUSDT, OPENAIUSDT, ORCLUSDT, OURAUSDT, PANWUSDT, PATHUSDT, PAYPUSDT, PDDUSDT, PENGUSDT, PLTRUSDT, POPMARTUSDT, PYPLUSDT, QCOMUSDT, QNTXUSDT, QQQUSDT, RAMUSDT, RDDTUSDT, RIVNUSDT, RKLBUSDT, SAMSUNGEMUSDT, SAMSUNGUSDT, SHAZUSDT, SHOPUSDT, SKDDUSDT, SKHYNIXUSDT, SKHYUSDT, SKUUUSDT, SMCIUSDT, SMHUSDT, SNDKUSDT, SNOWUSDT, SNXXUSDT, SOFIUSDT, SONYUSDT, SOXLUSDT, SOXSUSDT, SPCXUSDT, SPYUSDT, SQQQUSDT, STRCUSDT, STXXUSDT, TBTUSDT, TEAMUSDT, TEMUSDT, TENCENTUSDT, TERUSDT, TMFUSDT, TQQQUSDT, TSLAUSDT, TSLLUSDT, TSMUSDT, TTWOUSDT, TXNUSDT, TZAUSDT, UBERUSDT, UNITREEUSDT, URNMUSDT, USARUSDT, USDBRLUSDT, UVXYUSDT, VRTUSDT, VSTUSDT, VUSDT, WDCUSDT, WENUSDT, WMTUSDT, XAGUSDT, XAUUSDT, XBIUSDT, XLEUSDT, XPDUSDT, XPTUSDT, ZHIPUUSDT, ZHONGJIUSDT, ZMUSDT, ZSUSDT
n = 203 · include_override: WLFIUSDT · logic_v1w210p.json