Riy777 commited on
Commit
3175274
·
verified ·
1 Parent(s): 006a3e6

Update ml_engine/processor.py

Browse files
Files changed (1) hide show
  1. ml_engine/processor.py +83 -40
ml_engine/processor.py CHANGED
@@ -1,7 +1,10 @@
1
  # ============================================================
2
- # 🧠 ml_engine/processor.py (V31.0 - GEM-Architect: Central Command)
3
  # The Single Source of Truth for ALL System Thresholds
4
- # Fully Integrated with Patterns, Oracle & Sniper Injection
 
 
 
5
  # ============================================================
6
 
7
  import asyncio
@@ -72,52 +75,95 @@ class SystemLimits:
72
  """
73
 
74
  # --- [ Layer 1: Data Manager Screening ] ---
75
- # (مرجع للقيم التي يجب استخدامها في DataManager)
76
  L1_MIN_QUOTE_VOLUME = 1_000_000 # الحد الأدنى للسيولة
77
  L1_MAX_PUMP_4H = 8.0 # أقصى ارتفاع مسموح به في 4 ساعات
78
  L1_MAX_CHANGE_24H = 12.0 # أقصى تغير يومي
79
  L1_MAX_RSI = 70.0 # أقصى RSI للدخول الأولي
80
- L1_MAX_DEVIATION = 1.8 # أقصى انحراف معياري (Bollinger/ATR Deviation)
81
 
82
  # --- [ Layer 2: Deep Analysis Scoring Weights ] ---
83
- # كيف يتم تجميع النتيجة الأولية (Enhanced Score)
84
- L2_WEIGHT_TITAN = 0.50 # وزن التحليل الفني
85
- L2_WEIGHT_PATTERNS = 0.40 # وزن الأنماط السعرية
86
- L2_WEIGHT_MC = 0.10 # وزن المحاكاة
87
 
88
  # ✅ [Layer 2: Pattern Engine Internal Config]
89
- # التحكم في حساسية الأنماط وكيفية دمج الفريمات الزمنية
90
  PATTERN_TF_WEIGHTS = {
91
- '15m': 0.40, # الإطار الزمني القائد
92
  '1h': 0.30,
93
  '5m': 0.20,
94
  '4h': 0.10,
95
- '1d': 0.00 # مهمل
96
  }
97
-
98
- # عتبات تصنيف النمط النصي (Text Classification)
99
- PATTERN_THRESH_BULLISH = 0.60 # فوق هذا الرقم يعتبر إشارة صعودية
100
- PATTERN_THRESH_BEARISH = 0.40 # تحت هذا الرقم يعتبر إشارة هبوطية
101
 
102
- # --- [ Layer 3: Oracle Strategy (Strategic Brain) ] ---
103
- L3_CONFIDENCE_THRESHOLD = 0.65 # العتبة الذهبية للموافقة
104
 
105
- # النقاط الديناميكية (Dynamic Impact)
106
- L3_WHALE_IMPACT_MAX = 0.10 # تأثير الحيتان (+/-)
107
- L3_NEWS_IMPACT_MAX = 0.05 # تأثير الأخبار (+/-)
108
- L3_MC_ADVANCED_MAX = 0.10 # تأثير المحاكاة المتقدمة (+/-)
109
-
110
- # --- [ Layer 4: Sniper Execution (Tactical Entry) ] ---
111
- L4_ENTRY_THRESHOLD = 0.45 # عتبة القناص النهائية للدخول
112
- L4_WEIGHT_ML = 0.60 # وزن الذكاء الاصطناعي
113
- L4_WEIGHT_OB = 0.40 # وزن دفتر الطلبات
114
- L4_OB_WALL_RATIO = 0.40 # نسبة الجدار التي تفعّل الفيتو (Veto)
115
-
116
- # --- [ Layer 0: Hydra Guardian (Risk Management) ] ---
117
- # احتمالات الخروج الطارئ (Overrides)
118
- HYDRA_CRASH_THRESH = 0.60 # احتمالية الانهيار
119
- HYDRA_GIVEBACK_THRESH = 0.70 # احتمالية إرجاع الأرباح
120
- HYDRA_STAGNATION_THRESH = 0.50 # احتمالية الركود
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  # ============================================================
123
  # 🧠 MLProcessor Class
@@ -176,7 +222,7 @@ class MLProcessor:
176
  else:
177
  self.guardian = None
178
 
179
- print(f"🧠 [MLProcessor V31.0] Central Command Loaded. SystemLimits Active.")
180
 
181
  async def initialize(self):
182
  """تهيئة متوازية لجميع المحركات وحقن الإعدادات"""
@@ -214,7 +260,6 @@ class MLProcessor:
214
  threshold=SystemLimits.L4_ENTRY_THRESHOLD,
215
  wall_ratio=SystemLimits.L4_OB_WALL_RATIO
216
  )
217
- # دعم للتوافقية القديمة
218
  elif hasattr(self.sniper, 'set_entry_threshold'):
219
  self.sniper.set_entry_threshold(SystemLimits.L4_ENTRY_THRESHOLD)
220
 
@@ -327,11 +372,9 @@ class MLProcessor:
327
  decision = await self.oracle.predict(symbol_data)
328
 
329
  # ✅ فرض السيطرة: التحقق من العتبة المركزية هنا أيضاً
330
- # (حتى لو قبلها Oracle، نحن نرفضها إذا كانت أقل من المحدد هنا)
331
  conf = decision.get('confidence', 0.0)
332
 
333
  if decision.get('action') in ['WATCH', 'BUY'] and conf < SystemLimits.L3_CONFIDENCE_THRESHOLD:
334
- # نحتفظ بالاتجاه ولكن نغير القرار إلى انتظار
335
  decision['action'] = 'WAIT'
336
  decision['reason'] = f"Processor Veto: Conf {conf:.2f} < Limit {SystemLimits.L3_CONFIDENCE_THRESHOLD}"
337
 
@@ -353,7 +396,7 @@ class MLProcessor:
353
  return {'signal': 'WAIT', 'reason': 'Sniper Engine Missing'}
354
 
355
  def set_sniper_threshold(self, threshold: float):
356
- # تحديث القيمة في SystemLimits (للحفاظ على التزامن) وتحديث القناص
357
  SystemLimits.L4_ENTRY_THRESHOLD = threshold
358
  if self.sniper:
359
  if hasattr(self.sniper, 'set_entry_threshold'):
@@ -380,7 +423,7 @@ class MLProcessor:
380
  p_giveback = probs.get('giveback', 0.0)
381
  p_stag = probs.get('stagnation', 0.0)
382
 
383
- # إذا قرر الحارس الانتظار، لكن الاحتمالات تجاوزت الحدود المركزية، نفرض الخروج
384
  if decision['action'] == 'HOLD':
385
  if p_crash >= SystemLimits.HYDRA_CRASH_THRESH:
386
  decision['action'] = 'EXIT_HARD'
@@ -419,4 +462,4 @@ class MLProcessor:
419
  print(f"⚠️ [Processor] Advanced MC Error: {e}")
420
  return 0.0
421
 
422
- print("✅ [MLProcessor V31.0] Centralized Thresholds & Config Loaded.")
 
1
  # ============================================================
2
+ # 🧠 ml_engine/processor.py (V32.0 - GEM-Architect: Central Command)
3
  # The Single Source of Truth for ALL System Thresholds
4
+ # Features:
5
+ # 1. Centralized Config (SystemLimits).
6
+ # 2. R2 Persistence Support (to_dict/update_from_dict).
7
+ # 3. Full Injection into Sub-Engines.
8
  # ============================================================
9
 
10
  import asyncio
 
75
  """
