# Drift Premium research protocol — v1 (pre-registered)

Frozen **2026-09-23**, before any Premium-variant result in this lab was computed.
Amendments are appended at the bottom with a date and a reason; nothing above is edited.

## Question

Can a Premium version of Drift Desk make **materially more net profit than Drift Free for the same
risk per trade**, on markets and periods that played no part in choosing it?

"Much more profitable" must be earned on untouched data. If no candidate earns it, the answer is
reported as **no**, and Premium is not marketed on performance superiority.

## Why earlier attempts failed (prior evidence, `C:/PineScri/DriftDeskPro/research/wave2..wave5`)

- 31 recipes, 2 symbols (BTC/ETH), windows of a few months, 26–73 positions per cell.
- At 15m, costs were ~0.13–0.19R per position (BTC Aug–Sep 2026: fees 1,188 USDT vs net 1,298).
- Improvements on one symbol reversed on the other; small samples cannot separate PF 1.3 from 1.7.

This protocol answers with **breadth** (20 symbols × 6+ years), **structural hypotheses** and
**untouched final data**.

## Universe (Binance spot, USDT quote)

- **Set A — development + time holdout (10):** BTCUSDT, ETHUSDT, BNBUSDT, XRPUSDT, ADAUSDT,
  LINKUSDT, LTCUSDT, TRXUSDT, ATOMUSDT, XLMUSDT
- **Set B — untouched symbols (10):** DOGEUSDT, BCHUSDT, ETCUSDT, XTZUSDT, VETUSDT, ALGOUSDT,
  ZECUSDT, DASHUSDT, HBARUSDT, NEOUSDT
- Substitutes, in this order, for any symbol lacking continuous data from 2019-09-01 (>2% missing
  bars or a rename/redenomination): QTUMUSDT, ONTUSDT, IOTAUSDT, ICXUSDT, BATUSDT.
- Survivorship caveat: all were chosen among pairs still trading in 2026. Disclosed.

## Time windows (UTC, assigned by entry-bar close time)

| Window | Range | Use |
|---|---|---|
| Warmup | 2019-09-01 → 2019-12-31 | indicator state only, no counted trades |
| DEV | 2020-01-01 → 2023-12-31 | all exploration, Set A only |
| VAL | 2024-01-01 → 2025-03-31 | choose one frozen candidate, Set A only |
| HOLDOUT-T | 2025-04-01 → latest complete data | final, Set A, run once |
| Set B | 2020-01-01 → latest complete data | final, run once |

Disclosure: another agent inspected Drift Free and variants on BTC/ETH (15m/1h) during
2026-01 → 2026-09, which overlaps HOLDOUT-T for those two symbols. None of this lab's candidates
were evaluated there.

## Costs

| Model | Commission per fill | Slippage | Use |
|---|---|---|---|
| **REAL** (primary) | 0.05% | 0.02% of price on market and stop fills; none on limit fills | all decisions |
| STRESS | 0.10% | 0.05% | robustness report; the final candidate must stay positive |
| TV | 0.04% | 1 tick | parity with TradingView defaults and what a user sees in the Strategy Tester |

Funding and borrow costs are not modelled (disclosed). Both directions allowed unless a variant
restricts them.

## Risk and accounting

Planned risk **100 USDT per position** (1R), capital 100,000 USDT, one position per symbol, no
pyramiding except inside the explicitly named pyramiding family (each add counts its own risk).
Results are reported in **R** so symbols aggregate fairly. Portfolio results sum symbol R by trade
close time.

Metrics per symbol and aggregate: positions, net R, expectancy (R/position), profit factor on
closed positions, win rate, average win/loss R, max closed-equity drawdown (R), longest losing
streak, share of symbols profitable, year-by-year net R, and net R under STRESS.

## Baseline (Free)

Drift Desk 1.3.1 strategy defaults (all gates off, 10-bar structure stop + 0.25 ATR, 2R target,
120-bar timeout, fresh flips only) evaluated at **15m, 1h and 4h**. The **Free comparator** for
every decision is Free at the timeframe with the highest DEV aggregate net R — never a strawman.

## Hypothesis families (structural priors, all tested in DEV only)

| ID | Family | Options | Prior |
|---|---|---|---|
| H-TF | Timeframe | 15m, 1h, 4h | cost drag per R shrinks with wider stops |
| H-EXIT | Exits | fixed rewardR ∈ {2,3,4}; exit on opposite Drift flip; ATR chandelier k ∈ {2.5,3,4}; 50% at 2R + trail rest | trend returns live in the right tail; a 2R cap removes it |
| H-REGIME | Higher-timeframe alignment | daily EMA {50,100,200} side; daily Drift trend; long-only vs both | trade with the larger trend |
| H-VOL | Participation / chop filters | efficiency ≥ {0.2,0.3}; ATR% percentile (1y) ≥ {30,50} | skip dead ranges |
| H-COST | Cost-aware admission | skip if est. round-trip cost > {10,15,20}% of stop distance | refuse trades the fees would eat |
| H-ENTRY | Entry timing | fresh flip (base); flip + first pullback continuation within N bars | better price, fewer chases |
| H-PYR | Adding to winners | one add at +1R if trend intact; first unit to breakeven | concentrate risk in working trends |

