Weekly Presentation

Triple-barrier labeling: predicting direction without predicting noise

A slide-style walkthrough of this week's modeling work, starting with how the triple-barrier method frames the prediction horizon.

Weekly update - 22 June 2026

Choosing a prediction horizon that beats noise

This week's focus: how the triple-barrier method turns price paths into trainable labels, and why the barrier width is really a question about signal versus noise.

What's inside

Triple-barrier labeling (Lopez de Prado), the ETH label balance across barrier widths, and the trade-off between predicting noise and predicting a horizon no model can reach.

Why it matters

The label definition decides what the model is even trying to learn. Get the horizon wrong and the cleanest model in the world is just fitting microstructure noise.

Why ETH, not BTC

Every example uses Ethereum on purpose: ~2,796 candidate features vs ~23,608 for BTC, and only 169 features survive selection vs ~1,283 for BTC. BTC's on-chain coverage is far wider, so ETH's smaller feature universe trains and iterates much faster.

Triple-barrier method - the source

Marcos Lopez de Prado: label by the first barrier touched

The method comes from Advances in Financial Machine Learning (Wiley, 2018). Instead of a fixed-horizon return, every event is labeled by which of three barriers its forward price path reaches first.

Author & source

Marcos Lopez de Prado Advances in Financial Machine Learning

Marcos Lopez de Prado - Advances in Financial Machine Learning.

How the label is decided

Triple-barrier labeling example

Upper barrier → label +1, lower barrier → -1, vertical (time) barrier → 0. Whichever the path touches first sets the label - here the vertical barrier is hit first, so the event is labeled 0.

Triple-barrier method - Marcos Lopez de Prado

Noise vs direction: what is the optimum target?

Each bar is labeled by the first barrier its forward path touches: the upper barrier (+1 buy), the lower barrier (-1 sell), or the time limit with neither hit (0 no-hit / timeout). The barrier width (in basis points) sets how far price must move before the label resolves.

ETH triple-barrier label distribution by barrier width

Label distribution over ETH hourly checkpoint1: 65,255 rows across 4 upper / lower barrier configurations.

Too short = noise

Tight barriers resolve almost immediately, so the label mostly reflects microstructure jitter, not a real move. The model learns to predict coin-flips.

Too far = unpredictable

You also cannot push the horizon out indefinitely - no model predicts five years ahead. Signal decays and regime shifts dominate, so distant labels are unlearnable.

The optimum target

The barrier width is the knob between these extremes. Wider barriers shrink the no-hit (0) share and demand a genuine directional move; the goal is the width that maximizes real direction per unit of noise.

Feature selection - multi-model consensus

Cherry-picking survivors from the competitor pool

Start from every transformed feature, let 9 models vote through t-stat elimination, keep only the features many models agree on, then pour more transformation onto just those survivors.

2,796competitor features (full transform)
169union picked by ≥1 of 9 models (50 each)
27core: picked by ≥5 models
15unique raw survivors
1,258re-expanded features now
Feature selection count across models

Feature-selection count: how many of the 9 models (direction + triple-barrier buy/sell) selected each feature.

From competitors to survivors

Each of the 9 models runs coefficient t-stat elimination over the full transformed pool, trimming down to 50 features each. Their union is 169 distinct features - the chart counts how many models agree on each.

Consensus = robustness

Features chosen by ≥5 of 9 models form the core: 27 features that collapse to 15 unique raw source members.

Then expand on the winners

Rebuild checkpoint1 from just those 15 survivor raw members and re-apply the full transformation grid - 1,258 focused features now, down from 2,796. More transformation, aimed only at the proven base.

Feature selection - the survivors

The 15 core raw members

These are the raw source columns the surviving features collapse back to - the consensus base that checkpoint1 is rebuilt from. The badge shows how many of the 27 surviving features each one produced.

spot_price11 of 27 surviving features
fees_and_revenue__fees_per_block_usd_mean2 of 27 surviving features
market_data__coinbase_premium_gap2 of 27 surviving features
addresses__active_receiving_addresses1 of 27 surviving features
derivatives__open_interest__all_exchanges_all_symbol1 of 27 surviving features
derivatives__taker_buy_volume__all_exchanges1 of 27 surviving features
exchange_flows__exchange_depositing_addresses__all_exchanges1 of 27 surviving features
exchange_flows__exchange_inflow_mean__all_exchanges1 of 27 surviving features
fees_and_revenue__block_rewards1 of 27 surviving features
fees_and_revenue__block_rewards_usd1 of 27 surviving features
fees_and_revenue__fees_per_block_mean1 of 27 surviving features
fees_and_revenue__fees_per_transaction_usd_mean1 of 27 surviving features
transactions__tokens_transferred_mean1 of 27 surviving features
transactions__tokens_transferred_median1 of 27 surviving features
transactions__tokens_transferred_total1 of 27 surviving features

