redradios commited on
Commit
e648bef
·
1 Parent(s): d8604c8

v2.0: 33 AI coins - KITE, TAO, VIRTUAL, FET, LINK y 25 mas

Browse files
download_data.py CHANGED
@@ -51,7 +51,17 @@ def _get_working_endpoint() -> str:
51
  logger.warning("\u26a0\ufe0f Ning\u00fan endpoint directo disponible, usando data-api")
52
  return "https://data-api.binance.vision"
53
 
54
- DEFAULT_SYMBOLS = ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
 
 
 
 
 
 
 
 
 
 
55
  DEFAULT_TIMEFRAME = "4h"
56
  DEFAULT_DAYS = 1825 # ~5 años
57
  MAX_CANDLES_PER_REQUEST = 1000
@@ -420,11 +430,14 @@ def main():
420
 
421
  # ── 1. Klines spot ──
422
  for symbol in args.symbols:
 
 
 
 
423
  df = download_klines(symbol, args.timeframe, args.days)
424
  if not df.empty:
425
- path = os.path.join(DATA_DIR, f"klines_{symbol}_{args.timeframe}.parquet")
426
  df.to_parquet(path)
427
- logger.info("💾 Guardado: %s (%d filas)", path, len(df))
428
 
429
  # ── 2. Datos de derivados (futuros) ──
430
  if not args.no_derivatives:
 
51
  logger.warning("\u26a0\ufe0f Ning\u00fan endpoint directo disponible, usando data-api")
52
  return "https://data-api.binance.vision"
53
 
54
+ DEFAULT_SYMBOLS = [
55
+ # Base (mercado general)
56
+ "BTCUSDT", "ETHUSDT", "SOLUSDT",
57
+ # AI Coins (baja correlacion con BTC)
58
+ "LINKUSDT", "TAOUSDT", "WLDUSDT", "VIRTUALUSDT", "FETUSDT",
59
+ "INJUSDT", "GRTUSDT", "KITEUSDT", "THETAUSDT",
60
+ "KAITOUSDT", "SENTUSDT", "LPTUSDT", "AWEUSDT", "TURBOUSDT",
61
+ "SAHARAUSDT", "VANAUSDT", "NMRUSDT", "OPENUSDT", "ROBOUSDT",
62
+ "HOLOUSDT", "RLCUSDT", "IOUSDT", "PHAUSDT", "IQUSDT",
63
+ "AIXBTUSDT", "SAPIENUSDT", "FLUXUSDT", "ALLOUSDT", "MIRAUSDT",
64
+ ]
65
  DEFAULT_TIMEFRAME = "4h"
66
  DEFAULT_DAYS = 1825 # ~5 años
67
  MAX_CANDLES_PER_REQUEST = 1000
 
430
 
431
  # ── 1. Klines spot ──
432
  for symbol in args.symbols:
433
+ path = os.path.join(DATA_DIR, f"klines_{symbol}_{args.timeframe}.parquet")
434
+ if os.path.exists(path):
435
+ logger.info("Klines %s ya existe, salteando", symbol)
436
+ continue
437
  df = download_klines(symbol, args.timeframe, args.days)
438
  if not df.empty:
 
439
  df.to_parquet(path)
440
+ logger.info("Guardado: %s (%d filas)", path, len(df))
441
 
442
  # ── 2. Datos de derivados (futuros) ──
443
  if not args.no_derivatives:
feature_engine.py CHANGED
@@ -365,7 +365,15 @@ def main():
365
  parser.add_argument("--all", action="store_true")
366
  args = parser.parse_args()
367
 
368
- symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT"] if args.all else [args.symbol]
 
 
 
 
 
 
 
 
369
 
370
  for symbol in symbols:
371
  df = generate_features(symbol, args.timeframe)
 
365
  parser.add_argument("--all", action="store_true")
366
  args = parser.parse_args()
367
 
368
+ symbols = [
369
+ "BTCUSDT", "ETHUSDT", "SOLUSDT",
370
+ "LINKUSDT", "TAOUSDT", "WLDUSDT", "VIRTUALUSDT", "FETUSDT",
371
+ "INJUSDT", "GRTUSDT", "KITEUSDT", "THETAUSDT",
372
+ "KAITOUSDT", "SENTUSDT", "LPTUSDT", "AWEUSDT", "TURBOUSDT",
373
+ "SAHARAUSDT", "VANAUSDT", "NMRUSDT", "OPENUSDT", "ROBOUSDT",
374
+ "HOLOUSDT", "RLCUSDT", "IOUSDT", "PHAUSDT", "IQUSDT",
375
+ "AIXBTUSDT", "SAPIENUSDT", "FLUXUSDT", "ALLOUSDT", "MIRAUSDT",
376
+ ] if args.all else [args.symbol]
377
 
