From d60274493809b9c022af8f39f19267e777199a75 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Thu, 27 Nov 2025 12:48:37 +0100 Subject: [PATCH] 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 (commit 212a36f) 2. Added signalPrice regex to n8n (commit 99a5223) 3. Fixed regex to avoid POS collision (commit ff402ed) 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 --- app/api/trading/execute/route.ts | 9 +++++---- workflows/trading/parse_signal_enhanced.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/api/trading/execute/route.ts b/app/api/trading/execute/route.ts index 2aa4dd5..409932d 100644 --- a/app/api/trading/execute/route.ts +++ b/app/api/trading/execute/route.ts @@ -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