diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index d7ae112..292a76b 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1134,17 +1134,38 @@ await positionManager.addTrade(activeTrade) - **Rationale:** Entry at candle close = top of candle, -1% to -1.5% pullbacks are normal - **Data collection:** After 50-100 trades, will optimize ADX thresholds (20/25) based on stop-out rates - **On-chain order synchronization:** After TP1 hits, calls `cancelAllOrders()` then `placeExitOrders()` with updated SL price (uses `retryWithBackoff()` for rate limit handling) -- **ATR-based trailing stop with ADX multiplier (Nov 19, 2025):** - - Base calculation: `(atrAtEntry / currentPrice × 100) × trailingStopAtrMultiplier` - - **ADX-based widening:** Multiplier adjusted based on trend strength at entry - - `trade.adxAtEntry > 30`: Apply 1.5× multiplier (very strong trends) - - `trade.adxAtEntry 25-30`: Apply 1.25× multiplier (strong trends) - - `trade.adxAtEntry < 25`: Apply 1.0× multiplier (base trail) - - **Profit acceleration:** If current profit > 2%, apply additional 1.3× multiplier - - **Combined effect:** ADX 29.3 + 2% profit = 1.5 × 1.3 = 1.95× total multiplier - - **Purpose:** Capture more profit on massive trend moves (e.g., 38% MFE trades) - - **Backward compatible:** Trades without `adxAtEntry` use base multiplier - - Trail distance clamped between min/max % for safety +- **PHASE 7.3: Adaptive Trailing Stop with Real-Time ADX (Nov 27, 2025 - DEPLOYED):** + - **Purpose:** Dynamically adjust trailing stop based on current trend strength changes, not static entry-time ADX + - **Implementation:** Queries market data cache for fresh 1-minute ADX every monitoring loop (2-second interval) + - **Adaptive Multiplier Logic:** + * **Base:** `trailingStopAtrMultiplier` (1.5×) × ATR percentage + * **Current ADX Strength Tier (uses fresh 1-min ADX):** + - Current ADX > 30: 1.5× multiplier (very strong trend) - log "📈 1-min ADX very strong" + - Current ADX 25-30: 1.25× multiplier (strong trend) - log "📈 1-min ADX strong" + - Current ADX < 25: 1.0× base multiplier + * **ADX Acceleration Bonus (NEW):** If ADX increased >5 points since entry → Additional 1.3× multiplier + - Example: Entry ADX 22.5 → Current ADX 29.5 (+7 points) → Widens trail to capture extended move + - Log: "🚀 ADX acceleration (+X points): Trail multiplier Y× → Z×" + * **ADX Deceleration Penalty (NEW):** If ADX decreased >3 points since entry → 0.7× multiplier (tightens trail) + - Log: "⚠️ ADX deceleration (-X points): tighter to protect" + * **Profit Acceleration (existing):** Profit > 2% → Additional 1.3× multiplier + - Log: "💰 Large profit (X%): Trail multiplier Y× → Z×" + * **Combined Max:** 1.5 (base) × 1.5 (strong ADX) × 1.3 (acceleration) × 1.3 (profit) = **3.16× multiplier** + - **Example Calculation:** + * Entry: SOL $140.00, ADX 22.5, ATR 0.43 + * After 30 min: Price $143.50 (+2.5%), Current ADX 29.5 (+7 points) + * OLD (entry ADX): 0.43 / 140 × 100 = 0.307% → 0.307% × 1.5 = 0.46% trail = stop at $142.84 + * NEW (adaptive): 0.307% × 1.5 (base) × 1.25 (strong) × 1.3 (accel) × 1.3 (profit) = 0.99% trail = stop at $141.93 + * **Impact:** $0.91 more room (2.15× wider) = captures $43 MFE instead of $23 + - **Logging:** + * "📊 1-min ADX update: Entry X → Current Y (±Z change)" - Shows ADX progression + * "📊 Adaptive trailing: ATR X (Y%) × Z× = W%" - Shows final trail calculation + - **Fallback:** Uses `trade.adxAtEntry` if market cache unavailable (backward compatible) + - **Safety:** Trail distance clamped between min/max % bounds (0.25%-0.9%) + - **Code:** `lib/trading/position-manager.ts` lines 1356-1450, imports `getMarketDataCache()` + - **Expected Impact:** +$2,000-3,000 over 100 trades by capturing trend acceleration moves (like MA crossover ADX 22.5→29.5 pattern) + - **Risk Profile:** Only affects 25% runner position (main 75% already closed at TP1) + - **See:** `PHASE_7.3_ADAPTIVE_TRAILING_DEPLOYED.md` and `1MIN_DATA_ENHANCEMENTS_ROADMAP.md` Phase 7.3 section - Trailing stop: Activates when TP2 price hit, tracks `peakPrice` and trails dynamically - Closes positions via `closePosition()` market orders when targets hit - Acts as backup if on-chain orders don't fill @@ -4444,14 +4465,22 @@ if (!enabled) { - Verify TP1 hit → 75% close → SL moved to breakeven - SQL: Check `tp1Hit`, `slMovedToBreakeven`, `currentSize` in Trade table - Compare: Position Manager logs vs actual Drift position size - - **ADX multiplier verification:** Watch for "Strong trend (ADX X): Trail multiplier..." messages + - **Phase 7.3 Adaptive trailing stop verification (Nov 27, 2025+):** + * Watch for "📊 1-min ADX update: Entry X → Current Y (±Z change)" every 60 seconds + * Verify ADX acceleration bonus: "🚀 ADX acceleration (+X points)" + * Verify ADX deceleration penalty: "⚠️ ADX deceleration (-X points)" + * Check final calculation: "📊 Adaptive trailing: ATR X (Y%) × Z× = W%" + * Confirm multiplier adjusts dynamically (not static like old system) + * Example: ADX 22.5→29.5 should show multiplier increase from 1.5× to 2.4×+ 11. **Trailing stop changes:** - - ADX multiplier logic in Position Manager (lines 1210-1243) - - Requires `adxAtEntry` field in ActiveTrade interface - - Test with known ADX values to verify graduated multipliers (>30: 1.5×, 25-30: 1.25×, <25: 1.0×) - - Profit acceleration: >2% profit adds 1.3× multiplier - - Log shows: `Strong trend (ADX 29.3): Trail multiplier 1.5x → 1.88x (profit acceleration applied)` - - Backward compatible: Trades without ADX use base multiplier + - **CRITICAL (Nov 27, 2025):** Phase 7.3 uses REAL-TIME 1-minute ADX, not entry-time ADX + - Code location: `lib/trading/position-manager.ts` lines 1356-1450 + - Queries `getMarketDataCache()` for fresh ADX every monitoring loop (2-second interval) + - Adaptive multipliers: Base 1.5× + ADX strength tier (1.0×-1.5×) + acceleration (1.3×) + deceleration (0.7×) + profit (1.3×) + - Test with known ADX progression: Entry 22.5 → Current 29.5 = expect acceleration bonus + - Fallback: Uses `trade.adxAtEntry` if cache unavailable (backward compatible) + - Log shows: "📊 Adaptive trailing: ATR 0.43 (0.31%) × 3.16× = 0.99%" + - Expected: Trail width changes dynamically as ADX changes (captures acceleration, protects on deceleration) 12. **Calculation changes:** Add verbose logging and verify with SQL - Log every intermediate step, especially unit conversions - Never assume SDK data format - log raw values to verify