主要内容

使用portfoliocvar对象的资产返回和方案

随机优化是如何工作的

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

CVaR投资组合优化问题(参见Rockafellar & Uryasev的[48],[49])的重新公式可以得到一个线性规划问题,这个问题可以用标准线性规划技术或随机规划求解器求解。这portfoliocvar.但是,对象不以这种方式重构问题。这portfoliocvar.对象以非线性函数的形式计算CVaR。CVaR的凸性,作为场景数较大时组合权重和钝边的函数,使得CVaR组合优化问题易于处理,在实践中,对于某些非线性规划求解器,如粉刺从优化工具箱™。也可以使用纤维平面方法解决问题(参见Kelley [45]投资组合优化).有关的更多信息,请参见算法部分setSolver.使用时更多地了解工作流程portfoliocvar.对象,看到PortfolioCVaR对象的工作流

什么是情景?

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

例如,这发生在粘合和衍生物中。在具有违约概率的非零概率的粘合的情况下,这种方案可能包括返回的资产返回,即表示默认值,一些值略大于-100%,以指示恢复速率。

虽然portfoliocvar.对象具有从数据或时刻模拟多变量正常场景的函数(simulateNormalScenariosByDatasimulateNormalScenariosByMoments),通常的方法是直接从您自己的模拟函数指定场景。这些场景是作为矩阵直接输入的,矩阵的每一行包含所有资产的样本,矩阵的每一列包含资产的样本。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)
4 20000.

请注意portfoliocvar.对象确定并修复资产的数量NumAssets以及numscenarios.基于方案的矩阵。您可以通过调用来更改场景的数量portfoliocvar.具有不同场景矩阵的对象。但是,一旦NumAssets已在对象中设置了属性,您无法输入具有不同数量的资产的方案矩阵。这GetScenarios.函数允许您从portfoliocvar.对象。您还可以使用以下方法获得场景的均值和协方差estimateScenarioMoments

中指向场景的函数句柄可以恢复场景,尽管不推荐给普通用户使用portfoliocvar.对象。访问部分或所有场景portfoliocvar.对象的隐藏属性localscenariohandle.是一个函数句柄,该函数指向一个获取已设置的场景的函数。直接从aportfoliocvar.目的P.使用

[]: [];
并从行中获取场景的子集startrous.endrow使用
场景= p.localScenarioHandle(startrow, endrow);
在哪里1≤.startrous.≤.endrow≤.numScenarios

使用setScenarios函数设置场景

您还可以使用使用的场景setscenarios.. 例如,给定变量中资产回报的平均值和协方差mC,资产时刻属性可以设置:

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)
4 20000.

估计情景的均值和协方差

estimateScenarioMoments函数用于获得场景中的平均值和协方差的估计值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 0.0002 0.0017 0.0049 0.0029 0.0000 0.0010.0029 0.0102

模拟正常的场景

为方便起见,两个函数(simulateNormalScenariosByDatasimulateNormalScenariosByMoments)的存在是为了在假设数据或时刻分布为多元正态随机资产回报的情况下,从数据或时刻模拟情景。

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

给定返回或价格数据,使用该功能simulateNormalScenariosByData模拟多变量正常场景。无论是回报还是价格都以矩阵的形式存储,每行都是样本,而每列都是资产。此外,退货或价格可以存储在表格时间表(见从时间序列数据模拟正常场景).要使用simulateNormalScenariosByData,根据变量中资产回报的均值和协方差,生成四种资产的120个资产回报观察值的随机样本mCPortsim..默认行为Portsim.使用与输入矩相同的估计平均值和协方差创建模拟数据mC.除了由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);

笔记

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

给定资产回报和价格变量Xy从上面,这一系列的示例演示了模拟变量的多变量正常场景的等效方法portfoliocvar.对象。假设一个portfoliocvar.中创建的对象P.它使用了资产回报X使用simulateNormalScenariosByData

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, X, 20000);[passetmean, passetcovar] = estimatescenariommoments (p)
搬运工= 0.0043 0.0083 0.0102 0.1507乘机= 0.0053 0.0003 0.0002 0.0000 0.0003 0.0024 0.0017 0.000.0002 0.0017 0.00 0.0028 0.0000 0.0010 0.0028 0.0101
您从这个模拟中获得的矩可能与这里列出的矩不同,因为场景是从估计的输入回报的多元正态概率分布中抽取的随机样本X

