diff --git a/lib/trading/signal-quality.ts b/lib/trading/signal-quality.ts index 86cc192..2a53544 100644 --- a/lib/trading/signal-quality.ts +++ b/lib/trading/signal-quality.ts @@ -118,8 +118,16 @@ export function scoreSignalQuality(params: { } // Volume check (want > 1.0 = above average) + // ANTI-CHOP FILTER: High volume + low ADX = whipsaw trap if (params.volumeRatio > 0) { - if (params.volumeRatio > 1.5) { + const isChoppy = params.adx > 0 && params.adx < 16 + const hasHighVolume = params.volumeRatio > 1.5 + + if (isChoppy && hasHighVolume) { + // High volume during choppy conditions (ADX < 16) is often a trap + score -= 15 + reasons.push(`⚠️ Whipsaw trap: High volume (${params.volumeRatio.toFixed(2)}x) + choppy market (ADX ${params.adx.toFixed(1)})`) + } else if (params.volumeRatio > 1.5) { score += 15 reasons.push(`Very strong volume (${params.volumeRatio.toFixed(2)}x avg)`) } else if (params.volumeRatio > 1.2) {