fork(3) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <iomanip>
  6. #include <tuple>
  7. #include <string>
  8.  
  9. using namespace std;
  10.  
  11. using Portfolio = vector<int>; // weights in percent, size = 6
  12.  
  13. double percentile15(vector<double>& data) {
  14. sort(data.begin(), data.end());
  15. size_t index = static_cast<size_t>(floor(0.15 * data.size()));
  16. if (index >= data.size()) index = data.size() - 1;
  17. return data[index];
  18. }
  19.  
  20. double median(vector<double>& data) {
  21. sort(data.begin(), data.end());
  22. size_t n = data.size();
  23. if (n % 2 == 0)
  24. return (data[n / 2 - 1] + data[n / 2]) / 2.0;
  25. else
  26. return data[n / 2];
  27. }
  28.  
  29. double lumpSumCAGR(const vector<double>& returns) {
  30. double compound = 1.0;
  31. for (double r : returns) {
  32. compound *= (1.0 + r);
  33. }
  34. return pow(compound, 1.0 / returns.size()) - 1.0;
  35. }
  36.  
  37. double portfolioReturn(const vector<vector<double>>& assets, const Portfolio& weights, int year) {
  38. double result = 0.0;
  39. for (int i = 0; i < weights.size(); ++i) {
  40. result += (weights[i] / 100.0) * assets[i][year];
  41. }
  42. return result;
  43. }
  44.  
  45. void generatePortfolios(vector<Portfolio>& portfolios, Portfolio current, int pos, int totalWeight, int maxAssets) {
  46. if (pos == current.size()) {
  47. if (totalWeight == 100) {
  48. int nonZero = count_if(current.begin(), current.end(), [](int w) { return w > 0; });
  49. if (nonZero <= maxAssets) {
  50. portfolios.push_back(current);
  51. }
  52. }
  53. return;
  54. }
  55. for (int w = 0; w <= 100 - totalWeight; w += 10) {//const int step = 10;
  56. current[pos] = w;
  57. generatePortfolios(portfolios, current, pos + 1, totalWeight + w, maxAssets);
  58. }
  59. }
  60.  
  61. int main() {
  62. const int numAssets = 6;
  63. const int maxAssets = 4;
  64.  
  65.  
  66. // Asset names
  67. vector<string> assetNames = {
  68. "scv", "lcg", "em", "reit", "gld" , "eu ltb"
  69. //"scv60Lcg15", "scv95", "vti", "20bal", "33gld", "lcbtiltled"
  70. };
  71.  
  72. // Return data
  73. vector<vector<double>> assets = {
  74.  
  75. {-0.03,0.13,0.06,-0.29,-0.31,0.43,0.46,0.08,0.07,0.21,0.12,0.06,0.31,0.38,0.02,0.31,0.12,-0.08,0.23,0.14,-0.22,0.37,0.24,0.19,-0.02,0.24,0.17,0.31,-0.06,0.02,0.04,0.11,-0.13,0.41,0.17,0.04,0.15,-0.09,-0.32,0.33,0.23,-0.06,0.18,0.32,0.09,-0.06,0.23,0.09,-0.15,0.20,0.03,0.19,-0.16,0.11,0.08},
  76.  
  77.  
  78. {
  79. -0.09, 0.19, 0.18, -0.28, -0.40, 0.24, 0.08, -0.16, -0.02, 0.01,
  80. 0.16, -0.16, 0.20, 0.14, -0.01, 0.30, 0.14, 0.01, 0.07, 0.32,
  81. -0.05, 0.37, 0.03, 0.00, 0.01, 0.34, 0.22, 0.32, 0.43, 0.29,
  82. -0.28, -0.13, -0.24, 0.23, 0.04, 0.02, 0.07, 0.06, -0.39, 0.33,
  83. 0.15, -0.01, 0.15, 0.31, 0.13, 0.03, 0.05, 0.25, -0.04, 0.34,
  84. 0.39, 0.18, -0.35, 0.40, 0.31
  85. },
  86.  
  87. {
  88. -0.17, 0.28, 0.34, -0.18, -0.28, 0.25, 0.04, 0.01, 0.05, 0.06,
  89. -0.04, -0.25, -0.31, 0.12, 0.12, 0.23, 0.11, 0.09, 0.34, 0.55,
  90. -0.16, 0.54, 0.09, 0.68, -0.09, -0.06, 0.03, -0.11, -0.25, 0.59,
  91. -0.31, -0.03, -0.08, 0.53, 0.22, 0.29, 0.29, 0.32, -0.52, 0.72,
  92. 0.18, -0.20, 0.17, -0.02, -0.02, -0.15, 0.10, 0.34, -0.16, 0.16,
  93. 0.16, -0.07, -0.24, 0.09, 0.05
  94. },
  95.  
  96. {
  97. -0.01, 0.10, 0.05, -0.23, -0.30, 0.13, 0.41, 0.14, 0.01, 0.20,
  98. 0.11, -0.02, 0.18, 0.26, 0.16, 0.16, 0.18, -0.08, 0.09, 0.04,
  99. -0.20, 0.32, 0.12, 0.17, 0.00, 0.13, 0.30, 0.19, -0.18, -0.07,
  100. 0.21, 0.12, 0.01, 0.35, 0.27, 0.08, 0.31, -0.19, -0.37, 0.25,
  101. 0.26, 0.05, 0.16, 0.03, 0.28, 0.02, 0.07, 0.03, -0.07, 0.23,
  102. -0.09, 0.33, -0.28, 0.10, 0.06
  103. },
  104.  
  105. {
  106. 0.00, 0.13, 0.42, 0.55, 0.44, -0.26, -0.06, 0.15, 0.25, 1.00,
  107. 0.01, -0.36, 0.13, -0.17, -0.21, 0.04, 0.17, 0.18, -0.17, -0.06,
  108. -0.09, -0.09, -0.07, 0.15, -0.05, 0.00, -0.06, -0.20, -0.03, -0.02,
  109. -0.08, 0.00, 0.21, 0.19, 0.02, 0.13, 0.20, 0.25, 0.02, 0.22,
  110. 0.27, 0.05, 0.07, -0.25, 0.00, -0.12, 0.07, 0.10, -0.03, 0.16,
  111. 0.22, -0.09, -0.06, 0.11, 0.21
  112. },
  113.  
  114. {
  115. -0.02, 0.16, 0.04, -0.04, -0.10, 0.08, -0.05, 0.16, 0.15, -0.10,
  116. -0.16, -0.16, -0.23, 0.09, -0.02, 0.04, 0.43, 0.48, 0.17, -0.02,
  117. -0.02, 0.12, 0.14, -0.02, 0.24, -0.03, 0.24, 0.18, 0.02, 0.22,
  118. -0.24, 0.01, 0.00, 0.28, 0.24, 0.19, -0.04, 0.06, 0.03, 0.04,
  119. 0.05, -0.03, -0.01, 0.17, 0.05, 0.14, -0.08, 0.02, 0.10, -0.04,
  120. 0.11, 0.20, -0.18, -0.41, 0.11, -0.08
  121. }
  122.  
  123.  
  124. // {-0.04,0.14,0.15,-0.14,-0.19,0.26,0.28,0.04,0.08,0.28,0.08,-0.06,0.24,0.22,-0.01,0.26,0.14,-0.02,0.14,0.16,-0.16,0.29,0.15,0.18,-0.03,0.20,0.13,0.20,0.02,0.08,-0.04,0.04,-0.07,0.33,0.12,0.06,0.15,0.01,-0.26,0.31,0.22,-0.03,0.15,0.19,0.08,-0.06,0.16,0.13,-0.11,0.21,0.13,0.12,-0.18,0.15,0.12},
  125. // {-0.03,0.13,0.06,-0.29,-0.31,0.43,0.46,0.08,0.07,0.21,0.12,0.06,0.31,0.38,0.02,0.31,0.12,-0.08,0.23,0.14,-0.22,0.37,0.24,0.19,-0.02,0.24,0.17,0.31,-0.06,0.02,0.04,0.11,-0.13,0.41,0.17,0.04,0.15,-0.09,-0.32,0.33,0.23,-0.06,0.18,0.32,0.09,-0.06,0.23,0.09,-0.15,0.20,0.03,0.19,-0.16,0.11,0.08},
  126. // {-0.02,0.11,0.12,-0.25,-0.36,0.30,0.21,-0.11,-0.01,0.05,0.16,-0.11,0.19,0.19,0.01,0.28,0.15,-0.02,0.12,0.24,-0.10,0.29,0.06,0.08,-0.01,0.34,0.19,0.30,0.24,0.19,-0.13,-0.09,-0.25,0.30,0.08,0.02,0.12,0.01,-0.37,0.26,0.16,-0.02,0.14,0.31,0.12,0.00,0.11,0.19,-0.07,0.28,0.19,0.18,-0.24,0.22,0.20},
  127. // {-0.03,0.15,0.18,-0.07,-0.14,0.12,0.18,0.04,0.07,0.28,0.06,-0.13,0.17,0.13,0.01,0.22,0.18,0.02,0.07,0.14,-0.13,0.23,0.06,0.17,-0.02,0.16,0.12,0.12,0.04,0.07,-0.03,0.01,-0.02,0.29,0.13,0.08,0.17,0.03,-0.23,0.27,0.21,0.02,0.13,0.07,0.12,-0.03,0.09,0.13,-0.08,0.22,0.14,0.11,-0.23,0.16,0.13}, {-0.01,0.11,0.19,0.03,-0.05,0.13,0.23,0.07,0.10,0.44,0.08,-0.13,0.20,0.14,-0.04,0.19,0.16,0.02,0.06,0.08,-0.15,0.17,0.08,0.16,-0.03,0.17,0.11,0.12,0.00,0.02,-0.01,0.02,-0.02,0.30,0.11,0.07,0.19,0.03,-0.21,0.25,0.23,0.00,0.13,0.08,0.09,-0.06,0.13,0.10,-0.08,0.20,0.10,0.11,-0.14,0.11,0.14},
  128. // {-0.03,0.13,0.12,-0.22,-0.30,0.25,0.24,-0.02,0.00,0.07,0.08,-0.09,0.14,0.20,0.07,0.26,0.15,-0.02,0.16,0.24,-0.13,0.33,0.10,0.21,-0.03,0.22,0.16,0.21,0.05,0.15,-0.05,-0.02,-0.12,0.32,0.14,0.08,0.17,0.02,-0.32,0.29,0.17,-0.01,0.14,0.17,0.13,-0.03,0.11,0.16,-0.09,0.23,0.11,0.14,-0.24,0.14,0.11}
  129. //
  130.  
  131.  
  132. };
  133.  
  134. int numYears = assets[0].size();
  135.  
  136. for (int duration = 1; duration <= 31; duration += 1) {
  137. cout << "\n========== Duration: " << duration << " years ==========" << endl;
  138.  
  139. vector<Portfolio> portfolios;
  140. generatePortfolios(portfolios, Portfolio(numAssets, 0), 0, 0, maxAssets);
  141.  
  142. vector<tuple<Portfolio, double, double, double, double>> results;
  143.  
  144. for (const Portfolio& p : portfolios) {
  145. vector<double> cagrList;
  146. for (int start = 0; start <= numYears - duration; ++start) {
  147. vector<double> subReturns;
  148. for (int i = 0; i < duration; ++i) {
  149. subReturns.push_back(portfolioReturn(assets, p, start + i));
  150. }
  151. double cagr = lumpSumCAGR(subReturns);
  152. cagrList.push_back(cagr);
  153. }
  154.  
  155. double p15 = percentile15(cagrList);
  156. double pmin = *min_element(cagrList.begin(), cagrList.end());
  157. double pmax = *max_element(cagrList.begin(), cagrList.end());
  158. double pmed = median(cagrList);
  159.  
  160. results.emplace_back(p, p15, pmin, pmax, pmed);
  161. }
  162.  
  163. sort(results.begin(), results.end(), [](const auto& a, const auto& b) {
  164. return get<1>(a) > get<1>(b);
  165. });
  166.  
  167. cout << fixed << setprecision(2);
  168.  
  169. // Summary table
  170. cout << "\nTop 2 Portfolios Summary (Bottom 15th Percentile CAGR):" << endl;
  171. cout << left << setw(10) << "#" << setw(40) << "Portfolio" << setw(10) << "P15%" << setw(10) << "Min" << setw(10) << "Max" << setw(10) << "Median" << endl;
  172. cout << string(80, '-') << endl;
  173.  
  174. for (int i = 0; i < 2 && i < results.size(); ++i) {
  175. auto [weights, p15, pmin, pmax, pmed] = results[i];
  176. string portStr;
  177. for (int j = 0; j < numAssets; ++j) {
  178. if (weights[j] > 0) {
  179. portStr += assetNames[j] + ":" + to_string(weights[j]) + "% ";
  180. }
  181. }
  182. cout << left << setw(10) << (i + 1) << setw(40) << portStr << setw(10) << p15 * 100 << setw(10) << pmin * 100 << setw(10) << pmax * 100 << setw(10) << pmed * 100 << endl;
  183. }
  184.  
  185. // // Detailed breakdown
  186. // for (int i = 0; i < 2 && i < results.size(); ++i) {
  187. // auto [weights, p15, pmin, pmax, pmed] = results[i];
  188. // cout << "\nPortfolio " << (i + 1) << ":\n";
  189. // cout << left << setw(15) << "Asset" << setw(10) << "Weight\n";
  190. // cout << "-------------------------\n";
  191. // for (int j = 0; j < numAssets; ++j) {
  192. // if (weights[j] > 0) {
  193. // cout << left << setw(15) << assetNames[j] << setw(10) << weights[j] << "\n";
  194. // }
  195. // }
  196. // cout << "-------------------------\n";
  197. // cout << "Bottom 15th % CAGR : " << p15 * 100 << "%\n";
  198. // cout << "Min CAGR : " << pmin * 100 << "%\n";
  199. // cout << "Max CAGR : " << pmax * 100 << "%\n";
  200. // cout << "Median CAGR : " << pmed * 100 << "%\n";
  201. // }
  202. }
  203.  
  204. return 0;
  205. }
  206.  
