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:
31
.github/copilot-instructions.md
vendored
31
.github/copilot-instructions.md
vendored
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user