76
 
77
  # --- [ Layer 1: Data Manager Screening ] ---
 
78
  L1_MIN_QUOTE_VOLUME = 1_000_000 # الحد الأدنى للسيولة
79
  L1_MAX_PUMP_4H = 8.0 # أقصى ارتفاع مسموح به في 4 ساعات
80
  L1_MAX_CHANGE_24H = 12.0 # أقصى تغير يومي
81
  L1_MAX_RSI = 70.0 # أقصى RSI للدخول الأولي
82
+ L1_MAX_DEVIATION = 1.8 # أقصى انحراف معياري
83
 
84
  # --- [ Layer 2: Deep Analysis Scoring Weights ] ---
85
+ L2_WEIGHT_TITAN = 0.50
86
+ L2_WEIGHT_PATTERNS = 0.40
87
+ L2_WEIGHT_MC = 0.10
 
88
 
89
  # ✅ [Layer 2: Pattern Engine Internal Config]
 
90
  PATTERN_TF_WEIGHTS = {
91
+ '15m': 0.40,
92
  '1h': 0.30,
93
  '5m': 0.20,
94
  '4h': 0.10,
95
+ '1d': 0.00
96
  }
97
+ PATTERN_THRESH_BULLISH = 0.60
98
+ PATTERN_THRESH_BEARISH = 0.40
 
 
99
 
