Advanced Portfolio Analytics Library .NET

Home   >   Information   >   Releases


Current Release Version: 2.14.1

Version 2.14.1 (April 15, 2024)

Additional functionality (total of 15 new functions)...

  • Temporal Aggregation/Disaggregation (7 new functions): apaTemporal.Disaggregation.Fernandez,
    apaTemporal.Disaggregation.Litterman, apaTemporal.Disaggregation.ChowLin,
    apaTemporal.Disaggregation.Diagonal, apaTemporal.Aggregation.Matrix.First, apaTemporal.Aggregation.Matrix, apaTemporal.Aggregation
  • Matrix functions (4 new functions): apaMatrix.Linspace, apaMatrix.Replace.Zeros, apaMatrix.Difference, apaMatrix.Identity
  • Graph Theory (4 new functions): apaGraph.ClosenessCentrality.FromEdges, apaGraph.Centralization.Freeman.FromEdges, apaGraph.ShortestDistances.From, apaGraph.ShortestDistances.All

Changes and enhancements...

  • Introduced new function family apaTemporal, containing functions which relate to data frequency conversion.
  • Renamed apaReturns.TimeAggregation.Continuous to apaTemporal.Aggregation.Returns.Continuous and apaReturns.TimeAggregation.Discrete to apaTemporal.Aggregation.Returns.Discrete
  • Removed unnecessary parameter "IsStochastic" from various apaImputation functions
  • Renamed apaImputation arguments "Matrix" to "DataMatrix"

Version 2.14.0 (March 22, 2024)

Additional functionality (total of 35 new functions)...

  • Empirical Copulas (4 new functions): apaCopula.Empirical.Pdf.Multivariate.Pairs, apaCopula.Empirical.Pdf.Multivariate.Bi, apaCopula.Empirical.Pdf.Multivariate.Uni, apaCopula.Empirical.Resample.Shrink
  • Probability distributions (3 new functions): apaEmpInv, apaNcdf, apaTsim.Multivariate, apaPercentile
  • Mean Variance (3 new functions): apaMeanVariance.Restricted.Unbounded.LinearEqualityConstraints.Axb.Frontier, *.Weights.FromReturn, *.Weights.MVP
  • Matrix Operations (7 new functions): apaMatrix.Select.Cols, apaMatrix.Select.Rows.ByIndex, apaMatrix.Select.Cols.ByIndex, apaMatrix.Numeric.Rows, apaMatrix.Numeric.Cols, apaMatrix.Sums.Cols, apaMatrix.Sums.Rows
  • Imputation (10 new functions): apaImputation.Resample.MVN, apaImputation.Resample.MVN.FromUncondParams, apaImputation.Regress.Linear, apaImputation.Delete, apaImputation.Mean, apaImputation.Last, apaImputation.Next, apaImputation.Interpolate.Linear, apaImputation.Resample.MVT, apaImputation.Resample.MVT.FromUncondParams,
  • Contributions (4 new functions): apaContribution.CDrawdownAtRisk.Numerical, apaContribution.DrawdownAtRisk.Numerical, apaContribution.CVaR.Numerical, apaContribution.VaR.Numerical
  • Risk Measurement (4 new functions): apaVolatilities.MatchObservedVaRs, apaVolatilities.MatchObservedCVaRs, apaMoments.All.Population.ShowStdev, apaMoments.All.Population.ShowVariance

Changes and enhancements...

  • Renamed apaCopula.Empirical.Pdf.Multivariate to apaCopula.Empirical.Pdf.Multivariate.Pairs
  • Modified apaCopula.Empirical.Pdf.Multivariate: now returns the full dependency structure, not just the pairwise (see apaCopula.Empirical.Pdf.Multivariate.Pairs for that)
  • Modified apaCopula.Empirical.Resample: Previously, a "whiggle" ensured that not all observations are exactly on a grid. This was removed, so that low nBins values now show the grid / chessboard pattern. High nBins values hide the grid / chessboard pattern.
  • apaSkewness.Population, apaKurtosis.Population can now process time series matrix data
  • apaAutoCorrel modification: If the input data consists of more than one series, returns autocorrelations for all series. If input data is one series, return autocorrelations and confidence bands as before.
  • Renamed apaVaR.Historical to apaVaR.Empirical, apaCVaR.Historical to apaCVaR.Empirical, apaIVaR.Historical to apaIVaR.Empirical, apaDaR.Historical to apaDaR.Empirical, apaCDaR.Historical to apaCDaR.Empirical, apaShortfallProbability.Historical to apaShortfallProbability.Empirical, apaLongfallProbability.Historical to apaLongfallProbability.Empirical
  • Renamed apaMahalDist to apaDistances.Mahalanobis, apaMahalDist.CriticalValue to apaDistances.Mahalanobis.CriticalValue
  • Introducted three new function families: apaImputation and apaContribution and apaAlgorithm
  • Renamed apaCorrels.Contributions to apaContribution.Correls, apaSkewness.Contributions to apaContribution.Skewness, apaKurtosis.Contributions to apaContribution.Kurtosis
  • Renamed apaVolatility.ExAnte.Contributions.FromCovars to paContribution.Volatility, apaTrackingError.ExAnte.Contributions.ActiveWeightsReturns to apaContribution.TrackingError, apaTrackingError.ExPost.Contributions to apaContribution.TrackingError.VariableWeights, apaCVaR.Modified.ExAnte.Contributions to apaContribution.CVaR.Modified, apaVaR.Modified.ExAnte.Contributions to apaContribution.VaR.Modified, apaSharpeRatio.Contributions.FromCovarsExpRets to apaContribution.SharpeRatio, apaVaR.Normal.ExAnte.Contributions to apaContribution.VaR.Normal, apaCVaR.Normal.ExAnte.Contributions to apaContribution.CVaR.Normal, apaVolatility.ExPost.Contributions to apaContribution.Volatility.VariableWeights
  • Renamed ConvexHull to apaAlgorithm.ConvexHull
  • Retired functions apaTSGetRow, apaTSGet, apaTSGetCol. Excel now has built-in substitutes (like CHOOSE...), there are also interesting functions in function familiy apaMatrix.
  • Retired apaQuantileTable. Is the same as empirial cdfs, empirical copulas.
  • MVRestrUnboundFrontier now handles frontiers based with negative returns of MVP and MSP.
  • apaVaR.Normal.ExAnte.Contributions and apaCVaR.Normal.ExAnte.Contributions report resuls with the proper signs (negative returns with a negative sign, positive return with a positive sign).
  • Transitioning all Normal VaR and CVaR contributions and calcs to population standard deviations, not sample standard deviations anymore.
  • Modified apaEmpCdf apa EmpInv such that they caluclate rank(i)/N, which gives result in the range 1/n to 100%.
  • Retired apaVolatility.ExAnte.Contributions (use apaVolatility.Contributions instead) and apaSharpeRatio.Contributions".FromReturns"
  • Renamed VaR.Historical and CVaR.Historical to VaR.Empirical and CVaR.Empirical

