投资组合的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.
对象具有从数据或时刻模拟多变量正常场景的函数(simulateNormalScenariosByData
和simulateNormalScenariosByMoments
),通常的方法是直接从您自己的模拟函数指定场景。这些场景是作为矩阵直接输入的,矩阵的每一行包含所有资产的样本,矩阵的每一列包含资产的样本。CVaR投资组合优化工具的体系结构通过函数句柄引用场景,因此已经设置的场景不能作为属性直接访问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.
. 例如,给定变量中资产回报的平均值和协方差m
和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)
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
为方便起见,两个函数(simulateNormalScenariosByData
和simulateNormalScenariosByMoments
)的存在是为了在假设数据或时刻分布为多元正态随机资产回报的情况下,从数据或时刻模拟情景。
给定返回或价格数据,使用该功能simulateNormalScenariosByData
模拟多变量正常场景。无论是回报还是价格都以矩阵的形式存储,每行都是样本,而每列都是资产。此外,退货或价格可以存储在表格
或时间表
(见从时间序列数据模拟正常场景).要使用simulateNormalScenariosByData
,根据变量中资产回报的均值和协方差,生成四种资产的120个资产回报观察值的随机样本m
和C
与Portsim.
.默认行为Portsim.
使用与输入矩相同的估计平均值和协方差创建模拟数据m
和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] = 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
默认行为simulateNormalScenariosByData
是与资产回报合作。相反,您将资产价格与变量相反y那simulateNormalScenariosByData
接受一个名称-值对参数名称“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
,从瞬间开始m
和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)
搬运工= 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
设置为1
.simulateNormalScenariosByMoments
提供一个附加的可选参数来指定资产的数量,以便标量展开使用正确的资产数量。此外,如果资产收益协方差输入一个标量或向量,则形成一个对角矩阵,其中一个标量沿对角线展开,一个向量成为对角线。
estimatePortVaR
|portfoliocvar.
|setcost
|setProbabilityLevel
|setscenarios.
|simulateNormalScenariosByData
|simulateNormalScenariosByMoments