AI-powered DCA manager with sophisticated reversal detection Multi-factor analysis: price movements, RSI, support/resistance, 24h trends Real example: SOL position analysis shows 5.2:1 risk/reward improvement lib/ai-dca-manager.ts - Complete DCA analysis engine with risk management Intelligent scaling: adds to positions when AI detects 50%+ reversal confidence Account-aware: uses up to 50% available balance with conservative 3x leverage Dynamic SL/TP: adjusts stop loss and take profit for new average position lib/automation-service-simple.ts - DCA monitoring in main trading cycle prisma/schema.prisma - DCARecord model for comprehensive tracking Checks DCA opportunities before new trade analysis (priority system) test-ai-dca-simple.js - Real SOL position test from screenshot data Entry: 85.98, Current: 83.87 (-1.13% underwater) AI recommendation: 1.08 SOL DCA → 4.91 profit potential Risk level: LOW with 407% liquidation safety margin LOGIC Price movement analysis: 1-10% against position optimal for DCA Market sentiment: 24h trends must align with DCA direction Technical indicators: RSI oversold (<35) for longs, overbought (>65) for shorts Support/resistance: proximity to key levels increases confidence Risk management: respects leverage limits and liquidation distances Complete error handling and fallback mechanisms Database persistence for DCA tracking and performance analysis Seamless integration with existing AI leverage calculator Real-time market data integration for accurate decision making
224 lines
6.2 KiB
Plaintext
224 lines
6.2 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "sqlite"
|
|
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 ApiKey {
|
|
id String @id @default(cuid())
|
|
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)
|
|
|
|
@@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)
|
|
|
|
@@map("user_settings")
|
|
}
|
|
|
|
model Trade {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
symbol String
|
|
side String
|
|
amount Float
|
|
price Float
|
|
status String @default("PENDING")
|
|
driftTxId String?
|
|
profit Float?
|
|
fees Float?
|
|
screenshotUrl String?
|
|
aiAnalysis String?
|
|
isAutomated Boolean @default(false)
|
|
entryPrice Float?
|
|
exitPrice Float?
|
|
stopLoss Float?
|
|
takeProfit Float?
|
|
leverage Float?
|
|
timeframe String?
|
|
tradingMode String?
|
|
confidence Float?
|
|
marketSentiment String?
|
|
outcome String?
|
|
pnlPercent Float?
|
|
actualRR Float?
|
|
executionTime DateTime?
|
|
learningData Json?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
executedAt DateTime?
|
|
closedAt DateTime?
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@map("trades")
|
|
}
|
|
|
|
model TradingJournal {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
date DateTime @default(now())
|
|
screenshotUrl String
|
|
aiAnalysis String
|
|
marketSentiment String?
|
|
keyLevels Json?
|
|
recommendation String
|
|
confidence Float
|
|
notes String?
|
|
isAutomated Boolean @default(false)
|
|
symbol String?
|
|
timeframe String?
|
|
tradingMode String?
|
|
tradeId String?
|
|
outcome String?
|
|
actualPrice Float?
|
|
priceAtAnalysis Float?
|
|
accuracyScore Float?
|
|
executionDelay Int?
|
|
marketCondition String?
|
|
sessionId String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
|
|
@@map("trading_journals")
|
|
}
|
|
|
|
model Screenshot {
|
|
id String @id @default(cuid())
|
|
url String
|
|
filename String
|
|
fileSize Int
|
|
mimeType String
|
|
metadata Json?
|
|
createdAt DateTime @default(now())
|
|
|
|
@@map("screenshots")
|
|
}
|
|
|
|
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 DCARecord {
|
|
id String @id @default(cuid())
|
|
tradeId String
|
|
dcaAmount Float
|
|
dcaPrice Float
|
|
newAveragePrice Float
|
|
newStopLoss Float?
|
|
newTakeProfit Float?
|
|
newLeverage Float?
|
|
confidence Float?
|
|
reasoning String?
|
|
riskAssessment String?
|
|
createdAt DateTime @default(now())
|
|
|
|
@@map("dca_records")
|
|
}
|