Files
trading_bot_v4/docs/1MIN_SIMPLIFIED_FEED.md
mindesbunister dc674ec6d5 docs: Add 1-minute simplified price feed to reduce TradingView alert queue pressure
- Create moneyline_1min_price_feed.pinescript (70% smaller payload)
- Remove ATR/ADX/RSI/VOL/POS from 1-minute alerts (not used for decisions)
- Keep only price + symbol + timeframe for market data cache
- Document rationale in docs/1MIN_SIMPLIFIED_FEED.md
- Fix: 5-minute trading signals being dropped due to 1-minute flood (60/hour)
- Impact: Preserve priority for actual trading signals
2025-12-04 11:19:04 +01:00

158 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1-Minute Simplified Price Feed (Dec 4, 2025)
## Problem Statement
**Issue:** TradingView alert queue getting overwhelmed by 1-minute signal flood
- **Volume:** 60 alerts/hour (one per minute) from 1-minute data feed
- **Impact:** 5-minute trading signals occasionally skipped (happened 2× so far)
- **Root cause:** 1-minute alerts sending full trading signal format with all indicators
## Solution: Lightweight Price-Only Feed
**Change:** Reduce 1-minute alert payload by ~70%
### Before (Full Format)
```
SOLUSDT buy 1 @ 142.08 | ATR:0.65 | ADX:14.3 | RSI:51.3 | VOL:0.87 | POS:59.3 | IND:v9
```
**Size:** ~80 characters
**Processing:** n8n parses 7 fields, bot calculates quality score, saves to BlockedSignal + MarketData
### After (Minimal Format)
```
SOLUSDT buy 1 @ 142.08
```
**Size:** ~22 characters (~73% reduction)
**Processing:** n8n parses 3 fields (symbol/timeframe/price), bot routes to BlockedSignal only
## Why This Works
### What We Actually Need from 1-Minute Data
1.**Price updates** - For market data cache (5-minute expiry)
2.**Symbol identification** - Routing to correct market
3.**Timeframe marker** - `timeframe="1"` triggers data collection path
4.**ATR/ADX/RSI/VOL/POS** - NOT used in real-time (recalculated from DB if needed)
5.**Direction** - Meaningless for data-only signals (see copilot-instructions.md)
### What We Already Have
- **5-minute signals** include full indicator context for trading decisions
- **BlockedSignalTracker** recalculates TP1/TP2/SL from database data (not live indicators)
- **Market data cache** only needs `currentPrice` + `timestamp` for validation (5-minute expiry)
- **MarketData table** can store NULL for indicators (not critical for analysis)
### What Gets Removed
```typescript
// OLD: Execute endpoint saves full metrics to MarketData table
await prisma.marketData.create({
data: {
atr: Number(body.atr) || 0, // ❌ Remove
adx: Number(body.adx) || 0, // ❌ Remove
rsi: Number(body.rsi) || 50, // ❌ Remove
volumeRatio: Number(body.volumeRatio) || 1.0, // ❌ Remove
pricePosition: Number(body.pricePosition) || 50, // ❌ Remove
maGap: Number(body.maGap) || undefined, // ❌ Remove
// Keep essentials
symbol: driftSymbol, // ✅ Keep
timeframe: '1', // ✅ Keep
price: currentPrice, // ✅ Keep
timestamp: new Date() // ✅ Keep (auto-generated)
}
})
```
## Implementation Plan
### Phase 1: Update TradingView Alert (IMMEDIATE)
1. Replace `moneyline_1min_data_feed.pinescript` with `moneyline_1min_price_feed.pinescript`
2. Update TradingView alert to use new script
3. Test: Verify alerts still route to BlockedSignal correctly
### Phase 2: Update Execute Endpoint (OPTIONAL)
Since we're only sending price, make execute endpoint resilient to missing fields:
```typescript
// Lines 193-207: MarketData.create()
// Change required fields to optional with safe defaults
atr: Number(body.atr) || null, // NULL if missing
adx: Number(body.adx) || null,
rsi: Number(body.rsi) || null,
// ... etc
```
### Phase 3: Monitor Results
- Track 5-minute signal reliability (should go from 98% → 100%)
- Verify 1-minute data still saves to BlockedSignal
- Check TradingView alert queue no longer shows congestion
## Expected Impact
### Benefits
1. **70% reduction** in TradingView alert payload size
2. **Priority preservation** - 5-minute trading signals less likely to be dropped
3. **Faster processing** - Less n8n parsing, less bot processing
4. **Same functionality** - No loss of critical features
### Tradeoffs
1. MarketData table will have NULL indicators (acceptable - not used for decisions)
2. Historical 1-minute indicator data less complete (acceptable - we have 5-minute full data)
### No Impact On
- ✅ 5-minute trading signals (still full format with all indicators)
- ✅ BlockedSignalTracker (calculates from price movements, not live indicators)
- ✅ Market data cache (only needs price + timestamp)
- ✅ Smart Entry Validation (uses 5-minute cached data, not 1-minute)
## Files Changed
### TradingView Pine Script
- **NEW:** `workflows/trading/moneyline_1min_price_feed.pinescript` - Simplified version
- **OLD:** `workflows/trading/moneyline_1min_data_feed.pinescript` - Full format (archived)
### n8n Workflow
- **UNCHANGED:** `workflows/trading/parse_signal_enhanced.json` - Already handles minimal format
- Extracts: `symbol`, `timeframe`, `signalPrice` (from `@ price` pattern)
- Defaults: ATR/ADX/RSI/etc to 0 if missing
### Bot Code
- **UNCHANGED:** `app/api/trading/execute/route.ts` - Already handles missing fields with fallbacks
- Lines 193-207: Uses `Number(body.field) || default` pattern
## Migration Steps
1.**Read this document** - Understand rationale
2.**Update TradingView alert** - Replace with `moneyline_1min_price_feed.pinescript`
3.**Test with 1-2 alerts** - Verify BlockedSignal still populates
4.**Monitor for 24 hours** - Check 5-minute signal reliability
5.**Archive old script** - Move `moneyline_1min_data_feed.pinescript` to archive/
## Rollback Plan
If issues arise:
1. Switch TradingView alert back to `moneyline_1min_data_feed.pinescript`
2. No code changes needed - bot handles both formats
## Decision Criteria
**Use simplified feed IF:**
- 5-minute signal drops are occurring regularly (2+ per week)
- TradingView alert queue shows congestion
- 1-minute indicator data not being used for analysis
**Keep full feed IF:**
- 5-minute signals are 100% reliable
- Future analysis requires minute-by-minute indicator tracking
- No performance issues observed
## Current Status (Dec 4, 2025)
- ✅ Simplified script created
- ⏳ TradingView alert update pending
- ⏳ Monitoring results pending
- **User decision:** Test simplified feed for 24-48 hours
## References
- Copilot Instructions: Section "1-Minute Data Collection System"
- Original Implementation: `docs/1MIN_DATA_COLLECTION_SIMPLE.md`
- BlockedSignalTracker: `lib/analysis/blocked-signal-tracker.ts`