Working with One-Way Turnover Constraints Using PortfolioCVaR Object
One-way turnover constraints are optional constraints (see One-way Turnover Constraints) that enforce upper bounds on net purchases or
net sales. One-way turnover constraints can be set using the PortfolioCVaR
object or the setOneWayTurnover
function. One-way turnover constraints depend upon an
initial or current portfolio, which is assumed to be zero if not set when the turnover
constraints are set. One-way turnover constraints have properties
BuyTurnover
, for the upper bound on net purchases,
SellTurnover
, for the upper bound on net sales, and
InitPort
, for the portfolio against which turnover is computed.
Setting One-Way Turnover Constraints Using the PortfolioCVaR
Function
The Properties for the one-way turnover constraints are set using the PortfolioCVaR
object. Suppose that
you have an initial portfolio with 10 assets in a variable x0
and
you want to ensure that turnover on purchases is no more than 30% and turnover on
sales is no more than 20% of the initial portfolio. To set these turnover
constraints:
x0 = [ 0.12; 0.09; 0.08; 0.07; 0.1; 0.1; 0.15; 0.11; 0.08; 0.1 ]; p = PortfolioCVaR('BuyTurnover', 0.3, 'SellTurnover', 0.2, 'InitPort', x0); disp(p.NumAssets) disp(p.BuyTurnover) disp(p.SellTurnover) disp(p.InitPort)
10 0.3000 0.2000 0.1200 0.0900 0.0800 0.0700 0.1000 0.1000 0.1500 0.1100 0.0800 0.1000
If the NumAssets
or InitPort
properties are
not set before or when the turnover constraint is set, various rules are applied to
assign default values to these properties (see Setting Up an Initial or Current Portfolio).
Setting Turnover Constraints Using the setOneWayTurnover
Function
You can also set properties for portfolio turnover using setOneWayTurnover
to specify to the
upper bounds for turnover on purchases (BuyTurnover
) and sales
(SellTurnover
) and an initial portfolio. Suppose that you
have an initial portfolio of 10 assets in a variable x0
and want
to ensure that turnover on purchases is no more than 30% and that turnover on sales
is no more than 20% of the initial portfolio. Given a
PortfolioCVaR
object p
, use setOneWayTurnover
to set the
turnover constraints with and without the initial portfolio being set
previously:
x0 = [ 0.12; 0.09; 0.08; 0.07; 0.1; 0.1; 0.15; 0.11; 0.08; 0.1 ];
p = PortfolioCVaR('InitPort', x0);
p = setOneWayTurnover(p, 0.3, 0.2);
disp(p.NumAssets)
disp(p.BuyTurnover)
disp(p.SellTurnover)
disp(p.InitPort)
10 0.3000 0.2000 0.1200 0.0900 0.0800 0.0700 0.1000 0.1000 0.1500 0.1100 0.0800 0.1000
x0 = [ 0.12; 0.09; 0.08; 0.07; 0.1; 0.1; 0.15; 0.11; 0.08; 0.1 ]; p = PortfolioCVaR; p = setOneWayTurnover(p, 0.3, 0.2, x0); disp(p.NumAssets) disp(p.BuyTurnover) disp(p.SellTurnover) disp(p.InitPort)
10 0.3000 0.2000 0.1200 0.0900 0.0800 0.0700 0.1000 0.1000 0.1500 0.1100 0.0800 0.1000
setOneWayTurnover
implements scalar
expansion on the argument for the initial portfolio. If the
NumAssets
property is already set in the
PortfolioCVaR
object, a scalar argument for
InitPort
expands to have the same value across all
dimensions. In addition, setOneWayTurnover
lets you specify
NumAssets
as an optional argument. To remove one-way turnover
from your PortfolioCVaR
object, use the PortfolioCVaR
object or setOneWayTurnover
with empty inputs
for the properties to be cleared.
See Also
PortfolioCVaR
| setDefaultConstraints
| setBounds
| setBudget
| setConditionalBudget
| setGroups
| setGroupRatio
| setEquality
| setInequality
| setTurnover
| setOneWayTurnover
Related Examples
- Creating the PortfolioCVaR Object
- Working with CVaR Portfolio Constraints Using Defaults
- Validate the CVaR Portfolio Problem
- Estimate Efficient Portfolios for Entire Frontier for PortfolioCVaR Object
- Estimate Efficient Frontiers for PortfolioCVaR Object
- Asset Returns and Scenarios Using PortfolioCVaR Object
- Hedging Using CVaR Portfolio Optimization
- Compute Maximum Reward-to-Risk Ratio for CVaR Portfolio