Changes in version 1.06 (2013-04-22):

NEW FEATURES

    o   There is a new constraint argument called 'min.weight.thresh'.
        This gives the minimum weight allowed in a long-only portfolio
	for assets that are in the portfolio.  It can only be a 
        single number, and it is ignored for long-short portfolios.

    o   Cumulative returns are now available in 'valuation'.  That is,
        returns relative to the first time point rather than the
        immediately preceding time.

    o   'update' for random portfolio objects can take the argument
        'trade.optimizer=TRUE' to get an optimized portfolio for the
        problem.  Likewise, say 'random.portfolio=TRUE' in 'update'
        on an optimized portfolio object to get random portfolios.

CHANGES

    o   The result of 'trade.distance' now has an 'asset.count'
        attribute that gives the number of assets unique to each 
        portfolio and the number common to both.

    o   'randport.eval' is now faster (by evading a lot of redundant 
        calculation).

    o   'valuation' for random portfolios is sped up (computations 
        moved to C) in some cases.

    o   Default names of expected returns and variances now start at 1 
        rather than 0.

    o   False progress in optimization (no real change but the objective 
        is smaller due to numerical error) is now detected.

    o   Random portfolio objects gain a 'trade.portfolio' attribute 
        that allows 'randport.eval' not to have to guess about the 
        default value of the 'out.trade' argument.

    o   Various minor improvements in error handling and warning.

    o   Prices can now be an 'xts' or 'zoo' object without becoming 
        troublesome.

BUG FIXES

    o   When 'turnover' was specified to have a minimum value but no 
        actual maximum constraint, no turnover constraint was imposed.

    o   'valuation' had problems in some cases creating returns when 
        the prices had only 2 time points.

    o   'randport.eval' less frequently gets the utility wrong when
        the optimization problem is less than obvious.

    o   'trade.distance' could give a bogus answer when given a list 
        without the proper structure.

    o   Inputs were not checked in 'update' for random portfolios as
        intended.

    o   If an asset had an implicitly forced trade due to its weight in 
        the existing portfolio being too large for the maximum weight, 
        and there was also a forced trade implied by 'positions', then 
        the 'positions' trade was used even if the other one was larger.

    o   'random.portfolio.utility' produced 2 random portfolios when
        only 1 was asked for.

DEPRECATED

    o   The automatic specification of polynomial trading costs --
        that is, multi-column specification of costs with 'cost.par'
        not given -- is deprecated.  



Changes in version 1.05 (2012-06-22):

CHANGES

    o   The 'risk.fraction' argument can now accept a list where each
	component is for a different constraint.  This makes it so a
	three-dimensional array doesn't need to be explicitly created
	when there are multiple risk fraction constraints.

    o   'build.constraints' can now take a list of constraints where
	the assets are not necessarily the same (or in the same order).

BUG FIXES

    o   When forced trades satisfied all the constraints, all random
	portfolios were the same in previous versions -- not very
	random.  

    o   The 'constraints.realized' function has been revised so that
	it properly reports on additional constraints. 

    o   Due essentially to a typo, some portfolio optimizations wasted
	a lot of time.  These were problems where the number of assets
	traded ('ntrade') was restricted to be less than 25.


Changes in version 1.04 (2012-04-17):

BACKWARD COMPATIBILTY ISSUES

    o   The default for 'lin.abs' is now 'TRUE'.  There is a
	warning about this if it could be a problem.

    o   Some components of the output of 'trade.optimizer'
        ('lin.style' and friends) are now in the 'lin.table'
        component.  There is also a new 'dist.table'.

    o   The default value of the 'collapse' argument in 
	'valuation.randportBurSt' has changed from 'FALSE' to
	'FALSE' only if 'prices' is not a matrix (or array).

    o   The default value of 'cash' in 'valuation' has changed
	(to be what was intended but not computed or stated)

    o   The default and optimized portfolio methods of 'valuation'
        failed to respect the 'weight' argument when 'collapse' was 
        'TRUE'.

    o   The default value for 'weight' has changed for the default and 
	optimized portfolio methods of 'valuation', but the default 
	behavior remains the same.

    o   The trade-past-zero feature now only applies to linear
	costs, and so 'doubleconst' is no longer used.

NEW FEATURES

    o   Linear constraints are now available on the fraction
	and value of variance attributed to categories of
	assets (sectors, for example).

    o   There is a variety of risk fraction choices now, including
	the correlation of each asset to the portfolio.

    o   The new argument 'ucost' makes it more convenient to align
	costs with the other parts of the utility.

    o   'cost.par' can now be a matrix where rows correspond to
	assets so that each asset may have its own exponents in
	the trading costs.

    o   The 'valuation' function has been expanded:
        - it will return simple and log returns
        - it allows prices to be a three-dimensional array
        - it will give valuations, weights and returns for
          categories of the assets (sectors, for example)
        - it gains the 'all.assets' argument that allows
          weight vectors that also include assets with zero weight

    o   A namespace has been added to the R package.

