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
This commit is contained in:
mindesbunister
2025-11-20 10:35:04 +01:00
parent c4c5c84c24
commit 6b00303970

View File

@@ -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<void> {
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(