Update LLM.py
Browse files
LLM.py
CHANGED
|
@@ -251,15 +251,15 @@ class LLMService:
|
|
| 251 |
symbol = data_payload.get('symbol', 'unknown')
|
| 252 |
target_strategy = data_payload.get('target_strategy', 'GENERIC')
|
| 253 |
|
| 254 |
-
# ✅ التحقق من بيانات الشموع بشكل صحيح
|
| 255 |
-
ohlcv_data = data_payload.get('
|
| 256 |
if not ohlcv_data:
|
| 257 |
print(f"⚠️ لا توجد بيانات شموع لـ {symbol} - تخطي التحليل")
|
| 258 |
return None
|
| 259 |
|
| 260 |
# ✅ حساب إجمالي الشموع المتاحة
|
| 261 |
-
total_candles = sum(len(data) for data in ohlcv_data.values() if data)
|
| 262 |
-
timeframes_count = len([tf for tf, data in ohlcv_data.items() if data and len(data) >= 10])
|
| 263 |
|
| 264 |
print(f" 📊 بيانات {symbol}: {total_candles} شمعة في {timeframes_count} إطار زمني")
|
| 265 |
|
|
@@ -267,6 +267,18 @@ class LLMService:
|
|
| 267 |
print(f" ⚠️ بيانات شموع غير كافية لـ {symbol}: {total_candles} شمعة فقط")
|
| 268 |
return None
|
| 269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 270 |
# جلب جميع البيانات المطلوبة
|
| 271 |
news_text = await self.news_fetcher.get_news_for_symbol(symbol)
|
| 272 |
pattern_analysis = await self._get_pattern_analysis(data_payload)
|
|
@@ -287,6 +299,7 @@ class LLMService:
|
|
| 287 |
'whale_data_available': whale_data.get('data_available', False),
|
| 288 |
'total_candles': total_candles,
|
| 289 |
'timeframes_count': timeframes_count,
|
|
|
|
| 290 |
'timestamp': datetime.now().isoformat()
|
| 291 |
}
|
| 292 |
await self.r2_service.save_llm_prompts_async(
|
|
@@ -302,6 +315,7 @@ class LLMService:
|
|
| 302 |
decision_dict['pattern_analysis'] = pattern_analysis
|
| 303 |
decision_dict['whale_data_integrated'] = whale_data.get('data_available', False)
|
| 304 |
decision_dict['total_candles_analyzed'] = total_candles
|
|
|
|
| 305 |
return decision_dict
|
| 306 |
else:
|
| 307 |
print(f"❌ فشل تحليل النموذج الضخم لـ {symbol} - لا توجد قرارات بديلة")
|
|
@@ -337,7 +351,8 @@ class LLMService:
|
|
| 337 |
async def _get_pattern_analysis(self, data_payload):
|
| 338 |
try:
|
| 339 |
symbol = data_payload['symbol']
|
| 340 |
-
|
|
|
|
| 341 |
|
| 342 |
if ohlcv_data:
|
| 343 |
# ✅ تمرير البيانات الخام مباشرة لمحرك تحليل الأنماط
|
|
@@ -359,7 +374,8 @@ class LLMService:
|
|
| 359 |
target_strategy = payload.get('target_strategy', 'GENERIC')
|
| 360 |
final_score = payload.get('final_score', 'N/A')
|
| 361 |
enhanced_final_score = payload.get('enhanced_final_score', 'N/A')
|
| 362 |
-
|
|
|
|
| 363 |
|
| 364 |
final_score_display = f"{final_score:.3f}" if isinstance(final_score, (int, float)) else str(final_score)
|
| 365 |
enhanced_score_display = f"{enhanced_final_score:.3f}" if isinstance(enhanced_final_score, (int, float)) else str(enhanced_final_score)
|
|
@@ -587,8 +603,8 @@ OUTPUT FORMAT (JSON):
|
|
| 587 |
symbol = trade_data['symbol']
|
| 588 |
original_strategy = trade_data.get('strategy', 'GENERIC')
|
| 589 |
|
| 590 |
-
# ✅ التحقق من بيانات الشموع
|
| 591 |
-
ohlcv_data = processed_data.get('
|
| 592 |
if not ohlcv_data:
|
| 593 |
print(f"⚠️ لا توجد بيانات شموع محدثة لـ {symbol} - تخطي إعادة التحليل")
|
| 594 |
return None
|
|
|
|
| 251 |
symbol = data_payload.get('symbol', 'unknown')
|
| 252 |
target_strategy = data_payload.get('target_strategy', 'GENERIC')
|
| 253 |
|
| 254 |
+
# ✅ التحقق من بيانات الشموع بشكل صحيح - الإصلاح الرئيسي هنا
|
| 255 |
+
ohlcv_data = data_payload.get('raw_ohlcv') or data_payload.get('ohlcv')
|
| 256 |
if not ohlcv_data:
|
| 257 |
print(f"⚠️ لا توجد بيانات شموع لـ {symbol} - تخطي التحليل")
|
| 258 |
return None
|
| 259 |
|
| 260 |
# ✅ حساب إجمالي الشموع المتاحة
|
| 261 |
+
total_candles = sum(len(data) for data in ohlcv_data.values() if data) if ohlcv_data else 0
|
| 262 |
+
timeframes_count = len([tf for tf, data in ohlcv_data.items() if data and len(data) >= 10]) if ohlcv_data else 0
|
| 263 |
|
| 264 |
print(f" 📊 بيانات {symbol}: {total_candles} شمعة في {timeframes_count} إطار زمني")
|
| 265 |
|
|
|
|
| 267 |
print(f" ⚠️ بيانات شموع غير كافية لـ {symbol}: {total_candles} شمعة فقط")
|
| 268 |
return None
|
| 269 |
|
| 270 |
+
# ✅ تأكيد وجود بيانات شموع صالحة
|
| 271 |
+
valid_timeframes = []
|
| 272 |
+
for timeframe, candles in ohlcv_data.items():
|
| 273 |
+
if candles and len(candles) >= 5: # تخفيف الشرط
|
| 274 |
+
valid_timeframes.append(timeframe)
|
| 275 |
+
|
| 276 |
+
if not valid_timeframes:
|
| 277 |
+
print(f" ⚠️ لا توجد أطر زمنية صالحة لـ {symbol}")
|
| 278 |
+
return None
|
| 279 |
+
|
| 280 |
+
print(f" ✅ أطر زمنية صالحة لـ {symbol}: {', '.join(valid_timeframes)}")
|
| 281 |
+
|
| 282 |
# جلب جميع البيانات المطلوبة
|
| 283 |
news_text = await self.news_fetcher.get_news_for_symbol(symbol)
|
| 284 |
pattern_analysis = await self._get_pattern_analysis(data_payload)
|
|
|
|
| 299 |
'whale_data_available': whale_data.get('data_available', False),
|
| 300 |
'total_candles': total_candles,
|
| 301 |
'timeframes_count': timeframes_count,
|
| 302 |
+
'valid_timeframes': valid_timeframes,
|
| 303 |
'timestamp': datetime.now().isoformat()
|
| 304 |
}
|
| 305 |
await self.r2_service.save_llm_prompts_async(
|
|
|
|
| 315 |
decision_dict['pattern_analysis'] = pattern_analysis
|
| 316 |
decision_dict['whale_data_integrated'] = whale_data.get('data_available', False)
|
| 317 |
decision_dict['total_candles_analyzed'] = total_candles
|
| 318 |
+
decision_dict['timeframes_analyzed'] = timeframes_count
|
| 319 |
return decision_dict
|
| 320 |
else:
|
| 321 |
print(f"❌ فشل تحليل النموذج الضخم لـ {symbol} - لا توجد قرارات بديلة")
|
|
|
|
| 351 |
async def _get_pattern_analysis(self, data_payload):
|
| 352 |
try:
|
| 353 |
symbol = data_payload['symbol']
|
| 354 |
+
# ✅ استخدام raw_ohlcv أولاً ثم ohlcv - الإصلاح الرئيسي
|
| 355 |
+
ohlcv_data = data_payload.get('raw_ohlcv') or data_payload.get('ohlcv')
|
| 356 |
|
| 357 |
if ohlcv_data:
|
| 358 |
# ✅ تمرير البيانات الخام مباشرة لمحرك تحليل الأنماط
|
|
|
|
| 374 |
target_strategy = payload.get('target_strategy', 'GENERIC')
|
| 375 |
final_score = payload.get('final_score', 'N/A')
|
| 376 |
enhanced_final_score = payload.get('enhanced_final_score', 'N/A')
|
| 377 |
+
# ✅ استخدام raw_ohlcv أولاً - الإصلاح الرئيسي
|
| 378 |
+
ohlcv_data = payload.get('raw_ohlcv') or payload.get('ohlcv', {})
|
| 379 |
|
| 380 |
final_score_display = f"{final_score:.3f}" if isinstance(final_score, (int, float)) else str(final_score)
|
| 381 |
enhanced_score_display = f"{enhanced_final_score:.3f}" if isinstance(enhanced_final_score, (int, float)) else str(enhanced_final_score)
|
|
|
|
| 603 |
symbol = trade_data['symbol']
|
| 604 |
original_strategy = trade_data.get('strategy', 'GENERIC')
|
| 605 |
|
| 606 |
+
# ✅ التحقق من بيانات الشموع الم��دثة - الإصلاح الرئيسي
|
| 607 |
+
ohlcv_data = processed_data.get('raw_ohlcv') or processed_data.get('ohlcv')
|
| 608 |
if not ohlcv_data:
|
| 609 |
print(f"⚠️ لا توجد بيانات شموع محدثة لـ {symbol} - تخطي إعادة التحليل")
|
| 610 |
return None
|