🤖 COMPLETE: Learning-Enhanced AI with HTTP Compatibility

LEARNING INTEGRATION:
- Enhanced AI analysis service feeds historical data into OpenAI prompts
- Symbol/timeframe specific learning optimization
- Pattern recognition from past trade outcomes
- Confidence adjustment based on success rates

 HTTP COMPATIBILITY SYSTEM:
- HttpUtil with automatic curl/no-curl detection
- Node.js fallback for Docker environments without curl
- Updated all automation systems to use HttpUtil
- Production-ready error handling

 AUTONOMOUS RISK MANAGEMENT:
- Enhanced risk manager with learning integration
- Simplified learners using existing AILearningData schema
- Real-time position monitoring every 30 seconds
- Smart stop-loss decisions with AI learning

 INFRASTRUCTURE:
- Database utility for shared Prisma connections
- Beach mode status display system
- Complete error handling and recovery
- Docker container compatibility tested

Historical performance flows into OpenAI prompts before every trade.
This commit is contained in:
mindesbunister
2025-07-25 13:38:24 +02:00
parent 2dd7cb2d66
commit 08f9a9b541
14 changed files with 1071 additions and 56 deletions

View File

@@ -7,11 +7,10 @@
* It records every decision, tracks outcomes, and continuously improves decision-making.
*/
const { PrismaClient } = require('@prisma/client');
const { getDB } = require('./db');
class StopLossDecisionLearner {
constructor() {
this.prisma = new PrismaClient();
this.decisionHistory = [];
this.learningThresholds = {
emergencyDistance: 1.0,
@@ -20,6 +19,10 @@ class StopLossDecisionLearner {
};
}
async getPrisma() {
return await getDB();
}
async log(message) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] 🧠 SL Learner: ${message}`);
@@ -52,7 +55,8 @@ class StopLossDecisionLearner {
};
// Store in database
await this.prisma.sLDecision.create({
const prisma = await this.getPrisma();
await prisma.sLDecision.create({
data: {
id: decision.id,
tradeId: decision.tradeId,
@@ -92,7 +96,8 @@ class StopLossDecisionLearner {
const learningScore = this.calculateLearningScore(wasCorrect, pnlImpact, timeToOutcome);
// Update decision record
await this.prisma.sLDecision.update({
const prisma = await this.getPrisma();
await prisma.sLDecision.update({
where: { id: decisionId },
data: {
outcome: actualOutcome,
@@ -135,7 +140,8 @@ class StopLossDecisionLearner {
*/
async analyzeDecisionPatterns() {
try {
const decisions = await this.prisma.sLDecision.findMany({
const prisma = await this.getPrisma();
const decisions = await prisma.sLDecision.findMany({
where: { status: 'ASSESSED' },
orderBy: { decisionTimestamp: 'desc' },
take: 100 // Analyze last 100 decisions
@@ -438,7 +444,8 @@ class StopLossDecisionLearner {
const { distanceFromSL, marketConditions } = currentSituation;
const tolerance = 0.5; // 0.5% tolerance for distance matching
const decisions = await this.prisma.sLDecision.findMany({
const prisma = await this.getPrisma();
const decisions = await prisma.sLDecision.findMany({
where: {
status: 'ASSESSED',
distanceFromSL: {