Version 2.13.0 (February 3, 2024)

Implementation of additional functionality (total of 30 new functions)...

  • Mean Variance (11 new functions): apaMeanVariance<...>
  • Matrix (4 new functions): apaMatrix.Reorder.Rows, apaMatrix.Reorder.Cols, apaMatrix.Cumsum.Cols, apaMatrix.Cumsum.Rows
  • Correlations (3 new functions): apaCorrels.Reorder, apaCorrels.SortedBy.Mins, apaCorrels.SortedBy.Maxs
  • Distance Calculations (1 new function): apaDistances.Minkowski
  • Graph Theory (11 new functions): apaGraph.AdjacencyMatrix.FromEdges, apaGraph.AdjacencyMatrix.FromIncidenceMatrix, apaGraph.DegreeCentrality.FromEdges, apaGraph.Edges.FromDistanceMatrix, apaGraph.EigenvectorCentrality.FromEdges, apaGraph.IncidenceMatrix.FromAdjacencyMatrix, apaGraph.MinimumSpanningTree, apaGraph.NeighoursFromEdges, apaGraph.Edges.FromAdjacencyMatrix, apaGraph.Edges.FromIncidenceMatrix, apaGraph.IncidenceMatrix.FromEdges
    The graph functionality will be expanded in future releases. Documentation of the functionality is sparse for the time being, because we expect the functions to change. Please consult the example spreadsheets on how to use the functions above.

Changes and enhancements...

  • Faster apaCorrels.SortedBy.LoadingsPC, apaCorrels.SortedBy.LoadingsPC.Order
  • Retired: apaMeanVariance.Restricted.Unbounded.Coefficients, apaWeights.EVC, apaWeights.EVC.Robust, apaWeights.MD, apaWeights.MVE.Liabtilities.Restricted.RiskTolerance, apaWeights.MVE.Restricted.RiskTolerance, apaWeights.MVE.Unrestricted.RiskTolerance, apaWeights.RB, apaMVE, apaMVE.Resampled, apaMVE.Restricted.MRP.RT, apaMVE.Unrestricted.Coefficients, apaDistanceCorrelation, apaDistanceCorrels, apaDistanceCovariance, apaDistanceCovars, apaDistanceVolatilities, apaDistanceVolatility, apaDistanceVariance, apaDistanceVariances, apaDistanceMatrix
  • Renamed functions...

    apaWeights.MVE.Unrestricted.MSR, apaWeights.MVE.Unrestricted.MVP, apaWeights.MVE.Restricted.MRP, apaWeights.MVE.Restricted.MVP, apaMVE.Unrestricted.Risk.FromReturn, apaMVE.Unrestricted.Return.FromRisk, apaWeights.MVE.Unrestricted.ReturnTarget, apaWeights.MVE.Unrestricted.VolaTarget, apaWeights.MVE.Restricted.VolaTarget, apaWeights.MVE.Restricted.MSR, apaWeights.EVC.Robust.FromCovars, apaWeights.MD.Robust.FromCovars, apaWeights.RB.Robust.FromCovars, apaWeights.EVC.FromCovars, apaWeights.MVE.Restricted.RiskTolerance.Resampled, apaCLA, apaCLA.Resampled, apaMVE.Unrestricted.Hyperbola.Center, apaMVE.Unrestricted.Hyperbola.AsymptoteSlope

  • New
    .Restricted.Unbounded.Weights.MSR, .Restricted.Unbounded.Weights.MVP, .Restricted.Bounded.Weights.MRP, .Restricted.Bounded.Weights.MVP, .Restricted.Unbounded.Volatility.FromReturn, .Restricted.Unbounded.Return.FromVolatility, .Restricted.Unbounded.Weights.FromReturn, .Restricted.Unbounded.Weights.FromVolatility, .Restricted.Bounded.Weights.FromVolatility, .Restricted.Bounded.Weights.MSR, .Strategies.RiskParity.Robust.Weights.FromCovars, .Strategies.MostDiversified.Weights.FromCovars, .Strategies.RiskBudgeting.Weights.FromCovars, .Strategies.RiskParity.Weights.FromCovars, .Restricted.Bounded.Weights.FromRiskTolerance.Resampled, .Restricted.Bounded.Frontier, .Restricted.Bounded.Frontier.Resampled, .Restricted.Unbounded.Hyperbola.Center, .Restricted.Unbounded.Hyperbola.Slope

Version 2.12.1 (December 22, 2023)

Implementation of additional functionality (total of 17 new functions)...

  • Generation of random return and volatility vectors (2 new function): apaReturns.Random, apaVolatilites.Random
  • Markov regime switching simulation (4 new functions): apaMarkovRegimeSwitching.Simulation.Assets, apaMarkovRegimeSwitching.Simulation.Portfolio, apaMarkovRegimeSwitching.Simulation.HitRates, apaMarkovRegimeSwitching.Simulation.States
  • Probability distributions (1 new function): apaNpdf.Multivariate
  • Correlations and covariances (5 new functions): apaCorrels.FromVecl, apaCorrels.FromVech, apaCorrel.ExpWeighted, apaCovar.ExpWeighted, apaCorrels.ExpWeighted
  • Matrix functions (3 new functions): apaMatrix.FromVec, apaMatrix.FromVeh, apaMatrix.FromVecl
  • Return calculation (1 new function): apaReturns.Mean.Arithmetic
  • Volatility calculations (1 new function): apaVolatilities.ExpWeighted

