From 6b00303970dc7afc22038e0142cd1066d4fbba48 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Thu, 20 Nov 2025 10:35:04 +0100 Subject: [PATCH] fix: BlockedSignalTracker now uses Drift oracle prices instead of Pyth cache - Changed from getPythPriceMonitor() to initializeDriftService() - Uses getOraclePrice() with Drift market index - Skips signals with entryPrice = 0 - Initialize Drift service in trackPrices() before processing - Price tracking now working: priceAfter1Min/5Min/15Min/30Min fields populate - analysisComplete transitions to true after 30 minutes - wouldHitTP1/TP2/SL detection working (based on ATR targets) Bug: Pyth price cache didn't have SOL-PERP prices, tracker skipped all signals Fix: Drift oracle prices always available, tracker now functional Impact: Multi-timeframe data collection now operational for Phase 1 analysis --- lib/analysis/blocked-signal-tracker.ts | 28 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/analysis/blocked-signal-tracker.ts b/lib/analysis/blocked-signal-tracker.ts index a44d2ad..cc08a39 100644 --- a/lib/analysis/blocked-signal-tracker.ts +++ b/lib/analysis/blocked-signal-tracker.ts @@ -14,8 +14,8 @@ */ import { getPrismaClient } from '../database/trades' -import { getPythPriceMonitor } from '../pyth/price-monitor' -import { getMergedConfig } from '../../config/trading' +import { initializeDriftService } from '../drift/client' +import { getMergedConfig, SUPPORTED_MARKETS } from '../../config/trading' interface BlockedSignalWithTracking { id: string @@ -89,6 +89,13 @@ export class BlockedSignalTracker { */ private async trackPrices(): Promise { try { + // Initialize Drift service if needed + const driftService = await initializeDriftService() + if (!driftService) { + console.log('⚠️ Drift service not available, skipping price tracking') + return + } + // Get all incomplete signals from last 24 hours const signals = await this.prisma.blockedSignal.findMany({ where: { @@ -127,17 +134,22 @@ export class BlockedSignalTracker { const signalTime = signal.createdAt.getTime() const elapsedMinutes = (now - signalTime) / (60 * 1000) - // Get current price - const priceMonitor = getPythPriceMonitor() - const latestPrice = priceMonitor.getCachedPrice(signal.symbol) + // Get current price from Drift oracle + const driftService = await initializeDriftService() + const marketConfig = SUPPORTED_MARKETS[signal.symbol] - if (!latestPrice || !latestPrice.price) { - console.log(`⚠️ No price available for ${signal.symbol}, skipping`) + if (!marketConfig) { + console.log(`⚠️ No market config for ${signal.symbol}, skipping`) return } - const currentPrice = latestPrice.price + const currentPrice = await driftService.getOraclePrice(marketConfig.driftMarketIndex) const entryPrice = Number(signal.entryPrice) + + if (entryPrice === 0) { + console.log(`⚠️ Entry price is 0 for ${signal.symbol}, skipping`) + return + } // Calculate profit percentage const profitPercent = this.calculateProfitPercent(