tomirisai80 commited on
Commit
5b4220e
·
verified ·
1 Parent(s): 63895c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -13
app.py CHANGED
@@ -1,5 +1,5 @@
1
  # ============================================
2
- # 👑 TOMIRIS SPACE 19 v9.0 — SOL/USD MASTER (Hub‑Connected + Auto‑Retrain)
3
  # ============================================
4
  import os, time, threading, warnings, json, asyncio
5
  from typing import Dict, Any, Optional, List, Tuple
@@ -64,7 +64,7 @@ SYMBOL: str = "SOL/USD"
64
  MT5_SYMBOL: str = "SOLUSD"
65
  TIMEFRAMES: List[str] = ["15min", "1h", "4h"]
66
  AUTO_REPORT_INTERVAL = 300 # секунд между авто‑отправками
67
- RETRAIN_INTERVAL = 30 * 86400 # 30 дней
68
 
69
  try:
70
  with open("best_config.json", "r") as f:
@@ -112,7 +112,7 @@ COMPONENT_PERF: Dict[str, Dict[str, float]] = {
112
  YAHOO_INTERVAL_MAP: Dict[str, str] = {"15min": "15m", "1h": "60m", "4h": "4h"}
113
 
114
  # ================= ЗАГРУЗКА МОДЕЛЕЙ =================
115
- print(f"🔥 SPACE 19 v9.0: Загрузка моделей для {SYMBOL}...")
116
  MODELS: Dict[str, Optional[Any]] = {"xgb_daily": None, "xgb_4h": None, "lgb": None}
117
 
118
  if HAS_JOBLIB:
@@ -144,7 +144,7 @@ def get_next_twelve_key() -> str:
144
  return key
145
 
146
  session = requests.Session()
147
- session.headers.update({"User-Agent": "Tomiris-Space19-v9.0"})
148
 
149
  def safe_float(value: Any, default: float = 0.0) -> float:
150
  try:
@@ -800,7 +800,7 @@ def get_sol_signal() -> Optional[Dict[str, Any]]:
800
  "risk": {"sl": sl, "tp": tp, "rr": round(tp_dist/(sl_dist+1e-10), 2) if direction != "WAIT" else 0},
801
  "meta": {
802
  "latency_ms": latency,
803
- "model_version": "v9.0_auto_retrain",
804
  "features_used": len(model_features) if model_features else 0,
805
  "dynamic_weights": comp_weights
806
  }
@@ -823,7 +823,7 @@ def auto_report():
823
  def retrain_models():
824
  print("🔄 Запуск дообучения моделей SOL...")
825
  try:
826
- # Используем дневные данные за последний год через Yahoo (или Hub)
827
  df = None
828
  if HAS_YFINANCE:
829
  yf_data = yf.download("SOL-USD", period="1y", interval="1d", progress=False)
@@ -852,7 +852,6 @@ def retrain_models():
852
 
853
  if not features_list:
854
  return
855
- # Приводим к единому размеру (pad до 200)
856
  X = np.array([list(f.values())[:200] + [0.0]*(200 - len(f)) for f in features_list])
857
  y = np.array(targets)
858
 
@@ -871,7 +870,24 @@ def retrain_models():
871
 
872
  def auto_retrain():
873
  while True:
874
- time.sleep(RETRAIN_INTERVAL)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
875
  retrain_models()
876
 
877
  # ================= KEEP-ALIVE =================
@@ -888,18 +904,19 @@ threading.Thread(target=auto_report, daemon=True).start()
888
  threading.Thread(target=auto_retrain, daemon=True).start()
889
 
890
  # ================= FASTAPI =================
891
- app = FastAPI(title="TOMIRIS SOL/USD MASTER v9.0 Auto-Retrain")
892
 
893
  @app.get("/health")
894
  async def health():
895
  models_loaded = sum(1 for m in ["xgb_daily","xgb_4h","lgb"] if MODELS.get(m) is not None)
896
  return {
897
- "space": "Space 19 v9.0 Auto-Retrain",
898
  "status": "operational",
899
  "symbol": SYMBOL,
900
  "models_loaded": models_loaded,
901
  "hub_connected": True,
902
- "auto_retrain": True
 
903
  }
904
 
905
  @app.get("/consilium")
@@ -956,6 +973,6 @@ async def explain():
956
  }
957
  return {"error": "No prediction yet"}
958
 
959
- print("🚀 SPACE 19 v9.0 — SOL/USD MASTER (Hub-Connected + Auto-Retrain) ЗАПУЩЕН!")
960
- print("🥉 Ансамбль daily+4h + Meta SOL Score + Dynamic Weights + Auto-Retrain")
961
  print("✅ Готов к бою!")
 
1
  # ============================================