Changes and enhancements...

  • Renamed apaReturns.Cumulative.Discrete to apaReturns.Cumulative.Geometric, Renamed apaReturns.Cumulative.Continuous to apaReturns.Cumulative.Arithmetic, apaReturns.Averages.Continuous.ExpWeight to apaReturns.Means.ExpWeighted, Renamed apaReturns.Averages.Continuous to apaReturns.Means.Arithmetic, apaReturns.Averages.Discrete to apaReturns.Means.Geometric
  • Renamed apaCovars.ExpWeight to apaCovars.ExpWeighted
  • Renamed apaVolatility.ExAnte.Contributions.ExpWeight to apaVolatility.ExAnte.Contributions.ExpWeighted
  • Retired apaReturn.Average.Continuous, apaReturn.Average.Continuous.ExpWeighted
  • Retired apaCorrel.ExpWeighted.Dispersion, apaCorrel.ExpWeight.Average
  • Renamed apaBeta.ExpWeight to apaBeta.ExpWeighted

Version 2.12.0 (December 14, 2023)

Implementation of additional functionality (total of 9 new functions)...

  • Matrices, PCA (1 new function): apaEigenvalues.Diagonal
  • Probability Distributions (1 new function): apaEmpCdf.ConfidenceBands
  • Correlations (7 new functions): apaCorrels.Block.Replace, apaCorrels.Shift, apaCorrels.Block.Build.Equi, apaCorrels.Block.Averages, apaCorrels.Block.Set, apaCorrels.Tranform.FromReal, apaCorrels.Transform.ToReal

Changes and enhancements...

  • apaCorrels.Block.Combine (formerly apaCorrels.Block.Add, enhanced options)
  • apaCorrels.Analyze (distinguishes valid/invalid and problematic/unproblematic, more explicit information)
  • apaCorrels.IsValid (more robust to extreme input data)
  • apaCorrels.Shrink (any correlation coefficient can be a target, targets now specified as numbers)
  • apaCorrels.Const was renamed to apaCorrels.Equi
  • Rrenamed apaCorrel.Min, .Max, .Average, .Dispersion to apaCorrels.<xyz> 
  • Retired some correlation functions which had time series data as input parameters (redundant, because time series can always be converted to correlations; but not vice versa)
  • Various minor tweaks, more function and parameter descrptions visible in Excell's function editor.

Version 2.11.0 (November 16, 2023)

Implementation of additional functionality (total of 21 new functions)...

  • Matrices, Data Management (2 new functions): apaMatrix.Select.Rows, apaMatrix.Select.Rows.NA
  • Conditional Correlation Coefficient Data (8 new functions): apaCorrel.Conditional.Quantile.Joint.Lower.Data, apaCorrel.Conditional.Quantile.Joint.Upper.Data, apaCorrel.Conditional.Quantile.Lower.Data, apaCorrel.Conditional.Quantile.Upper.Data, apaCorrel.Conditional.Box.In.Data, apaCorrel.Conditional.Box.In.Joint.Data, apaCorrel.Conditional.Box.Out.Data, apaCorrel.Conditional.Box.Out.Joint.Data
  • Piecewise Linear Regression Analysis (5 new functions): apaPiecewiseRegression.X, apaPiecewiseRegression.B, apaPiecewiseRegression.R2, apaPiecewiseRegression.Yhat, apaPiecewiseRegression.Res
  • Diversification Charts (6 new functions): apaDiversificationChart.Volatility, apaDiversificationChart.CVar, apaDiversificationChart.Skew, apaDiversificationChart.Kurt, apaDiversificationChart.MaxDrawdown, apaDiversificationChart.MedianDrawdown

Changes and enhancements...

  • Retired function apaVolatilites.FromCovar (wrong spelling, use apaVolatilities.FromCovar indsted) and apaVolatility (is the univariate version of multivariate apaVolatilities, so use apaVolatilities insted)
  • apaVolatility.FromCovars and apaVolatility.FromReturns can now process several portfolios, not just one.
  • Various minor enhancements and fixes.

Version 2.10.0 (April 26, 2023)

Implementation of additional functionality (total of 28 new functions)...

  • Conditional Correlation Analysis (16 new functions): apaCorrels.Conditional.Mean.Joint, apaCorrels.Conditional.Sigma.Joint, apaCorrels.Conditional.Mean, apaCorrels.Conditional.Sigma, apaCorrels.Conditional.Mean.Joint.Lower, apaCorrels.Conditional.Sigma.Joint.Lower, apaCorrels.Conditional.Mean.Lower, apaCorrels.Conditional.Sigma.Lower, apaCorrels.Conditional.Box, apaCorrels.Conditional.Box.Joint, apaCorrels.Conditional.Box.In, apaCorrels.Conditional.Box.In.Joint, apaCorrels.Conditional.Box.Out, apaCorrels.Conditional.Box.Out.Joint, apaCorrels.Conditional.Quantile, apaCorrels.Conditional.Quantile.Lower, apaCorrels.Conditional.Quantile.Joint, apaCorrels.Conditional.Quantile.Joint.Lower
  • Gerber Statistic (2 new functions): apaCorrel.Gerber, apaCorrel.Gerber.Modified, apaCorrels.Gerber.Modified, apaCorrels.Gerber.Table, apaCorrels.Gerber, apaCorrels.Gerber.Altered, apaCorrel.Gerber.Altered
  • Concentration Measurement (2 new functions): apaHerfindahlIndex, apaHerfindahlIndex.Normalized
  • Mathematical Functions (4 new functions): apaLogisticFunction, apaLogisticFunction.Inverse, apaLogisticFunction.FirstDerivative, apaLogisticFunction.FirstAntiderivative
  • Risk Visualisation (2 new functions): apaCone.Polynomial, apaCone.Linear
  • Linear Algebra (2 new functions): apaMatrix.Scalar.Mult.OffMajDiag, apaMatrix.Scalar.Mult.MajDiag
  • Machine Learning, Artificial Intelligence, Data Sciences Methods (1 new function): apaHPFilter.Boosted

