Riy777 commited on
Commit
2044ca7
·
1 Parent(s): 07e5c3f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -15
app.py CHANGED
@@ -179,6 +179,7 @@ async def run_3_layer_analysis():
179
  # إرسال كل عملة للنموذج الضخم على حدة
180
  llm_analysis = await llm_service_global.get_trading_decision(candidate)
181
 
 
182
  if llm_analysis and llm_analysis.get('action') in ['BUY', 'SELL']:
183
  opportunity = {
184
  'symbol': candidate['symbol'],
@@ -192,6 +193,8 @@ async def run_3_layer_analysis():
192
  final_opportunities.append(opportunity)
193
 
194
  print(f" ✅ {candidate['symbol']}: {llm_analysis.get('action')} - ثقة: {llm_analysis.get('confidence_level', 0):.2f}")
 
 
195
 
196
  except Exception as e:
197
  print(f"❌ خطأ في تحليل النموذج الضخم لـ {candidate.get('symbol')}: {e}")
@@ -241,19 +244,24 @@ async def re_analyze_open_trade_async(trade_data):
241
  # استخدام LLM لإعادة التحليل
242
  re_analysis_decision = await llm_service_global.re_analyze_trade_async(trade_data, processed_data)
243
 
244
- await r2_service_global.save_system_logs_async({
245
- "trade_reanalyzed": True,
246
- "symbol": symbol,
247
- "action": re_analysis_decision.get('action'),
248
- "strategy": re_analysis_decision.get('strategy', 'GENERIC')
249
- })
250
-
251
- return {
252
- "symbol": symbol,
253
- "decision": re_analysis_decision,
254
- "current_price": processed_data.get('current_price')
255
- }
256
-
 
 
 
 
 
257
  except Exception as error:
258
  print(f"❌ Error during trade re-analysis: {error}")
259
  await r2_service_global.save_system_logs_async({
@@ -282,7 +290,7 @@ async def run_bot_cycle_async():
282
  print(f"📋 الصفقات المفتوحة: {len(open_trades)}")
283
 
284
  should_look_for_new_trade = len(open_trades) == 0
285
-
286
  # إعادة تحليل الصفقات المفتوحة
287
  if open_trades:
288
  now = datetime.now()
@@ -364,6 +372,7 @@ async def lifespan(application: FastAPI):
364
  state_manager.set_service_initialized('data_manager')
365
 
366
  llm_service_global = LLMService()
 
367
  state_manager.set_service_initialized('llm_service')
368
 
369
  sentiment_analyzer_global = SentimentAnalyzer(data_manager_global)
@@ -442,6 +451,37 @@ async def analyze_market_api():
442
  else:
443
  return {"opportunity_found": False, "message": "No suitable opportunities found"}
444
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  async def cleanup_on_shutdown():
446
  """تنظيف الموارد عند الإغلاق"""
447
  global r2_service_global, data_manager_global, trade_manager_global, learning_engine_global
@@ -477,11 +517,14 @@ async def cleanup_on_shutdown():
477
 
478
  def signal_handler(signum, frame):
479
  """معالج إشارات الإغلاق"""
 
480
  asyncio.create_task(cleanup_on_shutdown())
481
  sys.exit(0)
482
 
 
483
  signal.signal(signal.SIGINT, signal_handler)
484
  signal.signal(signal.SIGTERM, signal_handler)
485
 
486
  if __name__ == "__main__":
487
- uvicorn.run(application, host="0.0.0.0", port=7860)
 
 
179
  # إرسال كل عملة للنموذج الضخم على حدة
180
  llm_analysis = await llm_service_global.get_trading_decision(candidate)
181
 
182
+ # ✅ التحقق من وجود قرار صالح من النموذج
183
  if llm_analysis and llm_analysis.get('action') in ['BUY', 'SELL']:
184
  opportunity = {
185
  'symbol': candidate['symbol'],
 
193
  final_opportunities.append(opportunity)
194
 
195
  print(f" ✅ {candidate['symbol']}: {llm_analysis.get('action')} - ثقة: {llm_analysis.get('confidence_level', 0):.2f}")
196
+ else:
197
+ print(f" ⚠️ {candidate['symbol']}: لا يوجد قرار تداول من النموذج الضخم")
198
 
199
  except Exception as e:
200
  print(f"❌ خطأ في تحليل النموذج الضخم لـ {candidate.get('symbol')}: {e}")
 
244
  # استخدام LLM لإعادة التحليل
245
  re_analysis_decision = await llm_service_global.re_analyze_trade_async(trade_data, processed_data)
246
 
247
+ # ✅ التحقق من وجود قرار صالح من النموذج
248
+ if re_analysis_decision:
249
+ await r2_service_global.save_system_logs_async({
250
+ "trade_reanalyzed": True,
251
+ "symbol": symbol,
252
+ "action": re_analysis_decision.get('action'),
253
+ "strategy": re_analysis_decision.get('strategy', 'GENERIC')
254
+ })
255
+
256
+ return {
257
+ "symbol": symbol,
258
+ "decision": re_analysis_decision,
259
+ "current_price": processed_data.get('current_price')
260
+ }
261
+ else:
262
+ print(f"⚠️ لا يوجد قرار إعادة تحليل لـ {symbol}")
263
+ return None
264
+
265
  except Exception as error:
266
  print(f"❌ Error during trade re-analysis: {error}")
267
  await r2_service_global.save_system_logs_async({
 
290
  print(f"📋 الصفقات المفتوحة: {len(open_trades)}")
291
 
292
  should_look_for_new_trade = len(open_trades) == 0
293
+
294
  # إعادة تحليل الصفقات المفتوحة
295
  if open_trades:
296
  now = datetime.now()
 
372
  state_manager.set_service_initialized('data_manager')
373
 
374
  llm_service_global = LLMService()
375
+ llm_service_global.r2_service = r2_service_global # ✅ ربط R2Service مع LLMService
376
  state_manager.set_service_initialized('llm_service')
377
 
378
  sentiment_analyzer_global = SentimentAnalyzer(data_manager_global)
 
451
  else:
452
  return {"opportunity_found": False, "message": "No suitable opportunities found"}
453
 
454
+ @application.get("/portfolio")
455
+ async def get_portfolio_api():
456
+ """الحصول على حالة المحفظة"""
457
+ if not state_manager.initialization_complete:
458
+ raise HTTPException(status_code=503, detail="الخدمات غير مهيأة بالكامل")
459
+
460
+ try:
461
+ portfolio_state = await r2_service_global.get_portfolio_state_async()
462
+ open_trades = await trade_manager_global.get_open_trades()
463
+
464
+ return {
465
+ "portfolio": portfolio_state,
466
+ "open_trades": open_trades,
467
+ "timestamp": datetime.now().isoformat()
468
+ }
469
+ except Exception as e:
470
+ raise HTTPException(status_code=500, detail=f"خطأ في جلب بيانات المحفظة: {str(e)}")
471
+
472
+ @application.get("/system-status")
473
+ async def get_system_status():
474
+ """الحصول على حالة النظام التفصيلية"""
475
+ monitoring_status = trade_manager_global.get_monitoring_status() if trade_manager_global else {}
476
+
477
+ return {
478
+ "initialization_complete": state_manager.initialization_complete,
479
+ "services_initialized": state_manager.services_initialized,
480
+ "market_state_ok": state.MARKET_STATE_OK,
481
+ "monitoring_status": monitoring_status,
482
+ "timestamp": datetime.now().isoformat()
483
+ }
484
+
485
  async def cleanup_on_shutdown():
486
  """تنظيف الموارد عند الإغلاق"""
487
  global r2_service_global, data_manager_global, trade_manager_global, learning_engine_global
 
517
 
518
  def signal_handler(signum, frame):
519
  """معالج إشارات الإغلاق"""
520
+ print(f"🛑 Received signal {signum}. Initiating shutdown...")
521
  asyncio.create_task(cleanup_on_shutdown())
522
  sys.exit(0)
523
 
524
+ # تسجيل معالجات الإشارات
525
  signal.signal(signal.SIGINT, signal_handler)
526
  signal.signal(signal.SIGTERM, signal_handler)
527
 
528
  if __name__ == "__main__":
529
+ print("🚀 Starting AI Trading Bot with 3-Layer Analysis System...")
530
+ uvicorn.run(application, host="0.0.0.0", port=7860, log_level="info")