Tool to test the out-of-sample performance of portfolio optimization models
Project description
Portfolio Performance
Tool to test the out-of-sample performance of portfolio optimization models. Based on the paper: Optimal Versus Naive Diversification:
I have also developed a playground website for this package so you can easily run these models on your own data. Link to website
Usage
Installation
pip install portfolioperformance
Models
# Each model takes a name parameter
ew = EqualWeight("Equal Weight")
minVar = MinVar("Minimum Variance")
JagannathanMa = JagannathanMa("Jagannathan Ma")
minVarShortSellCon = MinVarShortSellCon("Minimum Variance with Short Sell Constrains")
kanZhouEw = KanZhouEw("Kan Zhou EW")
meanVar = MeanVar("Mean Variance (Markowitz)")
meanVarShortSellCon = MeanVarShortSellCon("Mean Variance with Short Sell Constrains")
kanZhou = KanZhou("Kan Zhou Three Fund")
bayesStein = BayesStein("Bayes Stein")
bayesSteinShortSellCon = BayesSteinShortSellCon("Bayes Stein with Short Sell Constrains")
macKinlayPastor = MacKinlayPastor("MacKinlay and Pastor")
Example
import numpy as np
from portfolioperformance import *
# Risk aversion levels
GAMMAS = [1, 2, 3, 4, 5, 10]
# Time horizons
TIME_HORIZON = [60, 120]
benchmark = <benchmark model>
# List of models
models = [
benchmark,
# <add other list of models>
]
app = App(<data path>, GAMMAS, TIME_HORIZON, models, dateFormat=<pandas datetime format>,
dateRange=["01011990", "01012010"], delim=<"," or "\\s+">,
riskFactorPositions=[positions for risk factor column],
riskFreePosition=<risk free asset column>)
sr = app.getSharpeRatios()
sig = app.getStatisticalSignificanceWRTBenchmark(benchmark)
API
App Class
Parameters
path(str): Path to acsvfilegammas(list[int]): List of gammas valuestimeHorizon(list[int]): List of time horizonsmodels(list[Model]): List of Model classesdateFormat(str): Pandas date time format, default = "%Y-%m-%d"dateRange([str, str]): Start and end date, default = []delim(str): Delimitation type, either "," or "\s+" (whitespace), default = ","logScale(bool): Whether or not data is in log-scale, default = FalseriskFactorPositions(list): Risk factor asset column positions (where position 1 is the date column), default = []riskFreePosition(int): Risk free asset column position, default = 1
Methods
getSharpeRatios() -> dict[str, float]
Get the sharpe ratios
- Returns: -
dict[str, float]: A dictionary with model name and sharpe ratio as a key-valued pair
getStatisticalSignificanceWRTBenchmark(benchmark) -> dict[str, float]
Get the statistical significance with respect to a benchmark model
-
Parameters:
benchmark(Model): Benchmark model
- Returns:
dict[str, float]: A dictionary with model name and sharpe ratio as a key-valued pair
Development
Setup
- Clone project:
git clone https://github.com/sidnand/portfolioperformance - Install packages:
pip install -r requirements.txt - Make changes!
Folder Structure
.
|-- __init__.py # import /src/app.py and all models
|-- /src
|-- app.py # code for running all the optimiation models
|-- model.py # parent class to all the models
|-- modelNoGamma.py # class for models that don't take extra parameters
|-- modelGamma.py # class for models that take an extra gamma parameter; gamma is a list of constants for the investors risk-aversion level
|-- ./models # all the models
|-- ./utils
|-- filter.py # includes a function that is used to filter the parameters passed to a function
|-- quadprog.py # quadratic programming
|-- sharedOptions.py # models options that are in common with >2 models
|-- statistics.py # statistics functions
Create Pull-Request
Please create a pull-request to include your changes onto this repo. These changes will be reflected on the playground website linked above.
- Run
pip install -e .to install the package locally. - Make changes.
- Update version number in
setup.py. Please use the Semantic Versioning 2.0.0 system. Click to learn more. - Run
python setup.py sdist bdist_wheelto create a python wheel. - Create a pull-request!
Release History
-
1.1.0
quadprog == 0.1.12update- Update code for latest
pandasversion
-
1.0.0
- Initial release of the package
Python <= 3.9.9quadprog <= 0.1.11
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file portfolioperformance-1.1.0-py3-none-any.whl.
File metadata
- Download URL: portfolioperformance-1.1.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2269c55ca9a34365b16da0003ce32ce22a728ff8b8835323ef3b2be931a2d199
|
|
| MD5 |
f8d44b20607cb7f9c2987635ccd8bada
|
|
| BLAKE2b-256 |
28f2c38cf2b4940ec57cbd1748d5c8bb0ee5cd9b2c72a7a9d93f90a2287d3bc1
|