资产回报和使用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([], []);
startrow
来endrow
,使用scenario = p.localScenarioHandle(startrow, endrow);
1
≤startrow
≤endrow
≤numScenarios
.
设置场景使用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个资产收益观察值的随机样本米
而且C
与portsim
.的默认行为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
的默认行为simulateNormalScenariosByData
就是处理资产回报。相反,如果你把资产价格作为变量Y,simulateNormalScenariosByData
接受名称-值对参数名称“DataFormat”
对应的值设置为“价格”
表示函数的输入是资产价格的形式,而不是回报(函数的默认值“DataFormat”
参数是“返回”
).中资产价格数据的场景Y为PortfolioCVaR
对象问
:
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
设置为1
.simulateNormalScenariosByMoments
提供一个额外的可选参数,用于指定资产的数量,以便使用正确的资产数量进行标量展开。此外,如果为资产收益的协方差输入标量或向量,则形成一个对角线矩阵,使标量沿对角线展开,而向量成为对角线。
另请参阅
PortfolioCVaR
|setcost
|setProbabilityLevel
|setScenarios
|estimatePortVaR
|simulateNormalScenariosByMoments
|simulateNormalScenariosByData
相关的例子
- 使用无风险资产
- 处理交易成本
- 创建PortfolioCVaR对象
- 使用默认值处理CVaR投资组合约束
- 验证CVaR投资组合问题
- 为PortfolioCVaR对象的整个边界估计有效投资组合
- 为PortfolioCVaR对象估计有效边界
- 资产回报和使用PortfolioCVaR对象的场景
- 利用CVaR投资组合优化进行套期保值
- 计算CVaR投资组合的最大回报风险比