Update data_manager.py
Browse files- data_manager.py +23 -5
data_manager.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# data_manager.py (Updated to V7.3 -
|
| 2 |
import os
|
| 3 |
import asyncio
|
| 4 |
import httpx
|
|
@@ -19,15 +19,18 @@ except ImportError:
|
|
| 19 |
|
| 20 |
from ml_engine.indicators import AdvancedTechnicalAnalyzer
|
| 21 |
from ml_engine.monte_carlo import MonteCarloAnalyzer
|
|
|
|
| 22 |
from ml_engine.patterns import ChartPatternAnalyzer
|
| 23 |
|
| 24 |
logging.getLogger("httpx").setLevel(logging.WARNING)
|
| 25 |
logging.getLogger("httpcore").setLevel(logging.WARNING)
|
| 26 |
|
| 27 |
class DataManager:
|
| 28 |
-
|
|
|
|
| 29 |
self.contracts_db = contracts_db or {}
|
| 30 |
self.whale_monitor = whale_monitor
|
|
|
|
| 31 |
|
| 32 |
try:
|
| 33 |
self.exchange = ccxt.kucoin({
|
|
@@ -47,11 +50,23 @@ class DataManager:
|
|
| 47 |
|
| 48 |
self.technical_analyzer = AdvancedTechnicalAnalyzer()
|
| 49 |
self.monte_carlo_analyzer = MonteCarloAnalyzer()
|
| 50 |
-
self.pattern_analyzer =
|
| 51 |
|
| 52 |
async def initialize(self):
|
| 53 |
self.http_client = httpx.AsyncClient(timeout=30.0)
|
| 54 |
await self._load_markets()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
print("✅ DataManager initialized - V7.3 (L1 Threshold @ 0.50)")
|
| 56 |
|
| 57 |
async def _load_markets(self):
|
|
@@ -384,6 +399,7 @@ class DataManager:
|
|
| 384 |
|
| 385 |
task_indicators = self.technical_analyzer.calculate_all_indicators(df, '1h')
|
| 386 |
task_mc = self.monte_carlo_analyzer.generate_1h_price_distribution(ohlcv_1h)
|
|
|
|
| 387 |
task_pattern = self.pattern_analyzer.detect_chart_patterns(ohlcv_1h)
|
| 388 |
|
| 389 |
results = await asyncio.gather(task_mc, task_pattern, return_exceptions=True)
|
|
@@ -566,11 +582,13 @@ class DataManager:
|
|
| 566 |
for i, (timeframe, limit) in enumerate(timeframes):
|
| 567 |
result = timeframe_results[i]
|
| 568 |
if isinstance(result, Exception): continue
|
| 569 |
-
|
|
|
|
| 570 |
ohlcv_data[timeframe] = result
|
| 571 |
successful_timeframes += 1
|
| 572 |
|
| 573 |
-
|
|
|
|
| 574 |
try:
|
| 575 |
current_price = await self.get_latest_price_async(symbol)
|
| 576 |
if current_price is None:
|
|
|
|
| 1 |
+
# data_manager.py (Updated to V7.3 - V8 Pattern Engine Init)
|
| 2 |
import os
|
| 3 |
import asyncio
|
| 4 |
import httpx
|
|
|
|
| 19 |
|
| 20 |
from ml_engine.indicators import AdvancedTechnicalAnalyzer
|
| 21 |
from ml_engine.monte_carlo import MonteCarloAnalyzer
|
| 22 |
+
# (V8-MODIFICATION) استيراد المحرك الصحيح (V8)
|
| 23 |
from ml_engine.patterns import ChartPatternAnalyzer
|
| 24 |
|
| 25 |
logging.getLogger("httpx").setLevel(logging.WARNING)
|
| 26 |
logging.getLogger("httpcore").setLevel(logging.WARNING)
|
| 27 |
|
| 28 |
class DataManager:
|
| 29 |
+
# (V8-MODIFICATION) قبول r2_service
|
| 30 |
+
def __init__(self, contracts_db, whale_monitor, r2_service=None):
|
| 31 |
self.contracts_db = contracts_db or {}
|
| 32 |
self.whale_monitor = whale_monitor
|
| 33 |
+
self.r2_service = r2_service # (V8-MODIFICATION) الإضافة الجديدة
|
| 34 |
|
| 35 |
try:
|
| 36 |
self.exchange = ccxt.kucoin({
|
|
|
|
| 50 |
|
| 51 |
self.technical_analyzer = AdvancedTechnicalAnalyzer()
|
| 52 |
self.monte_carlo_analyzer = MonteCarloAnalyzer()
|
| 53 |
+
self.pattern_analyzer = None # (V8-MODIFICATION) سيتم تهيئته في initialize
|
| 54 |
|
| 55 |
async def initialize(self):
|
| 56 |
self.http_client = httpx.AsyncClient(timeout=30.0)
|
| 57 |
await self._load_markets()
|
| 58 |
+
|
| 59 |
+
# (V8-MODIFICATION) تهيئة محرك الأنماط V8 (ML-Based)
|
| 60 |
+
print(" > [DataManager] تهيئة محرك الأنماط V8 (ML-Based)...")
|
| 61 |
+
try:
|
| 62 |
+
self.pattern_analyzer = ChartPatternAnalyzer(r2_service=self.r2_service)
|
| 63 |
+
await self.pattern_analyzer.initialize() # (تحميل النموذج والمقياس من R2)
|
| 64 |
+
except Exception as e:
|
| 65 |
+
print(f"❌ [DataManager] فشل تهيئة محرك الأنماط V8: {e}")
|
| 66 |
+
# (العودة للوضع الآمن إذا فشل التحميل)
|
| 67 |
+
self.pattern_analyzer = ChartPatternAnalyzer(r2_service=None)
|
| 68 |
+
# --- (نهاية الإضافة) ---
|
| 69 |
+
|
| 70 |
print("✅ DataManager initialized - V7.3 (L1 Threshold @ 0.50)")
|
| 71 |
|
| 72 |
async def _load_markets(self):
|
|
|
|
| 399 |
|
| 400 |
task_indicators = self.technical_analyzer.calculate_all_indicators(df, '1h')
|
| 401 |
task_mc = self.monte_carlo_analyzer.generate_1h_price_distribution(ohlcv_1h)
|
| 402 |
+
# (V8-MODIFICATION) استخدام الدالة الجديدة
|
| 403 |
task_pattern = self.pattern_analyzer.detect_chart_patterns(ohlcv_1h)
|
| 404 |
|
| 405 |
results = await asyncio.gather(task_mc, task_pattern, return_exceptions=True)
|
|
|
|
| 582 |
for i, (timeframe, limit) in enumerate(timeframes):
|
| 583 |
result = timeframe_results[i]
|
| 584 |
if isinstance(result, Exception): continue
|
| 585 |
+
# (V8-MODIFICATION) زيادة الحد الأدنى من الشموع لاستيعاب المؤشرات
|
| 586 |
+
if result and len(result) >= 200: # (كان 10)
|
| 587 |
ohlcv_data[timeframe] = result
|
| 588 |
successful_timeframes += 1
|
| 589 |
|
| 590 |
+
# (V8-MODIFICATION) زيادة الحد الأدنى للأطر الزمنية
|
| 591 |
+
if successful_timeframes >= 3 and ohlcv_data: # (كان 2)
|
| 592 |
try:
|
| 593 |
current_price = await self.get_latest_price_async(symbol)
|
| 594 |
if current_price is None:
|