From 241c2bd436a0f44419f295139ed5baaa99fd3385 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Thu, 24 Jul 2025 11:01:25 +0200 Subject: [PATCH] fix: Remove all hardcoded timeframe references in automation service - Replace hardcoded timeframes array ['15', '1h', '2h', '4h'] with dynamic selectedTimeframes - Fix hardcoded '1h' references in primary timeframe selection - Update recommendation messages to use dynamic primaryTimeframe - Ensure scalping selection (5,15,30m) is properly respected by automation service - All timeframe logic now uses selectedTimeframes from UI configuration --- lib/automation-service-simple.ts | 32 ++++++++++++++++++++----------- prisma/prisma/dev.db | Bin 958464 -> 962560 bytes 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/automation-service-simple.ts b/lib/automation-service-simple.ts index 8d89d2e..46d0bf5 100644 --- a/lib/automation-service-simple.ts +++ b/lib/automation-service-simple.ts @@ -15,6 +15,7 @@ export interface AutomationConfig { mode: 'SIMULATION' | 'LIVE' symbol: string timeframe: string + selectedTimeframes?: string[] // Multi-timeframe support from UI tradingAmount: number maxLeverage: number // stopLossPercent and takeProfitPercent removed - AI calculates these automatically @@ -271,8 +272,8 @@ export class AutomationService { progressTracker.createSession(sessionId, progressSteps) progressTracker.updateStep(sessionId, 'init', 'active', 'Starting multi-timeframe analysis...') - // Multi-timeframe analysis: 15m, 1h, 2h, 4h - const timeframes = ['15', '1h', '2h', '4h'] + // Use selected timeframes from UI, fallback to default if not provided + const timeframes = this.config!.selectedTimeframes || ['1h'] const symbol = this.config!.symbol console.log(`🔍 Analyzing ${symbol} across timeframes: ${timeframes.join(', ')} with AI + DIY layouts`) @@ -404,8 +405,10 @@ export class AutomationService { return { screenshots: [], analysis: null } } - // Get the primary timeframe (1h) as base - const primaryResult = validResults.find(r => r.timeframe === '1h') || validResults[0] + // Get the primary timeframe (first selected or default) as base + const selectedTimeframes = this.config!.selectedTimeframes || ['1h'] + const primaryTimeframe = selectedTimeframes[0] || '1h' + const primaryResult = validResults.find(r => r.timeframe === primaryTimeframe) || validResults[0] const screenshots = validResults.length > 0 ? [primaryResult.timeframe] : [] // Calculate weighted confidence based on timeframe alignment @@ -478,8 +481,10 @@ ${validResults.map(r => `• ${r.timeframe}: ${r.analysis?.recommendation} (${r. const allLevels = results.map(r => r.analysis?.keyLevels).filter(Boolean) if (allLevels.length === 0) return {} - // Use the 1h timeframe levels as primary, or first available - const primaryLevels = results.find(r => r.timeframe === '1h')?.analysis?.keyLevels || allLevels[0] + // Use the primary timeframe levels (first selected) as primary, or first available + const selectedTimeframes = this.config!.selectedTimeframes || ['1h'] + const primaryTimeframe = selectedTimeframes[0] || '1h' + const primaryLevels = results.find(r => r.timeframe === primaryTimeframe)?.analysis?.keyLevels || allLevels[0] return { ...primaryLevels, @@ -491,8 +496,10 @@ ${validResults.map(r => `• ${r.timeframe}: ${r.analysis?.recommendation} (${r. const sentiments = results.map(r => r.analysis?.marketSentiment).filter(Boolean) if (sentiments.length === 0) return 'NEUTRAL' - // Use the 1h timeframe sentiment as primary, or first available - const primarySentiment = results.find(r => r.timeframe === '1h')?.analysis?.marketSentiment || sentiments[0] + // Use the primary timeframe sentiment (first selected) as primary, or first available + const selectedTimeframes = this.config!.selectedTimeframes || ['1h'] + const primaryTimeframe = selectedTimeframes[0] || '1h' + const primarySentiment = results.find(r => r.timeframe === primaryTimeframe)?.analysis?.marketSentiment || sentiments[0] return primarySentiment || 'NEUTRAL' } @@ -1191,11 +1198,14 @@ ${validResults.map(r => `• ${r.timeframe}: ${r.analysis?.recommendation} (${r. recommendations: string[] }> { try { - // For now, return mock data + // For now, return mock data with dynamic timeframe + const selectedTimeframes = this.config?.selectedTimeframes || ['1h'] + const primaryTimeframe = selectedTimeframes[0] || '1h' + return { totalAnalyses: 150, avgAccuracy: 0.72, - bestTimeframe: '1h', + bestTimeframe: primaryTimeframe, worstTimeframe: '15m', commonFailures: [ 'Low confidence predictions', @@ -1203,7 +1213,7 @@ ${validResults.map(r => `• ${r.timeframe}: ${r.analysis?.recommendation} (${r. 'Timeframe misalignment' ], recommendations: [ - 'Focus on 1h timeframe for better accuracy', + `Focus on ${primaryTimeframe} timeframe for better accuracy`, 'Wait for higher confidence signals (>75%)', 'Use multiple timeframe confirmation' ] diff --git a/prisma/prisma/dev.db b/prisma/prisma/dev.db index da6b1e301041f8661e5c51ebc0fae17aaf69d6b7..3b46605475dd5d8f3c8a23eca397240a342fbf65 100644 GIT binary patch delta 779 zcma))-Ahwp9LLXdwlmMp**SSig*mh{*$kt`+1%z{s&%n0O3Pw&Vf3PNb1&^J&*sE3 zcPcQ@Xh!-AqEHZuE=uX;TxDJwh15lKQ{V^<@(&2Qsi)Ol1wHWj!HBn^R%{tt-7xd(q+<>N+d1!ec=SQEDQJ+O(!iENu!{jrB%>{=E=7PZ0#I zB;a`(4Q-jXSV9N7y2N549~V6myojL)u>(-bqd zpb3g1`qPoPYbet1lq4yfEl48+19@lC5iY=76g9)wH1fd3v#5db-+$=B@wlpcGRPy; z{q@k*F?4}`$*$mdVpBDgP#KZz3Lfqtt$yx76{N!(Uz9`Rs}l%AVl)^nhQjDDH5gi5 zozS~2C<)Yp{vFAu)ej5$7>jnR_imy#a(lBTKvvDOBeETvxBoOx73GMdkRB#pjZZG= zF${*q7}UunE?;?8%TANF&bok=AQt_Xw_y`R2u1;4!#}e?ad40H9bTJbm)+yG!MOle z&)99Aj%wQuQ!+1t6eO*{Kj9i+-#oV$a$3zN$X&thN39_QxdPtFd@f9IT6eBrQ~0)Y3&sI2eY!A$i&2OG?gui)*u{Hxw|vNni^Ox@;q$R z@ZX?9^P`YUa5uDA%K<3K=8+wg2V7i(ZQ*SbWrjCC?GThtp?bAs;twO8oFB|)Vo*tO zuVMBM^PcodaP0`+O?uq0mSG!by4fbE9pib@YX|dpeGBXlaIOC_{Z?2W;~RH)d@iTY f;kCKl&J!nFMq7^B-Nl4MokvByb>iV zLxbt-^BAS4ze{Cwot~A=sKsKKSV|PH>+Cs$+Pyou`3u0wd6U-W=PXM>0NVY(Lix!c0KS z48$xz%nHP8K+F!r9NW)zbDF6zW=?0_zxRj6U0!Phs?6YVX;{3B+7L P%nigm+k5u$mOKOiAC_T#