Postprocessing Results to Set Up Tradable Portfolios
This example shows how to use your results for efficient portfolios or estimates for expected portfolio risks and returns to set up trades to move toward an efficient portfolio. For information on the workflow when using PortfolioCVaR
objects, see PortfolioCVaR Object Workflow.
Suppose that you set up a portfolio optimization problem and obtained portfolios on the efficient frontier. Use the dataset
object to form a blotter that lists your portfolios with the names for each asset. For example, suppose that you want to obtain five portfolios along the efficient frontier. You can set up a blotter with weights multiplied by 100 to view the allocations for each portfolio:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = PortfolioCVaR; p = setAssetList(p, 'Bonds','Large-Cap Equities','Small-Cap Equities','Emerging Equities'); p = setInitPort(p, pwgt0); p = simulateNormalScenariosByMoments(p, m, C, 20000); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.9); pwgt = estimateFrontier(p, 5); pnames = cell(1,5); for i = 1:5 pnames{i} = sprintf('Port%d',i); end Blotter = dataset([{100*pwgt},pnames],'obsnames',p.AssetList); display(Blotter)
Blotter = Port1 Port2 Port3 Port4 Port5 Bonds 77.826 42.77 7.2095 0 0 Large-Cap Equities 10.549 30.253 50.951 26.764 0 Small-Cap Equities 4.3487 7.1893 9.8049 10.837 0 Emerging Equities 7.2764 19.788 32.034 62.399 100
This result indicates that you would invest primarily in bonds at the minimum-risk/minimum-return end of the efficient frontier (Port1
), and that you would invest completely in emerging equity at the maximum-risk/maximum-return end of the efficient frontier (Port5
). You can also select a particular efficient portfolio, for example, suppose that you want a portfolio with 15% risk and you add purchase and sale weights outputs obtained from the "estimateFrontier" functions to set up a trade blotter:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ]; p = PortfolioCVaR; p = setAssetList(p, 'Bonds','Large-Cap Equities','Small-Cap Equities','Emerging Equities'); p = setInitPort(p, pwgt0); p = simulateNormalScenariosByMoments(p, m, C, 20000); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.9); [pwgt, pbuy, psell] = estimateFrontierByRisk(p, 0.15); Blotter = dataset([{100*[pwgt0, pwgt, pbuy, psell]}, ... {'Initial','Weight', 'Purchases','Sales'}],'obsnames',p.AssetList); display(Blotter)
Blotter = Initial Weight Purchases Sales Bonds 30 21.084 0 8.9159 Large-Cap Equities 30 41.374 11.374 0 Small-Cap Equities 20 9.2259 0 10.774 Emerging Equities 10 28.316 18.316 0
If you have prices for each asset (in this example, they can be ETFs), add them to your blotter and then use the tools of the dataset
object to obtain shares and shares to be traded. For an example, see Asset Allocation Case Study.
See Also
PortfolioCVaR
| estimateScenarioMoments
| checkFeasibility
Topics
- Troubleshooting CVaR Portfolio Optimization Results
- Creating the PortfolioCVaR Object
- Working with CVaR Portfolio Constraints Using Defaults
- Asset Returns and Scenarios Using PortfolioCVaR Object
- Estimate Efficient Portfolios for Entire Frontier for PortfolioCVaR Object
- Estimate Efficient Frontiers for PortfolioCVaR Object
- Hedging Using CVaR Portfolio Optimization
- Compute Maximum Reward-to-Risk Ratio for CVaR Portfolio
- PortfolioCVaR Object
- Portfolio Optimization Theory
- PortfolioCVaR Object Workflow