Skip to content

Fast-analysis decisions skew mean-reversion: 82% SELL during a +25-33% rally #217

Description

@StevenSN01

Summary

Fast-analysis decisions show a strong mean-reversion bias: during a sustained rally, the pipeline produced 82% SELL decisions, issued while price sat at the top of its recent range. The prompt explicitly encourages SELL on overbought readings, and the result is a signal stream that systematically fights trends.

Related: #216 (same deployment, same evidence set).

Evidence

From a v5.0.17 deployment, hourly fast-analysis, 6 symbols, 4 days, 518 completed analyses:

  • Market context in the window: BTC +24%, ETH +33%, SOL +25%, HYPE +32% (strong one-way rally)
  • 427 / 518 (82%) final decisions were SELL; average price_position at signal time: 81st percentile for BUYs, 77th for SELLs
  • Notably, the objective score layer itself was bearish only ~25% of the time (score_based_decision SELL = 131/518) — the bearish skew accumulates across the LLM call and the finalization layers, it is not driven by the objective score alone
  • The system prompt in fast_analysis.py contains: "SELL signals are encouraged when indicators suggest downside" — on 4H/1D crypto, "indicators suggest downside" ≈ RSI overbought ≈ almost every day of a rally

Backtest proxy (QuantDinger's own Strategy V2 engine)

Fade-overbought short with the pipeline's level construction (BTC & ETH, 1D, 2024-09 → 2026-08):

  • Baseline: BTC −10.6%, ETH −43.9%
  • Adding a trend filter that blocks counter-trend shorts during MA bull alignment: 0 trades on BTC in 2 years — the filter becomes an off-switch, not an improvement
  • Trend-following control (turtle) on the same engine/window: BTC +40.2% — the loss is specific to the fade thesis, not the engine or costs

(Small samples, directional only.)

Suggestions

  1. Treat "SELL signals are encouraged" in the prompt as a candidate for removal/softening — it was presumably added to counter LLM bullishness, but combined with overbought indicator feeds it produces trend-fighting behavior.
  2. Consider making the consensus/multi-timeframe score regime-aware (e.g. suppress counter-trend fades when a higher-timeframe trend proxy is strong), and validate any such gate with backtests before shipping — a naive gate simply removes all trades.
  3. Surface the market regime in the response (the engine already computes one internally in _finalize_trading_plan_for_decision) so downstream consumers can interpret counter-trend signals.

Worth noting as context: published studies find LLM directional calls are close to random — the pipeline's rules layer should therefore not amplify the model's leanings, which is what the current construction appears to do.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions