主要内容

资产回报和使用PortfolioCVaR对象的场景

随机优化的工作原理

投资组合的CVaR是一种条件预期。(关于CVaR函数的定义,请参见风险代理)。因此,CVaR投资组合优化问题是一个随机优化问题。给定一个情景样本,定义投资组合样本CVaR的条件期望可以表示为有限和,即损失的加权平均值。损失的权重取决于它们的相对规模;对于置信水平α,只有最差的(1−α) x 100%损失得到正权。作为投资组合权重的函数,投资组合的CVaR是一个凸函数(见[48],[49]Rockafellar & Uryasev at投资组合优化).它也是一个非光滑函数,但随着样本量的增加,它的边缘不那么锋利。

CVaR投资组合优化问题(参见Rockafellar & Uryasev的[48]、[49])的一些重新公式会导致线性规划问题,该问题可以用标准线性规划技术或随机规划求解器解决。的PortfolioCVaR对象并不以这种方式重新表述问题。的PortfolioCVaR对象将CVaR作为一个非线性函数计算。CVaR的凸性,作为组合权重和钝边的函数,当场景数量很大时,使得CVaR组合优化问题是可处理的,在实践中,对于某些非线性规划求解器,如fmincon从优化工具箱™。这个问题也可以用切割平面的方法解决(见凯利[45])投资组合优化).有关更多信息,请参见的算法部分setSolver.以了解更多关于工作流的信息PortfolioCVaR对象,看到对象工作流

什么是场景?

由于有条件的风险价值投资组合优化与资产回报场景一起执行优化,因此存在几种方法来指定和模拟场景。在CVaR投资组合优化的许多应用中,资产收益可能具有明显的非正态概率分布,包括多种模式,收益的装箱、分布的截断等等。在其他应用中,资产收益被建模为各种模拟方法的结果,这些方法可能包括蒙特卡罗模拟、准随机模拟等等。通常,风险因素的潜在概率分布可能是多元正态的,但由此产生的转换足够非线性,从而导致明显的非正态资产回报。

例如,这发生在债券和衍生品上。对于违约概率非零的债券,这种情况可能包括资产回报率为−100%(表示违约)和略高于−100%(表示回收率)的值。

虽然PortfolioCVaR对象具有从数据或时刻模拟多元正常场景的函数(simulateNormalScenariosByData而且simulateNormalScenariosByMoments),通常的方法是直接从自己的模拟函数指定场景。这些场景直接以矩阵的形式输入,矩阵的每一行都有一个资产的样本,矩阵的每一列都有一个资产的样本。CVaR投资组合优化工具的体系结构通过函数句柄引用场景,因此已经设置的场景不能作为属性直接访问PortfolioCVaR对象。

使用PortfolioCVaR设置操作场景

假设你有一个场景矩阵AssetScenarios变量。场景设置通过PortfolioCVaR对象:

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(“场景”, AssetScenarios);disp (p.NumAssets) disp (p.NumScenarios)
20000年4

注意PortfolioCVaR对象确定并固定中的资产数量NumAssets和场景的数量NumScenarios根据场景矩阵。方法可以更改场景的数量PortfolioCVaR对象,使用不同的场景矩阵。然而,一旦NumAssets属性已在对象中设置,您不能输入具有不同数量资产的场景矩阵。的getScenarios函数允许您从PortfolioCVaR对象。您还可以使用。获取您的场景的平均值和协方差estimateScenarioMoments

控件中指向场景的函数句柄,尽管不推荐普通用户使用,但还是存在一种恢复场景的替代方法PortfolioCVaR对象。访问部分或所有场景PortfolioCVaR对象,即隐藏属性localScenarioHandle是一个函数句柄,它指向一个函数以获取已设置的场景。直接从PortfolioCVaR对象p,使用

scenario = p.localScenarioHandle([], []);
并从行中获得场景的子集startrowendrow,使用
scenario = p.localScenarioHandle(startrow, endrow);
在哪里1startrowendrownumScenarios

设置场景使用setscenario命令

您还可以使用setScenarios.例如,给定变量中资产收益的均值和协方差而且C,资产矩属性可设置:

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); disp(p.NumAssets) disp(p.NumScenarios)
20000年4

估计情景的均值和协方差

estimateScenarioMoments函数得到a中情景的均值和协方差的估计值PortfolioCVaR对象。

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); [mean, covar] = estimateScenarioMoments(p)
均值= 0.0043 0.0085 0.0098 0.0153 covar = 0.0005 0.0003 0.0002 0.0000 0.0003 0.0024 0.0017 0.0010 0.0002 0.0017 0.0049 0.0029 0.0000 0.0010 0.0029 0.0102

模拟正常场景

为方便起见,这两个函数(simulateNormalScenariosByData而且simulateNormalScenariosByMoments)的存在是为了从数据或时刻模拟场景,假设它们以多元正态随机资产收益的形式分布。

从收益或价格模拟正常情况

给定回报或价格数据,使用函数simulateNormalScenariosByData模拟多元正常场景。无论是回报还是价格都被存储为矩阵,其中样本在行中向下,资产在列中跨越。此外,退货或价格可以存储在表格时间表(见从时间序列数据模拟正常场景).举例说明simulateNormalScenariosByData,根据变量中资产收益的均值和协方差,生成四种资产的120个资产收益观察值的随机样本而且Cportsim.的默认行为portsim创建具有与输入力矩相同的估计平均值和协方差的模拟数据而且C.除了返回系列创建的portsim在变量中X,在变量中创建一个价格序列Y

M = [0.0042;0.0083;0.01;0.15);C = [0.005333 0.00034 0.00016 0;0.00034 0.002408 0.0017 0.000992;0.00016 0.0017 0.0048 0.0028;0 0.000992 0.0028 0.010208];X = portsim(m', C, 120);Y = ret2tick(X);

请注意

投资组合优化要求你使用总回报,而不仅仅是价格回报。"回报"应该是总回报"价格"应该是总回报价格。

给定变量中的资产收益和价格X而且Y从上面,这一系列示例演示了模拟多元正常场景的等价方法PortfolioCVaR对象。假设一个PortfolioCVaR中创建的对象p用的是资产收益X使用simulateNormalScenariosByData

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, X, 20000);[passetmean, passetcovar] = estimatescenarimoments (p)
passsetmean = 0.0043 0.0083 0.0102 0.1507 passetcovar = 0.0053 0.0003 0.0002 0.0000 0.0003 0.0024 0.0017 0.0010 0.0002 0.0017 0.0049 0.0028 0.0000 0.0010 0.0028 0.0101
您从这个模拟中获得的矩可能与这里列出的矩不同,因为这些场景是来自估计的输入收益的多元正态概率分布的随机样本X

的默认行为simulateNormalScenariosByData就是处理资产回报。相反,如果你把资产价格作为变量YsimulateNormalScenariosByData接受名称-值对参数名称“DataFormat”对应的值设置为“价格”表示函数的输入是资产价格的形式,而不是回报(函数的默认值“DataFormat”参数是“返回”).中资产价格数据的场景YPortfolioCVaR对象

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, Y, 20000,“dataformat”“价格”);[passetmean, passetcovar] = estimatescenarimoments (p)
Passetmean = 0.0043 0.0084 0.0094 0.1490 passetcovar = 0.0054 0.0004 0.0001 -0.0000 0.0004 0.0024 0.0016 0.0009 0.0001 0.0016 0.0048 0.0028 -0.0000 0.0009 0.0100

模拟数据缺失的正常场景

通常在处理多个资产时,您会丢失由返回或价格数据中的值。虽然多元正态回归详细介绍了缺失数据的回归simulateNormalScenariosByData函数具有名称-值对参数名“MissingData”它用一个布尔值指示是否使用“金融工具箱”™缺少的数据功能。的默认值。“MissingData”去掉了所有的样本值。然而,如果“MissingData”设置为真正的simulateNormalScenariosByData使用ECM算法估计资产矩。这个例子展示了它如何在缺少值的价格数据上工作:

M = [0.0042;0.0083;0.01;0.15);C = [0.005333 0.00034 0.00016 0;0.00034 0.002408 0.0017 0.000992;0.00016 0.0017 0.0048 0.0028;0 0.000992 0.0028 0.010208];X = portsim(m', C, 120);Y = ret2tick(X); Y(1:20,1) = NaN; Y(1:12,4) = NaN;

注意上面的价格Y在第一个和第四个系列中缺少值。

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, Y, 20000,“dataformat”“价格”);q = PortfolioCVaR;q = simulateNormalScenariosByData(q, Y, 20000,“dataformat”“价格”“missingdata”,真正的);[passetmean, passetcovar] = estimatescenarioments (p) [qassetmean, qassetcovar] = estimatescenarioments (q)
passetcovar = 0.0020 0.0074 0.0078 0.1476 passetcovar = 0.0055 0.0003 -0.0001 -0.0003 0.0003 0.0024 0.0019 0.0012 -0.0001 0.0019 0.0050 0.0028 -0.0003 0.000003 0.0028 0.0101 qassetmean = 0.0024 0.0085 0.0106 0.1482 qassetcovar = 0.0071 0.0004 -0.0001 -0.0004 -0.0004 0.0032 0.0022 0.0012 -0.0001 0.0022 0.0063 0.0034 -0.0004 0.0012 0.0034 0.0127
第一个PortfolioCVaR对象,p的价格数据中获得的场景Y在哪里值将被丢弃,而第二个PortfolioCVaR对象,的价格数据中获得的场景Y它容纳缺失的值。每次运行这个例子,都会得到不同的力矩估计值p而且

从时间序列数据模拟正常场景

simulateNormalScenariosByData函数隐式地处理数据矩阵或数组中的数据表格时间表对象,使用相同的规则确定数据是返回值还是价格。为了说明这一点,请使用array2timetable为14个资产创建时间表CAPMuniverse并使用时间表来模拟PortfolioCVaR的场景。

负载CAPMuniverse时间= datetime(日期,“ConvertFrom”“datenum”);stockTT = array2时间表(数据,“RowTimes”、时间、“VariableNames”、资产);stockTT。属性请注意,google丢失了数据,因为它在2004年8月之前没有上市头(stockTT, 5)
描述:" UserData: [] DimensionNames: {'Time' 'Variables'} VariableNames: {'AAPL' 'AMZN' 'CSCO' 'DELL' 'EBAY' 'GOOG' 'HPQ' 'IBM' 'INTC' 'MSFT' 'ORCL' 'YHOO' 'MARKET' 'CASH'} variabledescription: {} VariableUnits: {} variablecontinity: [] RowTimes: [1471×1 datetime] StartTime: 03- january -2000 SampleRate: NaN TimeStep: NaN CustomProperties:没有设置自定义属性。使用addprop和rmprop修改CustomProperties。ans = 5×14时间表时间apple amazon cisco戴尔EBAY google hp IBM intel microsoft ORCL yahoo市场现金  ___________ _________ _________ _________ _________ _________ ____ _________ _________ _________ _________ _________ _________ _________ __________ 03 - 1月- 2000年南0.03244 0.075368 0.05698 0.088805 0.1742 0.008775 -0.002353 0.12829 -0.001627 0.054078 0.097784 -0.012143 0.00020522 04 -简- 2000 -0.084331 -0.08324 -0.067368 -0.075613 -0.033966 -0.046667 -0.033802 -0.0883 -0.05608 -0.08353 -0.093805南-0.03166 0.00020339 05-一月-2000 0.014634 -0.14877 -0.003039 0.070984 0.066875 NaN -0.006356 0.03516 0.008199 0.010567 -0.052837 -0.073363 0.011443 0.00020376 06-一月-2000 -0.086538 -0.060072 - 0.016672 -0.038847 -0.012302 NaN -0.063688 -0.017241 -0.05824 -0.033477 -0.058824 -0.10307 0.011743 0.00020266 07-一月-2000 0.047368 0.061013 0.0587 -0.037708 -0.000964 NaN 0.028416 -0.004386 0.04127 0.076771 0.10609 0.02393 0.00020157