Success #stdin #stdout 1.33s 5288KB
stdin
Standard input is empty
stdout
========== Duration: 1 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         lcg:20% reit:20% gld:30% eu ltb:30%     -0.10     -19.80    31.20     6.70      
2         lcg:20% reit:30% gld:20% eu ltb:30%     -0.50     -22.00    27.30     8.50      

========== Duration: 2 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:20% lcg:20% reit:30% gld:30%        1.13      -12.71    25.39     7.98      
2         lcg:20% reit:40% gld:40%                0.89      -9.99     27.68     6.45      

========== Duration: 3 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:30% gld:20%                 2.82      -5.77     19.01     8.46      
2         scv:40% lcg:40% gld:20%                 2.79      -7.65     19.56     8.64      

========== Duration: 4 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% gld:30%                 4.67      -0.61     19.10     8.31      
2         scv:60% lcg:10% gld:30%                 4.54      -0.48     21.36     7.60      

========== Duration: 5 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% lcg:20% gld:30% eu ltb:10%      4.63      0.43      17.10     7.65      
2         scv:40% lcg:10% gld:30% eu ltb:20%      4.58      0.36      17.37     6.98      

========== Duration: 6 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:10% gld:30% eu ltb:10%      5.76      2.58      17.02     7.59      
2         scv:50% lcg:20% gld:30%                 5.68      2.86      17.35     7.96      

