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 acsv
filegammas
(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_wheel
to create a python wheel. - Create a pull-request!
Release History
-
1.1.0
quadprog == 0.1.12
update- Update code for latest
pandas
version
-
1.0.0
- Initial release of the package
Python <= 3.9.9
quadprog <= 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
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 |