Changes and enhancements...

  • Renamed apaCorrels.Partial.Quantile and apaCorrels.ArithmeticMean to apaCorrels.Conditional.Quantile and apaCorrels.Conditional.Mean.
  • Renamed Gerber functions such that they can be integreated with the functions groups apaCorrel.<xyz> and apaCorrels.<xyz>. Affected functions are apaGerberStatistic, apaGerberStatistic.Modified, apaGerberStatistic.Matrix and apaGerberStatistic.
  • Conditional correlation functions have slightly modified methodology: now based on percentage ranks, not estimated empirical cdf anymore. Minor impact on calculation results.
  • Start of implementation of help texts in the Excel function editor: short description of function and variables will be made available for more functions with this and every future release.
  • Start of implementation of a new online-based help system, which is supposed to replace the PDF manual at one point.
  • Various minor enhancements and fixes.

Version 2.9 (December 21, 2022)

Implementation of additional functionality (total of 70 new functions)...

  • Correlation Analysis (5 new functions): apaCorrels.Group.Select, apaCorrels.NonGroup.Select, apaCorrels.Add.LinComb, apaCorrels.MSD, apaCorrels.Kendall
  • Gerber Statistic (4 new functions): apaGerber.Statistic, apaGerber.Statistic.Modified, apaGerber.Table, apaGerber.Matrix
  • Regression Analysis: (7 new functions): apaCorrels.MultipleCorrels, apaOLS.Residuals, apaOLS.Fitted, apaOLS.Parameter.tValue, apaOLS.Parameter.StandardError, apaOLS.Parameter.pValue, apaOLS.Parameter.CriticalValue
  • Singular Spectral Analysis (5 new functions): apaSSA.Components.Forecast, apaSSA.Signal.Forecast, apaSSA.Spectrum.Percent.Cum, apaSSA.Spectrum.Percent,apaSSA.wCorrels
  • Linear Algebra functionality (49 new functions):
    • apaMatrix.Center.Double, apaMatrix.Center.Rows, apaMatrix.Center.Cols, apaMatrix.Standard.Rows, apaMatrix.Standard.Cols, apaMatrix.Normal.Rows, apaMatrix.Normal.Cols
    • apaMatrix.Diagonal.Minor.Put, apaMatrix.Diagonal.Minor.Get, apaMatrix.Diagonal.Major.Nth.Get, apaMatrix.Diagonal.Minor.Nth.Get, apaMatrix.Flip.Cols, apaMatrix.Flip.Rows, apaMatrix.Concatenate.Cols, apaMatrix.Concatenate.Rows, apaMatrix.Diagonal.Major.Get, apaMatrix.Diagonal.Major.Put, apaMatrix.Shift.Pad, apaMatrix.Shift.Circular, apaMatrix.Repeat.Cols, apaMatrix.Repeat.Rows
    • apaMatrix.Averages.Diagonal.Major, apaMatrix.Averages.Diagonal.Minor, apaMatrix.Averages.Cols, apaMatrix.Averages.Rows
    • apaMatrix.Sort.Rows.ByVector.Des, apaMatrix.Sort.Rows.ByVector.Asc, apaMatrix.Sort.Rows.ByFirstColumn.Asc, apaMatrix.Sort.Rows.ByFirstColumn.Des
    • apaMatrix.Toeplitz, apaMatrix.Hankel, apaMatrix.Lagged, apaMatrix.Lagged.Pad
    • apaMatrix.SVD.V, apaMatrix.SVD.U, apaMatrix.SVD.S, apaMatrix.LU.P, apaMatrix.LU.U, apaMatrix.LU.L, apaMatrix.QR.R, apaMatrix.QR.Q
    • apaMatrix.Vec, apaMatrix.Vech, apaMatrix.Vecl
    • apaMatrix.Kron
    • apaMatrix.Trace, apaMatrix.Minors, apaMatrix.Cofactors, apaMatrix.Adjugate

Changes and enhancements...

  • Singular Spectral Analysis: all relevant functions now able to perform multivariate SSA (previously only univariate)
  • apaOLS.Parameter.Evaluation: Standard Error, t-Value, Critical Value, P-Value
  • apaSSA.Spectrum: shows Eigenvalues now (previously Singular values)
  • Renaming of apaMatrix.PseudoInverse to apaMatrix.Inverse.Pseudo
  • Retired apaMatrix.Standardize (now available as apaMatrix.Standard.Cols/Rows)
  • All apaOLS functions can now handle more than one Y variable
  • Several minor bugfixes and performance enhancements

Version 2.8 (February 14, 2022)

Implementation of additional functionality (31 new functions)

  • apaCorrels.SortedBy.LoadingsPC.Order, apaCorrels.SortedBy.LoadingsPC
  • apaCorrels.Blocks, apaCorrels.LeadLag apaCorrels.Drop, apaCorrels.Swap, apaCorrels.Randomise
  • apaCorrels.Mins, apaCorrels.Maxs, apaCorrels.Dispersions, apaCorrels.Averages, apaCorrels.SortedBy.Dispersions, apaCorrels.SortedBy.Averages
  • apaShortfallProb.ConfidenceIntervals
  • apaEigenvalues.Sorted.Percent, apaEigenvalues.Sorted.Percent.Cumulative
  • apaDistances.Correl, apaDistances.Euclidian, apaDistances.Chebyshev, apaDistances.Manhattan
  • apaClustering.Hierarchical.CompleteLinkage, apaClustering.Hierarchical.SingleLinkage, apaClustering.Hierarchical.AverageLinkage
  • apaClustering.Hierarchical.WaterfallAllocation
  • apaClustering.Hierarchical.Dendrogram, apaClustering.Hierarchical.Dendrogram.UnitHeight
  • apaClustering.Hierarchical.CophenticMatrix, apaClustering.Hierarchical.ClusterResultAsMatrix, apaClustering.Hierarchical.ClusterCompositions.Matrix, apaClustering.Hierarchical.ClusterCompositions, apaClustering.Hierarchical.Cophenetic... ...CorrelationCoefficient, apaClustering.Hierarchical.SortCorrsOrDists


  • renamed function apaKMeans to apaClustering.kMeans
  • renamed function to apaShortfall.Historical to apaShortfallProb.Historical
  • renamed function to apaLongfall.Historical to apaLongfallProb.Historical