378
  for symbol in symbols:
379
  df = generate_features(symbol, args.timeframe)
model_signals.py CHANGED
@@ -302,17 +302,20 @@ def main():
302
  return
303
 
304
  if args.multi:
 
 
 
305
  dfs = []
306
- for sym in ["BTCUSDT", "ETHUSDT", "SOLUSDT"]:
307
- path = os.path.join(DATA_DIR, f"labeled_{sym}_{args.timeframe}.parquet")
308
- if os.path.exists(path):
309
- df_sym = pd.read_parquet(path)
310
- logger.info("Loaded %s: %d rows", sym, len(df_sym))
311
- dfs.append(df_sym)
312
  if not dfs:
 
313
  return
314
  df = pd.concat(dfs, axis=0).sort_index()
315
- logger.info("Combined: %d rows", len(df))
316
  else:
317
  path = os.path.join(DATA_DIR, f"labeled_{args.symbol}_{args.timeframe}.parquet")
318
  if not os.path.exists(path):
 
302
  return
303
 
304
  if args.multi:
305
+ import glob
306
+ pattern = os.path.join(DATA_DIR, f"labeled_*_{args.timeframe}.parquet")
307
+ files = sorted(glob.glob(pattern))
308
  dfs = []
309
+ for path in files:
310
+ df_sym = pd.read_parquet(path)
311
+ sym = os.path.basename(path).replace(f"labeled_", "").replace(f"_{args.timeframe}.parquet", "")
312
+ logger.info("Loaded %s: %d rows", sym, len(df_sym))
313
+ dfs.append(df_sym)
 
314
  if not dfs:
315
+ logger.error("No labeled files found")
316
  return
317
  df = pd.concat(dfs, axis=0).sort_index()
318
+ logger.info("Combined: %d rows (%d symbols)", len(df), len(dfs))
319
  else:
320
  path = os.path.join(DATA_DIR, f"labeled_{args.symbol}_{args.timeframe}.parquet")
321
  if not os.path.exists(path):
regime_detector.py CHANGED
@@ -275,19 +275,20 @@ def main():
275
 
276
  # Cargar datos - multi-symbol si habilitado
277
  if args.multi:
278
- symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
 
 
279
  dfs = []
280
- for sym in symbols:
281
- path = os.path.join(DATA_DIR, f"labeled_{sym}_{args.timeframe}.parquet")
282
- if os.path.exists(path):
283
- df_sym = pd.read_parquet(path)
284
- logger.info("Cargado %s: %d velas", sym, len(df_sym))
285
- dfs.append(df_sym)
286
  if not dfs:
287
  logger.error("No se encontraron datos labeled")
288
  return
289
  df = pd.concat(dfs, axis=0).sort_index()
290
- logger.info("Dataset combinado: %d velas (3 pares)", len(df))
291
  else:
292
  labeled_path = os.path.join(DATA_DIR, f"labeled_{args.symbol}_{args.timeframe}.parquet")
293
  if not os.path.exists(labeled_path):
 
275
 
276
  # Cargar datos - multi-symbol si habilitado
277
  if args.multi:
278
+ import glob
279
+ pattern = os.path.join(DATA_DIR, f"labeled_*_{args.timeframe}.parquet")
280
+ files = sorted(glob.glob(pattern))
281
  dfs = []
282
+ for path in files:
283
+ df_sym = pd.read_parquet(path)
284
+ sym = os.path.basename(path).replace("labeled_", "").replace(f"_{args.timeframe}.parquet", "")
285
+ logger.info("Cargado %s: %d velas", sym, len(df_sym))
286
+ dfs.append(df_sym)
 
287
  if not dfs:
288
  logger.error("No se encontraron datos labeled")
289
  return
290
  df = pd.concat(dfs, axis=0).sort_index()
291
+ logger.info("Dataset combinado: %d velas (%d pares)", len(df), len(dfs))
292
  else:
