🔧 CRITICAL FIX: Price Data Sync & Position Monitor Enhancement
Fixed major price data sync issues: - Removed hardcoded price (77.63) from position monitor - Added real-time oracle data instead of stale TWAP pricing - Implemented cache-busting headers for fresh data - Updated fallback prices to current market levels - Real-time P&L tracking with trend indicators (📈📉➡️) - Enhanced stop loss proximity alerts with color-coded risk levels - Analysis progress indicators during automation cycles - Performance metrics (runtime, cycles, trades, errors) - Fresh data validation and improved error handling - Price accuracy: 77.63 → 84.47 (matches Drift UI) - P&L accuracy: -.91 → -.59 (correct calculation) - Risk assessment: CRITICAL → MEDIUM (proper evaluation) - Stop loss distance: 0.91% → 4.8% (safe distance) - CLI monitor script with 8-second updates - Web dashboard component (PositionMonitor.tsx) - Real-time automation status tracking - Database and error monitoring improvements This fixes the automation showing false emergency alerts when position was actually performing normally.
This commit is contained in:
Binary file not shown.
@@ -7,62 +7,92 @@ datasource db {
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
name String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
aiLearningData AILearningData[]
|
||||
apiKeys ApiKey[]
|
||||
automationSessions AutomationSession[]
|
||||
trades Trade[]
|
||||
journals TradingJournal[]
|
||||
settings UserSettings?
|
||||
|
||||
@@map("users")
|
||||
model ai_learning_data {
|
||||
id String @id
|
||||
userId String
|
||||
sessionId String?
|
||||
tradeId String?
|
||||
analysisData Json
|
||||
marketConditions Json
|
||||
outcome String?
|
||||
actualPrice Float?
|
||||
predictedPrice Float?
|
||||
confidenceScore Float?
|
||||
accuracyScore Float?
|
||||
timeframe String
|
||||
symbol String
|
||||
screenshot String?
|
||||
feedbackData Json?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model ApiKey {
|
||||
id String @id @default(cuid())
|
||||
model api_keys {
|
||||
id String @id
|
||||
userId String
|
||||
provider String
|
||||
keyName String
|
||||
encryptedKey String
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
updatedAt DateTime
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([userId, provider, keyName])
|
||||
@@map("api_keys")
|
||||
}
|
||||
|
||||
model UserSettings {
|
||||
id String @id @default(cuid())
|
||||
userId String @unique
|
||||
autoTrading Boolean @default(false)
|
||||
tradingAmount Float @default(100)
|
||||
riskPercentage Float @default(2)
|
||||
maxDailyTrades Int @default(5)
|
||||
enableNotifications Boolean @default(true)
|
||||
automationMode String @default("SIMULATION")
|
||||
autoTimeframe String @default("1h")
|
||||
autoSymbol String @default("SOLUSD")
|
||||
autoTradingEnabled Boolean @default(false)
|
||||
autoAnalysisEnabled Boolean @default(false)
|
||||
maxLeverage Float @default(3.0)
|
||||
stopLossPercent Float @default(2.0)
|
||||
takeProfitPercent Float @default(6.0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
model automation_sessions {
|
||||
id String @id
|
||||
userId String
|
||||
status String @default("ACTIVE")
|
||||
mode String @default("SIMULATION")
|
||||
symbol String
|
||||
timeframe String
|
||||
totalTrades Int @default(0)
|
||||
successfulTrades Int @default(0)
|
||||
failedTrades Int @default(0)
|
||||
totalPnL Float @default(0)
|
||||
totalPnLPercent Float @default(0)
|
||||
winRate Float @default(0)
|
||||
avgRiskReward Float @default(0)
|
||||
maxDrawdown Float @default(0)
|
||||
startBalance Float?
|
||||
currentBalance Float?
|
||||
settings Json?
|
||||
lastAnalysis DateTime?
|
||||
lastTrade DateTime?
|
||||
nextScheduled DateTime?
|
||||
errorCount Int @default(0)
|
||||
lastError String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime
|
||||
lastAnalysisData Json?
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("user_settings")
|
||||
@@unique([userId, symbol, timeframe])
|
||||
}
|
||||
|
||||
model Trade {
|
||||
id String @id @default(cuid())
|
||||
model screenshots {
|
||||
id String @id
|
||||
url String
|
||||
filename String
|
||||
fileSize Int
|
||||
mimeType String
|
||||
metadata Json?
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model system_logs {
|
||||
id String @id
|
||||
level String
|
||||
message String
|
||||
metadata Json?
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model trades {
|
||||
id String @id
|
||||
userId String
|
||||
symbol String
|
||||
side String
|
||||
@@ -90,16 +120,14 @@ model Trade {
|
||||
executionTime DateTime?
|
||||
learningData Json?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
updatedAt DateTime
|
||||
executedAt DateTime?
|
||||
closedAt DateTime?
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("trades")
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model TradingJournal {
|
||||
id String @id @default(cuid())
|
||||
model trading_journals {
|
||||
id String @id
|
||||
userId String
|
||||
date DateTime @default(now())
|
||||
screenshotUrl String
|
||||
@@ -122,85 +150,41 @@ model TradingJournal {
|
||||
marketCondition String?
|
||||
sessionId String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("trading_journals")
|
||||
updatedAt DateTime
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model Screenshot {
|
||||
id String @id @default(cuid())
|
||||
url String
|
||||
filename String
|
||||
fileSize Int
|
||||
mimeType String
|
||||
metadata Json?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@map("screenshots")
|
||||
model user_settings {
|
||||
id String @id
|
||||
userId String @unique
|
||||
autoTrading Boolean @default(false)
|
||||
tradingAmount Float @default(100)
|
||||
riskPercentage Float @default(2)
|
||||
maxDailyTrades Int @default(5)
|
||||
enableNotifications Boolean @default(true)
|
||||
automationMode String @default("SIMULATION")
|
||||
autoTimeframe String @default("1h")
|
||||
autoSymbol String @default("SOLUSD")
|
||||
autoTradingEnabled Boolean @default(false)
|
||||
autoAnalysisEnabled Boolean @default(false)
|
||||
maxLeverage Float @default(3.0)
|
||||
stopLossPercent Float @default(2.0)
|
||||
takeProfitPercent Float @default(6.0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime
|
||||
users users @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
}
|
||||
|
||||
model SystemLog {
|
||||
id String @id @default(cuid())
|
||||
level String
|
||||
message String
|
||||
metadata Json?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@map("system_logs")
|
||||
}
|
||||
|
||||
model AutomationSession {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
status String @default("ACTIVE")
|
||||
mode String @default("SIMULATION")
|
||||
symbol String
|
||||
timeframe String
|
||||
totalTrades Int @default(0)
|
||||
successfulTrades Int @default(0)
|
||||
failedTrades Int @default(0)
|
||||
totalPnL Float @default(0)
|
||||
totalPnLPercent Float @default(0)
|
||||
winRate Float @default(0)
|
||||
avgRiskReward Float @default(0)
|
||||
maxDrawdown Float @default(0)
|
||||
startBalance Float?
|
||||
currentBalance Float?
|
||||
settings Json?
|
||||
lastAnalysis DateTime?
|
||||
lastTrade DateTime?
|
||||
nextScheduled DateTime?
|
||||
errorCount Int @default(0)
|
||||
lastError String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
lastAnalysisData Json?
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([userId, symbol, timeframe])
|
||||
@@map("automation_sessions")
|
||||
}
|
||||
|
||||
model AILearningData {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
sessionId String?
|
||||
tradeId String?
|
||||
analysisData Json
|
||||
marketConditions Json
|
||||
outcome String?
|
||||
actualPrice Float?
|
||||
predictedPrice Float?
|
||||
confidenceScore Float?
|
||||
accuracyScore Float?
|
||||
timeframe String
|
||||
symbol String
|
||||
screenshot String?
|
||||
feedbackData Json?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("ai_learning_data")
|
||||
model users {
|
||||
id String @id
|
||||
email String @unique
|
||||
name String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime
|
||||
ai_learning_data ai_learning_data[]
|
||||
api_keys api_keys[]
|
||||
automation_sessions automation_sessions[]
|
||||
trades trades[]
|
||||
trading_journals trading_journals[]
|
||||
user_settings user_settings?
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user