Skip to content

View translation

BtcLtcBetaLagCatchup

Hypotheses

BTC→LTC Beta-Lag Catch-Up, Long-Short (Two-Instrument Same-Venue: BTCUSDT.BINANCE as Non-Traded LEAD Signal → Trade LTCUSDT.BINANCE Perp, 1m Bars, Enter the Laggard After a Strong BTC Impulse the Alt Has Not Yet Priced In, Time-Boxed, 3-Parameter)

Hypotheses

A LONG-SHORT, short-horizon LEAD-LAG strategy that trades information transmission from BTC to a high-beta alt on the SAME venue (BINANCE USD-M): BTCUSDT is the NON-TRADED lead/signal source, LTCUSDT is the ONLY traded instrument. This is a deliberately fresh mechanism family — not carry, not options, not OI/liquidation, not a cross-sectional ranker, not a single-name reversion or impulse — chosen because those families are either deployed-duplicates or session graveyards. Documented crypto microstructure effect: BTC leads the alt complex in price discovery, and lower-tier alts (LTC) reprice a sharp BTC impulse with a short lag rather than instantaneously; the residual catch-up is a directional edge that a single-instrument view cannot see. CRITICAL design lesson applied from this session's deaths: the ETH taker-flow reversion and deep-neg carry basket both died on TRADE COUNT (18 trades / zero trades) because tight dual-gates throttled entries below the ~100-trade measurability floor. This strategy is engineered to FIRE FREQUENTLY — BTC produces many strong 3-minute impulses across a multi-year 1m history, so even after gating to strong impulses the expected count is many hundreds/year, keeping the sample measurable. It uses a SINGLE clear directional gate (strong BTC impulse + alt underreaction) rather than a compound extreme-and-extreme gate. Fills three under-represented buckets: short horizon (8.2% vs >=10%), long-short direction (14.4%), and pairs scope (13.5% vs 15%). 3 parameters to fight overfit. Fee arithmetic: entries are gated so the EXPECTED catch-up move exceeds ~0.25% (BTC impulse >= 0.5% and the alt has captured < half of it), clearing the ~0.10% USD-M round trip ~2.5x; the time-box caps fee-bleeding churn.

Hypotheses

The QA verdict was unambiguous and pointed at exactly one defect: sizing. avg_trade_return_pct was +0.208% (the price-based signal edge is real and above the 0.15% floor), but avg_trade_pnl_usd was -$353 because ~$60k orders on a 1m LTC clock hit participation≈1.0 in the square-root impact model (impact = 1 + 70·√participation bps), charging ~70bps EACH WAY — ~140bps round trip that swamped the edge and produced win_rate 0.0 / total_impact $33,425. So the SMALLEST correct change is liquidity-aware sizing, and I changed ONLY position_size (+ its sizing params and leverage 2→1); the entire signal path — beta, impulse/capture gate, synchronized cross-leg buffer, incremental O(1) beta, exits — is byte-identical to the version that already passed Layers 1–3, so no earlier layer regresses (imports unchanged, no banned modules, still a valid FactoryStrategy subclass, still O(1)/bar so no 300s timeout). New sizing: notional = min(participation × avg-recent-LTC-1m-volume, $1,200 cap, 5%-equity cap). At the default 0.4% participation, p≈0.004 → impact ≈ 1 + 70·√0.004 ≈ 5.4bps each way ≈ 11bps round trip, comfortably under the ~21bps edge, so the previously impact-driven losses flip to the signal's true (positive) expectancy while avg_trade_return_pct stays ~+0.208%. This auto-scales with real liquidity rather than a brittle fixed notional; the $1,200 cap (below the reported $2,387 capacity) is a hard liquidity ceiling for high-volume minutes, and the equity ceiling bounds risk. Leverage set to 1.0 (honest — you can't lever a capacity-limited 1m alt) but still referenced in position_size, so no leverage_set_but_unused gate. Verified offline: participation-bound ($960), cap-bound ($1,200), and Layer-2 no-volume fallback ($1,200, above min-notional so Layer 3 still trades ≥1) all size correctly, and imports/subclass/methods stay clean.

