Skip to content

View original

DogeNewsSentimentShockDriftLS

Hypotheses

DOGE News-Sentiment Shock Under-Reaction Drift, Long-Short (DOGEUSDT.BINANCE USD-M, 1H bars + news_sentiment feed — trade the multi-hour price DRIFT that follows a sharp per-asset sentiment shock, shock-gated so trades are RARE and per-trade capture is large, 3-parameter)

Hypotheses

A LONG-SHORT, single-instrument directional strategy triggered by the BRAND-NEW news_sentiment supplementary feed (LLM-scored per-asset sentiment, 5-min buckets, live since 2026-08-13, accessed point-in-time via supp_window). It is the first strategy in the factory to use news_sentiment as a primary signal — not a price-momentum, funding, OI, order-flow-tick, premium-fade, liquidation, or gated-momentum mechanism (all documented dead classes L68-L92). Premise: post-news UNDER-REACTION drift on a narrative/social-driven perp. Shock-gated so trades are rare and high-conviction, avoiding the sub-fee churn that killed the intraday/VWAP/order-flow classes. Long on a strong positive shock, short on a strong negative shock, flat otherwise.

Hypotheses

Iteration 4 addresses ONLY the reported failure ('Sharpe -0.24 disagrees in sign with total_return 1.20%'), which is a measurement-coherence defect, not a signal defect: both numbers derive from the mark-to-market curve, so a sign split means (a) fills happened at prices the close-marked series never observed and (b) the +1.2% headline is smaller than the additive per-fill cost corrections folded into the daily series. Two reversals of the iteration-3 changes that produced the worse split: (1) bracket exits removed, so every fill is a market order at a bar close and the realised path IS the close-to-close marked path by construction (risk control kept as a wide 4% bar-close stop, with no bracket legs there is no double-exit); (2) trades made rarer and larger as the hypothesis actually specifies - entry_z 1.2 -> 1.8, hold_hours 3 -> 6, a re-arm guard so one news burst is one round trip, and position_frac 0.3 -> 0.5 - so per-trade capture clears the ~0.10% round-trip taker plus impact instead of being swamped by fill-count drag. Signal logic, the point-in-time news lookup, the no-data flat rule and the sizing path are untouched (Layers 1/1.5/2/3 passed on them). Honest caveat: the news_sentiment feed only starts 2026-08-13, so the live-feed portion of any window is ~3 weeks - the sample will stay small until the feed accrues more history, and that is the real constraint on this hypothesis, not the code.

Hypotheses

data_wall / unmeasurable: the news_sentiment feed only went live 2026-08-13, so despite the 6-year primary span (53,967 bars) EVERY one of the 24 trades falls inside 2026-08-16 -> 2026-09-05 (daily_returns and annual_returns are 2026-only; entry_diag shows all 24 signals in the live-feed window). This resolves QA's concern in the mechanism's favour — the code's no-data guard works and it is NOT synthetic backfill — but leaves only ~3 weeks / 24 trades of real data. A deliberately rare, shock-gated strategy cannot be validated on that: walk-forward windows would hold ~8 trades and the holdout a handful, so a 2-hour 3-phase optimization would curve-fit noise (Sharpe 0.40 with CI [-0.43, 1.00] straddling zero is non-diagnostic on 17 effective daily obs). The premise was never actually tested. This is a DATA verdict, not an edge verdict: re-run the identical strategy once the news_sentiment feed has accrued enough live history (~6-12 months, >=100 shock trades) to sample the post-news drift across regimes. abandon_class = data_wall / unmeasurable.

Implementation

