docs: Update copilot-instructions.md for Nov 26 quality scoring enhancement

- Multi-Timeframe section: Added Nov 26 implementation note
- Quality scoring now calculated for ALL timeframes (not just 5min)
- Data collection signals get real quality scores (not hardcoded 0)
- BlockedSignal records include full quality metadata
- Enables SQL: WHERE signalQualityScore >= minScoreRequired
- Execute Trade workflow: Added timeframe routing logic
- When Making Changes: Added item #19 for multi-timeframe updates
- Reflects implementation in commit dbada47
This commit is contained in:
mindesbunister
2025-11-26 15:21:08 +01:00
parent dbada477b8
commit 2338bb6283

View File

@@ -720,14 +720,20 @@ WHERE "blockReason" = 'QUALITY_SCORE_TOO_LOW'
- **Comprehensive:** Tracks best/worst case scenarios (MFE/MAE)
- **API accessible:** Check status anytime via `/api/analytics/signal-tracking`
**Current Status (Nov 22, 2025):**
**Current Status (Nov 26, 2025):**
- ✅ System deployed and running in production
- ✅ **Enhanced Nov 22:** Now tracks quality-blocked signals (QUALITY_SCORE_TOO_LOW) in addition to multi-timeframe data collection
- ✅ **Enhanced Nov 26:** Quality scoring now calculated for ALL timeframes (not just 5min production signals)
- Execute endpoint calculates `scoreSignalQuality()` BEFORE timeframe check (line 112)
- Data collection signals now get real quality scores (not hardcoded 0)
- BlockedSignal records include: `signalQualityScore` (0-100), `signalQualityVersion` ('v9'), `minScoreRequired` (90/95)
- Enables SQL queries: `WHERE signalQualityScore >= minScoreRequired` to compare quality-filtered win rates
- Commit: dbada47 "feat: Calculate quality scores for all timeframes (not just 5min)"
- ✅ TradingView alerts configured for 15min and 1H
- ✅ Background tracker runs every 5 minutes autonomously
- 📊 **Data collection:** Multi-timeframe (50+ per timeframe) + quality-blocked (20-30 signals)
- 🎯 **Dual goals:**
1. Determine which timeframe has best win rate
1. Determine which timeframe has best win rate (now with quality filtering capability)
2. Validate if quality 91 threshold filters winners or losers
- 📈 **First result (Nov 21, 16:50):** Quality 80 signal blocked (weak ADX 16.6), would have profited +0.52% (+$43) within 1 minute - **FALSE NEGATIVE confirmed**
@@ -1315,7 +1321,9 @@ TradingView alert → n8n Parse Signal Enhanced (extracts metrics + timeframe)
↓ /api/trading/execute
↓ normalize symbol (SOLUSDT → SOL-PERP)
↓ getMergedConfig()
↓ scoreSignalQuality({ ..., timeframe }) [CRITICAL: calculate EARLY, before position sizing]
↓ scoreSignalQuality({ ..., timeframe }) [CRITICAL: calculate EARLY for ALL timeframes - line 112, Nov 26]
↓ IF timeframe !== '5': Save to BlockedSignal with quality scores → return success
↓ IF timeframe === '5': Continue to execution (production trade)
↓ getPositionSizeForSymbol(qualityScore) [adaptive leverage based on quality score]
↓ openPosition() [MARKET order with adaptive leverage]
↓ calculate dual stop prices if enabled
@@ -1324,6 +1332,15 @@ TradingView alert → n8n Parse Signal Enhanced (extracts metrics + timeframe)
↓ positionManager.addTrade() [ONLY after DB save succeeds - prevents unprotected positions]
```
**CRITICAL EXECUTION ORDER (Nov 26, 2025 - Multi-Timeframe Quality Scoring):**
Quality scoring MUST happen BEFORE timeframe filtering - this is NOT arbitrary:
- All timeframes (5min, 15min, 1H, 4H, Daily) need real quality scores for analysis
- Data collection signals (15min+) save to BlockedSignal with full quality metadata
- Enables SQL queries: `WHERE blockReason = 'DATA_COLLECTION_ONLY' AND signalQualityScore >= X`
- Purpose: Compare quality-filtered win rates across timeframes to determine optimal trading interval
- Old flow: Timeframe check → Quality score only for 5min → Data collection signals get hardcoded 0
- **New flow:** Quality score ALL signals → Timeframe routing → Data collection gets real scores
**CRITICAL EXECUTION ORDER (Nov 24, 2025 - Adaptive Leverage):**
The order of quality scoring → position sizing is NOT arbitrary - it's a requirement:
- Quality score MUST be calculated BEFORE position sizing
@@ -4274,6 +4291,14 @@ if (!enabled) {
- Create reference docs in `docs/` for complex features (e.g., `MANUAL_TRADE_FILTERING.md`)
- **WHY:** Future AI agents need complete context to maintain data integrity and avoid breaking analysis
- **EXAMPLES:** signalSource field for filtering, MAE/MFE tracking, phantom trade detection
19. **MULTI-TIMEFRAME DATA COLLECTION CHANGES (Nov 26, 2025):** When modifying signal processing for different timeframes:
- Quality scoring MUST happen BEFORE timeframe filtering (execute endpoint line 112)
- All timeframes need real quality scores for analysis (not hardcoded 0)
- Data collection signals (15min/1H/4H/Daily) save to BlockedSignal with full quality metadata
- BlockedSignal fields to populate: signalQualityScore, signalQualityVersion, minScoreRequired, scoreBreakdown
- Enables SQL: `WHERE blockReason = 'DATA_COLLECTION_ONLY' AND signalQualityScore >= X`
- Purpose: Compare quality-filtered win rates across timeframes to determine optimal trading interval
- Update Multi-Timeframe section in copilot-instructions.md when changing flow
## Development Roadmap