Version 2.7 (June 14, 2021)

New and updated functionality...

  • new functions apaRating.EndingAllocation, apaRating.TransitionMatrix.Compound
  • new functions apaEigenvalues.Sorted, apaEigenvectors.Sorted
  • new functions apaDistanceVolatilities, apaDistanceVariances, apaDistanceCorrels, apaDistanceCovars, apaDistanceCorrelation, apaDistanceVariance, apaDistanceCovariance, apaDistanceMatrix
  • new functions apaCopula.Empirical.Resample, apaCopula.Empirical.Pdf.Multivariate

Enhancements and changes...

  • apaCopula.Empirical.Pdf and apaQuantileTable (changed output layout, performance enhancements)
  • Various minor optimizations

Version 2.6 (December 17, 2019)

New and updated functionality...

  • new function apaCVaR.Modified(Returns, ConfidenceLevel): Modified CVar based on a return time series.
  • apaMarketData.Yahoo(): retired due to changes on the side of the data provider.

Enhancements and changes...

  • Compatible with .NET framework versions up to 4.6
  • Updates relating to the integration of the function library with Excel
  • Various minor optimizations

Version 2.5 (December 8, 2014)

Implementation of additional functionality (23 new functions)...

  • apaTradeProfile.ConditionalDrawdown(), apaTradeProfile.Drawdown(), apaTradeProfile.CVaR(), apaTradeProfile.VaR(): trade profiles for various loss-based risk measures.
  • apaCorrels.Partial.Quantile(), apaCorrels.Partial.ArithmeticMean(): calculating conditional correlation matrices.
  • apaMean.ConfidenceInternvals(), apaVolatility.ConfidenceIntervals(), apaSkewness.ConfidenceIntervals(), apaKurtosis.ConfidenceIntervals(), apaCorrelation.ConfidenceIntervals(): non-parametric confidence intervals for various risk characteristics based on a resampling/bootstrapping approach.
  • apaCLA.Resample(): resampling efficient frontier portfolios illustrates the stochasic nature of the efficient frontier.
  • apaCauchyInv(), apaCauchyPdf(), apaCauchyCdf(), apaCauchyRnd(), apaCauchySim(): our implementation of the location/scale Cauchy distribution, a distribution with infinite first and second moments.
  • apaUlcerIndex(), apaUlcerPerformanceIndex(): yet another risk measure and risk-asjusted performance measure.
  • apaAbsorptionRatio(): a PCA-based methodology to measure degree of diversification in an asset universe.
  • apaTurbulence(), apaCorrelationSurprise(), apaMagnitudeSurprise(): a turbulence indicator for an asset universe, including a decomposition of contributions from innovations in volatilities and correlations.

Enhancements and changes...

  • apaWealthSimulation(): various enhancements to the wealth simulator, noteably the possibility to model time-varying strategy returns and volatilities.
  • apaCVaR.Historical(), apaCDaR.Historical(): introduction of a smoothing parameter. Also affects trade profile and other functions.
  • Bugfix affecting apaTrnd() and apaTsim().
  • Adjusted percentile calculations in order to handle degenerative inputs. Various functions are affected.

Version 2.4 (December 11, 2013)

Implementation of additional functionality (5 new functions)...

  • apaNIGarg.randomized(), apaNIGsim.randomized(): generate randomized NIG arguments, simulate fom a randomized NIG distribution
  • apaBL.PosteriorReturns.Confidence(), apaBL.ImpliedWeights: Black/Litterman posterior returns with explicit view-specific confidence levels. Black/Litterman "implied weights" analogeous to "implied returns".
  • apaSystem.Deactivate.ComputerName(): deactivate a computer from another computer
  • apaSystem.ComputerName(): name of current computer
  • apaSystem.ComputerName.All(): name of all computers of current license
  • apaMatrix.Inverse(), apaMatrix.PseudoInverse(): inverse and pseudo-inverse of a matrix
  • apaMatrix.Ones(), apaMatrix.Zeros(): generate matrix of ones and zeros.

Enhancements and changes...

  • Introduction of computer names in order to simplify activation of new computers replacing existing ones. IMPORTANT: users will be prompted for a computer name when starting this version of the add-in on already activated computers the first time.
  • All code-related files are now digitally signed. Being a "Trusted Publisher" will contribute to a better installation experience.
  • Calculation of pseudo-inverse in all internal functions, addressing issues related to singular and near-singular matrices.
  • Bugfix apaCorrels.Shrink: "average" target did not work properly.
  • apaBL.<...>: name changes affecting various Black/Litterman functions, various BL functions now accept tau values as arguments.
  • Bugfix apaCorrel.Average: now accepts a correlation matrix as an input, not a return matrix anymore.
  • Bugfix apaWeights.Combinatorial.TwoAssets: missing results on last row under certain cirumstances.
  • Bugfix affecting apaNelsonSiegel.PV and apaNelsonSiegelSvensson.PV
  • Various low-level adjustments affecting calculation speed and robustness of calculations.

Version 2.3 (September 13, 2013)