========== Duration: 7 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% gld:30%                 6.39      4.00      13.46     7.94      
2         scv:40% lcg:20% reit:10% gld:30%        6.30      4.22      13.05     7.71      

========== Duration: 8 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:10% em:10% gld:30%          6.36      3.68      13.40     8.23      
2         scv:40% lcg:20% gld:30% eu ltb:10%      6.35      4.52      11.60     7.54      

========== Duration: 9 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:70% reit:10% gld:20%                7.23      3.98      18.90     8.43      
2         scv:80% gld:20%                         7.05      3.91      19.66     8.59      

========== Duration: 10 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% reit:40% gld:10%                6.89      4.15      16.87     8.64      
2         scv:20% lcg:30% reit:20% gld:30%        6.72      3.09      10.36     7.75      

========== Duration: 11 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% lcg:20% gld:20%                 6.89      2.66      14.98     8.70      
2         scv:40% lcg:30% reit:10% gld:20%        6.86      2.59      12.89     8.50      

========== Duration: 12 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:10% reit:20% gld:20%        6.96      4.38      15.22     8.69      
2         scv:70% reit:20% gld:10%                6.96      4.15      18.13     9.45      

========== Duration: 13 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% lcg:10% reit:20% gld:10%        6.79      5.04      15.00     9.54      
2         scv:50% lcg:10% reit:30% gld:10%        6.68      5.17      14.56     9.16      

