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 { getPrismaClient } from '../database/trades'
|
||||||
import { getPythPriceMonitor } from '../pyth/price-monitor'
|
import { initializeDriftService } from '../drift/client'
|
||||||
import { getMergedConfig } from '../../config/trading'
|
import { getMergedConfig, SUPPORTED_MARKETS } from '../../config/trading'
|
||||||
|
|
||||||
interface BlockedSignalWithTracking {
|
interface BlockedSignalWithTracking {
|
||||||
id: string
|
id: string
|
||||||
@@ -89,6 +89,13 @@ export class BlockedSignalTracker {
|
|||||||
*/
|
*/
|
||||||
private async trackPrices(): Promise<void> {
|
private async trackPrices(): Promise<void> {
|
||||||
try {
|
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
|
// Get all incomplete signals from last 24 hours
|
||||||
const signals = await this.prisma.blockedSignal.findMany({
|
const signals = await this.prisma.blockedSignal.findMany({
|
||||||
where: {
|
where: {
|
||||||
@@ -127,17 +134,22 @@ export class BlockedSignalTracker {
|
|||||||
const signalTime = signal.createdAt.getTime()
|
const signalTime = signal.createdAt.getTime()
|
||||||
const elapsedMinutes = (now - signalTime) / (60 * 1000)
|
const elapsedMinutes = (now - signalTime) / (60 * 1000)
|
||||||
|
|
||||||
// Get current price
|
// Get current price from Drift oracle
|
||||||
const priceMonitor = getPythPriceMonitor()
|
const driftService = await initializeDriftService()
|
||||||
const latestPrice = priceMonitor.getCachedPrice(signal.symbol)
|
const marketConfig = SUPPORTED_MARKETS[signal.symbol]
|
||||||
|
|
||||||
if (!latestPrice || !latestPrice.price) {
|
if (!marketConfig) {
|
||||||
console.log(`⚠️ No price available for ${signal.symbol}, skipping`)
|
console.log(`⚠️ No market config for ${signal.symbol}, skipping`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentPrice = latestPrice.price
|
const currentPrice = await driftService.getOraclePrice(marketConfig.driftMarketIndex)
|
||||||
const entryPrice = Number(signal.entryPrice)
|
const entryPrice = Number(signal.entryPrice)
|
||||||
|
|
||||||
|
if (entryPrice === 0) {
|
||||||
|
console.log(`⚠️ Entry price is 0 for ${signal.symbol}, skipping`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate profit percentage
|
// Calculate profit percentage
|
||||||
const profitPercent = this.calculateProfitPercent(
|
const profitPercent = this.calculateProfitPercent(
|
||||||
|
|||||||
Reference in New Issue
Block a user