File size: 5,026 Bytes
80c1546
83392dd
80c1546
701d42d
3a93a42
80c1546
701d42d
ed906df
80c1546
 
 
c89ab1f
80c1546
 
 
83392dd
701d42d
 
3a93a42
701d42d
 
3a93a42
701d42d
83392dd
80c1546
ed906df
83392dd
c89ab1f
 
ed906df
c89ab1f
ed906df
83392dd
80c1546
3e520df
80c1546
 
 
ed906df
 
c89ab1f
ed906df
c89ab1f
ed906df
c89ab1f
 
ed906df
 
 
 
c89ab1f
92c2517
80c1546
1cd9326
ed906df
1cd9326
c89ab1f
 
 
80c1546
c89ab1f
1cd9326
80c1546
c89ab1f
 
 
 
 
 
 
 
83392dd
c89ab1f
 
 
83392dd
c89ab1f
 
 
 
 
 
 
 
 
 
 
 
83392dd
ed906df
 
c89ab1f
3a93a42
c89ab1f
 
83392dd
c89ab1f
83392dd
c89ab1f
 
 
 
ed906df
c89ab1f
 
 
83392dd
 
 
 
 
c89ab1f
3a93a42
92c2517
3a93a42
032193e
701d42d
c89ab1f
3a93a42
701d42d
1cd9326
83392dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# ml_engine/processor.py
# (V12.4 - Fix: Pass Full OHLCV to Brain)

import asyncio
import traceback
import numpy as np

# استيراد المحركات الثلاثة
try:
    from ml_engine.titan_engine import TitanEngine
except ImportError:
    print("❌ [Processor] لم يتم العثور على titan_engine.py!")
    TitanEngine = None

from ml_engine.monte_carlo import MonteCarloAnalyzer
from ml_engine.patterns import ChartPatternAnalyzer 

class MLProcessor:
    def __init__(self, market_context, data_manager, learning_hub):
        self.market_context = market_context
        self.data_manager = data_manager
        self.learning_hub = learning_hub
        
        # 1. المحرك الرئيسي (Titan)
        self.titan = TitanEngine() if TitanEngine else None
        
        # 2. المحرك المساند (Patterns)
        if self.data_manager and self.data_manager.pattern_analyzer:
             self.pattern_engine = self.data_manager.pattern_analyzer
        else:
             self.pattern_engine = ChartPatternAnalyzer()

        # 3. المحرك الاحتمالي (Monte Carlo)
        self.mc_analyzer = MonteCarloAnalyzer()
        
        self.initialized = False

    async def initialize(self):
        """تهيئة جميع المحركات الفرعية"""
        if not self.initialized:
            print("⚙️ [Processor] تهيئة نظام التقييم الهجين...")
            tasks = []
            if self.titan and not self.titan.initialized:
                tasks.append(self.titan.initialize())
            if self.pattern_engine and not self.pattern_engine.initialized:
                tasks.append(self.pattern_engine.initialize())
            
            if tasks:
                await asyncio.gather(*tasks)
            self.initialized = True
            print("✅ [Processor] النظام الهجين جاهز.")

    async def process_and_score_symbol_enhanced(self, raw_data):
        """
        المعالجة المركزية الهجينة (Hybrid Core Processing)
        """
        if not self.initialized: await self.initialize()
        symbol = raw_data.get('symbol')
        ohlcv_data = raw_data.get('ohlcv')
        
        if not symbol or not ohlcv_data: return None

        try:
            # --- 1. تشغيل المحركات الثلاثة بالتوازي ---
            
            # أ. مهمة Titan
            titan_task = asyncio.to_thread(self.titan.predict, ohlcv_data) if self.titan else None
            
            # ب. مهمة الأنماط
            pattern_task = self.pattern_engine.detect_chart_patterns(ohlcv_data) if self.pattern_engine else None
            
            # ج. مهمة مونت كارلو (السريعة)
            mc_score = 0.5
            if '1h' in ohlcv_data:
                 closes = np.array([c[4] for c in ohlcv_data['1h']])
                 # تشغيل سريع غير متزامن للمحاكاة البسيطة
                 mc_res = self.mc_analyzer.generate_1h_price_distribution_simple(closes)
                 mc_score = mc_res.get('mc_prob_gain', 0.5)

            # انتظار النتائج
            titan_res = await titan_task if titan_task else {'score': 0.0}
            pattern_res = await pattern_task if pattern_task else {'pattern_confidence': 0.0}

            # --- 2. استخراج الدرجات الخام ---
            score_titan = titan_res.get('score', 0.0)
            score_patterns = pattern_res.get('pattern_confidence', 0.0)
            score_mc = mc_score

            # --- 3. تطبيق المعادلة الهجينة ---
            hybrid_score = (score_titan * 0.50) + (score_patterns * 0.40) + (score_mc * 0.10)

            # تجميع النتيجة النهائية
            analysis_result = {
                'symbol': symbol,
                'current_price': raw_data.get('current_price', 0.0),
                'enhanced_final_score': hybrid_score,
                
                # تفاصيل للشفافية
                'components': {
                    'titan_score': score_titan,
                    'patterns_score': score_patterns,
                    'mc_score': score_mc
                },
                'titan_details': titan_res,
                'pattern_details': pattern_res.get('details', {}),
                
                # [ 🚀 التعديل الجوهري V12.4 ]
                # تمرير البيانات الكاملة لكي يستلمها LLM
                'ohlcv': ohlcv_data, 
                
                # نبقي العينة فقط للاستخدامات الخفيفة (Sentry)
                'ohlcv_sample': {tf: data[-1] for tf, data in ohlcv_data.items() if data}
            }

            return analysis_result

        except Exception as e:
            print(f"❌ [Processor] خطأ في معالجة {symbol}: {e}")
            traceback.print_exc()
            return None

print("✅ ML Processor V12.4 (Full Data Pass) loaded.")