Research

We Tested Exogenous Signals. Here's What Actually Works.

March 23, 2026

In our last post, we identified a Minimal Signal Set — Net Liquidity, VIX, stablecoin momentum, OI divergence — that appeared to carry meaningful information about Bitcoin's forward behavior. The question we left open was the only one that matters: do these signals selectively predict losing trades, and can blocking those trades improve real strategy performance?

We spent the last several weeks running those tests. 2,582 trades across three live strategies, six signals, two levels of analysis. The results were not what we expected.


How We Tested

The setup:

  • Three production strategies: SMC (directional swing), MeanReversion, and TrendMTF
  • 2,582 trades across SOL, SUI, ETH, BTC, ZEC, BNB from 2020–2026
  • Six filters, directly derived from the Minimal Signal Set
  • FilterSignal
    ACPI release window (±2 days)
    BVIX regime (Elevated >18, Stress >25)
    CFed Net Liquidity contraction (28d ROC < 0)
    DStablecoin supply outflow (30d shrinkage)
    EBTC funding rate z-score (30d rolling, abs>2.0 = extreme)
    FOI divergence (OI z-score high, price flat)

    The metric we used — Loser Capture Ratio (LCR):

    LCR = % of losing trades blocked ÷ % of winning trades blocked

    An LCR above 1.0 means the filter is selective. Above 1.5 is meaningful. Above 2.0 is strong. Below 1.0 means the filter is hurting you — it's blocking winners faster than losers.

    We ran this at two levels: first at the individual trade level, then at the portfolio level using daily returns.

    Notion Data


    The Headline Result

    Filters work. But they're strategy-specific. No single signal helps all three strategies.

    This is the finding that upended our original intuition. We went in assuming we could build a unified macro kill switch — when VIX spikes or Net Liquidity contracts, pause everything. That assumption is wrong, and applying it would be net negative across the portfolio.

    The strategies capture returns in fundamentally different market regimes. A filter that surgically protects SMC can simultaneously neutralize TrendMTF — because TrendMTF earns its biggest gains in exactly the conditions the filter was designed to block.

    Notion Data


    What Works, Strategy by Strategy

    SMC — The Most Filter-Responsive Strategy

    SMC is where the exogenous signal thesis lives or dies, and here the results are strong.

    Funding Rate z-score is the best filter in the study.

    When the 30-day rolling z-score of BTC's daily funding rate exceeds ±2.0 (extreme crowding in either direction), blocking all SMC entries produces an LCR of 2.09 — meaning it captures roughly twice as many losers as winners. This held in both the first and second half of the dataset independently (H1=2.35, H2=1.74), which is the temporal stability test that separates signal from noise.

    The directional variant is even cleaner: when z > +1.5 (longs are crowded), blocking SMC longs only produces an LCR of 2.43 — the single highest selectivity ratio in the entire study. It fires only 4.8% of the time. When it fires, the edge is real.

    VIX Elevated (>18) is the second confirmed filter for SMC.

    LCR 1.78, validated across two independent research rounds. The intuition is straightforward: SMC is a directional swing strategy. When global fear is elevated but not yet in crisis (the 15–25 zone we identified as the "contagion window" in post 1), long setups degrade meaningfully while the strategy is structurally exposed. Suppressing longs in this window, pairing them with the funding filter when both fire simultaneously, is the highest-confidence intervention we found.

    One anti-finding worth highlighting: CPI windows are inverted for SMC. LCR 0.35. The best SMC setups cluster in post-CPI volatility expansion — applying a CPI circuit breaker to SMC would destroy alpha, not protect it.

    Notion Data


    MeanReversion — Useful Signals, Lower Confidence

    OI Divergence is the most consistent filter for MeanReversion.

    When open interest is elevated (z-score >1.5) but price hasn't followed through, pausing MR long entries produces an LCR of 1.34 across 5 of 6 tested runs. The cost is real — retrospective PnL drops roughly 14% — but the goal for this strategy is drawdown reduction, not return maximization, and the consistency across runs is encouraging.

    VIX Stress (>25) is a clean but thin signal. LCR 1.37, blocks only 2.2% of trades, adds +3.4% PnL. The effect is real; it's just low-impact in practice.

    One important negative: funding rate filters are consistently harmful for MeanReversion (LCR 0.65–0.83 across all tested variants). The same signal that's the strongest filter for SMC actively degrades MeanReversion. Do not apply.


    TrendMTF — The Hardest Strategy to Protect

    TrendMTF earns its returns during high-volatility, trending regimes — which are exactly the conditions that macro risk filters are designed to block. The broad signals mostly fail here.

    VIX Elevated blocks 37–74% of TrendMTF trades with LCR values hovering near 1.0. Net Liquidity Contraction and the combo filters are similar — massive blockage, near-zero selectivity. Applying them to TrendMTF is pure damage.

    The two weakest-but-acceptable signals: CPI window (LCR 1.62, blocks ~7% of trades, but high variance) and Combo Conservative (LCR 1.24, similar profile). Low risk to implement since blockage is minimal. But the confidence is low.

    Notion Data


    The Portfolio-Level Test

    After the trade-level analysis, we ran a second test at the portfolio level — applying the same filters to a real SUI portfolio allocation (CandleMom + MeanReversionMTF + STier, 10/10/80 weights). Instead of measuring trade LCR, we measured Day LCR: negative portfolio days blocked versus positive portfolio days blocked.

    The baseline: +208.3% return, −18.1% max drawdown, Calmar 16.848.

    The result cut through everything else in the study.

    Only OI Divergence survived both levels of analysis.

    FilterTrade LCRPortfolio Day LCRΔCalmarVerdict
    Funding abs>2.02.09 (SMC)0.472−2.012Contradicts
    VIX Elevated1.78 (SMC)0.779−13.675Contradicts
    VIX Stress1.37 (MR)0.472−13.643Contradicts
    Net Liq Contraction~1.0 (mixed)0.793−17.590Contradicts
    OI Divergence1.34 (MR)2.833+1.046 to +9.125Consistent
    Funding positive2.43 (SMC)1.181+1.531Weak positive

    OI Divergence showed a portfolio Day LCR of 2.833 — blocking losing days at nearly 3x the rate it blocks winning days — and this was consistent across both the 10/10/80 and equal-weight (33/33/33) configurations. Under equal weights, it improved the portfolio Calmar from 11.3 to 20.5 while taking drawdown from −28.5% to −19.9%.

    The funding rate filter's performance here deserves specific attention: 2.09 LCR at the trade level for SMC, but a Day LCR of 0.472 at the portfolio level. This isn't a contradiction — it's a reminder that good individual-strategy filters don't automatically translate to portfolio improvement. When this filter fires and suppresses SMC, the capital often isn't doing anything better elsewhere, and the portfolio misses the returns from the other two strategies continuing to run.


    The Architecture That Follows

    The right structure is per-strategy filter gates, not a macro kill switch.

    Tier 1 — Build these first (high confidence):

  • Funding rate blocker for SMC. Compute the 30-day rolling z-score of daily BTC funding. When abs(z) > 2.0, skip all new SMC entries. When z > +1.5, skip SMC longs — shorts remain live. Fires ~7–8% of days. Highest temporal stability in the study.
  • VIX regime gate for SMC. When VIX is above 18, suppress SMC long entries. When VIX is above 25, consider suppressing both directions. Validated across two independent research rounds. Pair with funding: when both fire simultaneously, confidence is at its highest.
  • Tier 2 — Worth building, lower confidence:

  • OI divergence gate for MeanReversion longs. When OI z-score >1.5 and price ROC is near-flat, pause MR long entries. Already implemented in the engine — Indicators.oi_divergence() is live. The only remaining work is wiring it into the strategy's backtest and live data path.
  • CPI circuit breaker for TrendMTF. Skip new TrendMTF entries in the 48h window around monthly CPI releases. Easiest implementation (requires only a calendar, no live feed), lowest confidence, lowest risk.
  • What not to build:

  • Universal / shared filter layers
  • Combo filters applied broadly (Net Liquidity + VIX + Stablecoin combined will decimate TrendMTF)
  • Funding rate gates on TrendMTF or MeanReversion (actively harmful in all tested variants)

  • What's Still Missing

    The study has limits we want to be direct about.

    Out-of-sample validation is the single most important remaining step. All results here are in-sample. Before any filter goes live, we need to hold out 6 months of recent data, apply the filter rules blind, and compare against the unfiltered baseline. If the LCR numbers hold, we ship. If they don't, we don't.

    Sample size is borderline. 5–7 strategy runs is enough to form a hypothesis, not enough to make hard claims. The SMC funding filter is the most convincing result in the study and it still needs more runs across BTC, ETH, and BNB before the confidence is production-grade.

    The interaction between funding + VIX for SMC is untested. Both are recommended. Their combined blockage is probably 10–12% of days (unlikely to create dead windows since each fires independently at ~6–8%). But the joint LCR is unknown. This is low-risk to stack but worth measuring.

    Live wiring. The Python indicator library has vix_regime() and oi_divergence() already built. The VIX daily CSV cache is populated. What's missing is plumbing a live data feed — CBOE VIX daily, Binance funding rate — into the signal runner so filters can run in production, not just in backtests.


    Where We Land

    The signals are real. The correlation is not an artifact of sample selection or data snooping — we tested temporal stability explicitly, and the strongest signals held in both halves of the data independently.

    But the edge is narrower and more specific than the first post implied. The right mental model isn't "macro signals tell you when the market is safe." It's "specific macro conditions selectively predict failure modes in specific strategy types." VIX doesn't tell you the market is dangerous — it tells you SMC longs are dangerous. Funding rate extremes don't signal a crash — they signal that the crowd is too one-sided for SMC setups to resolve cleanly.

    Per-strategy gates, not kill switches. Surgical, not systemic.

    That's what the data says.