Skip to content

Releases: dcelisgarza/PortfolioOptimisers.jl

v0.16.0

05 Mar 11:26
665b2ab

Choose a tag to compare

PortfolioOptimisers v0.16.0

Diff since v0.15.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.factory nil-dereference fix when pr === 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 folds
  • is_time_dependent / update_time_dependent_estimator hooks for time-varying constraints
  • Index-window (VecInt) parameter on SimpleExpectedReturns and GeneralCovariance for sub-period estimation
  • returns_result_view on ReturnsResult for 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:

  • New feature: Cross Validation. (#38)
  • New feature: Non-hierarchical clustering. (#39)
  • Cross validation: Walk forward. (#43)
  • Cross validation: Multiple randomised. (#44)
  • Cross validation: Combinatorial. (#45)

v0.15.0

04 Feb 21:27
282a539

Choose a tag to compare

PortfolioOptimisers v0.15.0

Diff since v0.14.2

Breaking changes

  • NOCTracking -> L1Tracking.

  • SOCTracking -> L2Tracking.

  • SquaredSOCTracking -> SquaredL2Tracking.

New features

  • Lp via LpRegularisation and LInf regularisation which respectively use the p- and inf-norm to penalise the objective function.

  • Lp and LInf tracking algorithms via LpTracking and LInfTracking which 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

29 Jan 10:09
717758b

Choose a tag to compare

PortfolioOptimisers v0.14.2

Diff since v0.14.1

Bug fixes

  • Fixed a critical bug where HighOrderPrior was 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, and AbstractDenoiseEstimator

  • 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! with sort in 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

25 Jan 00:01
70610a5

Choose a tag to compare

PortfolioOptimisers v0.14.1

Diff since v0.14.0

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

23 Jan 23:52
44e76bf

Choose a tag to compare

PortfolioOptimisers v0.14.0

Diff since v0.13.0

Breaking changes

  • detone -> dt, denoise -> dn

  • plg -> pl

  • cent -> ct

  • ne -> nt

  • nt -> pl

  • pe -> pl

  • JuMPOptimiser pe -> pr

  • pe -> pr for all optimisers

  • pe -> pr for all optimisers

  • cle -> clr for all optimisers

  • BuyInThreshold -> Threshold

  • BuyInThresholdEstimator -> ThresholdEstimator

  • te -> tr

  • EQ -> ==

  • LEQ -> <=

  • GEQ -> >=

  • BrownianDistanceVariance alg -> 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

12 Jan 17:59

Choose a tag to compare

PortfolioOptimisers v0.13.0

Diff since v0.12.1

Breaking Changes

Parameter Renames (consistency and brevity)

  • scesca, sceiscai, sceoscao (scalariser variants)
  • executorex
  • targettgt
  • thresholdt

Type Renames

  • ClusteringEstimatorClustersEstimator
  • EllipseUncertaintySetAlgorithmEllipsoidalUncertaintySetAlgorithm
  • UniformlyDistributedBoundsUniformValues and simplified type hierarchy
  • KellyReturnLogarithmicReturn
  • Optimization result types made consistent

New features

  • Cholesky caching: Added chol field 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 using to 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

23 Dec 14:39
c25ab95

Choose a tag to compare

PortfolioOptimisers v0.12.1

Diff since v0.11.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

05 Dec 23:10
6ee4bee

Choose a tag to compare

PortfolioOptimisers v0.11.1

Diff since v0.11.0

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

04 Dec 13:58
21a9639

Choose a tag to compare

PortfolioOptimisers v0.11.0

Diff since v0.10.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.jl constants.

  • 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*k from ret expression, 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 and iv` 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.jl and Base.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

03 Nov 01:56
6db2f0b

Choose a tag to compare

PortfolioOptimisers v0.10.0

Diff since v0.9.1

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: