主要内容

验证CVaR投资组合问题

有时,您可能希望验证投资组合优化问题的输入或输出。尽管发生在问题设置阶段的大多数错误检查都捕获了投资组合优化问题的大多数困难,但验证CVaR投资组合集和投资组合的过程是耗时的,并且最好离线完成。因此,投资组合优化工具具有专门的功能来验证CVaR投资组合集和投资组合。获取有关使用时工作流的信息PortfolioCVaR对象,看到对象工作流

验证CVaR投资组合集

由于CVaR投资组合集必须是一个非空的、封闭的、有界的集才能有一个有效的投资组合优化问题,因此estimateBounds函数让您检查您的投资组合集,以确定它是否为非空,如果非空,则确定它是否有界。假设您有以下CVaR投资组合集,它是一个空集,因为初始投资组合为0离满足预算和周转约束的投资组合太远了:

p = PortfolioCVaR(“NumAssets”3,“预算”1);p = setTurnover(p, 0.3, 0);

如果CVaR投资组合集为空,estimateBounds返回并设置isbounded旗帜[]

[lb, ub, isbounded] = estimateBounds(p)
lb = NaN NaN NaN ub = NaN NaN isbounded = []

假设您创建了一个无界CVaR投资组合集,如下所示:

p = PortfolioCVaR(“AInequality”, [1 -1;11 . 1“bInequality”, 0);[lb, ub, isbounded] = estimateBounds(p)
lb = -Inf -Inf ub = 1.0e-008 * -0.3712 Inf isbounded = 0
在这种情况下,estimateBounds返回(可能是无限的)边界并设置isbounded旗帜.结果显示哪些资产是无界的,以便您可以在必要时应用有界约束。

最后,假设您创建了一个既非空又有界的CVaR投资组合集。estimateBounds不仅可以验证集合,还可以获得更严格的边界,如果您关心组合集中单个资产的实际投资组合选择范围,这将非常有用:

p = PortfolioCVaR;p = setBudget(p, 1,1);p = setBounds(p, [-0.1;0.2;0.3;0.2], [0.5;0.3;0.9;0.8]);[lb, ub, isbounded] = estimateBounds(p)
Lb = -0.1000 0.2000 0.3000 0.2000 ub = 0.3000 0.3000 0.7000 0.6000 isbounded = 1

在本例中,除第二个资产外,所有资产的上界都比输入上界所暗示的更紧。

验证CVaR投资组合

给定一个CVaR组合集PortfolioCVaR对象时,您通常希望检查特定的投资组合相对于投资组合集是否可行。例如,初始投资组合和从其他程序获得的投资组合都可能发生这种情况。的checkFeasibility函数决定一个组合的集合是否可行。假设您执行以下投资组合优化,并想要确定结果有效的投资组合相对于修改后的问题是否可行。

首先,设置一个问题在PortfolioCVaR对象p,估计有效的投资组合pwgt,然后确认这些组合相对于初始问题是可行的:

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];M = M /12;C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioCVaR; p = setScenarios(p, AssetScenarios); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.95); pwgt = estimateFrontier(p); checkFeasibility(p, pwgt)
Ans = 1 1 1 1 1 1 1 1 1 1 1

接下来,建立一个不同的投资组合问题,从初始问题开始,加上一个额外的周转约束和一个同等权重的初始投资组合:

q = setTurnover(p, 0.3, 0.25);checkFeasibility (q, pwgt)
Ans = 0 0 0 1 1 0 0 0 0 0 0
在这种情况下,来自初始问题的10个有效组合中只有两个相对于新问题是可行的PortfolioCVaR对象.解决第二个问题使用checkFeasibility说明了有效的投资组合PortfolioCVaR对象相对于初始问题是可行的:

qwgt = estimateFrontier(q);qwgt checkFeasibility (p)
Ans = 1 1 1 1 1 1 1 1 1 1 1

另请参阅

||

相关的例子

更多关于

外部网站