Work In Progress
Master's thesis developing a reinforcement learning framework for portfolio management that integrates price, technical, fundamental, and behavioral (attention & sentiment) features across a dynamic equity universe of the top 50 S&P500 constituents. Uses an actor-critic architecture trained via PPO to output portfolio weights (no short-selling) maximizing risk-adjusted returns (Sharpe) under transaction costs, evaluated against benchmarks like equal-weight and minimum-variance.
Python, PyTorch, Gymnasium, PPO (hand-rolled), cross-stock transformer, Dirichlet policy head. Config via YAML, experiment tracking via MLflow, linting with ruff and pyright, tests with pytest.
├── config/ # YAML configs (data paths, env params, model hparams)
├── data/ # symlinks → /mnt/usb/factor-weaver/data/ (raw, interim, processed)
│ ├── raw/ # original downloads/API output from vendors
│ ├── interim/ # cleaned and normalized data in parquet files
│ └── processed/ # final aligned output for RL training/testing
├── docs/ # thesis planning docs
│ └── figures/ # PlantUML diagrams (data flow, architecture)
├── notebooks/ # exploratory quarto notebooks
├── src/factor_weaver/
│ ├── cli.py # argparse dispatcher (entry point)
│ ├── workflows/ # orchestrators: build_dataset, train, evaluate
│ ├── data/ # MODULE 1: data pipeline (parse, lseg, universe, edgar, prices, technicals, behavior, align, split)
│ ├── rl/ # MODULE 2: env, model, ppo
│ ├── eval/ # MODULE 3: backtest, benchmarks
│ └── math.py # financial math helpers (shared)
├── experiments/ # run outputs (logs, checkpoints, results)
├── tests/
parse-fundamentals— financialdatadb xlsx → long parquetparse-companies— financialdatadb company list → parquetlseg-constituents— current S&P500 snapshot (LSEG chain RIC)lseg-joiners-leavers— S&P500 membership changes since 1994 (LSEG)lseg-mapping— RIC → ticker/name/PermID crosswalk for all LSEG RICslseg-market-cap— quarterly market cap viaTR.CompanyMarketCap(fallbackTR.F.MktCap)universe— top-50 S&P500 by market cap per quarteredgar-filing-dates— SEC filing dates (no look-ahead bias)fetch-prices— LSEG OHLCVcompute-technicals— rolling indicators from pricesload-behavior— sibling-repo sentiment/attention parquetalign— EDGAR-anchored forward-fill + freshness + time-decaysplit— train/test tensors by date window
Architecture and data-flow diagrams: docs/figures/.