========== Duration: 14 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% lcg:30% em:10% gld:20%          7.03      5.56      11.39     7.98      
2         scv:60% lcg:20% gld:20%                 7.01      5.34      13.42     8.99      

========== Duration: 15 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% em:10% gld:20%          7.14      5.10      12.50     8.65      
2         scv:50% lcg:20% reit:10% gld:20%        7.12      5.41      12.88     8.50      

========== Duration: 16 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% em:20% reit:20% gld:10%         7.32      4.15      12.61     8.78      
2         scv:40% em:30% reit:20% gld:10%         7.32      3.84      12.24     8.70      

========== Duration: 17 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% em:30% reit:20% gld:10%         7.45      4.21      12.02     8.36      
2         scv:30% em:30% reit:30% gld:10%         7.42      4.00      11.64     8.19      

========== Duration: 18 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% em:20% reit:10% gld:20%         7.63      5.08      12.20     8.56      
2         scv:20% reit:50% gld:10% eu ltb:20%     7.62      3.94      10.65     8.26      

========== Duration: 19 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% reit:40% gld:10% eu ltb:10%     7.46      5.23      12.44     8.81      
2         scv:40% reit:50% gld:10%                7.43      5.39      12.96     8.73      

========== Duration: 20 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% em:20% reit:20%                 7.57      5.53      14.03     8.80      
2         scv:60% em:20% reit:10% eu ltb:10%      7.55      5.40      13.66     8.65      