293
  labeled_path = os.path.join(DATA_DIR, f"labeled_{args.symbol}_{args.timeframe}.parquet")
294
  if not os.path.exists(labeled_path):
regime_labeler.py CHANGED
@@ -164,7 +164,15 @@ def main():
164
  parser.add_argument("--all", action="store_true")
165
  args = parser.parse_args()
166
 
167
- symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT"] if args.all else [args.symbol]
 
 
 
 
 
 
 
 
168
 
169
  for symbol in symbols:
170
  features_path = os.path.join(DATA_DIR, f"features_{symbol}_{args.timeframe}.parquet")
 
164
  parser.add_argument("--all", action="store_true")
165
  args = parser.parse_args()
166
 
167
+ symbols = [
168
+ "BTCUSDT", "ETHUSDT", "SOLUSDT",
169
+ "LINKUSDT", "TAOUSDT", "WLDUSDT", "VIRTUALUSDT", "FETUSDT",
170
+ "INJUSDT", "GRTUSDT", "KITEUSDT", "THETAUSDT",
171
+ "KAITOUSDT", "SENTUSDT", "LPTUSDT", "AWEUSDT", "TURBOUSDT",
172
+ "SAHARAUSDT", "VANAUSDT", "NMRUSDT", "OPENUSDT", "ROBOUSDT",
173
+ "HOLOUSDT", "RLCUSDT", "IOUSDT", "PHAUSDT", "IQUSDT",
174
+ "AIXBTUSDT", "SAPIENUSDT", "FLUXUSDT", "ALLOUSDT", "MIRAUSDT",
175
+ ] if args.all else [args.symbol]
176
 
177
  for symbol in symbols:
178
  features_path = os.path.join(DATA_DIR, f"features_{symbol}_{args.timeframe}.parquet")
startup.sh CHANGED
@@ -1,23 +1,19 @@
1
  #!/bin/bash
2
  echo "========================================="
3
- echo " AURORA BRAIN v1.3Starting Pipeline"
4
  echo "========================================="
5
 
6
- # Solo limpiar features y modelos (NO los parquets de datos crudos)
7
  rm -f data/features_*.parquet data/labeled_*.parquet
8
  rm -f models/*.pkl models/*.json
9
  echo "Features y modelos limpiados"
10
 
11
- # Paso 1: Descargar datos (solo si no existen las klines)
12
- if [ ! -f "data/klines_BTCUSDT_4h.parquet" ]; then
13
- echo "Descargando datos historicos..."
14
- python download_data.py --symbols BTCUSDT ETHUSDT SOLUSDT --days 1825
15
- else
16
- echo "Klines ya existen"
17
- fi
18
 
19
- # Paso 2: Generar features
20
- echo "Generando features..."
21
  python feature_engine.py --all
22
 
23
  # Paso 3: Etiquetar regimenes
@@ -28,7 +24,7 @@ python regime_labeler.py --all
28
  echo "Entrenando detector de regimen..."
29
  python regime_detector.py --multi
30
 
31
- # Paso 5: Entrenar modelo de senales (multi-symbol, threshold 2%)
32
  echo "Entrenando modelo de senales..."
33
  python model_signals.py --multi --threshold 2.0 --horizon 12
34
 
 
1
  #!/bin/bash
2
  echo "========================================="
3
+ echo " AURORA BRAIN v2.033 AI Coins Pipeline"
4
  echo "========================================="
5
 
6
+ # Limpiar features, labels y modelos (conservar klines y funding)
7
  rm -f data/features_*.parquet data/labeled_*.parquet
8
  rm -f models/*.pkl models/*.json
9
  echo "Features y modelos limpiados"
10
 
11
+ # Paso 1: Descargar datos (descarga SOLO las que faltan, las existentes las saltea)
12
+ echo "Descargando datos historicos (33 pares)..."
13
+ python download_data.py --days 1825
 
 
 
 
14
 
15
+ # Paso 2: Generar features para todos
16
+ echo "Generando features (33 pares)..."
17
  python feature_engine.py --all
18
 
19
  # Paso 3: Etiquetar regimenes
 
24
  echo "Entrenando detector de regimen..."
25
  python regime_detector.py --multi
26
 
27
+ # Paso 5: Entrenar modelo de senales (multi-symbol)
28
  echo "Entrenando modelo de senales..."
29
  python model_signals.py --multi --threshold 2.0 --horizon 12
30