使用“MissingData”的选项,以解释缺失的数据。

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, stockTT, 20000,“missingdata”,真正的);[passetmean, passetcovar] = estimatescenarimoments (p)
passetmean = 0.0012 0.0007 -0.0005 -0.0000 0.0016 0.0043 -0.0001 0.0000 0.0001 -0.0002 0.0000 0.0004 0.0001 0.0001 passetcovar = 0.0013 0.0005 0.0006 0.0005 0.0006 0.0003 0.0005 0.0003 0.0006 0.0004 0.0005 0.0006 0.0002 -0.0000 0.0005 0.0024 0.0007 0.0005 0.0010 0.0005 0.0005 0.0003 0.0006 0.0004 0.0006 0.0011 0.0002 -0.0000 0.0006 0.0007 0.0013 0.0006 0.0007 0.0004 0.0006 0.0004 0.0008 0.0005 0.0008 0.0008 0.0002 -0.0000 0.0005 0.0005 0.0006 0.0009 0.0006 0.0002 0.0005 0.0003 0.0006 0.00040.0005 0.0006 0.0006 0.0010 0.0007 0.0006 0.0018 0.0007 0.0005 0.0003 0.0006 0.0005 0.0007 0.0011 0.0002 -0.0000 0.0003 0.0003 0.0005 0.0004 0.0003 0.0011 0.0002 -0.0000 0.0003 0.0005 0.0005 0.0003 0.0003 0.0006 0.0003 0.0003 0.0003 0.0003 0.0003 0.0004 0.0002 0.000000 0.0006 0.0006 0.0004 0.0005 0.0005 0.0011 0.0005 0.0007 0.0007 0.0002 -0.0000 0.0005 0.0003 0.0003 0.0006 0.0004 0.0004 0.0005 0.0005 0.0007 0.00070.0007 0.0002 -0.0000 0.0004 0.0004 0.0005 0.0004 0.0005 0.0002 0.0003 0.0002 0.0005 0.0006 0.0004 0.0005 0.0002 -0.0000 0.0005 0.0006 0.0008 0.0005 0.0007 0.0003 0.0005 0.0004 0.0007 0.0004 0.0014 0.0007 0.0002 -0.0000 0.0006 0.0011 0.0008 0.0006 0.0011 0.0011 0.0006 0.0004 0.0007 0.0005 0.0007 0.0020 0.0002 -0.0000 0.0002 0.0002 0.0002 0.0002 0.0002 0.0001 0.0002 0.0002 0.0002 0.0002 0.0002 0.0002 0.0001 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000

使用名称-值输入“DataFormat”处理退货或价格数据“MissingData”忽略或使用缺少值的样本。此外,simulateNormalScenariosByData对象中提取资产名称或标识符表格时间表如果这个论证“GetAssetList”设置为真正的(默认值为).如果“GetAssetList”值是真正的,标识符用于设置AssetList的属性PortfolioCVaR对象。这样,重复形成了PortfolioCVaR对象p从前面的例子中“GetAssetList”标志设置为真正的从时间表对象中提取列名:

p = simulateNormalScenariosByData(p, stockTT, 20000,“missingdata”,真的,“GetAssetList”,真正的);disp (p.AssetList)
' apple ' ' amzn ' ' csco ' ' dell ' ' ebay ' ' goog ' ' hpq ' ' ibm ' ' intc ' ' msft ' ' orcl ' ' yhoo ' ' market ' ' cash '

如果你设置“GetAssetList”标志设置为真正的输入数据在一个矩阵中,simulateNormalScenariosByData使用默认的标记方案setAssetList如在建立资产标识符列表

用均值和协方差模拟正常情况

给定资产收益的均值和协方差,使用simulateNormalScenariosByMoments函数模拟多元正常场景。均值可以是行向量也可以是列向量,协方差矩阵必须是对称的正半定矩阵。适用于标量展开的各种规则。举例说明simulateNormalScenariosByMoments从那些时刻开始而且C并生成20,000个场景:

M = [0.0042;0.0083;0.01;0.15);C = [0.005333 0.00034 0.00016 0;0.00034 0.002408 0.0017 0.000992;0.00016 0.0017 0.0048 0.0028;0 0.000992 0.0028 0.010208];p = PortfolioCVaR;p = simulateNormalScenariosByMoments(p, m, C, 20000); [passetmean, passetcovar] = estimateScenarioMoments(p)
passsetmean = 0.0049 0.0083 0.0101 0.1503 passetcovar = 0.0053 0.0003 0.0002 -0.0000 0.0003 0.0024 0.0017 0.0010 0.0002 0.0017 0.0047 0.0028 -0.0000 0.0010 0.0028 0.0101

simulateNormalScenariosByMoments对资产收益矩的参数进行标量展开。如果NumAssets尚未设置时,标量参数将被解释为带有NumAssets设置为1simulateNormalScenariosByMoments提供一个额外的可选参数,用于指定资产的数量,以便使用正确的资产数量进行标量展开。此外,如果为资产收益的协方差输入标量或向量,则形成一个对角线矩阵,使标量沿对角线展开,而向量成为对角线。

另请参阅

||||||

相关的例子

更多关于

外部网站