CHANGES

    o   The 'sum.weight' argument now allows lower bounds (via a
	two-column matrix) as well as upper bounds.

    o   'timestamp' in the result of 'trade.optimizer' and 
	'random.portfolio' now includes the start time of the
	call as well as the ending time.

    o   the strings given to 'keep' in 'randport.eval' no longer
	need to exactly match the component names on the result
	of 'trade.optimizer' -- they can be abbreviated.

    o   'randport.eval' and 'update.randportBurSt' gain an 'envir'
	argument so gymnastics are no longer necessary when they
	are called from within a function.

    o   'deport' now accepts a file name of zero characters as
	meaning to print to R (or S+).

    o   The 'existing' argument now accepts a random portfolio
	object of length one.

    o   Names now appear on the 'alpha.values' and 'var.values'
	components of the output of 'trade.optimizer'.

    o   The 'seed' argument now accepts a single integer.

    o   'random.portfolio' will now accept 'ntrade=1'.  Previously
	'ntrade' needed to be at least 2 for no apparent reason.

    o   It is now much harder to get in trouble when you have an
	asset with zero variance.

    o   A better error message is now given when short positions
	are forced in a long-only portfolio.

    o   There's a better error message if 'positions' (probably
	unintentionally) forces too many assets into the portfolio.

    o   You'll not care, but 'head' and 'tail' of a random portfolio
	object set the 'funevals' to a missing value.

    o   Various minor improvements in error handling and warnings.

BUG FIXES

    o   Fixed 1.03 bug regarding risk fractions and existing portfolios.

    o   Fixed 1.03 bug of problems when 'trade.optimizer' was called
	from within a function.

    o   Fixed 1.03 bug in which 'summary' could falsely report a
	linear constraint violation (infinite bounds were involved).

    o   Giving non-integer values to 'lower.trade' or 'upper.trade'
	allowed non-integer trading in unintended circumstances.

    o   There was a problem when an exact non-integer forced trade was
	done and 'stringency' was greater than zero.

    o   Fixed a bug (apparently very rare) where a valid random portfolio
	was found, but an invalid one returned.

    o   'randport.eval' failed when the 'control' argument was given in
	the 'random.portfolio' call.

    o   There was a problem with infinite values in 'positions' when
	it had no asset names on it.

    o   A non-tradeable benchmark was not counted in the portfolio value.

    o   The maximum information ratio utility could use the wrong
	variance and/or expected returns in certain circumstances.
	The bug only triggered if there were multiple variances and/or
	expected returns and a single utility value was requested.

    o   Fixed 1.03 buglet where 'print' had all forced trades in
	'forced.explicit' rather than just the explicit ones.

NEW BUGS

    o   'constraints.realized' can be a little confused when evaluated
	with additional linear constraints.


Changes in version 1.03 (2011-04-11):

NEW FEATURES

    o  Added 'risk.fraction' argument which constrains the fraction
       of variance attributed to individual assets.

    o  Added 'bench.weights' argument which specifies the weights 
       of assets in benchmarks.  This is required if there are
       'risk.fraction' constraints involving benchmarks.  But it
       also allows benchmarks to be added automatically to the
       variance and expected returns even if there are no risk
       fraction constraints.
 
CHANGES

    o  There is now a warning if it appears that the variance
       is unreasonably small when the information ratio is 
       being maximized (for instance, if the benchmark can be
       reproduced almost exactly).  The 'do.warn' item to suppress 
       the warning is 'var.eps'.

    o  An error is now thrown if a variance matrix is not symmetric
       since this leads to confusion in the algorithm.

    o  If there is more than one benchmark, then the utilities
       that are created (in 'utable') are now more logical.  The
       former behavior can be recovered by specifying a 'utable'
       argument.

    o  The occurrence of more than one zero in the diagonal of a 
       variance is now a warning rather than an error.  Suppression
       of the warning is with the 'do.warn' item 'zero.variance'.

    o   Various minor improvements in error handling and warnings.

BUG FIXES

    o  Assets that had a forced trade were way too likely to be
       at the value of the forced trade in random portfolios.
       There were some additional changes that might improve the
       uniformity of the generation process.

    o  Thresholding could get confused in an extreme case.

    o  In rare circumstances there was the possibility of a short
       position being allowed in a long-only portfolio (which
       throws an error).

    o  An uninitialized variable problem was found.



Changes in version 1.02 (2010-11-18):

NEW FEATURES

    o  Add weighted sum of squares option for distances.


CHANGES

    o  'valuation.portfolBurSt' and 'valuation.default' now
       work for price matrices.  The 'collapse' argument
       and its relatives have been added to these functions.

    o  'constraints.realized.lin' has better functionality
       in rare circumstances.

    o  benchmark identities are now put on the appropriate
       elements of the output components 'var.values' and
       'alpha.values' of 'trade.optimizer'.


BUG FIXES

    o  An alpha constraint when no variance was given caused
       a system terminating -- fatal error, trivial fix.

    o  There was a bug when a benchmark constraint was imposed
       with a maximum return utility.

    o  Some error messages are improved.

    o  A nicety when 'turnover' is set to zero.



Changes in version 1.01 (2010-05-19):

NEW FEATURES

    o   Distance constraints and utility added to 'random.portfolio' and
        'trade.optimizer'.  This involves a few new arguments.

    o   Related to this 'constraint.realized' now returns a list with
        (possibly) a linear component (what it previously returned) and
        a distance component.  Empty components are not in the return value.

    o   'trade.distance' will now accept a weight vector as one or both
        of the first two arguments if 'scale = "weight"'.


CHANGES

    o   Parameter settings have been changed to possibly slightly speed up 
        the generation of random portfolios.

    o   Various minor improvements in error handling and warning.


BUG FIXES

    o   'update.randportBurSt' could fail trying to check input when it
        didn't have the input.

    o   Some C code fixes to avoid possible rare errors and stupidities.

