Riy777 commited on
Commit
bd9ac84
·
1 Parent(s): b7dc94c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -29
app.py CHANGED
@@ -96,6 +96,35 @@ async def monitor_market_async():
96
  state.MARKET_STATE_OK = True
97
  await asyncio.sleep(60)
98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  async def run_3_layer_analysis():
100
  """
101
  تشغيل النظام الطبقي المكون من 3 طبقات:
@@ -128,18 +157,15 @@ async def run_3_layer_analysis():
128
  print("❌ فشل جلب بيانات OHLCV للمرشحين")
129
  return None
130
 
131
- # الطبقة 2: التحليل المتقدم بشكل متوازي
132
- print("\n📈 الطبقة 2: التحليل المتقدم (MLProcessor) بشكل متوازي...")
133
  market_context = await data_manager_global.get_market_context_async()
134
 
135
  # إنشاء معالج ML
136
  ml_processor = MLProcessor(market_context, data_manager_global, learning_engine_global)
137
 
138
- # معالجة كل المرشحين بشكل متوازي باستخدام asyncio.gather
139
- print(f" 🚀 معالجة {len(ohlcv_data_list)} عملة بشكل متوازي...")
140
-
141
- # تجهيز المهام
142
- tasks = []
143
  for ohlcv_data in ohlcv_data_list:
144
  try:
145
  # إضافة أسباب الترشيح من الطبقة 1
@@ -149,36 +175,34 @@ async def run_3_layer_analysis():
149
  ohlcv_data['reasons_for_candidacy'] = layer1_candidate.get('reasons', [])
150
  ohlcv_data['layer1_score'] = layer1_candidate.get('layer1_score', 0)
151
 
152
- # إنشاء مهمة للتحليل المتقدم
153
- task = ml_processor.process_and_score_symbol_enhanced(ohlcv_data)
154
- tasks.append(task)
155
 
156
  except Exception as e:
157
  print(f"❌ خطأ في إعداد تحليل {ohlcv_data.get('symbol')}: {e}")
158
  continue
159
 
160
- # تشغيل جميع المهام بشكل متوازي
161
- layer2_results = await asyncio.gather(*tasks, return_exceptions=True)
 
 
162
 
163
- # تصفية النتائج الناجحة
164
- layer2_candidates = []
165
- successful_analyses = 0
166
 
167
- for i, result in enumerate(layer2_results):
168
- if isinstance(result, Exception):
169
- symbol = ohlcv_data_list[i].get('symbol', 'unknown') if i < len(ohlcv_data_list) else 'unknown'
170
- print(f" ❌ فشل تحليل {symbol}: {result}")
171
- continue
172
-
173
- if result and result.get('enhanced_final_score', 0) > 0.4:
174
- layer2_candidates.append(result)
175
- successful_analyses += 1
176
-
177
- # عرض التقدم كل 20 عملة
178
- if (i + 1) % 20 == 0:
179
- print(f" ✅ تم تحليل {i + 1}/{len(ohlcv_data_list)} عملة ({successful_analyses} ناجحة)")
180
 
181
- print(f"✅ اكتمل التحليل المتقدم: {successful_analyses}/{len(ohlcv_data_list)} عملة تم تحليلها بنجاح")
182
 
183
  if not layer2_candidates:
184
  print("❌ لم يتم العثور على مرشحين في الطبقة 2")
 
96
  state.MARKET_STATE_OK = True
97
  await asyncio.sleep(60)
98
 
99
+ async def process_batch_parallel(batch, ml_processor, batch_num, total_batches):
100
+ """معالجة دفعة من الرموز بشكل متوازي"""
101
+ try:
102
+ print(f" 🔄 معالجة الدفعة {batch_num}/{total_batches} ({len(batch)} عملة)...")
103
+
104
+ # إنشاء مهام للدفعة الحالية
105
+ batch_tasks = []
106
+ for symbol_data in batch:
107
+ task = asyncio.create_task(ml_processor.process_and_score_symbol_enhanced(symbol_data))
108
+ batch_tasks.append(task)
109
+
110
+ # انتظار انتهاء جميع مهام الدفعة الحالية
111
+ batch_results = await asyncio.gather(*batch_tasks, return_exceptions=True)
112
+
113
+ # تصفية النتائج الناجحة
114
+ successful_results = []
115
+ for result in batch_results:
116
+ if isinstance(result, Exception):
117
+ continue
118
+ if result and result.get('enhanced_final_score', 0) > 0.4:
119
+ successful_results.append(result)
120
+
121
+ print(f" ✅ اكتملت الدفعة {batch_num}: {len(successful_results)}/{len(batch)} ناجحة")
122
+ return successful_results
123
+
124
+ except Exception as error:
125
+ print(f"❌ خطأ في معالجة الدفعة {batch_num}: {error}")
126
+ return []
127
+
128
  async def run_3_layer_analysis():
129
  """
130
  تشغيل النظام الطبقي المكون من 3 طبقات:
 
157
  print("❌ فشل جلب بيانات OHLCV للمرشحين")
158
  return None
159
 
160
+ # الطبقة 2: التحليل المتقدم بشكل متوازي حقيقي
161
+ print(f"\n📈 الطبقة 2: التحليل المتقدم (MLProcessor) بشكل متوازي لـ {len(ohlcv_data_list)} عملة...")
162
  market_context = await data_manager_global.get_market_context_async()
163
 
164
  # إنشاء معالج ML
165
  ml_processor = MLProcessor(market_context, data_manager_global, learning_engine_global)
166
 
167
+ # تجهيز البيانات للطبقة 2
168
+ layer2_data = []
 
 
 
169
  for ohlcv_data in ohlcv_data_list:
170
  try:
171
  # إضافة أسباب الترشيح من الطبقة 1
 
175
  ohlcv_data['reasons_for_candidacy'] = layer1_candidate.get('reasons', [])
176
  ohlcv_data['layer1_score'] = layer1_candidate.get('layer1_score', 0)
177
 
178
+ layer2_data.append(ohlcv_data)
 
 
179
 
180
  except Exception as e:
181
  print(f"❌ خطأ في إعداد تحليل {ohlcv_data.get('symbol')}: {e}")
182
  continue
183
 
184
+ # تقسيم العمل إلى دفعات للمعالجة المتوازية
185
+ batch_size = 20 # 20 عملة في كل دفعة
186
+ batches = [layer2_data[i:i + batch_size] for i in range(0, len(layer2_data), batch_size)]
187
+ total_batches = len(batches)
188
 
189
+ print(f" 🚀 تقسيم العمل إلى {total_batches} دفعة ({batch_size} عملة لكل دفعة)...")
 
 
190
 
191
+ # معالجة جميع الدفعات بشكل متوازي
192
+ batch_tasks = []
193
+ for i, batch in enumerate(batches):
194
+ task = asyncio.create_task(process_batch_parallel(batch, ml_processor, i+1, total_batches))
195
+ batch_tasks.append(task)
196
+
197
+ # جمع نتائج جميع الدفعات
198
+ batch_results = await asyncio.gather(*batch_tasks)
199
+
200
+ # دمج جميع النتائج
201
+ layer2_candidates = []
202
+ for batch_result in batch_results:
203
+ layer2_candidates.extend(batch_result)
204
 
205
+ print(f"✅ اكتمل التحليل المتقدم: {len(layer2_candidates)}/{len(ohlcv_data_list)} عملة تم تحليلها بنجاح")
206
 
207
  if not layer2_candidates:
208
  print("❌ لم يتم العثور على مرشحين في الطبقة 2")