默认行为simulateNormalScenariosByData是与资产回报合作。相反,您将资产价格与变量相反ysimulateNormalScenariosByData接受一个名称-值对参数名称“DataFormat”具有相应的值设置为“价格”表示函数的输入是以资产价格而不是回报的形式出现的(函数的默认值)“DataFormat”参数是'返回').此示例使用资产价格数据模拟方案y对于portfoliocvar.目的问:

p = PortfolioCVaR;p = simulateNormalScenariosByData(p, Y, 20000,)“dataformat”“价格”);[passetmean, passetcovar] = estimatescenariommoments (p)
传递次级= 0.0043 0.0084 0.0094 0.1490乘机电路= 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.0028 0.0100

模拟具有缺失数据的正常情况

通常在使用多个资产时,您会丢失由在你的回报或价格数据的值。虽然多元正态回归与缺失数据的回归详细说明,simulateNormalScenariosByData函数具有名称值对参数名称'缺失数据'使用布尔值指示是否使用Financial Toolbox™的缺失数据功能。的默认值'缺失数据'移除所有的样本价值观。但是,如果'缺失数据'被设置为真正的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”“价格”'缺失数据', 真的);[传递映射] =估计序列(P)[qassetmean,qassetcovar] =估计脑体(q)
passetmean=0.0020.0074 0.0078 0.1476 passetcovar=0.0055 0.0003-0.0001-0.0003 0.0024 0.0019 0.0012-0.0001 0.0019 0.0050 0.0028-0.0003 0.0012 0.0028 0.0101 qassetmean=0.0024 0.0085 0.0106 0.1482 QassetVar=0.0071 0.0004-0.0004 0.0004-0.0004 0.0032 0.0032 0.0012-0.0014-0.0014
第一个portfoliocvar.对象,P.,包含从中的价格数据获取的场景y在哪里值被丢弃,第二个portfoliocvar.对象,问:,包含从中的价格数据获取的场景y容纳缺失的值。每次运行此示例时,您都会获得不同的估计P.问:

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

simulateNormalScenariosByData函数隐式地处理数据的矩阵或对象中的数据表格时间表对象使用相同的规则来确定数据是返回值还是价格。为了说明这一点,使用array2timetable为14个资产制定时间表大写字母并且使用时间表来模拟Portfoliocvar的方案。

