Spaces:
Running
Running
File size: 7,186 Bytes
3232960 70c8d92 62df482 70c8d92 8d3a60a 70c8d92 8d3a60a 70c8d92 a715505 6b28865 7488919 70c8d92 c88a877 70c8d92 33d07ee 70c8d92 7488919 70c8d92 7488919 70c8d92 8d3a60a 70c8d92 7488919 70c8d92 7488919 70c8d92 e3e8378 70c8d92 4e367fb 70c8d92 7488919 70c8d92 a715505 70c8d92 3232960 a715505 0ea05ce a715505 7488919 a715505 70c8d92 a715505 7488919 4e367fb 8d3a60a 70c8d92 7488919 4e367fb 70c8d92 a715505 70c8d92 a715505 7488919 8d3a60a a715505 70c8d92 7488919 a715505 4e367fb 3232960 7488919 8d3a60a 7488919 4e367fb a715505 3232960 7488919 3232960 bc921db 7488919 5c68f30 a715505 8d3a60a a715505 8d3a60a c4a4c71 7488919 e3e8378 33d07ee a715505 7488919 a715505 3232960 4e367fb 3232960 e3e8378 3232960 e3e8378 3232960 70c8d92 a715505 7488919 4e367fb 8d3a60a 7488919 70c8d92 7488919 70c8d92 8d3a60a 7488919 a715505 4e367fb a715505 3232960 a715505 e3e8378 4e367fb e3e8378 4e367fb e3e8378 8d3a60a 70c8d92 dc62264 |
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# app.py (V12.3 - Titan Orchestrator + Detailed Diagnostics)
import os
import traceback
import signal
import sys
import uvicorn
import asyncio
import json
import gc
import time
from contextlib import asynccontextmanager
from fastapi import FastAPI, HTTPException, BackgroundTasks
from datetime import datetime
from typing import List, Dict, Any
# --- استيراد الخدمات ---
try:
from r2 import R2Service
from LLM import LLMService
from data_manager import DataManager
from ml_engine.processor import MLProcessor
from learning_hub.hub_manager import LearningHubManager
from trade_manager import TradeManager
except ImportError as e:
sys.exit(f"❌ Fatal Error: {e}")
# --- المتغيرات العالمية ---
r2_service_global = None
data_manager_global = None
llm_service_global = None
learning_hub_global = None
trade_manager_global = None
ml_processor_global = None
# --- مدير الحالة ---
class StateManager:
def __init__(self):
self.initialization_complete = False
self.services_initialized = {}
def set_service_initialized(self, service_name):
self.services_initialized[service_name] = True
if len(self.services_initialized) >= 5:
self.initialization_complete = True
print("🎯 [System] All services initialized. Ready for external triggers.")
state_manager = StateManager()
# --- التهيئة المركزية ---
async def initialize_services():
global r2_service_global, data_manager_global, llm_service_global
global learning_hub_global, trade_manager_global, ml_processor_global
try:
print("🚀 [System V12.3] Starting Titan-Powered Initialization...")
r2_service_global = R2Service()
state_manager.set_service_initialized('r2')
contracts_db = await r2_service_global.load_contracts_db_async() or {}
data_manager_global = DataManager(contracts_db, None, r2_service_global)
await data_manager_global.initialize()
state_manager.set_service_initialized('data')
llm_service_global = LLMService()
llm_service_global.r2_service = r2_service_global
learning_hub_global = LearningHubManager(r2_service_global, llm_service_global, data_manager_global)
await learning_hub_global.initialize()
state_manager.set_service_initialized('hub')
ml_processor_global = MLProcessor(None, data_manager_global, learning_hub_global)
await ml_processor_global.initialize()
state_manager.set_service_initialized('processor')
trade_manager_global = TradeManager(
r2_service_global,
data_manager_global,
titan_engine=ml_processor_global.titan
)
await trade_manager_global.initialize_sentry_exchanges()
state_manager.set_service_initialized('trade')
return True
except Exception as e:
print(f"❌ [Init Error] {e}")
traceback.print_exc()
return False
# --- دورة المستكشف (Titan Explorer Cycle) ---
async def run_explorer_cycle():
if not state_manager.initialization_complete:
print("⏳ [Cycle Skipped] System still initializing...")
return
print(f"\n🔭 [Explorer V12.3] Cycle started at {datetime.now().strftime('%H:%M:%S')}")
try:
# 1. غربلة سريعة (Layer 1)
candidates = await data_manager_global.layer1_rapid_screening()
if not candidates:
print("😴 [Explorer] No candidates found in Layer 1.")
return
# 2. تحليل عميق (Layer 2 - Titan Hybrid)
print(f"🔬 [Titan Hybrid] analyzing {len(candidates)} candidates...")
titan_candidates = []
all_scored_debug = []
data_queue = asyncio.Queue(maxsize=10)
producer = asyncio.create_task(data_manager_global.stream_ohlcv_data(candidates, data_queue))
while True:
batch = await data_queue.get()
if batch is None:
data_queue.task_done()
break
for raw_data in batch:
res = await ml_processor_global.process_and_score_symbol_enhanced(raw_data)
if res:
score = res.get('enhanced_final_score', 0.0)
all_scored_debug.append(res)
if score >= data_manager_global.TITAN_ENTRY_THRESHOLD:
print(f" 🌟 [Titan Approved] {res['symbol']} Score: {score:.4f}")
titan_candidates.append(res)
data_queue.task_done()
await producer
# 3. التحديث النهائي للحارس
if titan_candidates:
titan_candidates.sort(key=lambda x: x['enhanced_final_score'], reverse=True)
top_picks = titan_candidates[:5]
print(f"✅ [Explorer] Sending {len(top_picks)} to Sentry.")
await trade_manager_global.update_sentry_watchlist(top_picks)
else:
print("📉 [Explorer] Titan rejected all candidates this cycle.")
# 🔥 طباعة تشخيصية مفصلة لأفضل المرفوضين 🔥
if all_scored_debug:
print(f"\n🔍 [Debug] أفضل 10 مرفوضين (العتبة: {data_manager_global.TITAN_ENTRY_THRESHOLD}):")
all_scored_debug.sort(key=lambda x: x.get('enhanced_final_score', 0.0), reverse=True)
for i, cand in enumerate(all_scored_debug[:10]):
final = cand.get('enhanced_final_score', 0.0)
comps = cand.get('components', {})
t_s = comps.get('titan_score', 0.0)
p_s = comps.get('patterns_score', 0.0)
m_s = comps.get('mc_score', 0.0)
# طباعة مفصلة: النتيجة النهائية [تيتان | أنماط | مونت كارلو]
print(f" #{i+1} {cand['symbol']:<10}: {final:.4f} [🐺Titan:{t_s:.2f} | 📊Pat:{p_s:.2f} | 🎲MC:{m_s:.2f}]")
print("-" * 60)
except Exception as e:
print(f"❌ [Cycle Error] {e}")
traceback.print_exc()
finally:
gc.collect()
# --- FastAPI Setup ---
@asynccontextmanager
async def lifespan(app: FastAPI):
asyncio.create_task(initialize_services())
yield
if trade_manager_global: await trade_manager_global.stop_sentry_loops()
if data_manager_global: await data_manager_global.close()
print("👋 [System] Shutdown complete.")
app = FastAPI(lifespan=lifespan, title="Titan Trading Bot V12.3")
@app.get("/")
async def root():
return {"status": "Titan Online", "initialized": state_manager.initialization_complete}
@app.get("/run-cycle")
async def trigger_cycle(background_tasks: BackgroundTasks):
if not state_manager.initialization_complete:
raise HTTPException(status_code=503, detail="System initializing...")
background_tasks.add_task(run_explorer_cycle)
return {"message": "Cycle triggered"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860) |