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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user