# 1-Minute Market Data Enhancement Roadmap **Status:** Phase 1 COMPLETE (Nov 27, 2025) - 1-minute data collection active, ADX validation integrated into revenge system **Purpose:** Leverage real-time 1-minute market data to optimize trade execution, position management, and risk control across all trading systems. **Data Source:** TradingView 1-minute indicators → BlockedSignal table with timeframe='1' → Market data cache updated every 60 seconds --- ## Phase 1: Foundation ✅ COMPLETE (Nov 27, 2025) **Status:** DEPLOYED and VERIFIED **Completed:** - ✅ 1-minute data collection via TradingView alerts - ✅ Bot filters timeframe='1' → saves to BlockedSignal (not execute) - ✅ Market data cache updates every 60 seconds - ✅ Revenge system ADX validation (blocks if ADX < 20) - ✅ Telegram notifications show ADX validation results - ✅ Database: revengeFailedReason, revengePnL fields added **Verified Working:** - 2+ signals collected per minute - 0 unintended trade executions - Fresh ADX/RSI/Volume data available in cache - Revenge system can query real-time conditions **Impact:** - Revenge system 50% smarter (only enters strong trends) - Market context always <60 seconds old (was 5+ minutes) - Foundation for all future enhancements --- ## Phase 2: Smart Entry Timing 🎯 HIGHEST PRIORITY **Goal:** Improve average entry price by 0.2-0.5% per trade by waiting for optimal 1-minute confirmation **Status:** NOT STARTED **Problem:** - 5-minute signal arrives at candle close - Immediate execution often at worst price (candle high/low) - Natural pullbacks of 0.3-0.5% within 1-2 minutes - Missing opportunity for better entries **Solution:** Instead of immediate entry, implement 1-2 minute entry window: 1. **Signal Arrives** (5-minute candle close) - Bot receives: LONG SOL-PERP, quality 95, ADX 28 - Current price: $142.50 2. **Wait for 1-Minute Confirmation** (up to 2 minutes) - Monitor next 2 × 1-minute bars - Look for: * Price pullback 0.2-0.3% (LONG: price dips, SHORT: price rises) * Volume spike on next bar (confirmation) * ADX holds or increases (trend intact) 3. **Execute When Conditions Met** - Best case: Enter at $142.15 (0.25% better than signal) - Timeout: If no pullback within 2 minutes, execute at market - Validation: ADX must still be >= signal ADX - 2 points **Implementation:** ```typescript // New service: lib/trading/smart-entry-timer.ts class SmartEntryTimer { // Queue signal for delayed execution queueSignal(signal, maxWaitMs = 120000) // 2 minutes // Monitor 1-minute bars for optimal entry monitorForEntry(signal) { // Check every 1-minute bar: // - Price pullback? // - Volume confirmation? // - ADX still strong? } // Execute when conditions met or timeout executeEntry(signal, actualPrice) } ``` **Configuration:** ```bash # .env additions SMART_ENTRY_ENABLED=true SMART_ENTRY_MAX_WAIT_MS=120000 # 2 minutes SMART_ENTRY_PULLBACK_MIN=0.15 # 0.15% minimum SMART_ENTRY_PULLBACK_MAX=0.50 # 0.50% maximum SMART_ENTRY_ADX_TOLERANCE=2 # ADX can't drop >2 points ``` **Expected Impact:** - Average entry improvement: 0.2-0.5% per trade - On $8,000 position: $16-40 better entry - Over 100 trades: $1,600-4,000 profit improvement - Win rate increase: ~2-3% (better entries = less immediate SL) **Data Collection:** - Track: signalPrice vs actualEntryPrice - Track: waitTimeMs, pullbackPercent, volumeConfirmation - Compare: immediate entry P&L vs delayed entry P&L - After 50 trades: Validate hypothesis with data **Risk Management:** - Timeout prevents missing trades entirely (execute at 2min mark) - ADX validation prevents entering degraded setups - Price limit: If price moves >1% against direction, cancel signal --- ## Phase 3: Signal Quality Real-Time Validation 🔍 **Goal:** Catch signals that degraded between TradingView alert generation and bot execution **Status:** NOT STARTED **Problem:** - TradingView generates signal at 5-minute candle open (4min 30s ago) - Alert fires at candle close (now) - Conditions may have changed: ADX dropped, volume dried up, RSI reversed - Bot executes stale signal as if conditions still valid **Solution:** Cross-validate every 5-minute signal against latest 1-minute data: ```typescript // In app/api/trading/execute/route.ts // After receiving signal, before execution: const signalADX = body.adx // From TradingView (5min) const latestData = getPythPriceMonitor().getCachedPrice(symbol) const currentADX = latestData?.adx // From 1min cache // Degradation check if (currentADX < signalADX - 5) { console.log(`⚠️ ADX degraded: ${signalADX} → ${currentADX} (dropped ${signalADX - currentADX} points)`) // Block trade or reduce position size return { success: false, reason: 'SIGNAL_DEGRADED' } } ``` **Validation Checks:** 1. **ADX Degradation:** Current < Signal - 5 points → Block 2. **Volume Collapse:** Current < 0.5x signal volume → Block 3. **RSI Reversal:** - LONG: Signal RSI 55, current RSI 35 → Oversold reversal, block - SHORT: Signal RSI 45, current RSI 65 → Overbought reversal, block 4. **Price Position Shift:** - LONG: Was 20% range, now 85% range → Chasing high, block - SHORT: Was 80% range, now 15% range → Chasing low, block **Expected Impact:** - Block 5-10% of signals that degraded - Prevent losses from stale signals - Improve quality score accuracy - Reduce flip-flop losses from rapid reversals **Data Collection:** - Track: signalADX vs currentADX delta - Track: Blocked signals that would've won/lost - After 50 blocked signals: Validate thresholds --- ## Phase 4: Stop-Hunt Early Warning System ⚠️ **Goal:** Predictive revenge system activation based on price approaching stop loss levels **Status:** NOT STARTED **Current System:** - Reactive: Wait for SL hit, then check if price reverses - 30-second monitoring after stop-out **Enhanced System:** - Predictive: Detect price approaching SL of quality 85+ trades - Prepare revenge system 30-60 seconds before SL hit - Validate conditions BEFORE stop-out (better timing) **Implementation:** ```typescript // In Position Manager monitoring loop if (quality >= 85 && distanceToSL < 0.3%) { // Price within 0.3% of stop loss const latestData = getPythPriceMonitor().getCachedPrice(symbol) const currentADX = latestData?.adx if (currentADX >= 25) { console.log(`🔔 Stop-hunt early warning: Price near SL, ADX ${currentADX} strong`) // Pre-stage revenge system // If SL hits, immediate revenge execution (no 90s delay) } else { console.log(`⚠️ Stop-hunt warning: Price near SL, ADX ${currentADX} weak - revenge disabled`) // Disable revenge for this stop-out } } ``` **Advantages:** - Faster revenge execution (already validated before SL) - Better timing (enter as price reverses, not 90s later) - Smarter filtering (check conditions pre-stop, not post-stop) - Avoid whipsaw: If ADX weak before SL, don't revenge **Expected Impact:** - Revenge entry speed: 90s → 5-10s (faster = better price) - Revenge success rate: +10-15% (better timing) - Avoid bad revenges: Block weak trend stop-outs preemptively --- ## Phase 5: Dynamic Position Sizing Based on Momentum 📊 **Goal:** Adjust position size based on real-time trend strength, not just static quality score **Status:** NOT STARTED **Current System:** - Quality 95+ → 15x leverage - Quality 90-94 → 10x leverage - Static at trade entry, no adjustment **Enhanced System:** - Quality determines BASE leverage - 1-minute ADX momentum adjusts ±20% **Algorithm:** ```typescript const baseQualityScore = 92 // Quality tier: 10x const baseLeverage = 10 // Check ADX trend over last 3 minutes const adxData = getLast3MinuteADX(symbol) const adxTrend = (adxData[2] - adxData[0]) / adxData[0] * 100 if (adxTrend > 10) { // ADX rising >10% (28 → 31) = strengthening trend leverage = baseLeverage * 1.2 // 10x → 12x console.log(`📈 ADX strengthening (+${adxTrend.toFixed(1)}%): Boost to ${leverage}x`) } else if (adxTrend < -10) { // ADX falling >10% (28 → 25) = weakening trend leverage = baseLeverage * 0.8 // 10x → 8x console.log(`📉 ADX weakening (${adxTrend.toFixed(1)}%): Reduce to ${leverage}x`) } else { // ADX stable = use base leverage leverage = baseLeverage } ``` **Safety Limits:** - Maximum adjustment: ±20% of base - Minimum leverage: 5x (never go below) - Maximum leverage: 20x (never exceed) - Requires 3 consecutive 1-minute bars (3min history) **Expected Impact:** - Larger positions in strongest trends (capture more) - Smaller positions in weakening trends (reduce risk) - Better risk-adjusted returns - Smoother equity curve **Data Collection:** - Track: baseLeverage vs actualLeverage - Track: P&L difference from dynamic sizing - After 100 trades: Validate improvement vs static sizing --- ## Phase 6: Re-Entry Analytics Momentum Filters 🎯 **Goal:** Enhance re-entry validation with trend momentum, not just static ADX/RSI **Status:** NOT STARTED (Enhancement to existing system) **Current System:** - Checks: ADX > 20, RSI not extreme - Static snapshot, no momentum consideration **Enhanced System:** Add momentum checks to re-entry validation: ```typescript // In app/api/analytics/reentry-check/route.ts const last3Bars = getLast3MinuteData(symbol) // ADX momentum: Rising or falling? const adxTrend = (last3Bars[2].adx - last3Bars[0].adx) / last3Bars[0].adx * 100 // RSI momentum: Toward or away from extremes? const rsiDelta = last3Bars[2].rsi - last3Bars[0].rsi // Scoring adjustments if (direction === 'long') { if (adxTrend > 5 && rsiDelta > 0) { score += 10 // ADX rising + RSI recovering = bullish momentum } else if (adxTrend < -5 || rsiDelta < -10) { score -= 15 // Weakening trend or diving RSI = avoid } } ``` **Validation Criteria:** - Trend strengthening (ADX rising) → Bonus points - Trend weakening (ADX falling) → Penalty points - RSI moving favorably → Bonus - RSI moving unfavorably → Penalty **Expected Impact:** - Block re-entries into deteriorating conditions - Favor re-entries with momentum confirmation - Improve manual trade success rate by 5-10% --- ## Phase 7: Dynamic Trailing Stop Optimization 🔒 **Goal:** Adjust trailing stop width based on real-time ADX changes, not static formula **Status:** NOT STARTED **Current System:** - Trailing stop: ATR × 1.5 multiplier (fixed) - ADX-based multiplier at entry (1.0x, 1.25x, 1.5x) - No adjustment during trade lifetime **Enhanced System:** Dynamically adjust trail width as ADX changes: ```typescript // In Position Manager trailing stop logic const entryADX = trade.adxAtEntry // Original: 28 const currentADX = getPythPriceMonitor().getCachedPrice(symbol)?.adx if (currentADX > entryADX + 5) { // ADX spiking (28 → 33+) = trend accelerating trailMultiplier = 1.8 // Widen trail, let it run console.log(`🚀 ADX spiking (${entryADX} → ${currentADX}): Widen trail to ${trailMultiplier}x`) } else if (currentADX < entryADX - 5) { // ADX dropping (28 → 23-) = trend weakening trailMultiplier = 1.2 // Tighten trail, lock profit console.log(`⚠️ ADX weakening (${entryADX} → ${currentADX}): Tighten trail to ${trailMultiplier}x`) } else { // ADX stable = use base multiplier trailMultiplier = 1.5 } ``` **Benefits:** - Capture more profit in accelerating trends (wider trail) - Protect profit when trend weakens (tighter trail) - Adaptive vs rigid formula - Reduces premature stops in strong moves **Expected Impact:** - Runner P&L improvement: 10-20% - Fewer premature trailing stops - Capture more of 5%+ moves - Better profit lock in weakening trends **Data Collection:** - Track: staticTrailExit vs dynamicTrailExit prices - Track: P&L difference per trade - After 50 runners: Validate improvement --- ## Implementation Priority **Phase 2 (Smart Entry Timing)** - Highest ROI - Expected: 0.2-0.5% better entries × 100 trades = $1,600-4,000 - Complexity: Medium (queue system + monitoring) - Risk: Low (timeout safety) - Timeline: 1-2 days **Phase 3 (Signal Validation)** - Quick Win - Expected: Block 5-10% bad signals, prevent losses - Complexity: Low (simple validation checks) - Risk: Low (can be disabled) - Timeline: 4-6 hours **Phase 4 (Early Warning)** - Medium Priority - Expected: Faster revenge execution, better timing - Complexity: Medium (integrate with Position Manager) - Risk: Medium (timing complexity) - Timeline: 1 day **Phase 5 (Dynamic Sizing)** - Advanced - Expected: Better risk-adjusted returns - Complexity: High (momentum calculation + safety) - Risk: Medium (leverage adjustments) - Timeline: 2-3 days **Phase 6 (Re-Entry Momentum)** - Low Priority - Expected: 5-10% improvement on manual trades - Complexity: Low (enhance existing system) - Risk: Low (scoring adjustment) - Timeline: 3-4 hours **Phase 7 (Dynamic Trailing)** - Advanced - Expected: 10-20% runner improvement - Complexity: High (Position Manager changes) - Risk: Medium (trail width affects exits) - Timeline: 2 days --- ## Success Metrics **Overall System Improvement Goals:** - Entry price improvement: 0.2-0.5% average - Signal quality: Block 5-10% degraded signals - Revenge success rate: +10-15% improvement - Runner profitability: +10-20% improvement - Position sizing: Better risk-adjusted returns - Re-entry accuracy: +5-10% win rate **Data Collection Requirements:** - Each phase requires 50-100 trades for validation - Track before/after metrics - Compare static vs dynamic approaches - Validate hypotheses with real money results **Risk Management:** - All phases have enable/disable flags - Timeout/fallback mechanisms - Gradual rollout (test → validate → scale) - Can revert to static formulas if underperforming --- ## Foundation Complete (Nov 27, 2025) **What We Built:** - ✅ 1-minute data collection (TradingView → BlockedSignal) - ✅ Market data cache (<60s old) - ✅ Revenge ADX validation (first use case) - ✅ Infrastructure for all future enhancements **Why This Matters:** Every enhancement above depends on fresh 1-minute data. The foundation is SOLID and PROVEN. Now we build the optimizations layer by layer, validating each with real money results. **Next Step:** Phase 2 (Smart Entry Timing) when ready - highest impact, proven concept from institutional trading.