A Python package for simulating stocks & performing mean variance portfolio optimization.
- Simulates stock prices following a geometric Brownian motion
- Computes stock returns (daily & yearly), covariance of returns & supports reinvesting or extracting returns during timeframe
- Searches optimal weights to maximize returns, subject to sigma_target (portfolio risk)
- Visualizes stock trajectories, performance of optimal weights VS equal weights as well as overall portfolio return & risk
- Python 3.11+ (tested with 3.11.9)
- Required dependencies (see requirements.txt for details): numpy==2.1.3 scipy==1.16.0 matplotlib==3.10.5 seaborn==0.13.2
-
Clone the repository: git clone https://github.com/hb84ffm/mean_variance_portfolio.git cd mean_variance_portfolio
-
Create & activate your virtual environment: python3 -m venv venv source venv/bin/activate # On Mac/Linux venv\Scripts\activate # On Windows
-
Install dependencies: pip install -r requirements.txt
-
Import the package (to jupyter or python)
-
Instantiate the main class with all required parameters
-
Call run() method on the instantiated class to simulate & optimize
mean_variance_portfolio/
├─── __init__.py
├─── main.py # Orchestrates the simulation, optimization & plotting of charts
├─── optimizer/
├─── __init__.py
├─── optimizer.py # Finds optimal weights to maximize returns s.t. sigma_target
├─── portfolio/
├─── __init__.py
├─── portfolio.py # Calculates portfolio metrics (returns, covariance of returns, etc.)
├─── example/
├─── example.ipynb # Jupyter notebook to describe installation/setup
├── stocks/
├── __init__.py
├─── stocks.py # Stock simulation
├── visualization/
├─── __init__.py
├─── visualization.py # Creates charts to see resuts & compare strategies (equal weights VS optimized)
See provided Jupyter notebook example.ipynb for explanation.
For questions or feedback reach out via: GitHub.