Releases: dcelisgarza/PortfolioOptimisers.jl
v0.16.0
PortfolioOptimisers v0.16.0
Breaking changes
| Old | New | Scope |
|---|---|---|
ReturnRiskMeasure |
ExpectedReturn |
Type rename |
ReturnRiskRatioRiskMeasure |
ExpectedReturnRiskRatio |
Type rename |
Field clr |
cle |
HierarchicalOptimiser |
Field pl (estimators) |
ple |
All JuMP-based optimisers |
Field pl (results) |
plr |
All JuMP-based optimiser results |
Field ple in FactorRiskContribution |
frc_ple |
FactorRiskContribution |
Fields lcs, ct, gcard, sgcard (estimators) |
lcse, cte, gcarde, sgcarde |
JuMP optimisers |
Fields lcs, ct, gcard, sgcard (results) |
lcsr, ctr, gcardr, sgcardr |
JuMP results |
Bug fixes
UncertaintySetVariance.factorynil-dereference fix whenpr === nothing
New features
- Cross-validation framework:
KFold,Combinatorial(CPCV),WalkForward(Index and date based variants),MultipleRandomised - Cross-validation infrastructure:
cross_val_predict,predict,fit_predict,OptimisationCrossValidation,NearestQuantilePrediction,PredictionResult,MultiPeriodPredictionResult,PopulationPredictionResult,PredictionReturnsResult needs_previous_weights/factory(opt, w)pattern propagated to all optimisation estimators to support weight continuity across CV foldsis_time_dependent/update_time_dependent_estimatorhooks for time-varying constraints- Index-window (
VecInt) parameter onSimpleExpectedReturnsandGeneralCovariancefor sub-period estimation returns_result_viewonReturnsResultfor time-windowed slices
Tests
- Tests for new features.
Docs
- New example (
examples/10_CrossValidation.jl) and API docs
Merged pull requests:
- Add cross validation and cross validation accessories, and bug fixes. (#69) (@dcelisgarza)
- Improve factory functions fix documentation issues. (#73) (@dcelisgarza)
- Disambiguate between parameters which cannot be result types when used in cross validation and as external estimators in nested clusters and stacking optimisers, and other parameters. (#74) (@dcelisgarza)
- Summarise PR #69 additions and breaking changes (#75) (@Copilot)
Closed issues:
v0.15.0
PortfolioOptimisers v0.15.0
Breaking changes
-
NOCTracking->L1Tracking. -
SOCTracking->L2Tracking. -
SquaredSOCTracking->SquaredL2Tracking.
New features
-
Lp via
LpRegularisationand LInf regularisation which respectively use the p- and inf-norm to penalise the objective function. -
Lp and LInf tracking algorithms via
LpTrackingandLInfTrackingwhich use the p- and inf-norm to track the performance or risk of a portfolio.
Tests
- Added tests for the new features.
Docs
-
New docs landing page with new logo and taglines.
-
Regularisation example.
-
Reduced redundancy and more standardisation of docs.
Maintenance
-
Remove double qualification of
StatsBase. -
Remove dead code.
-
Add newer versions to project compats.
Merged pull requests:
- New logo, code and docs cleanup, new tracking and regularisation features. (#66) (@dcelisgarza)
v0.14.2
PortfolioOptimisers v0.14.2
Bug fixes
- Fixed a critical bug where
HighOrderPriorwas computing coskewness and cokurtosis from the adjusted returns matrix (pr.X) instead of the original returns matrix (X), causing incorrect higher-order moment calculations
Docs
-
Added detailed interface documentation with examples for
AbstractCovarianceEstimator,AbstractVarianceEstimator,AbstractMatrixProcessingEstimator,AbstractMatrixProcessingAlgorithm,AbstractPosdefEstimator,AbstractDetoneEstimator, andAbstractDenoiseEstimator -
Added two comprehensive examples "Risk Factor Optimisation" and "Improving Moment Estimation"
-
Improved front facing and docs readmes.
Maintenance
-
Refactored matrix processing, denoise, detone, and posdef functions to return the modified matrix instead of
nothing, improving consistency and usability -
Replaced
sort!withsortin OWA risk measures to avoid mutating input vectors -
Made the argument checks for linear constraint generation and Black Litterman view generation internally consistent.
Merged pull requests:
- Fix bug in high order prior. Add more docs. Arrive at the standard for interfaces docs. (#65) (@dcelisgarza)
v0.14.1
PortfolioOptimisers v0.14.1
Bug fixes
- Fix subtle bug where fees were not being applied when predicting the outer returns of Stacking and NestedClusters optimisations
Docs
- Fix title cases and remove Documenter.jl link disambiguations from repo's readme
Maintenance
- Throw clearer IsNothingError using argcheck rather than letting the program throw an obscure MethodError
Merged pull requests:
- Prepare for cross-validation, fix bug of fees not being used whe computing the outer returns in stacking and nco optimisations. (#64) (@dcelisgarza)
v0.14.0
PortfolioOptimisers v0.14.0
Breaking changes
-
detone->dt,denoise->dn -
plg->pl -
cent->ct -
ne->nt -
nt->pl -
pe->pl -
JuMPOptimiserpe->pr -
pe->prfor all optimisers -
pe->prfor all optimisers -
cle->clrfor all optimisers -
BuyInThreshold->Threshold -
BuyInThresholdEstimator->ThresholdEstimator -
te->tr -
EQ->== -
LEQ-><= -
GEQ->>= -
BrownianDistanceVariancealg->alg1,algc->alg2 -
NoOptimisationRiskMeasure->NonOptimisationRiskMeasure -
SquareRelativeErrorWeightFinaliser->SquaredRelativeErrorWeightFinaliser -
SquareAbsoluteErrorWeightFinaliser->SquaredAbsoluteErrorWeightFinaliser -
RatioRiskMeasure->ReturnRiskRatioRiskMeasure -
GreedyAllocationOptimisation->GreedyAllocationResult -
DiscreteAllocationOptimisation->DiscreteAllocationResult
Tests
- Increase test coverage
Docs
-
Update readme
-
Update docs
-
Remove empty docstrings, it's better to use the auto generated struct info
Maintenance
-
Configure Copilot instructions following GitHub best practices (#61)
-
Simplify factory functions
-
Dictionary of standard terms
-
Make optimisation estimator structs' orders consistent
-
Make API consistent for a lot of functions
Merged pull requests:
- Configure Copilot instructions following GitHub best practices (#61) (@Copilot)
- Stabilising the api. (#63) (@dcelisgarza)
Closed issues:
- ✨ Set up Copilot instructions (#60)
v0.13.0
PortfolioOptimisers v0.13.0
Breaking Changes
Parameter Renames (consistency and brevity)
sce→sca,scei→scai,sceo→scao(scalariser variants)executor→extarget→tgtthreshold→t
Type Renames
ClusteringEstimator→ClustersEstimatorEllipseUncertaintySetAlgorithm→EllipsoidalUncertaintySetAlgorithmUniformlyDistributedBounds→UniformValuesand simplified type hierarchyKellyReturn→LogarithmicReturn- Optimization result types made consistent
New features
- Cholesky caching: Added
cholfield to structs benefiting from pre-computed decompositions - High order factor prior: Support for additional factor priors with residual variance validation
- Missing factory/view functions: Added previously absent constructor and accessor functions
- Numerical stability: Improved HERC log-sum-exp scalariser stability
- K-means clustering: Other than hierarchical optimisations, other features only need knowledge of cluster assignment rather than a full phylogeny, this implements k-means clustering for such cases
Maintenance
- Main module restructured from bulk
usingto explicit imports - Increased test coverage
- Improve type stability of some view functions
- Keep improving documentation
Merged pull requests:
- Dev (#54) (@dcelisgarza)
- Breaking changes, high order factor prior, add chol field to structs that can benefit from it, add missing factory and view functions. (#55) (@dcelisgarza)
v0.12.1
PortfolioOptimisers v0.12.1
Bug fixes
- Correctness fix to drawdowns auxiliary function used for plotting.
New features
-
Add Distributionally Robust Conditional Drawdown at Risk.
-
Add Power Norm X at Risk measures.
-
Enable Drawdown at Risk for non-clustering optimisation.
Docs
- Docs up to Fees.
Maintenance
- Remove side effects from Y X at Risk risk measure families.
Merged pull requests:
- New covariance estimators, new matrix processing estimators. (#49) (@dcelisgarza)
- Improve mathematical descriptions in docs. Add power norm x at risk measure, add scenario weights to drawdown risk measures. Add distributionally robust drawdown at risk measure. (#53) (@dcelisgarza)
Closed issues:
- JuliaRegistrator (#50)
v0.11.1
PortfolioOptimisers v0.11.1
Bug fixes
- Fix bug in prices_to_returns when using a benchmark.
Docs
- Docs up to
03_Preprocessing.
Maintenance
- Update pre-commit.
Merged pull requests:
- Fix API bug in prices_to_returns when using a benchmark. Add more docs. (#48) (@dcelisgarza)
v0.11.0
PortfolioOptimisers v0.11.0
Breaking
-
Enable the use of cross validation.
-
Add default fill values to various estimators.
-
Add custom mu override to ArithmeticReturn.
-
Update various function APIs.
-
Add key to buy in threshold and linear constraint estimators which enable a new class of set cardinality constraints.
New features.
-
Add benchmark returns to prices_to_returns.
-
Add squared soc tracking.
-
Add quad tracking to squared and quad risk measure constants.
Bug fixes
-
Fix various type signature bugs.
-
Fix
Adjust_Risk_Contributions.jlconstants. -
Fix API bugs in set group cardinality constraints.
-
Enable set group mip constraints.
Maintenance
-
Start sprucing up asserts.
-
Start adding struct tests.
-
Standardise and use type aliases
-
Simplify assertions.
-
Fix various type instabilities.
-
Add missing functions for
Nothing. -
Enable more Julia magic by broadening type bounds.
-
Add missing unions and functions that should be able to operate on them.
-
Don't remove
rf*kfromretexpression, do it at the level of the objective expression, this is more correct. -
Fix typos.
-
Remove unnecessary functions.
-
Add missing factory functions, eliminate ambiguities.
-
Split format and link checking into separate workflows.
-
Refactor
optimise function andiv` assignment. -
Add `_optimise function to the base optimisation file.
-
Add set group and set cardinality tests.
-
Specify read permission to format check.
Documentation
-
Update docs and arrive at what they should look like, which is
01_Base.jlandBase.md. -
Update npm.
-
Improve doctest setup and filters.
-
Programmatically include all symbols for documentation purposes.
-
Test docs completeness.
Merged pull requests:
- Type aliases, benchmark returns for prices_to_returns, fix set MIP constraint bugs. (#47) (@dcelisgarza)
v0.10.0
PortfolioOptimisers v0.10.0
Breaking changes
- Change ltd covariance name to its full description, increase test coverage.
Bug fixes
-
Fix various typing bugs.
-
Fix bug where provided weights are not passed to argument in entropy pooling.
-
Fix
group_to_val!to enable its use in nested clustered optimisations. -
Add missing factory functions for dimensionality reduction regression.
-
Fix when using weights in dimensionality reduction regression.
Documentation
- Fix contents in documentation.
Maintenance
-
Remove dead code.
-
Make some functions private.
-
Add missing convenience function, increase coverage.
-
Optimise code.
-
Replace throws with argcheck.
-
Make all argument checks more explicit.
Merged pull requests:
- Incremental improvements. (#34) (@dcelisgarza)