Implementation of additional functionality (31 new functions)...

  • apaNelsonSiegel.ConstantTau.Estimate(): estimation of the Diebold/Li version of the Nelson/Siegel yield curve model
  • apaNelsonSiegel.ForwardRate(), apaNelsonSiegel.PV(), apaNelsonSiegel.Yield(), apaNelsonSiegel.Estimate(): construction, estimation and valuation functions related to the Nelson/Siegel yield curve model.
  • apaNelsonSiegelSvensson.ForwardRate(), apaNelsonSiegelSvensson.PV(), apaNelsonSiegelSvensson.Yield(), apaNelsonSiegelSvensson.Estimate(): construction, estimation and valuation functions related to the Nelson/Siegel/Svensson yield curve model.
  • apaWeights.MVE.Unrestricted.ReturnTarget(), apaWeights.MVE.Restricted.VolaTarget(): portfolio composition of points on the restricted and unrestricted efficient mean-variance frontiers
  • apaMVE.Unrestricted.Risk.FromReturn(), apaMVE.Unrestricted.Return.FromRisk(): calculation of points on the unrestricted mean-variance efficient frontier
  • apaWeights.MVE.Restricted.MSR(), apaWeights.MVE.Restricted.MSR(): weights of the restricted and unrestricted maxiimum Sharpe Ratio portfolio
  • apaMVE.Unrestricted.Coefficients(), apaMVE.Unrestricted.Hyperbola.Center(), apaMVE.Unrestricted.Hyperbola.AsymptoteSlope(): shape parameters of the unrestricted efficient mean-variance frontier
  • apaNinv(): inverse normal distribution
  • apaUsim.correlated(): Simulate correlated uniform distributions
  • apaNIGsim.correlated(): Simulate correlated NIG distributions
  • apaCFsim.correlated(): Simulate correlated Cornish-Fisher distributions
  • apaCorrels.SpearmanToPearson(), apaCorrels.PearsonToSpearman(): conversions for multivariate normal distributions
  • apaMatrix.Cholesky(): Cholesky decomposition
  • apaSharpeRatio.Contributions.FromCovarsExpRets(): Calculate contributions to portfolio Sharpe Ratio from expected returns and covariances
  • apaNormalMixture.sim.correlation(): simulate correlated two-component Normal Mixture distributions
  • apaNormalMixture.match: Determine two-component Normal Mixture parameters such that the resulting distributions exhibits desired first four moments
  • apaIsValidNIG(): test whether skewness/kurtosis inputs are within feasible range
  • apaCFmom(): moments of the Cornish-Fisher expansion
  • apaCFcal(): calibrate parameters of Cornish-Fisher expension to replicate desired moments
  • apaCVaR.Modified.Moments(): Calculate Modified CVaR from the first four moments
  • apaWLS(): helper function to perform weighted least squares regressions
  • apaManual.Update(): Download of latest PDF manual

Enhancements and changes...

  • apaHistogram(): histogram methodology slightly altered, such that histogram is centered on bin centers
  • apaStatFactorModel...(): Optional flag to force unit component variances
  • apaUPM, apaLPM: enhanced calculation methodology
  • apaReplicateRiskReturn(), apaNIGrnd(): minor bug fixes
  • apaShrinkageEstimator.Returns.JamesStein(): accepts a manual shrinkage factor
  • apaFixedIncome... functions: have been renamed to apaNelsonSiegel... or apaNelsonSiegelSvensson
  • apaMVE.Restricted.MRP.RT(): renamed function for consistency reasons
  • Further alignment of accuracy/performance characteristics between functions, additional functions affected by apaSpeed.Set()
  • PDF manual is now part of the installation package; the latest version is downloaded automatically when updating the add-in automatically.

Version 2.2 (March 25, 2013)

Implementation of additional functionality (8 new functions)...

  • apaCLA(): Critical Line Algorithm (original Markowitz procedure to determine the exact efficient frontier)
  • apaMRP.RT(): risk tolerance of the restricted maximum return portfolio
  • apaWeights.MSR(): Weights of the maximum Sharpe Ratio portfolio
  • apaCorrels.Random(), apaCorrels.Const(): generate correlation matrices with random and constant values
  • apaMatrix.Standardize(): Standardize a time series matrix
  • apaSystem.Deactivate(): Transfer your license from an old computer to a new one
  • apaLicense.UserID(): for users not remembering their user id (because they have too many already)

Enhancements and changes...

  • Various enhancements related to license management, update and similar operational functionality
  • Enhanced algorithms for calculating correlation matrices from inputs/data, rank correlations
  • Further alignment of accuracy/performance characteristics between functions, additional functions affected by apaSpeed.Set()

Version 2.1 (January 30, 2013)

Implementation of additional functionality (19 new functions)...

  • apaMVE(): direct calculation of mean, volatility and composition of portfolios on th mean-variance frontier
  • apaWeights.Combinatorial.TwoAssets(), apaWeights.Combinatorial.EqualWeighted(): helper functions for combinatorical portfolio construction
  • apaTimePoints.FromDates(), apaTimePoints.Rounded(): helper functions to handle conversion of actual dates to time points / time periods for analytical purposes
  • apaReturn.IRR.All(): calculation of all real and imaginary solutions for the internal rate of return problem
  • apaMarketData.Yahoo(): retrieve price/return data from Yahoo Finance
  • apaGainLossSpread(), apaGiniMeanDifference(): alternative risk measures
  • apaCovar.Semi(), apaCovars.Semi(), apaCoLPMs.Asymmetrical.Symmetrized(), apaCoUPMs.Asymmetrical.Symmetrized(): additional partial moment functions
  • apaConditionalSerialCorrelation(), apaBenfordLaw(), apaBiasRatio(): fraud indicators
  • apaActiveShare(): an exposure-based tracking measure
  • apaNormalMixture.StateProbabilities(), apaNormalMixture.States(): additional normal mixture distribution functionality

Enhancements and changes...

  • Fixed a bug affecting the existing asymmetrical LPM/UPM
  • In return calculation formulas, the argument "CFWeights" has been renamed "CFTime"
  • Additional functions are now covered by the speed mode settings, further fine tuning of the speed modes
  • Selected low-level performance enhancements

Version 2.0 (October 11, 2012)

Implementation of additional functionality (9 new functions)...

  • apaCaptureRation.Downside.Continuous(), apaCaptureRation.Downside.Discrete(), apaCaptureRation.Upside.Discrete(), apaCaptureRation.Upside.Continuous() - various capture ratios
  • apaLicense.ExpiryDate(), apaLicense.Puchased(), apaLicense.InUse() - software license helper functions
  • apaMatrix.Rank(), apaMatrix.ConditionNumber() - matrix / linear algebra functionality

Enhancements and changes...

  • Fixed a bug in the installation process which affected automatic updating in certain system environments. IMPORTANT: the fix works on new installations only; existing installations should be 1) uninstalled and 2) all files and folders deleted manually; release 2.0 can then be downloaded and installed.
  • Redesign of the installation wizard such that the same setup file can be used for Excel 32-bit and 64-bit.
  • Introduction of a subscription-based licensing system: New users now purchase the add-in on a one year subscription basis. IMPORTANT: existing users can continue using the add-in and are eligible for all future updates at no additional costs.