100
+ # --- [ Layer 3: Oracle Strategy ] ---
101
+ L3_CONFIDENCE_THRESHOLD = 0.65
102
 
103
+ # Dynamic Scoring Impacts
104
+ L3_WHALE_IMPACT_MAX = 0.10
105
+ L3_NEWS_IMPACT_MAX = 0.05
106
+ L3_MC_ADVANCED_MAX = 0.10
107
+
108
+ # --- [ Layer 4: Sniper Execution ] ---
109
+ L4_ENTRY_THRESHOLD = 0.45
110
+ L4_WEIGHT_ML = 0.60
111
+ L4_WEIGHT_OB = 0.40
112
+ L4_OB_WALL_RATIO = 0.40
113
+
114
+ # --- [ Layer 0: Hydra Guardian ] ---
115
+ HYDRA_CRASH_THRESH = 0.60
116
+ HYDRA_GIVEBACK_THRESH = 0.70
117
+ HYDRA_STAGNATION_THRESH = 0.50
118
+
119
+ # ==========================================================
120
+ # 💾 Persistence Methods (R2 Support)
121
+ # ==========================================================
122
+ @classmethod
123
+ def to_dict(cls) -> Dict[str, Any]:
124
+ """تصدير الحالة الحالية كقاموس للحفظ في R2"""
125
+ return {
126
+ "L1_MIN_QUOTE_VOLUME": cls.L1_MIN_QUOTE_VOLUME,
127
+ "L1_MAX_PUMP_4H": cls.L1_MAX_PUMP_4H,
128
+ "L1_MAX_CHANGE_24H": cls.L1_MAX_CHANGE_24H,
129
+ "L1_MAX_RSI": cls.L1_MAX_RSI,
130
+ "L1_MAX_DEVIATION": cls.L1_MAX_DEVIATION,
131
+
132
+ "L3_CONFIDENCE_THRESHOLD": cls.L3_CONFIDENCE_THRESHOLD,
133
+
134
+ "L4_ENTRY_THRESHOLD": cls.L4_ENTRY_THRESHOLD,
135
+ "L4_OB_WALL_RATIO": cls.L4_OB_WALL_RATIO,
136
+
137
+ "HYDRA_CRASH_THRESH": cls.HYDRA_CRASH_THRESH,
138
+ "HYDRA_GIVEBACK_THRESH": cls.HYDRA_GIVEBACK_THRESH,
139
+ "HYDRA_STAGNATION_THRESH": cls.HYDRA_STAGNATION_THRESH
140
+ }
141
+
142
+ @classmethod
143
+ def update_from_dict(cls, config: Dict[str, Any]):
144
+ """تحديث القيم من قاموس (عند التحميل من R2)"""
145
+ if not config: return
146
+
147
+ # Layer 1
148
+ if "L1_MIN_QUOTE_VOLUME" in config: cls.L1_MIN_QUOTE_VOLUME = config["L1_MIN_QUOTE_VOLUME"]
149
+ if "L1_MAX_PUMP_4H" in config: cls.L1_MAX_PUMP_4H = config["L1_MAX_PUMP_4H"]
150
+ if "L1_MAX_CHANGE_24H" in config: cls.L1_MAX_CHANGE_24H = config["L1_MAX_CHANGE_24H"]
151
+ if "L1_MAX_RSI" in config: cls.L1_MAX_RSI = config["L1_MAX_RSI"]
152
+ if "L1_MAX_DEVIATION" in config: cls.L1_MAX_DEVIATION = config["L1_MAX_DEVIATION"]
153
+
154
+ # Layer 3
155
+ if "L3_CONFIDENCE_THRESHOLD" in config: cls.L3_CONFIDENCE_THRESHOLD = config["L3_CONFIDENCE_THRESHOLD"]
156
+
157
+ # Layer 4
158
+ if "L4_ENTRY_THRESHOLD" in config: cls.L4_ENTRY_THRESHOLD = config["L4_ENTRY_THRESHOLD"]
159
+ if "L4_OB_WALL_RATIO" in config: cls.L4_OB_WALL_RATIO = config["L4_OB_WALL_RATIO"]
160
+
161
+ # Layer 0 (Hydra)
162
+ if "HYDRA_CRASH_THRESH" in config: cls.HYDRA_CRASH_THRESH = config["HYDRA_CRASH_THRESH"]
163
+ if "HYDRA_GIVEBACK_THRESH" in config: cls.HYDRA_GIVEBACK_THRESH = config["HYDRA_GIVEBACK_THRESH"]
164
+ if "HYDRA_STAGNATION_THRESH" in config: cls.HYDRA_STAGNATION_THRESH = config["HYDRA_STAGNATION_THRESH"]
165
+
166
+ print("🔄 [SystemLimits] Configuration Updated from R2 Persistence.")
167
 