Hypotheses

Decisively negative edge on a large sample: profit_factor 0.520, avg_trade_return_pct -0.026% (negative), expectancy -$2.14 over 2,916 trades, total_return -6.25%, Sharpe -1.34 with CI [-3.33, -1.10] entirely negative, PSR 0.0, negative in every year 2020-2026. The iteration-3 sizing fix (liquidity-aware participation) genuinely worked — avg_position_pct is ~1% and max_drawdown only 6.3%, so impact is no longer the problem — but that clean, low-impact run FALSIFIES the hypothesis's core claim. The docstring asserted 'the signal edge is real: avg_trade_return_pct was +0.208%' and only sizing was broken; with impact now properly bounded, the per-trade return is -0.026%, so the +0.208% was an artifact of the earlier mis-sized/mis-measured backtest. The BTC->LTC beta-lag catch-up has no edge net of costs on a 1-minute clock — the lag is either already arbitraged away or the residual is smaller than the ~0.10% round trip — which is why it loses every year. This is the single-name lead-lag/microstructure family that has died repeatedly this session. Optimizing impulse_lookback/btc_impulse_threshold/capture_fraction cannot flip a PF-0.52, Sharpe -1.34, negative-expectancy strategy — it would only overfit noise and fail the deflated-Sharpe gate. Fundamentally no edge; not worth 2 hours of optimization.

Implementation

Long-short two-instrument same-venue lead-lag on BINANCE USD-M. BTCUSDT.BINANCE is the NON-TRADED lead signal; LTCUSDT.BINANCE is the only traded instrument, both on a 1-minute clock. Over a short impulse window it measures the BTC move and LTC move, scales the BTC move by a rolling (incremental, O(1)) LTC-on-BTC beta to get LTC's expected co-move, and enters LTC in the BTC impulse direction when LTC has captured less than `capture_fraction` of that expected move (a strong BTC impulse LTC has under-priced), held for a 5-minute time-box with a 0.8% stop / 1.5% take-profit. Iteration 3 fixes ONLY position sizing: instead of ~0.6x-equity notional that overwhelmed thin 1m LTC liquidity, it sizes to a small participation (0.4%) of recent LTC 1m volume, capped at $1,200 absolute notional and a 5%-equity ceiling, at leverage 1x — keeping square-root market impact (~11bps round trip) well below the ~21bps catch-up edge.

Verification Results

Verification failed (Layer 4 — QA review): - Position size overwhelms 1-minute LTC liquidity, making every trade a guaranteed loss via market impact — the direct cause of win_rate 0.0 / profit_factor 0.0. Sizing is equity*0.30*2.0 = 0.6x equity (~$60k) re-traded every few minutes on 1m bars (turnover 71). Impact model: capacity_usd $2,387, impact_cost_pct 647%, total_impact_usd $33,425 over 80 trades (~$418/trade impact vs avg_loss $353). Round-trip slippage dwarfs the ~0.25% catch-up move, so all 80 trades lose, total_return -28.26%, one trade -$4,981 (~5-8% of equity) despite a 0.8% stop. Untradeable at this notional on a 1m clock; the edge can't even be measured. - win_rate EXACTLY 0.0 across 80 trades with the 1.5% TP never triggering (avg_win 0.0) and the 0.8% stop failing (largest_loss -$4,981 ≈ 8% move). Stop/TP are bar-close-only (no intrabar enforcement); with entries deep underwater from impact, every position exits at a loss via stop or time-box. A 0.0 win rate on a bilateral long-short book signals a cost/exit structure that guarantees losses. Metrics are also internally inconsistent (avg_trade_return_pct +0.208% vs avg_trade_pnl_usd -$353, win_rate 0.0), confirming PnL is impact-driven, not signal-driven.

Verification Results

Analyst decision at backtest_review: consider a more liquid alt or slower clock for meaningful notional, or accept as a tiny-capacity sleeve.

Verification Results

