Changes in Version 2.1.8 (DA)
  o optimalPortfolio(type = 'erc'): the equal-risk-contribution weights are now
    obtained exactly for the 'none' and 'lo' constraints, by solving
    y_i [Sigma y]_i = 1/N (Spinu, 2013), instead of minimising the squared
    deviations of the risk contributions with a general-purpose optimizer. The
    latter objective is not convex and has local minima on the boundary at which
    entire blocks of assets are assigned a zero weight; those were returned
    silently whenever the correlation matrix had sizeable negative entries.
  o meanEstimation(type = 'bs'): the sample size used in the Bayes-Stein
    shrinkage intensity was the number of assets instead of the number of
    observations, so the estimator did not depend on the length of the sample
    and over-shrunk toward the minimum-variance mean.
  o optimalPortfolio(type = 'maxdec', constraint = 'none') solved the problem
    with the covariance matrix instead of the correlation matrix, and therefore
    returned the minimum-variance portfolio.
  o optimalPortfolio(type = 'mv', constraint = 'none') is now the solution of
    the mean-variance problem under the summability constraint. The weights used
    to be rescaled in a way that cancelled 'gamma' altogether and flipped the
    sign of the portfolio when 1'Sigma^-1 mu was negative.
  o covEstimation(type = 'ewma') is now normalised: the recursion is started at
    zero rather than at the sample covariance matrix, which used to inflate the
    covariance by a factor (1 + lambda^T) -- 30% for T = 20.
  o covEstimation(type = 'large') is an alias of 'lw'. The two estimators were
    numerically identical up to the truncation of the shrinkage intensity to
    [0, 1], which 'large' omitted.
  o optimalPortfolio(type = 'riskeff') works for portfolios of fewer than ten
    assets, and tolerates ties in the semideviations.
  o The convergence status returned by slsqp is now inspected instead of being
    discarded, and the non-convex problems are solved from several starting
    values.
  o The default ctr.slsqp gains ftol_rel = 1e-12. The previous default set only
    xtol_rel = 1e-18, which is below double precision and can never be met, so
    every gross-constrained problem ran to maxeval and reported a non-converged
    status irrespective of whether it had converged. With an attainable
    criterion the mean-variance problem with a gross constraint on 25 assets
    stops after 126 iterations instead of 2000, and the solver's convergence
    status becomes informative. It now applies only to the non-convex problems
    ('erc' under bounds, 'maxdiv' and 'riskeff'), the convex ones having been
    moved to an exact quadratic program.
  o 'gross.c' is validated (it was not, because the test was made on the wrong
    variable), 'lambda' is validated, 'K' required to be a positive
    integer, and the dimensions of 'mu' and 'semiDev' are checked against Sigma.
  o optimalPortfolio(type = 'invvol') projects its weights onto 'LB'/'UB' when
    they bind, with a warning, instead of returning weights that violate them.
  o 'LB' and 'UB' are validated whenever they are supplied, not only under the
    'user' constraint: they are passed to the optimizer under 'gross' as well,
    and bounds incompatible with the summability constraint are now rejected.
  o The starting value is projected onto the bounds, so a feasible problem such
    as constraint = 'gross' with LB = c(0.9, 0, 0, 0) no longer fails outright
    because the equally-weighted default violates them.
  o The returned weights are projected onto {LB <= w <= UB, w'1 = 1} rather than
    clipped and rescaled, which could push a weight back outside the bounds it
    had just been clipped into.
  o The default risk aversion is 0.89, as documented (it was 0.8773).
  o covEstimation(type = 'const' / 'diag') works for a single asset. The factor
    estimator still requires at least three assets, as factanal() does.
  o The equal-risk-contribution solver now measures convergence on its defining
    condition, y_i [Sigma y]_i = 1/N, relative to that target, and warns if it
    is not met. It previously stopped on the size of the last step, normalised
    by the largest component of y, and gave up after a thousand sweeps: on
    ill-conditioned covariance matrices -- about 1% of ordinary sample
    covariance matrices -- it returned risk contributions differing by several
    percentage points without any indication, and on the worst cases it was
    less accurate than the optimizer it replaced.
  o The gross exposure of the returned weights is verified, and the starting
    value is required to respect the gross budget. A truncated optimization
    could otherwise hand back a portfolio violating gross.c.
  o meanEstimation() and semidevEstimation() accept lambda = 1 again, the
    no-decay limit that gives equal weights; 2.1.8-dev had wrongly excluded it
    for all three estimators, although only the ewma covariance divides by
    1 - lambda^T.
  o The returns matrix is validated: non-finite entries used to propagate
    silently into an all-NA covariance matrix and on into the optimizers.
    optimalPortfolio() likewise requires finite Sigma, mu and semiDev, and
    invvol requires strictly positive variances instead of returning NaN.
  o 'gamma' must be a single positive number, as documented.
  o Documentation: the risk-efficient portfolio's stabilizing bounds of
    1/(2N) and 2/N are now documented, including the fact that they apply
    under every constraint and make gross.c inoperative for that portfolio;
    the invertibility of the shrinkage estimators is no longer overstated;
    the ewma formula and its prose agree; the plain-text rendering of the
    risk-efficient objective divides rather than multiplies; the JOSS
    reference is corrected to 2(10), 171.
  o Every supplied bound now enters the optimization. 'LB'/'UB' passed together
    with constraint = 'lo' or 'none' used to be left out of the quadratic
    program and applied afterwards by projecting its solution onto the box,
    which restores feasibility but does not minimise the objective: minimum
    variance on diag(1, 4, 9) with UB = c(.4, .8, .8) returned variance
    1.210779 where the bounded program gives 1.156923.
  o The mean-variance, minimum-variance and maximum-decorrelation portfolios
    under the 'gross' constraint are now solved exactly as quadratic programs,
    by splitting w into positive and negative parts so that the gross budget
    becomes linear. They were handed to a nonlinear optimizer that had no
    attainable stopping criterion on them, and stopped up to 1e-6 short of the
    optimum after exhausting its evaluation budget.
  o Sigma is required to be positive semidefinite. An indefinite matrix used to
    be accepted, so that 'minimum variance' was reported for a problem whose
    objective is unbounded below.
  o The maximum-diversification portfolio is refused when Sigma is singular and
    nothing bounds the weights: the diversification ratio has no maximum there,
    and the optimizer used to return weights of order 1e5 without saying so.
  o covEstimation(type = 'lw' / 'large') reports the degenerate case in which
    the equally-weighted market factor has zero variance, instead of returning
    NaN off-diagonal entries. covEstimation(type = 'const' / 'cor') likewise
    reports assets with zero variance rather than returning NA/NaN.
  o The Bayes-Stein estimators state their T > N requirement and report a
    singular sample covariance matrix in their own terms instead of passing on
    a LAPACK message.
  o The ewma semideviation weights are computed on the log scale, rebased on
    the newest selected observation: lambda^T underflowed to zero on a long
    sample and the selected weights then normalised to 0/0.
  o 'semiDev' must be non-negative.
  o CITATION uses bibentry(); MASS removed from Imports; documentation fixes.

Changes in Version 2.1.7 (DA)
  o Doc fixes

Changes in Version 2.1.6 (DA)
  o Update references
  
Changes in Version 2.1.5 (DA)
  o Update references
  o DOI fixed
  
Changes in Version 2.1.4 (DA)
  o Fix description and citation

Changes in Version 2.1.3 (DA)
  o Fix description and citation

Changes in Version 2.1.2 (DA)
  o References updated

Changes in Version 2.1.2 (DA)
  o Gradient added
  o Max decorrelation portfolio added

Changes in Version 2.1.0 (DA)
  o CRAN release
  o documentation updated
  o THANKS file added

Changes in Version 2.00.11 (DA)
  o Documentation improved and finalized

Changes in Version 2.00.10 (DA)
  o LB and UB added properly
  o doc modified

Changes in Version 2.00.09 (DA)
  o dataset added
  o doc RiskPortfolios added

Changes in Version 2.00.08 (DA)
  o tests added
  o doc fixed
  o positivity fixed

Changes in Version 2.00.07 (DA)
  o Roxygen documentation
  o testthat added

Changes in Version 2.00.06 (DA)
  o update CITATION

Changes in Version 2.00.05 (DA)
  o update informations and references

Changes in Version 2.00.04 (DA)
  o serveral error fixes
  o new Imports instead of Depends

Changes in Version 2.00.03 (DA)
  o erc initialized at 1/sigma normlized

Changes in Version 2.00.02 (DA)
  o w0 starting value can now be passed in controls
  o references updated

Changes in Version 2.00.01 (DA)
  o Renaming of the package with emphasis of risk-based portfolios
  o Added inverse volatility portfolio

Changes in Version 1.02.02 (DA)
  o DESCRIPTION file adapted to new standard

Changes in Version 1.02.01 (DA)
  o major revision of the package

Changes in Version 1.01.02 (DA)
  o bug fixd thanks to Samo Pahor

Changes in Version 1.01.01 (DA)
  o package's name
  o package's version

Changes in Version 1-00.01 (DA)
  o first release