2
+ # 👑 TOMIRIS SPACE 19 v9.1 — SOL/USD MASTER (Hub‑Connected + Auto‑Retrain + Trigger)
3
  # ============================================
4
  import os, time, threading, warnings, json, asyncio
5
  from typing import Dict, Any, Optional, List, Tuple
 
64
  MT5_SYMBOL: str = "SOLUSD"
65
  TIMEFRAMES: List[str] = ["15min", "1h", "4h"]
66
  AUTO_REPORT_INTERVAL = 300 # секунд между авто‑отправками
67
+ RETRAIN_INTERVAL = 14 * 86400 # 14 дней
68
 
69
  try:
70
  with open("best_config.json", "r") as f:
 
112
  YAHOO_INTERVAL_MAP: Dict[str, str] = {"15min": "15m", "1h": "60m", "4h": "4h"}
113
 
114
  # ================= ЗАГРУЗКА МОДЕЛЕЙ =================
115
+ print(f"🔥 SPACE 19 v9.1: Загрузка моделей для {SYMBOL}...")
116
  MODELS: Dict[str, Optional[Any]] = {"xgb_daily": None, "xgb_4h": None, "lgb": None}
117
 
118
  if HAS_JOBLIB:
 
144
  return key
145
 
146
  session = requests.Session()
147
+ session.headers.update({"User-Agent": "Tomiris-Space19-v9.1"})
148
 
149
  def safe_float(value: Any, default: float = 0.0) -> float:
150
  try:
 
800
  "risk": {"sl": sl, "tp": tp, "rr": round(tp_dist/(sl_dist+1e-10), 2) if direction != "WAIT" else 0},
801
  "meta": {
802
  "latency_ms": latency,
803
+ "model_version": "v9.1_auto_retrain",
804
  "features_used": len(model_features) if model_features else 0,
805
  "dynamic_weights": comp_weights
806
  }
 
823
  def retrain_models():
824
  print("🔄 Запуск дообучения моделей SOL...")
825
  try:
826
+ import joblib
827
  df = None
828
  if HAS_YFINANCE:
829
  yf_data = yf.download("SOL-USD", period="1y", interval="1d", progress=False)
 
852
 
853
  if not features_list:
854
  return
 
855
  X = np.array([list(f.values())[:200] + [0.0]*(200 - len(f)) for f in features_list])
856
  y = np.array(targets)
857
 
 
870
 
871
  def auto_retrain():
872
  while True:
873
+ # Проверяем винрейт каждый час
874
+ time.sleep(3600)
875
+ try:
876
+ resp = session.get(f"{HUB_URL}/metrics", params={"space": "space_19_sol"}, timeout=10)
877
+ if resp.status_code == 200:
878
+ data = resp.json()
879
+ if data and len(data) > 0:
880
+ acc = data[0].get("accuracy", 0.5)
881
+ total = data[0].get("total_trades", 0)
882
+ if total >= 20 and acc < 0.4:
883
+ print(f"Точность SOL Master упала до {acc:.2f}, экстренное дообучение!")
884
+ retrain_models()
885
+ time.sleep(RETRAIN_INTERVAL)
886
+ continue
887
+ except Exception as e:
888
+ print(f"Ошибка проверки винрейта: {e}")
889
+ # Ждём оставшееся время до планового дообучения
890
+ time.sleep(RETRAIN_INTERVAL - 3600)
891
  retrain_models()
892
 
893
  # ================= KEEP-ALIVE =================
 
904
  threading.Thread(target=auto_retrain, daemon=True).start()
905
 
906
  # ================= FASTAPI =================
907
+ app = FastAPI(title="TOMIRIS SOL/USD MASTER v9.1 Auto-Retrain + Trigger")
908
 
909
  @app.get("/health")
910
  async def health():
911
  models_loaded = sum(1 for m in ["xgb_daily","xgb_4h","lgb"] if MODELS.get(m) is not None)
912
  return {
913
+ "space": "Space 19 v9.1 Auto-Retrain + Trigger",
914
  "status": "operational",
915
  "symbol": SYMBOL,
916
  "models_loaded": models_loaded,
917
  "hub_connected": True,
918
+ "auto_retrain": True,
919
+ "retrain_trigger": "accuracy < 0.4"
920
  }
921
 
922
  @app.get("/consilium")
 
973
  }
974
  return {"error": "No prediction yet"}
975
 
976
+ print("🚀 SPACE 19 v9.1 — SOL/USD MASTER (Hub-Connected + Auto-Retrain + Trigger) ЗАПУЩЕН!")
977
+ print("🥉 Ансамбль daily+4h + Meta SOL Score + Dynamic Weights + Auto-Retrain + Trigger")
978
  print("✅ Готов к бою!")