Version 1.7 (September 30, 2012)

Implementation of additional functionality (9 new functions)...

  • apaBL.PosteriorReturns(), apaBL.PosteriorReturns.FullConf(), apaBL.ImpliedConfidence(), apaBL.ImpliedReturns(), apaBL.ImpliedWeights() - Blacl/Litterman portfolio construction
  • apaVolatility.ExPost.Contributions(), apaTrackingError.ExPost.Contributions(), apaBeta.ExPost.Contributions() - ex post contributions to various portfolio risk measures
  • apaEntropy.Shannon() - an alternative dispersion measure

Enhancements and changes...

  • Fixed some compatibility issues of version 1.6 with older Excel versions.

Version 1.6 (September 17, 2012)

Implementation of additional functionality (23 new functions)...

  • apaSSA.Signal(), apaSSA.Signal.Redrawn(), apaSSA.Components(), apaSSA.Spectrum() - several methods to conduct singular spectral analysis
  • apaPriceSim.GBM(), apaPriceSim.GARCH11(), apaPriceSim.MN(), apaPriceSim.ARMA22(), apaPriceSim.JDLN - simulation of univaruate price processes; geometric Brownian motion, GARCH(1,1), Mmxed normal, ARMA(2,2) and Jump-Diffusion with lognormally distributed jumps
  • apaPcdf(), apaPpdf(), apaPinv(), apaPrnd(), apaPsim() - implementation of the Poisson distribution
  • apaUsim() - simulation of the uniform distribution, much faster and better than Excel's internal RAND()
  • apaLognormalToNormal.Correlation(), apaLognormalToNormal.Covariance(), apaLognormalToNormal.Volatility(), apaLognormalToNormal.Mean() and apaNormalToLognormal.Correlation(), apaNormalToLognormal.Covariance(), apaNormalToLognormal.Volatility(), apaNormalToLognormal.Mean() - conversion of the first two moments and dependence between the normal and corresponding lognormal distributions

Enhancements and changes...

  • Various minor enhancements affecting all functions or selected function groups

Version 1.5 (May 29, 2012)

Implementation of additional functionality (13 new functions)...

  • apaWeights.RB, apaWeights.RB.FromCovars: Determine composition of the risk budgeting portfolio (i.e. portfolio with risk contributions that correspond to a given risk budget)
  • apaSpeed.Set and apaSpeed.Get: Management of calculation speed and calculation accuracy
  • apaReturn.Contributions: contributions to portrfolio return from portfolio constitutents
  • apaSharpeRatio.Contributions: contributions to Sharpe Ratio from portfolio constitutents
  • apaSharpeRatio.FromConst: calculate portfolio Sharpe Ratio directly from constituent exces returns and constituent weights
  • apaIsValidCF: validates skeweness and kurtosis values for Cornish-Fisher expansion
  • apaKMeans: k-means clustering algorithm
  • apaCorrels.Analyze: analysis of the validity of a correlation matrix
  • apaCorrels.Fixed: Makes a correlation matrix semi-positive definite (Eigenvalue method)
  • apaWeights.MD.FromCovars: Maximum Diversification portfolio from covariances
  • apaWeights.EVC.FromCovars: Equal Risk Contributiuon (Risk Parity) portfolio from covariances

Enhancements and changes...

  • Simplified startup procedure resulting in faster startup times
  • Increased secruity, the add-in only connects to our domain www.andreasssteiner.net
  • More robust determination of maximum diversification and risk partiy portfolios
  • Implemented a workaround for a multi-threading issue in Excel

Version 1.4

Implementation of additional functionality (13 new functions)...

  • apaWeights.MD: determines the Most Diversified portfolio.
  • apaCorrels.Implied: correlation matrix based on implied correlation coefficient,
  • apaCorrel.Implied: Implied correlation coefficient.
  • apaCorrels.IsValid: checks whether a matrix is a valid correlation matrix
  • apaWeights.EVC.Robust: determines the robust risk parity portfolio.
  • apaHPFilter: Hodrick-Prescott filter.
  • apaMACD: Moving Average Convergence Divergence indicator (technical analysis).
  • apaTradeProfile: impact analysis of trades on selected return, risk and risk-adjusted performance measures.
  • apaSharpe.Incremental: incremental asset contributions to portfolio Sharpe Ratio.
  • apaVolatility.Incremental: incremental asset contributions to portfolio volatility.
  • apaTSGetRow: extract a row from a matrix.
  • apaTurnover: calculates tunrover based on changes in precentage allocations
  • apaVolatility.ExAnte.Contributions.FromCovars: ex ante volatility contributions from asset exposures and a covariance matrix.

Enhancements and changes....

  • New argument IsCorrelOtherwiseCovar: All functions related to statistical factor modeling (apaStatFactors...) can now either target the correlation or the covariance matrix.
  • Changed versioning: new format is Major.Minor(.Build)
  • Set user agent to operate the function library / Excel add-in in high security environments.

Version 1.3.4

Implementation of additional functionality (1 new function)...

  • apaWeights.MVE.Liabilities.Restricted.RiskTolerance: constituent weights of a portfolio on the mean-variance-liability efficient frontier,

Enhancements and changes....

  • Web-based activation/licensing system
  • Various minor performance enhancements affecting many functions indirectly

Version 1.3.3

Implementation of additional functionality (7 new functions)...

  • apaWeights.EVC: Weights of the fully invested long-only equal-volatility-contribution portfolio.
  • apaActivePassiveRatio: a portfolio's active-passive ratio
  • apaGARCH11.Volatility.Conditional.Forward: GARCH(1,1) forward volatility
  • apaGARCH11.Volatility.Conditional.ExpectedForward: GARCH(1,1) expected forward volatility
  • apaCorrel.Average: Average correlation coefficient from returns
  • apaCorrel.Dispersion: Dispersion of orrelation coefficient from returns
  • apaCorrels.Dispersion: Dispersion of orrelation coefficient from correlations

