Download app.py from ARKAISW/QuantHive: direct link, hf CLI and curl.
- Browser
- Download file 4.19 kB
-
https://huggingface.co/spaces/ARKAISW/QuantHive/resolve/main/app.py
- Command line
-
hf download hf://spaces/ARKAISW/QuantHive/app.py
-
curl -L -o app.py https://huggingface.co/spaces/ARKAISW/QuantHive/resolve/main/app.py
4.19 kB
| """ | |
| Multi-Agent RL Trading Environment — Entry Point | |
| Usage: | |
| python app.py # Default: 100 episodes, dummy data | |
| python app.py --episodes 50 --ticker AAPL # Custom config | |
| python app.py --evaluate # Run evaluation with baseline comparison | |
| """ | |
| import argparse | |
| import sys | |
| def parse_args(): | |
| parser = argparse.ArgumentParser( | |
| description="Multi-Agent RL Trading Environment" | |
| ) | |
| parser.add_argument("--episodes", type=int, default=100, | |
| help="Number of training episodes") | |
| parser.add_argument("--ticker", type=str, default="AAPL", | |
| help="Stock ticker symbol") | |
| parser.add_argument("--start", type=str, default="2023-01-01", | |
| help="Data start date") | |
| parser.add_argument("--end", type=str, default="2024-12-31", | |
| help="Data end date") | |
| parser.add_argument("--cash", type=float, default=100_000.0, | |
| help="Initial cash") | |
| parser.add_argument("--evaluate", action="store_true", | |
| help="Run evaluation with random baseline comparison") | |
| parser.add_argument("--fetch-data", action="store_true", | |
| help="Fetch real market data before training") | |
| parser.add_argument("--seed", type=int, default=42, | |
| help="Random seed") | |
| parser.add_argument("--log-every", type=int, default=10, | |
| help="Log metrics every N episodes") | |
| parser.add_argument("--max-steps", type=int, default=None, | |
| help="Max steps per episode") | |
| parser.add_argument("--gbm", action="store_true", | |
| help="Use synthetic GBM data instead of real data") | |
| parser.add_argument("--fast", action="store_true", | |
| help="Run a quick test with fewer episodes/steps and no LLM") | |
| parser.add_argument("--demo", action="store_true", | |
| help="Launch the Demo UI backend API server") | |
| return parser.parse_args() | |
| def main(): | |
| args = parse_args() | |
| if args.demo: | |
| print("Starting Demo API Server on port 7860...") | |
| import uvicorn | |
| from api.server import app | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |
| return | |
| config = TrainingConfig( | |
| tickers=[args.ticker], | |
| start_date=args.start, | |
| end_date=args.end, | |
| initial_cash=args.cash, | |
| num_episodes=2 if args.fast else args.episodes, | |
| seed=args.seed, | |
| log_every=args.log_every, | |
| max_steps=50 if args.fast else args.max_steps, | |
| fast_mode=args.fast, | |
| ) | |
| config_cls = None | |
| if not args.demo: | |
| from training.config import TrainingConfig | |
| config_cls = TrainingConfig | |
| # Optionally fetch real data or generate GBM | |
| df = None | |
| if args.gbm: | |
| from env.trading_env import TradingEnv | |
| print("Generating synthetic GBM data (mu=0.1, sigma=0.2)...") | |
| env_gen = TradingEnv() | |
| df = env_gen._make_dummy_data_from_profile(n=500, mu=0.1, sigma=0.2) | |
| print(f"Generated {len(df)} rows of GBM data.\n") | |
| elif args.fetch_data: | |
| from data.fetch_data import fetch_yfinance | |
| print(f"Fetching data for {args.ticker} from {args.start} to {args.end}...") | |
| df = fetch_yfinance(args.ticker, args.start, args.end) | |
| print(f"Loaded {len(df)} rows of market data.\n") | |
| if args.demo: | |
| return | |
| config = config_cls( | |
| tickers=[args.ticker], | |
| start_date=args.start, | |
| end_date=args.end, | |
| initial_cash=args.cash, | |
| num_episodes=2 if args.fast else args.episodes, | |
| seed=args.seed, | |
| log_every=args.log_every, | |
| max_steps=50 if args.fast else args.max_steps, | |
| fast_mode=args.fast, | |
| ) | |
| if args.evaluate: | |
| from utils.evaluate import evaluate | |
| results = evaluate(config, df=df) | |
| print(f"\nGrade improvement: {results['grade_improvement']:+.4f}") | |
| else: | |
| from training.train import train | |
| metrics = train(config, df=df) | |
| print(f"\nDone! {len(metrics)} episodes completed.") | |
| if __name__ == "__main__": | |
| main() | |