Sorted by contribution. spot_price dominates because every return / trend / volatility feature collapses back to the raw price. Click a cell to mark it.

Model accuracy

Every model at a glance

Triple-barrier targets with their buy and sell heads side by side (train vs untouched out-of-sample), plus the base direction model for comparison.

Model / target Buy (+1 vs rest) Sell (-1 vs rest)
TrainOOSTrainOOS
Direction (binary up/down)train 56.1% · OOS 51.5% (single head, no buy/sell)
Upper 40bp / Lower 40bp52.7%51.5%54.5%53.4%
Upper 40bp / Lower 80bp48.5%48.0%62.3%51.4%
Upper 80bp / Lower 40bp61.9%58.2%50.6%48.5%
Upper 80bp / Lower 80bp60.6%57.2%60.8%55.2%

Direction is binary (1 = forward return up, 0 = down). Triple-barrier heads are binary (buy = +1 vs rest, sell = -1 vs rest). Train vs OOS gap flags overfit.

Signal vs price

Buy/sell signal vs ETH price - raw, smoothed, Kalman

The triple-barrier buy/sell signal three ways, each overlaid on ETH price (right axis) with the train/OOS cutoff (2025-04-01) marked. Raw is noisy and hugs 0.5; the 168h moving average and the Kalman filter expose the slower regime.

Raw buy/sell probability vs ETH price

Raw hourly buy/sell probabilities - mostly near 0.5 (uncertain).

Smoothed buy/sell probability vs ETH price

168h (1-week) moving average - strips noise, shows the regime.

Kalman-smoothed buy-sell diff vs ETH price

Kalman-smoothed buy − sell diff; green = buy (diff > 0), red = sell (diff < 0).

Backtest - SignalHive

Backtest runs: full history vs OOS-only

All three ETH execution wrappers on the SignalHive engine - full signal history and an OOS-only window (from 2025-04-01). 10% sizing, no leverage. OOS keeps good Sharpe / low drawdown but trips sample-size and walk-forward gates on the short ~14-month window.

StrategyFull historyOOS only (from 2025-04-01)
Trend-hold (24-bar confirm)run_b7129055
PASS-w · Sharpe 1.57 · MDD 10.3% · 40 tr
run_bb5e2403
Sharpe 1.58 · MDD 3.1% · 6 tr
168h MA crossoverrun_bbe51054
90 · Sharpe 2.29 · MDD 5.8% · 253 tr
run_4e6de65f
Sharpe 1.44 · MDD 5.7% · 40 tr
Kalman crossoverrun_31da50fc
90 · Sharpe 1.58 · MDD 6.8% · 102 tr
run_fc2ace44
Sharpe 1.86 · MDD 4.0% · 12 tr

Featured run — 168h MA crossover (full history)

Score 90 · Sharpe 2.29 · MDD 5.8% · 253 trades

Open run run_bbe51054 ↗

Opens the SignalHive backtest dashboard in a new tab (sign-in required).

What's next

Upcoming direction

Validate the two foundation gates top-down (gate 1, then gate 2); the eight improvement tracks (a–h) below open only once both gates are clean.

1. Leakage checking

No future leak in features or labels - audit the as-of joins, rolling / seasonal transforms, and the triple-barrier label construction for lookahead.

2. CryptoQuant data integrity

Datawarehouse breadth (163 feat / ETH, 358 / BTC). Reconcile the all-exchange aggregates vs Binance-only (execution venue); verify H1 data for the indicators that need it.

a. Push the edge

0.8% barrier today → test 1.2% / 1.6%. The OOS ceiling is bounded by the in-sample signal.

b. Live trading

Stand up paper / live once a config clears the gates (CR-03 is the current blocker).

c. More H1 data

Add hourly indicators / sources to the feature set and re-evaluate.

d. Residual test

Drop the 15 core survivors, re-train, and check whether edge persists in the rest.

e. Other coins

Validate the same pipeline on BTC and other coins, not just ETH.

f. More history

Training currently starts from 2019 - extend the lookback further back for more regimes.

g. More transformations

Along one direction, apply more transforms to the survivor features to widen the feature space and test for incremental edge.

h. Chronological OOS

Add a held-out chronological OOS window (2024-04-01 → 2025-04-01) to validate on an earlier year, not just 2025+.