Enhancements and changes....

  • Name changes in all GARCh(1,1) functions
  • Changes in GARCH(1,1) methodology: unconditional volatility is now set to the sample volatility of the return time series (volatility targeting)
  • Various minor performance enhancements affecting many functions indirectly
  • Generalized licensing algorithm

Version 1.3.2

Implementation of additional functionality (7 new functions)...

  • apaWealthSimulation: Stochastic wealth simulation that can be used for financial planning purposes or asset/liability management
  • apaSkewness.Contributions: Contributions to portfolio skewness
  • apaKurtosis.Contributions: Contributions to portfolio kurtosis
  • apaCorrels.Contributions: Contributions to correlation
  • apaCFinv, apaCFrnd, apaCFsim: a partial implementation of the distribution based on the Cornish-Fisher Expansion for simulation purposes

Enhancements and changes....

  • Introduction of a setup file, making the activcation process more user friendly
  • apaTSGet() returns a zero value if no numerical values are found in a range

Version 1.3.1

Implementation of additional functionality (3 new functions)...

  • apaStrategy.CPPI: CPPI strategy simulation
  • apaVersion.Current: Latest available version number
  • apaUrnd: Fast generation of a high-quality uniform random number

Enhancements and changes....

  • Automatic version check and download whenever a new release is available
  • Fast and high-quality random number generation with the Multiply-With-Carry method
  • Various numerically intense functions were given an optional DoSwitchOff parameter (e.g. apaVaR.GP)
  • Various numerically intense functions are not calcualted anymore in the Excel function wizard
  • Renamed apaVersion to apaVersion.Installed
  • Various minor performance enhancements affecting several functions

Version 1.3.0

Implementation of additional functionality (28 new function in total)...

  • Automatically resize array formulas such that all results are shown
  • Several functions related to empirical loss analysis (e.g. mean excess loss)
  • Exceedance correlations
  • Empirical tail dependence
  • Generalized Pareto distribution: cdf, pdf, inv, simulation, estimation
  • EVT VaR estimate based on the Generalized Pareto distribution
  • Symetrized Joe-Clayton copula: cdf, pdf, simualtion, estimation
  • Empirical copulas: pdf, cdf
  • Simulation of the independence copula
  • Ichimoku chart
  • Diversification ratio
  • Random allocations with restrictions and bias

Enhancements and changes....

  • Requires the .NET 4.0 framework
  • Returns low-level error messages, not just #VALUE anymore
  • Various performance enhancement
  • Faster and more accurate numerical optimization algorithm (Nelder-Mead)
  • Renamed apaSystemPerformance() to apaSystem.Performance()

Version 1.2.6

Implementation of additional functionality (38 new functions in total)...

  • Expected maximum drawdown of a Geometric Brownian Motion
  • Z-Score, Modified Z-Score
  • Outlier identification with Z-Score and Modified Z-Score
  • Mean Absolute Deviation from Mean, Mean Absolute Deviation from Median
  • Normal Mixture Distributions (two components): Cdf, pdf, maximum likelihood estimation, inv cdf, simulation, theoretical first four moments from distribution arguments
  • Shrinking a valid correlation matrix towards a target (perfect correlation, zero correlation, minimium correlation)
  • Parametric Value-At-Risk from conditional and unconditional GARCH(1,1) volatilities
  • Non-linear serial dependency: autocorrelations calculated with Spearman's rank correlation coefficient
  • Linear Multiple Regression (OLS): parameters, R-squared, adjusted R-squared, t-test and p-values
  • Upper and Lower returns relative to a threshold
  • Chow test for structural breaks
  • Conversion of price series into return time series
  • Resampling from time series with the option to preserve serial dependencies
  • Linear or Non-Linear Dual Alpha / Dual Beta Single-Index Model
  • Logistic distribution: cdf, pdf, inv cdf, moments, arguments from moments
  • Tail risk attribution of Modified Value-At-Risk


  • Various minor changes enhancing stability (Excel crashes due to memory overflows)
  • Different, more mainstream, formula for Clayton copula
  • Renamed BiNormal and BiClayton simulation functions
  • Rolling style analysis: the first n weights are not zero anymore, but N/A

Version 1.2.5

Implementation of additional functionality...

  • Population versions of the third and fourth moment: apaKurtosis.Population, apaSkewness.Population
  • Inverse percentile function: apaPercemtile.Inverse
  • Lower and upper bounds on the entries in a valid correlation matrix: apaCorrels.Bounds


  • Various performance and stability enhancements
  • Adjusted definition of CVaR and CVaG not to include VaR/VaG
  • Introducing the license file
  • Deleted the VaG function because it is redundant
  • Changed CVaR, CDaR functions to accept confidence rather than a threshold
  • Changed Conditiona Sharpe Ratio, Rachev Ratio and Generalized Rachev Ratio functions to accept confidence level rather than a threshold

Version 1.2.4

Implementation of additional functionality...

  • Historical Interim Value-At-Risk
  • Contributions to Ex Ante Tracking Error when asset returns in portfolio and benchmark are identical or different.
  • Loading external CSV files as time series
  • Calculation of all rolling returns with one function call
  • Portfolio kurtosis/skewness from returns or cokurtosis/coskewness matrix
  • Money-Weighted Return (IRR) and Time-Weighted Return (Original Dietz, Modified Dietz)


  • Several functions return #N/A values, which simplifies making charts
  • The XLA component is not needed anymore

Version 1.2.3

Implementation of additional functionality...

  • High quality random number generation with the Mersenne Twister algorithm
  • Function to create unbiased restricted random weight
  • Drawdown-At-Risk/Conditional Drawdown-At-Risk functions
  • System Performance Test function

Version 1.2.2

Implementation of additional functionality...

  • Nelson/Siegel/Svensson yield curve modeling functions
  • Biased and unbiased functions to generate random weights
  • Calculation of the weights of the maximum return portfolio on the mean-variance efficient frontier with inequality constraints on the weights.


  • Performance increase of all functions related to empirical percentiles.
  • Fixed a bug in the functions simulating random distributions (Normal, Multivariate Normal, NIG, T etc.)

Version 1.2.1

Implementation of additional functionality...

  • Student T distribution: cdf, pdf, inv
  • Time aggregation of returns
  • Consolidation of segment data for performance attribution purpose