Every configuration evaluated is logged in `results/` with its config; the total count is reported.

## Selection (mechanical)

1. **DEV family screen** (Set A, DEV, REAL): a config survives if aggregate net R beats the Free
   comparator, it is profitable on ≥ 6 of 10 symbols, and it has ≥ 300 positions. Survivors are
   ranked by aggregate net R (tie: smaller max drawdown). Parameter neighbours must not collapse
   (a survivor whose immediate neighbours are all non-survivors is flagged fragile and dropped).
2. **Combine** the top surviving families into **at most 3 candidates**, run DEV, then freeze
   each candidate's definition (config + code hash).
3. **VAL** (Set A, VAL, REAL): choose the single candidate with the highest aggregate net R among
   those with net R above the Free comparator and PF ≥ 1.2. If none qualifies: **stop** and report
   "no validated Premium".
4. **FINAL** (HOLDOUT-T on Set A + Set B full period): run once, report as-is, REAL and STRESS.
   No tuning after FINAL. Any later change is a new protocol version with new untouched data.

## Promotion gate (public performance claims)

Defined in `src/protocol/gate.mjs` (`passesPromotionGate`). It must be committed **before FINAL
runs** and receives only FINAL metrics. If it returns false, the site may still show the exact
FINAL numbers as research, but may not headline Premium as more profitable.

## What will be published

Exactly the FINAL numbers (both sets, REAL and STRESS), the number of configurations tried, the
windows, costs and limitations. All backtests are hypothetical; no live trading record is implied.

## Amendments

- **A1 (2026-09-23, before any data was downloaded):** operational definition of "continuous
  data": the symbol's first Binance 1h bar opens on or before 2019-10-01 00:00 UTC, and missing
  1h bars between 2019-10-01 and the end of data are ≤ 2% of expected bars. Symbols failing this
  are replaced by the substitutes in the listed order, Set A first, until each set has 10.
- **A2 (2026-09-23, before any result was computed; prompted by peer session proea-67's audit):**
  1. *Additional prior inspection:* Codex also measured BTC/ETH **4h** (entries 2025-02-01 →
     2025-12-31, warmup from 2024-01-01; candidates J6/F0/G3 — see
     `DriftDeskPro/research/wave4/protocol.json` windows.240.challenge). This overlaps VAL and
     HOLDOUT-T for BTC/ETH. Therefore FINAL Set A is reported **both with and without BTC/ETH**, and
     **Set B remains the primary untouched evidence** for any public claim.
  2. BCHUSDT's first 1h bar is 2019-11-28 → fails A1 → replaced per the substitute order.
  3. *Extreme real prints are kept, not cleaned* (e.g. LINKUSDT 2020-03-12T10Z low 0.0001;
     ATOMUSDT and most alts around 2025-10-10T21Z; exchange-wide halts leave ~60 missing hours,
     which stay gaps). Because the TradingView-style emulator fills a stop at its price even inside
     a crash wick, FINAL also reports a **crash-fill stress**: on any bar whose range exceeds 8×ATR,
     stop fills occur at the bar's extreme (low for long stops, high for short stops).
  4. *Power:* detecting +0.1R/position needs roughly 2,250–2,750 positions per arm; smaller true
     effects may be undetectable in FINAL. Only effects that FINAL can resolve are claimed.
- **A3 (2026-09-23, before any result was computed):** publication format. FINAL is also run and
  published under the **TV** cost model (Strategy Tester parity), alongside REAL and STRESS. Year
  basis = trade **exit** time (UTC). Equity curves = cumulative closed-trade net R at exit time,
  downsampled per `drift-public-research/v2`. The public export format is
  `drift-public-research/v2` as specified in
  `C:/ProEA-handoff/proea/docs/specs/2026-09-23-drift-premium-funnel-map.md` §4 (supersedes the
  earlier `results/evidence/SCHEMA.md` v1 sketch). `src/protocol/gate.mjs` also exports
  `LICENSED_CLAIM` — the single comparative sentence the site may print when the gate passes.
- **A4 (2026-09-24, before any DEV result; closes the build-phase review findings):**
  1. *HTF rule = Drift Desk's own Pine idiom* (`request.security(…, x[1], lookahead_on)`): a chart
     bar uses the HTF candle **immediately preceding** the HTF candle that contains the chart bar's
     open time. This is one bar stricter than CONTRACT §2's "closed at or before", so a Pine port
     reproduces the lab exactly. HTF-based rules (RD, RE) **block entries** while their HTF series
     is not ready (na → no entry).
  2. *VA readiness:* the percentile uses the trailing min(365 days, available) of chart-timeframe
     ATR14/close values and **blocks entries until ≥ 90 days** of values exist.
  3. *Prices under REAL/STRESS* keep the data's native precision: no OHLC snapping and no
     stop/target rounding to today's exchange tick (historical ticks were up to 100× finer). The
     TV model uses TradingView's captured mintick/mincontract per symbol and refuses to run
     without them.
  4. *Accounting:* 1R is fixed at 100 USDT regardless of a position's planned size (ensemble
     sub-positions are ⅓R each and count as positions). Windows are assigned by the **entry
     bar's close time**; years and portfolio curves use the **exit bar's close time**.
  5. *Guards:* research runs must name their window; the harness refuses VAL, HOLDOUT-T and Set B
     unless the stage has been unlocked by the freeze files the protocol requires.
  6. *Disclosure (see A5 for the gate):* parity work printed **Free 1.3.1 (not Premium) results** on windows overlapping
     VAL/HOLDOUT-T for BTC/ETH/XRP 1h (2026-03 → 09), BTC/ETH 4h (2024-09 → 2026-09) and BTC 15m
     (2026-08). No Premium variant has been evaluated on any VAL/HOLDOUT-T/Set B data. Set B remains
     the primary untouched evidence.