Long/short DOGE USD-M perp on 1H bars, triggered by a z-scored shock in the LLM news_sentiment feed (rolling 2h sum of 5-minute sentiment buckets, z-scored against the strategy's own 48-bar distribution of that flow, point-in-time via supp_window). |z| >= 1.8 opens a position in the shock's direction to capture the multi-hour post-news under-reaction drift; the position exits on a 6-hour drift-horizon time stop, an opposite-direction shock, or a 4% bar-close stop. A re-arm guard requires |z| to decay back below the trigger before the same news burst can be traded again, keeping trades rare and per-trade capture large. Flat whenever the news feed has no observation within 6 hours of the bar (i.e. before 2026-08-13, when the feed did not exist) - no price-only fallback.

Verification Results

Either freeze hold_hours/position_frac/stop_loss_pct to their defaults (keeping optimization to the 3 core params as the hypothesis states) or update the hypothesis framing to 6 params.

Verification Results

Hypothesis advertises a '3-parameter' strategy and the code labels shock_window_hours / baseline_bars / entry_z as the 3 core mechanism params, but _param_bounds exposes 6 optimizable parameters (adds hold_hours, position_frac, stop_loss_pct). The mechanism structure still matches the hypothesis, so this is not a mismatch, but the optimizer will search a wider space than the '3-parameter' framing implies — larger PBO/overfitting surface on a small sample.

Verification Results

Confirm the base template calls the subclass min_bars_required(); if it uses a config/attribute instead, set the warmup that way to avoid a silently-ignored override.

Verification Results

Static analysis flags min_bars_required(self) as shadowing a framework method ('the base relies on its own implementation'). If the base template does not actually dispatch to the override, the intended 24-bar barrier may be ignored. Non-fatal — the shock baseline warms up on its own deque regardless.

Verification Results

Data-coverage / measurability is the real risk here, not the code. The hypothesis and the developer both state the news_sentiment feed only went live 2026-08-13, i.e. ~3.5 weeks of real history as of 2026-09-07. For a deliberately RARE, shock-gated (|z|>=1.8, hold 6h, re-arm-guarded) strategy, ~3 weeks of live feed yields only a handful of genuine trades. Yet the Layer-3 sandbox reported 1283 trades with regime/stress attribution spanning 2024-2025 — trades that predate the feed's existence. That means the sandbox either injected/backfilled synthetic news across the window or the feed is backfilled historically; if it is the former, the sandbox result is non-diagnostic and a full-history backtest on the real 3-week feed will be UNMEASURABLE (data-wall). The analyst should verify actual news_sentiment coverage before trusting any headline: confirm whether real DOGE news_sentiment exists across the backtest span, and if it is only ~3 weeks, park as not-measurable until the feed accrues history. Separately, the sandbox equity curve is deeply negative (-90.3%, PF 0.77, avg_trade_return_pct -0.014%), but per the smoke-test caveat this is one unoptimized draw on possibly-synthetic data and is not a basis to block.

Backtest Review

First strategy to use the news_sentiment feed as a primary signal, a genuinely novel mechanism distinct from the documented dead momentum/funding/OI/order-flow classes.

Backtest Review

Code correctly handles missing history: the no-data guard (_news_shock returns None before 2026-08-13) keeps the strategy flat across 2020-2026-08-12, and it only trades where the feed actually exists.

Backtest Review

Per-trade economics look fine on their face: avg_trade_return_pct 1.04% clears the Binance USD-M 0.15% fee floor, PF 2.28, win_rate 0.625, balanced long/short legs consistent with the shock-gated long+/short- premise.

Backtest Review

Full-history run RESOLVES the QA edge concern: it is NOT synthetic-injection (no pre-2026-08 trades), it is simply a genuinely ~3.5-week-old live feed.

Backtest Review

The entire tradeable sample is ~3 weeks: all 24 trades fall in 2026-08-16 -> 2026-09-05 (daily_returns and annual_returns show only 2026). entry_diag confirms 24 signals/24 submissions across 53,944 bars, all in the live-feed window.

Backtest Review

24 trades cannot support the 3-phase optimization: walk-forward would carve ~1-week windows of ~8 trades and the holdout ~a handful of trades — the optimizer would fit noise, not an edge.

Backtest Review

Sharpe 0.40 with CI [-0.43, 1.00] straddling zero and effective_daily_obs 17 mean the headline is statistically non-diagnostic; the shock-gated (|z|>=1.8, 6h hold, re-arm-guarded) design is deliberately rare, so trade count will accrue slowly.

Backtest Review

regime/stress attribution is empty for every pre-2026 window (all zeros/null) because no trades occurred there — nothing was actually validated across regimes.

Analysis

Backtest gate: - metrics unreliable: Incoherent: Sharpe -0.24 disagrees in sign with total_return 1.20% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.

Outcome Summary

DogeNewsSentimentShockDriftLS-ec944be535

Outcome Summary

The story is a data-wall, not an edge verdict — the mechanism was never actually tested.

Outcome Summary

A rare shock-gated mechanism can't be validated against a brand-new feed with only weeks of history; wait for ~6-12 months / >=100 shock trades before testing.

Outcome Summary

Abandoned at the backtest-review gate before optimization: ~3.5 weeks / 24 trades of live-feed data is below the 30-trade and 26-week thresholds with sharpe_ci_low below zero — unmeasurable, so optimization would only fit noise.

Outcome Summary

The first factory strategy to use the news_sentiment feed as a primary signal: a long-short DOGEUSDT.BINANCE 1H strategy trading the multi-hour post-news under-reaction drift, shock-gated on a self-normalising z-score so trades are rare and per-trade capture is large.

Outcome Summary

24 trades over the 6-year span with total_return 10.25x, win_rate 0.625, PF 2.28, avg_trade_return_pct 1.04% — but Sharpe just 0.40 with CI [-0.43, 1.00]. All 24 trades fell in 2026-08-16→09-05 since the feed only went live 2026-08-13.
Strategy report

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