168
  # ============================================================
169
  # 🧠 MLProcessor Class
 
222
  else:
223
  self.guardian = None
224
 
225
+ print(f"🧠 [MLProcessor V32.0] Central Command Loaded. SystemLimits Active.")
226
 
227
  async def initialize(self):
228
  """تهيئة متوازية لجميع المحركات وحقن الإعدادات"""
 
260
  threshold=SystemLimits.L4_ENTRY_THRESHOLD,
261
  wall_ratio=SystemLimits.L4_OB_WALL_RATIO
262
  )
 
263
  elif hasattr(self.sniper, 'set_entry_threshold'):
264
  self.sniper.set_entry_threshold(SystemLimits.L4_ENTRY_THRESHOLD)
265
 
 
372
  decision = await self.oracle.predict(symbol_data)
373
 
374
  # ✅ فرض السيطرة: التحقق من العتبة المركزية هنا أيضاً
 
375
  conf = decision.get('confidence', 0.0)
376
 
377
  if decision.get('action') in ['WATCH', 'BUY'] and conf < SystemLimits.L3_CONFIDENCE_THRESHOLD:
 
378
  decision['action'] = 'WAIT'
379
  decision['reason'] = f"Processor Veto: Conf {conf:.2f} < Limit {SystemLimits.L3_CONFIDENCE_THRESHOLD}"
380
 
 
396
  return {'signal': 'WAIT', 'reason': 'Sniper Engine Missing'}
397
 
398
  def set_sniper_threshold(self, threshold: float):
399
+ # تحديث القيمة في SystemLimits وتحديث القناص
400
  SystemLimits.L4_ENTRY_THRESHOLD = threshold
401
  if self.sniper:
402
  if hasattr(self.sniper, 'set_entry_threshold'):
 
423
  p_giveback = probs.get('giveback', 0.0)
424
  p_stag = probs.get('stagnation', 0.0)
425
 
426
+ # تطبيق سياسة الفيتو المركزي على المخاطر
427
  if decision['action'] == 'HOLD':
428
  if p_crash >= SystemLimits.HYDRA_CRASH_THRESH:
429
  decision['action'] = 'EXIT_HARD'
 
462
  print(f"⚠️ [Processor] Advanced MC Error: {e}")
463
  return 0.0
464
 
465
+ print("✅ [MLProcessor V32.0] Centralized Thresholds & R2 Persistence Loaded.")