Portfolios and linear programming 3
Toy Model
For the toy model we will use the portfolio example from Chapter 5: Modelling with linear programming.
| Stocks | Return(%) | Risk |
|---|---|---|
| MARCH Holdings | 8 | 0 |
| MAY Resources | 10 | 6 |
| June Automotive | 14 | 10 |
The portfolio has a total of $250,000. The goal is to allocate the money in the above categories so as to:
- The average risk factor should be no greater than 5.
- At least one fourth of the total portfolio is allocated to March Holdings.
- At least one fourth of the total portfolio is allocated to May Resources.
- Maximize returns based on above constraints
Writing the Toy Model as a linear programming problem
Optimization equation:
Constraints:
First Dictionary:
Last Dictionary:
LINDO OUTPUT:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 8.000000 6.000000 4.000000
X2 10.000000 1.600000 INFINITY
X3 14.000000 INFINITY 2.666667
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 250000.000000 INFINITY 75000.000000
3 0.000000 375000.000000 875000.000000
4 -62500.000000 INFINITY 37500.000000
5 -62500.000000 62500.000000 93750.000000
The Dual Problem
Dual Problem:
Minimize
s.t.
last dictionary:
Then the optimal value is 2650000, and
And the dual solution matches the primal solution
LINDO OUTPUT:
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 -250000.000000 75000.000000 INFINITY
X3 62500.000000 37500.000000 INFINITY
X4 62500.000000 93750.000000 62500.000000
X2 0.000000 875000.000000 375000.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 -8.000000 4.000000 6.000000
3 -10.000000 INFINITY 1.600000
4 -14.000000 2.666667 INFINITY
Interpretation of the solution
From the last dictionary we conclude that the optimal portfolio should consist of $100,000 in March Holdings, $62,500 in May Resources, and $87,500 in June Automotive. The optimal return is 2,650,000/250,000 which is 10.6%, at the maximum risk level of 5. From the sensitivity analysis, we can see that X1 and X2 are allowed to be increased by 6 and 1.6 respectively without changing the composition of our portfolio. For the RHS range, X5 and X7 are allowed to be increased by 375000 and 62500 respectively without changing the optimal solution for the dual problem.
The Dual's objective function is the From the LINDO output we can see that the sensitivity analysis for the decision variables in the primal matches the allowable range for the RHS of the constraints in the dual, and the converse is also true.
The constraint output information includes dual prices. For example, the dual price for the first constraint is 11. This means that if $250,000 could be raised to $250,001, the objective function would increase by 11. Also, note the third constraint shows no reduced cost - that is because there is slack of $62,500 in this constraint so we would not want to raise the upper bound from $62,500 to $62,501 since we aren't investing in this optimal solution.
The objective function ranges give us the sensitivity analysis for the objective function coefficients. For example, the current solution of X1=$100,000, X2=$62,500 and X3=$87,500 remains the optimal solution as long as X1's return remains between 4 and 14, X2's return remains below 11.6 and X3 remains above 11.3.
The right hand side ranges give us the sensitivity analysis for the constraint equations. Essentially, as long as the right hand side values remain within the lower and upper limits shown, the dual prices are constant and may be interpreted.
Compute the actual solution
Selection of Stocks
| Variable | Stock Name | Yield | Risk | Volatility |
|---|---|---|---|---|
| ABF Hong Kong Bond ETF | 6.93% | 3 | 9.77 | |
| ABF Pan Asia Bond Index | 7.45% | 1 | 8.90 | |
| ABF Singapore Bond Index | 5.89% | 5 | 10.21 | |
| AdvisorShares Global Echo ETF | 7.27% | 3 | 7.79 | |
| AdvisorShares Madrona Domestic ETF | 10.88% | 5 | 9.30 | |
| AdvisorShares Peritus High Yield ETF | 11.06% | 5 | 8.98 | |
| AlphaClone Alternative Alpha ETF | 15.81% | 5 | 11.95 | |
| ALPS Equal Sector Weight ETF | 9.08% | 2 | 8.13 | |
| Amundi ETF CAC 40 C | 16.51% | 3 | 11.65 | |
| Arrow Dow Jones Global Yield ETF | 8.78% | 5 | 10.41 | |
| Barclays ETF S&P VEQTOR | 2.60% | 3 | 8.29 | |
| BLDRS Asia 50 ADR ETF | 16.90% | 4 | 9.87 | |
| BMO Canadian Divident ETF | -1.66% | 3 | 9.46 | |
| BMO China Equity ETF | 24.82% | 3 | 13.60 | |
| BMO equal weight REITs ETF | 2.66% | 2 | 12.10 |
Objective Function:
Constraints:
1. We set the the average risk level to be no greater than 3. 2. To diversify risks, we set the the maximum percentage of the portfolio invested in a single fund to 20%. 3. The total investment adds up to 100%.
4.
We set the average volatility of the portfolio to be no greater than 10.
Solutions
Global optimal solution found. Objective value: 14.35916 Infeasibilities: 0.000000 Total solver iterations: 5 Elapsed runtime seconds: 0.11
Model Class: LP
Total variables: 15 Nonlinear variables: 0 Integer variables: 0
Total constraints: 19 Nonlinear constraints: 0
Total nonzeros: 69 Nonlinear nonzeros: 0
Variable Value Reduced Cost
X1 0.000000 4.547011
X2 0.3837638E-01 0.000000
X3 0.000000 8.462860
X4 0.2000000 0.000000
X5 0.000000 0.1877214
X6 0.3837638E-01 0.000000
X7 0.000000 3.201052
X8 0.2000000 0.000000
X9 0.1232472 0.000000
X10 0.000000 6.108284
X11 0.000000 4.914871
X12 0.2000000 0.000000
X13 0.000000 12.30710
X14 0.2000000 0.000000
X15 0.000000 14.20575
Row Slack or Surplus Dual Price
1 14.35916 1.000000
2 0.000000 0.8489576
3 0.2000000 0.000000
4 0.1616236 0.000000
5 0.2000000 0.000000
6 0.000000 1.093690
7 0.2000000 0.000000
8 0.1616236 0.000000
9 0.2000000 0.000000
10 0.000000 2.842426
11 0.7675277E-01 0.000000
12 0.2000000 0.000000
13 0.2000000 0.000000
14 0.000000 4.306319
15 0.2000000 0.000000
16 0.000000 3.089613
17 0.2000000 0.000000
18 0.000000 12.09275
19 0.000000 2.677122