Files
NexQuant/scripts/create_strategy.py
TPTBusiness a523e62d94 chore: Organize utility scripts into scripts/ directory
Moved 13 scripts from root to scripts/:
- create_strategy.py
- debug_backtest.py
- predix_add_risk_management.py
- predix_batch_backtest.py
- predix_full_eval.py
- predix_gen_strategies_real_bt.py
- predix_parallel.py
- predix_quick_daytrading.py
- predix_rebacktest_strategies.py
- predix_simple_eval.py
- predix_smart_strategy_gen.py
- predix_strategy_report.py
- watchdog_generator.sh

Kept in root (intentional):
- predix.py (main entry point)
- start_llama.sh (convenience startup)
- start_strategy_loop.sh (convenience startup)

Root directory: 44 files → 31 files
2026-04-09 14:45:49 +02:00

59 lines
2.2 KiB
Python

import json
import pandas as pd
import numpy as np
# Strategy parameters
factors_used = ["daily_ret", "daily_close_return_96", "daily_cc_return", "momentum_1d", "london_mom"]
strategy_name = "ActiveDayMultiFactorScalper"
description = "Daytrading-Strategie mit 5 niedrig-korrelierten Faktoren und niedrigen Schwellenwerten für 50+ Trades"
# Python code for signal generation
code = '''import numpy as np
import pandas as pd
# Rolling Z-Scores mit kurzen Fenstern für schnelle Signale
z_daily_ret = (factors["daily_ret"] - factors["daily_ret"].rolling(15).mean()) / factors["daily_ret"].rolling(15).std()
z_close_ret = (factors["daily_close_return_96"] - factors["daily_close_return_96"].rolling(20).mean()) / factors["daily_close_return_96"].rolling(20).std()
z_cc_ret = (factors["daily_cc_return"] - factors["daily_cc_return"].rolling(15).mean()) / factors["daily_cc_return"].rolling(15).std()
z_mom = (factors["momentum_1d"] - factors["momentum_1d"].rolling(25).mean()) / factors["momentum_1d"].rolling(25).std()
z_london = (factors["london_mom"] - factors["london_mom"].rolling(30).mean()) / factors["london_mom"].rolling(30).std()
# Kombiniere alle Z-Scores mit Gewichtung
composite_signal = (
0.25 * z_close_ret + # Höchste IC (0.255) - stärkstes Gewicht
0.20 * z_london + # Zweithöchste IC (0.1857)
0.20 * z_daily_ret + # IC 0.1291
0.20 * z_cc_ret + # IC 0.1291
0.15 * z_mom # IC 0.1291
)
# Niedrige Schwellenwerte für häufigere Signale (0.2-0.3)
threshold_long = 0.25
threshold_short = -0.25
# Signal generieren
signal = pd.Series(0, index=close.index, name="signal")
signal[composite_signal > threshold_long] = 1
signal[composite_signal < threshold_short] = -1
# NaN behandeln (am Anfang durch rolling window)
signal = signal.fillna(0).astype(int)
'''
# Create strategy dict
strategy = {
"strategy_name": strategy_name,
"factor_names": factors_used,
"description": description,
"code": code
}
# Save to JSON
output_file = f"{strategy_name}_strategy.json"
with open(output_file, "w") as f:
json.dump(strategy, f, indent=2)
print(f"✅ Strategie gespeichert: {output_file}")
print(f"📊 Faktoren: {', '.join(factors_used)}")
print(f"🎯 Ziel: 50+ Trades mit niedrigen Schwellenwerten (±0.25)")