负载大写字母时间= datetime(日期,“ConvertFrom”'数据内容');stockTT = array2timetable(数据,“RowTimes”时间'variablenames'、资产);stockTT。属性请注意,google的数据是缺失的,因为它在2004年8月之前没有上市头(Stocktt,5)
用户数据:[]DimensionNames: {'Time' 'Variables'} VariableNames: {'AAPL' '' AMZN' '' CSCO' '' DELL' '' EBAY' '' '' GOOG' '' HPQ' '' IBM' '' INTC' '' MSFT' 'ORCL' '' 'YHOO' '' MARKET' '' CASH'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowTimes: [1471×1 datetime] StartTime:03-Jan-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.088805 0.1742 0.008775 0.03244 0.075368 0.05698 -0.001627 0.054078 -0.002353 - 0.12829南0.097713 -0.033966 -0.046667 -0.033802 -0.0883 - 0.066868 -0.03166 0.014634 05- 1 -2000 0.014634 - 0.014877 -0.003039 0.070984 - 0.066875 0.03516 0.008199 0.010567 -0.052837 - 0.073337 0.011443 -0.016619-0.038847 -0.012302 NaN -0.063688 -0.017241 -0.05824 -0.033477 -0.058824 -0.10307 0.011743 0.00020266 07-Jan-2000 0.047368 0.061013 0.0587 -0.037708 -0.000964 NaN 0.028416 -0.004386 0.04127 0.013091 0.076771 0.10609 0.02393 0.00020157

使用'缺失数据'Portfoliocvar提供的选项要考虑缺少数据。

p = PortfolioCVaR;p = simulatenormalscenariosbydata(p,Stocktt,20000,'缺失数据',真正的);[passetmean, passetcovar] = estimatescenariommoments (p)
Passetmean = 0.0012 0.0007 -0.0005 -0.0000 0.0016 0.0043 -0.0001 0.00000 0.0001 -0.0002 0.00000 0.0004 0.0001 0.0001 passetcovar = 0.0013 0.0005 0.0006 0.0003 0.0006 0.0004 0.0006 0.0002 -0.0000 0.0005 0.0024 0.0007 0.0005 0.0010 0.0005 0.0003 0.0006 0.0004 0.0006 0.0011 0.0002 -0.0000 0.0006 0.00020.0006 0.0005 0.0003 0.0006 0.0004 0.0005 0.0006 0.0006 0.0006 0.0006 0.0002 - 0.0001 0.0006 0.0006 0.0005 0.0006 0.0002 - 0.0001 0.0006 0.0010 0.0007 0.0006 0.00018 0.0007 0.0005 0.0003 0.0006 0.0005 0.0007 0.0006 0.0005 0.0007 0.00011 0.0002 - 0.0003 0.0005 0.0004 0.0002 0.0007 0.0013 0.0002 0.00020.0003 0.0011 0.0001 -0.0000 0.0005 0.0005 0.0006 0.0005 0.0006 0.0002 0.0010 0.0003 0.0003 0.0005 0.0006 0.0002 -0.0000 0.0003 0.0003 0.0002 0.0003 0.0004 0.0004 0.0002 0.0002 0.0006 0.0006 0.0006 0.0002 0.0005 0.0004 0.0011 0.0006 0.0006 0.0008 0.0006 0.0006 0.0002 0.0005 0.0004 0.00040.0004 0.0005 0.0002 0.0003 0.0002 0.0005 0.0006 0.0006 0.0004 0.0005 0.0004 0.0004 0.0014 0.0007 0.0002 - 0.00011 0.0008 0.0006 0.00011 0.0006 0.00011 0.0006 0.00011 0.0004 0.0005 0.0007 0.0004 0.0020 0.0002 - 0.0002 0.0002 0.0002 0.0002 0.00020.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”处理返回或价格数据和'缺失数据'忽略或使用缺少值的示例。此外,simulateNormalScenariosByData从a中提取资产名称或标识符表格时间表如果是争论“GetAssetList”被设置为真正的(默认值为).如果是“GetAssetList”值是真正的,标识符用于设置assetlist.财产的portfoliocvar.对象。因此,重复的形成portfoliocvar.目的P.从前面的例子“GetAssetList”标志设置为真正的从时间表对象中提取列名:

p = simulatenormalscenariosbydata(p,Stocktt,20000,'缺失数据',真的,“GetAssetList”, 真的);DISP(P.ASSETLIST)
' aapl ' amzn ' ' csco ' ' dell ' ' ebay ' ' goog ' ' hpq ' ' ibm ' ' intc ' ' msft ' ' orcl ' ' yhoo ' ' market ' ' cash '

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

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

给定资产回报的平均值和协方差,使用simulateNormalScenariosByMoments函数模拟多变量正常场景。均值可以是行向量,也可以是列向量,协方差矩阵必须是对称的正半定矩阵。适用于标量展开的各种规则。要使用simulateNormalScenariosByMoments,从瞬间开始mC并生成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)
搬运工= 0.0049 0.0083 0.0101 0.1503乘机= 0.0053 0.0003 0.0002 -0.0000 0.0003 0.0024 0.0010 0.0002 0.0017 0.0010 0.0028 -0.0000 0.0010 0.0028 0.0101

simulateNormalScenariosByMoments在资产返回的时刻对参数执行标量扩展。如果NumAssets尚未设置,标​​量参数被解释为标量NumAssets设置为1simulateNormalScenariosByMoments提供一个附加的可选参数来指定资产的数量,以便标量展开使用正确的资产数量。此外,如果资产收益协方差输入一个标量或向量,则形成一个对角矩阵,其中一个标量沿对角线展开,一个向量成为对角线。

也可以看看

||||||

相关例子

更多关于

外部网站