critical: Fix 1-minute signal price logging - query Drift oracle directly
Problem: - 1-minute signals logged wrong prices (4-55 vs actual 41-144 SOL) - Pyth price cache empty for 1-minute signals - Fallback to body.signalPrice (from n8n) contained pricePosition value - signalPrice === pricePosition in every request (39.29 = 39.29) Failed Attempts (5): 1. Added @ close to TradingView indicator (commit212a36f) 2. Added signalPrice regex to n8n (commit99a5223) 3. Fixed regex to avoid POS collision (commitff402ed) 4. Added DEBUG logging to n8n (no output visible) 5. FINAL FIX: Query Drift oracle directly Solution: - Bypass Pyth cache and n8n signalPrice entirely - Query Drift Protocol oracle directly for real-time price - Lines 145-149 in execute/route.ts: * OLD: latestPrice?.price || body.signalPrice || 0 * NEW: await driftService.getOraclePrice(marketConfig.driftMarketIndex) - Drift oracle is source of truth (on-chain), no caching issues - Added getMarketConfig import to resolve marketConfig Impact: - Logs will show actual SOL price ($141.XX) instead of indicator values ($24-55) - Accurate price logging critical for REAL MONEY system P&L tracking - BlockedSignal database records will have correct signalPrice values Files Changed: - app/api/trading/execute/route.ts (lines 11, 145-149) * Added getMarketConfig to imports * Replaced Pyth cache fallback with direct Drift oracle query
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { initializeDriftService } from '@/lib/drift/client'
|
||||
import { openPosition, placeExitOrders, closePosition } from '@/lib/drift/orders'
|
||||
import { normalizeTradingViewSymbol, getMinQualityScoreForDirection } from '@/config/trading'
|
||||
import { normalizeTradingViewSymbol, getMinQualityScoreForDirection, getMarketConfig } from '@/config/trading'
|
||||
import { getMergedConfig } from '@/config/trading'
|
||||
import { getInitializedPositionManager, ActiveTrade } from '@/lib/trading/position-manager'
|
||||
import { createTrade, updateTradeExit } from '@/lib/database/trades'
|
||||
@@ -143,9 +143,10 @@ export async function POST(request: NextRequest): Promise<NextResponse<ExecuteTr
|
||||
console.log(`📊 DATA COLLECTION: ${timeframe}min signal from ${driftSymbol}, saving for analysis (not executing)`)
|
||||
|
||||
// Get current price for entry tracking
|
||||
const priceMonitor = getPythPriceMonitor()
|
||||
const latestPrice = priceMonitor.getCachedPrice(driftSymbol)
|
||||
const currentPrice = latestPrice?.price || body.signalPrice || 0
|
||||
// CRITICAL FIX: Query Drift oracle directly instead of Pyth cache (cache might be stale for 1min signals)
|
||||
const driftService = await initializeDriftService()
|
||||
const marketConfig = getMarketConfig(driftSymbol)
|
||||
const currentPrice = await driftService.getOraclePrice(marketConfig.driftMarketIndex)
|
||||
|
||||
// Save to BlockedSignal for cross-timeframe analysis
|
||||
const { createBlockedSignal } = await import('@/lib/database/trades')
|
||||
|
||||
Reference in New Issue
Block a user