- **A5 (2026-09-24, before FINAL):** the promotion gate is defined. The founder chose the
  "standard" conditions from two offered options (standard / stricter): in both Set A (HOLDOUT-T)
  and Set B, Premium net R > 0, Premium net R > Free net R, PF ≥ 1.2 and ≥ 6 symbols profitable;
  plus Premium net R under STRESS (A + B) > 0. `LICENSED_CLAIM` = "On coins and months it never
  saw, Drift Premium made more net profit than Drift Free, after costs." *Timing disclosure:* the
  founder had seen DEV results, and VAL had already run in the lab, but VAL results had **not**
  been shown to the founder when the gate was chosen. FINAL had not run.
- **A6 (2026-09-24, after VAL, before FINAL; responds to reports/ audits of DEV/VAL):**
  1. *Neighbour-rule ruling (lab owner).* The fragility rule targets **numeric** parameters (a
     survivor whose ±1-step settings all fail is knife-edge). A binary rule (e.g. RL long-only) has
     no numeric neighbour, and the Free base is the control, not a neighbour: reading it as a
     neighbour would drop every binary rule by construction. This reading was applied in the DEV
     screen *after* DEV results were known and is ratified here *after* VAL; every FINAL
     publication must disclose that C1's survival depended on it.
  2. *Gate addition (founder, after seeing the VAL robustness audit; stricter direction only):*
     on Set B, Premium net R must also exceed **Drift Free long-only** (Free defaults taking only
     long signals = registry config RL 4h). This separates Premium's added value from what a Free
     user gets by ignoring shorts. The `LICENSED_CLAIM` sentence is unchanged.
  3. *FINAL must also report (not gating):* Free long-only (RL 4h) on both sets; a **buy-and-hold
     benchmark** per symbol and set (return and max drawdown of holding the same planned notional);
     the **drift-only null** (each position vs holding the same size over the same bars at the
     symbol's average return in that window) with a week-block bootstrap CI for the timing term;
     leave-one-symbol-out, leave-one-month-out and top-5-trimmed PF; PF and net R at STRESS; net R
     with crash-bar months excluded; the three-way margin split vs Free (shorts avoided / shared
     long entries / Premium-only entries); falling-market sub-periods separately; Set A with and
     without BTC/ETH; Set B with and without DOGE/ETC.
  4. *Disclosures:* two XH neighbour configs (XHk2.5, XHk4) were added after DEV results were seen
     and were not promoted; build-phase probes read Set B/VAL/HOLDOUT-T prices for tick geometry and
     crash-bar counts (no P&L); RD/RE/RL test receipts are synthetic (C1's in-run causality gate
     passed on real data, 10/10 symbols); counts before FINAL = 36 distinct configurations, 39
     configuration×stage evaluations, 40 runs.
  5. *FINAL re-pin:* FINAL runs on code whose every file listed in FREEZE.json for C1 (and for F0 /
     RL) is byte-identical to the frozen hashes; files changed since the freeze (protocol, gate,
     stage unlock) are listed with their hashes in the FINAL record.
