Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """Train the combined DARL + indicator intraday RL system.""" | |
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import sys | |
| from pathlib import Path | |
| # Add backend to path | |
| sys.path.insert(0, str(Path(__file__).parent.parent)) | |
| from src.prediction.intraday_rl.environment import IntradayEnvConfig | |
| from src.prediction.intraday_rl.trainer import ( | |
| DQNTrainingConfig, | |
| PPOTrainingConfig, | |
| describe_training_setup, | |
| prepare_training_sessions, | |
| train_dqn_baseline, | |
| train_ppo, | |
| ) | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser(description="Train intraday PPO policy on minute OHLCV") | |
| parser.add_argument("--csv", type=str, required=True, help="Path to minute OHLCV CSV") | |
| parser.add_argument( | |
| "--output-model", | |
| type=str, | |
| default=str(Path(__file__).parent.parent / "models" / "intraday_ppo"), | |
| help="Output path for PPO model", | |
| ) | |
| parser.add_argument("--total-timesteps", type=int, default=250000) | |
| parser.add_argument("--lookback", type=int, default=30) | |
| parser.add_argument("--morning-minutes", type=int, default=60) | |
| parser.add_argument("--copies-per-session", type=int, default=1) | |
| parser.add_argument("--disable-augmentation", action="store_true") | |
| parser.add_argument("--train-dqn-baseline", action="store_true") | |
| parser.add_argument( | |
| "--dqn-output-model", | |
| type=str, | |
| default=str(Path(__file__).parent.parent / "models" / "intraday_dqn"), | |
| ) | |
| return parser.parse_args() | |
| def main() -> None: | |
| args = parse_args() | |
| sessions = prepare_training_sessions( | |
| csv_path=args.csv, | |
| apply_augmentation=not args.disable_augmentation, | |
| copies_per_session=args.copies_per_session, | |
| ) | |
| env_config = IntradayEnvConfig( | |
| lookback=args.lookback, | |
| morning_minutes=args.morning_minutes, | |
| ) | |
| ppo_config = PPOTrainingConfig(total_timesteps=args.total_timesteps) | |
| setup = describe_training_setup(env_config, ppo_config) | |
| print("Training setup:\n" + json.dumps(setup, indent=2)) | |
| print(f"Number of sessions used for training: {len(sessions)}") | |
| model = train_ppo( | |
| sessions=sessions, | |
| env_config=env_config, | |
| train_config=ppo_config, | |
| model_output_path=args.output_model, | |
| ) | |
| print(f"PPO model saved to: {args.output_model}") | |
| if args.train_dqn_baseline: | |
| dqn_cfg = DQNTrainingConfig(total_timesteps=args.total_timesteps) | |
| train_dqn_baseline( | |
| sessions=sessions, | |
| env_config=env_config, | |
| train_config=dqn_cfg, | |
| model_output_path=args.dqn_output_model, | |
| ) | |
| print(f"DQN baseline saved to: {args.dqn_output_model}") | |
| # Keep a direct operational reminder from DARL transfer strategy. | |
| print("\nDeployment reminder:") | |
| print("1) Train on 1-minute bars (maximum sample density).") | |
| print("2) Deploy same policy on 5-minute or 15-minute bars for smoother execution.") | |
| print("3) Recompute SMA/RSI/ATV after resampling to preserve feature meaning.") | |
| _ = model | |
| if __name__ == "__main__": | |
| main() | |