docs: Complete FARTCOIN symbol fix investigation and solution

- Root cause: n8n workflow regex missing FARTCOIN pattern
- Evidence: Bot logs showed symbols already normalized by n8n
- Solution: Updated parse_signal_enhanced.json with FARTCOIN mapping
- User action required: Import updated workflow to n8n
- Architecture clarified: n8n normalizes symbols BEFORE bot receives them
This commit is contained in:
mindesbunister
2025-12-07 19:57:51 +01:00
parent ebffe9a4df
commit 3569b913a2

View File

@@ -0,0 +1,170 @@
# FARTCOIN Symbol Normalization Fix (Dec 7, 2025)
## Problem Summary
User added FARTCOIN 1-minute and 5-minute TradingView alerts for multi-asset data collection, but all FARTCOIN signals were being stored in the database as `SOL-PERP` instead of `FARTCOIN-PERP`.
## Root Cause Discovery
**Initial Hypothesis (WRONG):**
- Suspected bot's symbol normalization code was checking `includes('SOL')` before FARTCOIN
- Applied fixes to `config/trading.ts` and `app/api/trading/market-data/route.ts`
- **Result:** Fixes had NO effect, logs still showed SOL-PERP
**Actual Root Cause (Dec 7, 2025):**
- **TradingView → n8n → Bot architecture misunderstanding**
- n8n workflow normalizes symbols BEFORE sending to bot
- Bot receives symbols already in Drift format (`SOL-PERP`, `BTC-PERP`)
- Bot's normalization code is NEVER reached
- n8n workflow regex only matched `(SOL|BTC|ETH)` - FARTCOIN was missing
## Evidence
**Docker logs analysis:**
```bash
docker logs trading-bot-v4 --since 20m | grep "🎯 Trade execution request"
```
**Result:**
```json
{
"symbol": "SOL-PERP", // Already normalized by n8n!
"direction": "long",
"timeframe": "1",
"atr": 0,
"adx": 26.9563054335
}
```
**Key insight:** Symbol field was `SOL-PERP`, not `SOLUSDT` or `SOL` - normalization happened BEFORE bot received webhook.
## Solution
**File:** `workflows/trading/parse_signal_enhanced.json`
**Changes:**
1. Updated symbol regex: `(SOL|BTC|ETH)``(FARTCOIN|FART|SOL|BTC|ETH)`
2. Added FARTCOIN-specific mapping logic:
```javascript
const symbolMatch = body.match(/\b(FARTCOIN|FART|SOL|BTC|ETH)\b/i);
let symbol;
if (symbolMatch) {
const matched = symbolMatch[1].toUpperCase();
// FARTCOIN and FART both map to FARTCOIN-PERP
if (matched === 'FARTCOIN' || matched === 'FART') {
symbol = 'FARTCOIN-PERP';
} else {
symbol = matched + '-PERP';
}
} else {
symbol = 'SOL-PERP'; // Default fallback
}
```
**Why order matters:** FARTCOIN checked BEFORE SOL to avoid substring match issues.
## Deployment Steps
### 1. Code Changes (✅ Complete)
- Updated `workflows/trading/parse_signal_enhanced.json`
- Committed and pushed (commit d3e0d20 + ebffe9a)
### 2. n8n Workflow Import (⏳ USER ACTION REQUIRED)
**CRITICAL:** User must manually import updated workflow to n8n:
1. Open n8n web interface
2. Navigate to workflows
3. Find "Parse Signal Enhanced" workflow
4. Import from: `/home/icke/traderv4/workflows/trading/parse_signal_enhanced.json`
5. Activate the updated workflow
**Without this step, FARTCOIN symbols will STILL be saved as SOL-PERP**
### 3. Verify Fix Working
After importing workflow, trigger new FARTCOIN alert and check logs:
```bash
docker logs trading-bot-v4 --since 5m | grep -i fart
```
**Expected output:**
```
📊 Normalized symbol: FARTCOIN-PERP → FARTCOIN-PERP
📊 DATA COLLECTION: 1min signal from FARTCOIN-PERP
```
## Architecture Clarification
**Symbol Normalization Flow:**
```
TradingView Alert (FARTCOIN)
n8n Parse Signal Enhanced
↓ (Regex match + mapping logic)
n8n HTTP POST to Bot
↓ (Symbol already "FARTCOIN-PERP")
Bot Execute Endpoint
↓ (normalizeTradingViewSymbol() called but does nothing - already normalized)
Database Save (FARTCOIN-PERP)
```
**Key Insight:** n8n is the ONLY place where raw TradingView symbols get normalized. Bot normalization code is a fallback that's rarely (never?) used in production.
## Future Symbol Additions
**To add new symbols (BNB, AVAX, etc.):**
1. **Update n8n workflow** (`parse_signal_enhanced.json`):
- Add to regex: `(FARTCOIN|FART|BNB|SOL|BTC|ETH)`
- Add mapping if needed (e.g., special cases like FARTCOIN)
2. **Import to n8n** (manual step, MANDATORY)
3. **Bot normalization code** (optional, for non-n8n webhooks):
- Update `config/trading.ts` - `normalizeTradingViewSymbol()`
- Update `app/api/trading/market-data/route.ts` - local `normalizeTradingViewSymbol()`
## Lessons Learned
### 1. Verify Data Flow Before Debugging
- Spent time fixing bot code that was never executed
- Should have checked webhook payload FIRST to see pre-normalized symbol
- "Obvious" solution (bot regex order) was wrong because assumption was wrong
### 2. Architecture Documentation Critical
- n8n symbol normalization was not documented anywhere
- Led to incorrect debugging approach
- Now documented in `.github/copilot-instructions.md` for future reference
### 3. Test with Real Data
- Code changes looked correct but logs showed no effect
- Real production logs revealed actual data flow
- Never declare "fixed" without verification
### 4. Manual Deployment Steps Must Be Explicit
- n8n workflow changes require manual import
- Git commit alone is NOT sufficient
- User must perform import step for fix to take effect
## Git Commits
- **d3e0d20** - "fix: Add FARTCOIN symbol mapping to n8n Parse Signal Enhanced"
- **ebffe9a** - "docs: Document n8n symbol normalization architecture and FARTCOIN fix"
## Status
- ✅ Code fixed and committed
- ✅ Documentation updated
-**USER ACTION REQUIRED:** Import workflow to n8n
- ⏳ Waiting for verification (next FARTCOIN alert)
## Related Issues
- **Smart Validation Timeout Extension:** Also completed Dec 7, 2025 (separate feature)
- **Multi-Asset Data Collection:** FARTCOIN is part of broader multi-asset analysis initiative
- **BlockedSignal Analysis:** Quality-blocked signals tracked for threshold optimization
---
**Dec 7, 2025 20:50 CET** - Investigation complete, fix applied, awaiting n8n import by user.