feat: zentrale data_config.yaml + apply_config.py für dynamische Datenkonfiguration

This commit is contained in:
TPTBusiness
2026-03-22 21:32:45 +01:00
parent 781779a1f8
commit b7c1e4db8e
2 changed files with 135 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env python3
"""
Liest data_config.yaml und schreibt alle Werte in:
- .env (Zeiträume, Pfade)
- generate.py (Qlib Datengenerierung)
"""
import yaml
import re
from pathlib import Path
CONFIG = Path(__file__).parent / "data_config.yaml"
ENV = Path(__file__).parent / ".env"
GENERATE = Path("/home/nico/miniconda3/envs/rdagent/lib/python3.10/site-packages/rdagent/scenarios/qlib/experiment/factor_data_template/generate.py")
with open(CONFIG) as f:
cfg = yaml.safe_load(f)
# --- .env updaten ---
env_text = ENV.read_text()
replacements = {
r"QLIB_DATA_DIR=.*": f"QLIB_DATA_DIR={cfg['data_path'].replace('~', str(Path.home()))}",
r"QLIB_FREQ=.*": f"QLIB_FREQ={cfg['frequency']}",
r"QLIB_FACTOR_TRAIN_START=.*": f"QLIB_FACTOR_TRAIN_START={cfg['train_start']}",
r"QLIB_FACTOR_TRAIN_END=.*": f"QLIB_FACTOR_TRAIN_END={cfg['train_end']}",
r"QLIB_FACTOR_VALID_START=.*": f"QLIB_FACTOR_VALID_START={cfg['valid_start']}",
r"QLIB_FACTOR_VALID_END=.*": f"QLIB_FACTOR_VALID_END={cfg['valid_end']}",
r"QLIB_FACTOR_TEST_START=.*": f"QLIB_FACTOR_TEST_START={cfg['test_start']}",
r"QLIB_FACTOR_TEST_END=.*": f"QLIB_FACTOR_TEST_END={cfg['test_end']}",
r"QLIB_MODEL_TRAIN_START=.*": f"QLIB_MODEL_TRAIN_START={cfg['train_start']}",
r"QLIB_MODEL_TRAIN_END=.*": f"QLIB_MODEL_TRAIN_END={cfg['train_end']}",
r"QLIB_MODEL_VALID_START=.*": f"QLIB_MODEL_VALID_START={cfg['valid_start']}",
r"QLIB_MODEL_VALID_END=.*": f"QLIB_MODEL_VALID_END={cfg['valid_end']}",
r"QLIB_MODEL_TEST_START=.*": f"QLIB_MODEL_TEST_START={cfg['test_start']}",
r"QLIB_MODEL_TEST_END=.*": f"QLIB_MODEL_TEST_END={cfg['test_end']}",
r"QLIB_QUANT_TRAIN_START=.*": f"QLIB_QUANT_TRAIN_START={cfg['train_start']}",
r"QLIB_QUANT_TRAIN_END=.*": f"QLIB_QUANT_TRAIN_END={cfg['train_end']}",
r"QLIB_QUANT_VALID_START=.*": f"QLIB_QUANT_VALID_START={cfg['valid_start']}",
r"QLIB_QUANT_VALID_END=.*": f"QLIB_QUANT_VALID_END={cfg['valid_end']}",
r"QLIB_QUANT_TEST_START=.*": f"QLIB_QUANT_TEST_START={cfg['test_start']}",
r"QLIB_QUANT_TEST_END=.*": f"QLIB_QUANT_TEST_END={cfg['test_end']}",
}
for pattern, replacement in replacements.items():
env_text = re.sub(pattern, replacement, env_text)
ENV.write_text(env_text)
print("✓ .env aktualisiert")
# --- generate.py updaten ---
data_path = cfg['data_path']
freq = cfg['frequency']
train_start = cfg['train_start']
test_end = cfg['test_end']
valid_start = cfg['valid_start']
cols = str(cfg['columns'])
generate_text = f'''import qlib
import pandas as pd
qlib.init(provider_uri="{data_path}", freq="{freq}")
from qlib.data import D
instruments = D.instruments(market="all")
fields = {cols}
data = (
D.features(instruments, fields, freq="{freq}")
.swaplevel()
.sort_index()
.loc["{train_start}":]
.sort_index()
)
data.to_hdf("./daily_pv_all.h5", key="data")
data_debug = (
D.features(instruments, fields, start_time="{valid_start}", end_time="{test_end}", freq="{freq}")
.swaplevel()
.sort_index()
)
data_debug.to_hdf("./daily_pv_debug.h5", key="data")
'''
GENERATE.write_text(generate_text)
print("✓ generate.py aktualisiert")
print(f"\nKonfiguration angewendet:")
print(f" Instrument: {cfg['instrument']}")
print(f" Frequenz: {cfg['frequency']}")
print(f" Train: {cfg['train_start']}{cfg['train_end']}")
print(f" Test: {cfg['test_start']}{cfg['test_end']}")
+44
View File
@@ -0,0 +1,44 @@
# ============================================================
# Predix Data Configuration
# Ändere hier Instrument, Frequenz und Zeiträume
# Alle anderen Komponenten lesen aus dieser Datei
# ============================================================
instrument: EURUSD
frequency: 15min # 1min, 5min, 15min, 1h, 1d
data_path: ~/.qlib/qlib_data/eurusd_data
# Verfügbare Spalten (keine $factor Spalte!)
columns:
- $open
- $close
- $high
- $low
- $volume
# Walk-Forward Split
train_start: "2022-03-14"
train_end: "2024-06-30"
valid_start: "2024-07-01"
valid_end: "2024-12-31"
test_start: "2025-01-01"
test_end: "2026-03-20"
# Markt-Kontext für LLM Prompts
market_context:
spread_bps: 1.5
sessions:
asian: "00:00-08:00 UTC"
london: "08:00-16:00 UTC"
ny: "13:00-21:00 UTC"
overlap: "13:00-16:00 UTC"
target_arr: 9.62 # % ARR zu schlagen
max_drawdown: 20 # % maximaler Drawdown
# Lookback Referenz (in Bars)
lookback:
1h: 4
2h: 8
4h: 16
8h: 32
1d: 96