Liquidity-honest sizing deploys only ~1% of equity (avg_position_pct 0.95%; positions bound by participation*avg_1m_volume, capped at $1,200). This correctly fixes the prior impact blowup, but the strategy's absolute economic contribution is negligible: total_return +0.068% over 358 days, avg_trade_pnl_usd +$0.85. Not a code defect (sizing is liquidity-driven and uses get_account_equity() for the risk ceiling), but the analyst should weigh whether a strategy this capacity-limited on 1m LTC is worth optimizing.

Verification Results

Treat the edge as unconfirmed until the full backtest yields a larger sample; if it stays sub-100 trades with a straddling-zero Sharpe, iterate for frequency or abandon.

Verification Results

Statistical fragility: Sharpe -0.56 (CI [-2.13,+1.02], probabilistic_sharpe 0.25) despite PF 1.29 and positive per-trade expectancy — risk-adjusted performance indistinguishable from zero. 80 trades over 358 days is below the ~100-trade floor the hypothesis targeted. Skew -2.18/kurtosis 113 (largest_loss -$51.59 vs largest_win $40.44) means PF 1.29 rests on a thin, tail-sensitive sample. The +0.215% avg_trade_return_pct is encouraging but not yet robustly established.

Backtest Review

The iteration-3 liquidity-aware sizing fix worked — avg_position_pct ~1%, market impact bounded, max_drawdown only 6.3%, no blowup

Backtest Review

Well-sampled (2,916 trades) so the negative verdict is decisive; fires frequently as designed

Backtest Review

Decisively negative edge: profit_factor 0.520, avg_trade_return_pct -0.026% (negative), expectancy -$2.14/trade, Sharpe -1.34 (CI [-3.33, -1.10] fully negative), PSR 0.0

Backtest Review

Negative EVERY year (2020-2026); omega 0.10, tail_ratio 0.13, skew -40, kurtosis 1790

Backtest Review

The iteration-3 claim that the edge was 'real (+0.208%)' is falsified: with correct low-impact sizing the per-trade return is -0.026% — the prior positive number was a mis-sizing/mis-measurement artifact

Backtest Review

1m single-name lead-lag/microstructure — the order-flow family that is dead this session; the beta-lag is arbitraged away or smaller than the round-trip cost

Outcome Summary

BtcLtcBetaLagCatchup tried to harvest the short lag with which LTC reprices a sharp BTC impulse, trading LTCUSDT perp on Binance off a non-traded BTC lead signal, and was engineered through three iterations to fire frequently and keep market impact low. The final clean, low-impact backtest ran 2,916 trades but lost in every year from 2020 to 2026, with a profit factor of 0.52, Sharpe -1.34, and a slightly negative -0.026% per-trade return. Critically, that properly-sized run falsified the docstring's claim of a real +0.208% edge, revealing the earlier positive figure as a mis-sizing artifact. The analyst abandoned it at the backtest-review gate — the beta-lag was either arbitraged away or smaller than the round-trip cost, and optimizing its three parameters could not flip a negative-expectancy result.

Outcome Summary

A per-trade edge that looks positive under mis-sized/high-impact conditions can be an artifact — once impact was correctly bounded, the BTC→LTC 1-minute beta-lag showed no residual edge net of the ~0.10% round-trip cost.

Outcome Summary

The analyst issued an 'abandon' verdict at the pre-optimization backtest-review gate, ruling the negative edge decisive on a large sample and not worth the 3-phase optimization; it never reached optimization, risk review, or promotion.

Outcome Summary

A long-short BTC→LTC beta-lag catch-up strategy that used non-traded BTCUSDT as a lead signal to trade LTCUSDT perp on Binance, entering the laggard after a strong BTC 1-minute impulse it had under-priced, held on a hard time-box.

Outcome Summary

Over a well-sampled 2,916 trades it lost decisively: total return -6.25%, Sharpe -1.34 (CI [-3.33, -1.10]), profit factor 0.52, avg_trade_return_pct -0.026%, expectancy -$2.14/trade, and PSR 0.0 — negative in every year 2020-2026, though the iteration-3 liquidity-aware sizing held market impact low (avg position ~1%, max drawdown 6.3%).

Iteration History

Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit. This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.