========== Duration: 21 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% lcg:10% em:20% reit:30%         7.76      6.25      12.92     8.82      
2         scv:90% lcg:10%                         7.76      5.86      15.48     9.39      

========== Duration: 22 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:40% em:20% reit:30% eu ltb:10%      7.66      6.64      12.96     9.15      
2         scv:60% em:20% reit:20%                 7.60      6.71      14.23     9.49      

========== Duration: 23 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% reit:20% eu ltb:10%     7.57      6.11      13.89     8.63      
2         scv:50% lcg:10% reit:30% eu ltb:10%     7.53      6.46      14.07     8.90      

========== Duration: 24 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% lcg:40%                         7.90      5.73      14.30     8.49      
2         scv:60% lcg:30% reit:10%                7.83      5.99      14.25     8.65      

========== Duration: 25 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% lcg:20% reit:10% eu ltb:10%     8.09      6.00      13.64     9.11      
2         scv:70% lcg:20% eu ltb:10%              8.04      5.97      14.13     9.22      

========== Duration: 26 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% reit:20% eu ltb:10%     8.30      6.22      12.53     9.21      
2         scv:60% lcg:30% eu ltb:10%              8.28      6.32      12.91     9.26      

========== Duration: 27 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:80% lcg:10% reit:10%                8.45      6.34      13.81     9.53      
2         scv:50% lcg:30% reit:10% eu ltb:10%     8.45      6.66      12.15     9.21      

========== Duration: 28 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:50% lcg:20% reit:20% eu ltb:10%     8.75      7.13      11.48     9.15      
2         scv:60% lcg:20% reit:10% eu ltb:10%     8.73      7.16      11.71     9.28      

========== Duration: 29 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:60% lcg:30% em:10%                  8.80      7.33      12.23     9.41      
2         scv:60% lcg:20% em:10% reit:10%         8.79      7.25      12.48     9.41      

========== Duration: 30 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:80% lcg:10% em:10%                  8.54      7.34      13.38     9.88      
2         scv:60% lcg:40%                         8.53      7.82      12.23     9.47      

========== Duration: 31 years ==========

Top 2 Portfolios Summary (Bottom 15th Percentile CAGR):
#         Portfolio                               P15%      Min       Max       Median    
--------------------------------------------------------------------------------
1         scv:80% lcg:20%                         8.69      7.97      13.05     9.64      
2         scv:70% lcg:20% reit:10%                8.66      7.97      12.82     9.56