主要内容

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

随机优化是如何工作的

投资组合的MAD是均值-绝对偏差。有关MAD函数的定义,请参见风险代理.虽然少数概率分布存在MAD的解析解,万博 尤文图斯但另一种方法是从资产回报的概率分布中使用样本来计算MAD的期望。这些样本称为情景,给定一组情景,投资组合优化问题就变成了随机优化问题。

作为投资组合权重的函数,投资组合的MAD是一个凸非光滑函数(见Konno and Yamazaki [50] at投资组合优化).PortfolioMAD对象将MAD作为非线性函数计算,该函数可由求解器处理fmincon优化工具箱™。非线性规划求解器fmincon有几个算法可以选择与setSolver函数,两种算法在实践中工作得最好是“sqp”“激活集”

有MAD投资组合优化问题的重新公式(见Konno和Yamazaki [50])投资组合优化)的结果是一个线性规划问题,这个问题可以用标准线性规划技术或随机规划求解器求解。的PortfolioMAD然而,对象并没有以这种方式重新表述问题。的PortfolioMAD对象以非线性函数的形式计算MAD。MAD的凸性,作为场景数较大时组合权重和钝边的函数,使MAD组合优化问题易于处理,在实践中,对于某些非线性规划求解器,如fmincon从优化工具箱。了解更多有关使用时的工作流程PortfolioMAD对象,看到PortfolioMAD对象的工作流

场景是什么?

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

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

虽然PortfolioMAD对象具有从数据或时刻模拟多变量正常场景的函数(simulateNormalScenariosByDatasimulateNormalScenariosByMoments),通常的方法是直接从您自己的模拟函数指定场景。这些场景是作为矩阵直接输入的,矩阵的每一行包含所有资产的样本,矩阵的每一列包含资产的样本。MAD组合优化工具的架构通过函数句柄引用场景,因此已经设置的场景不能作为属性直接访问PortfolioMAD对象。

设置场景使用PortfolioMAD功能

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

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

请注意,PortfolioMAD对象确定并修复中资源的数量NumAssets以及场景的数量NumScenarios基于场景矩阵。您可以通过调用PortfolioMAD对象与不同的场景矩阵。然而,一旦NumAssets属性已在对象中设置,则不能输入具有不同数量资产的场景矩阵。的getScenarios函数允许您从PortfolioMAD对象。您还可以使用以下方法获得场景的均值和协方差estimateScenarioMoments

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

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

设置场景setScenarios函数

您还可以使用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 = PortfolioMAD; p = setScenarios(p, AssetScenarios); disp(p.NumAssets) disp(p.NumScenarios)
20000年4

估计情景的均值和协方差

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

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 = PortfolioMAD; p = setScenarios(p, AssetScenarios); [mean, covar] = estimateScenarioMoments(p)
均值= 0.0044 0.0084 0.0108 0.0155 covar = 0.0005 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.0103

模拟正常的场景

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

从回报或价格模拟正常场景

给定返回或价格数据,使用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);

请注意

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

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

p = PortfolioMAD;p = simulateNormalScenariosByData(p, X, 20000);[passetmean, passetcovar] = estimatescenariommoments (p)
Passetmean = 0.0033 0.0085 0.0095 0.1503 passetcovar = 0.0055 0.0004 0.0002 0.0001 0.0004 0.0024 0.0017 0.0010 0.0002 0.0017 0.0049 0.0028 0.0001 0.0010 0.0028 0.0102
您从这个模拟中获得的矩可能与这里列出的矩不同,因为场景是从估计的输入回报的多元正态概率分布中抽取的随机样本X

的默认行为simulateNormalScenariosByData就是与资产回报合作。相反,如果你用资产价格作为变量YsimulateNormalScenariosByData接受一个名称-值对参数名称“DataFormat”将相应的值设置为“价格”表示函数的输入是以资产价格而不是回报的形式出现的(函数的默认值)“DataFormat”参数是“返回”).此示例模拟了包含资产价格数据的场景YPortfolioMAD对象

p = PortfolioMAD;p = simulateNormalScenariosByData(p, Y, 20000,)“dataformat”“价格”);[passetmean, passetcovar] = estimatescenariommoments (p)
Passetmean = 0.0043 0.0083 0.0099 0.1500 passetcovar = 0.0053 0.0003 0.0001 0.0002 0.0003 0.0024 0.0017 0.0010 0.0001 0.0017 0.0047 0.0027 0.0002 0.0010 0.0027 0.0100

模拟缺少数据的正常场景

通常在使用多个资产时,您会丢失由在你的回报或价格数据的值。虽然多元正态回归详细介绍了缺失数据的回归simulateNormalScenariosByData函数具有一个名称-值对参数名称“MissingData”使用布尔值指示是否使用Financial Toolbox™的缺失数据功能。的默认值“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 = PortfolioMAD;p = simulateNormalScenariosByData(p, Y, 20000,)“dataformat”“价格”);q = PortfolioMAD;q = simulateNormalScenariosByData(q, Y, 20000,)“dataformat”“价格”“missingdata”,真正的);[passetmean, passetcovar] = estimateScenarioMoments(p) [qassetmean, qassetcovar] = estimatescenarioments (q)
passetcovar = 0.0054 0.0000 -0.0005 -0.0006 0.00000 0.0021 0.0015 0.0010 -0.0005 0.0015 0.0046 0.0026 -0.0006 0.0010 0.0026 0.0100 qassetmean = 0.0092 0.0082 0.0094 0.1463 qassetcovar = 0.0071 -0.0000 -0.0006 -0.0006 - 0.006 0.0032 0.0023 0.0015 -0.0006 0.0023 0.0064 0.0036 -0.0006 0.0015 0.0036 0.0133
第一个PortfolioMAD对象,p,包含从中的价格数据获取的场景Y在哪里值被丢弃,第二个PortfolioMAD对象,,包含从中的价格数据获取的场景Y它可以容纳丢失的值。每次运行这个示例时,都会得到不同的估计p

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

simulateNormalScenariosByData函数接受存储在中的资产回报或价格表格时间表.的simulateNormalScenariosByData函数隐式地处理数据矩阵或表或时间表对象中的数据,使用相同的规则确定数据是返回值还是价格。为了说明这一点,使用array2timetable为14个资产制定时间表CAPMuniverse以及使用时间表来模拟portfolio var的场景。

负载CAPMuniverse时间= datetime(日期,“ConvertFrom”“datenum”);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

使用“MissingData”该期权由PortfolioMAD提供,用于解释丢失的数据。

p = PortfolioMAD;p = simulatenormalscenario bydata (p, stockTT, 20000,“missingdata”,真正的);[passetmean, passetcovar] = estimatescenariommoments (p)
passetcovar = 0.0014 0.0005 0.0006 0.0006 0.0003 0.0006 0.0004 0.0005 0.0007 0.0002 -0.0000 0.0005 0.0025 0.0005 0.0005 0.0003 0.0006 0.0004 0.0006 0.0002 -0.0000 0.00050.0006 0.0005 0.0003 0.0006 0.0004 0.0005 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0004 0.0005 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0006 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0006 0.0002 - 0.0006 0.0006 0.0006 0.0006 0.0006 - 0.0006 0.0006 0.0006 0.0006 0.0006 - 0.0006 0.0006 0.0006 0.0006 - 0.0006 0.0006 0.0006 0.0011 0.0002 0.0003 0.0005 0.0003 0.0006 0.0005 0.0007 0.0006 0.0006 0.0005 0.0007 0.0006 0.0005 0.0007 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.00070.0003 0.0011 0.0001 -0.0000 0.0005 0.0005 0.0006 0.0005 0.0006 0.0002 -0.0000 0.0003 0.0003 0.0002 0.0003 0.0004 0.0004 0.0002 -0.0000 0.0006 0.0006 0.0004 0.0002 -0.0000 0.0006 0.0006 0.0004 0.0002 -0.0000 0.0006 0.0008 0.0006 0.0006 0.0002 0.0005 0.0004 -0.0000 0.0005 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.0008 0.0002 - 0.00012 0.0008 0.0006 0.0011 0.00011 0.0006 0.0004 0.0007 0.0005 0.0008 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”处理返回或价格数据和“MissingData”忽略或使用缺少值的示例。此外,simulateNormalScenariosByData从文件中提取资产名称或标识符表格时间表如果论点“GetAssetList”被设置为真正的(默认值为).如果“GetAssetList”值是真正的,标识符用于设置AssetList财产的PortfolioMAD对象。因此,重复的形成PortfolioMAD对象p从前面的例子“GetAssetList”标志设置为真正的从时间表对象中提取列名:

p = simulatenormalscenario bydata (p, stockTT, 20000,“missingdata”,真的,“GetAssetList”,真正的);disp (p.AssetList)
' aapl ' 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 = PortfolioMAD;p = simulateNormalScenariosByMoments(p, m, C, 20000); [passetmean, passetcovar] = estimateScenarioMoments(p)
Passetmean = 0.0040 0.0084 0.0105 0.1513 passetcovar = 0.0053 0.0003 0.0002 0.0001 0.0003 0.0024 0.0017 0.0009 0.0002 0.0017 0.0048 0.0028 0.0001 0.0009 0.0028 0.0102

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

另请参阅

||||

相关的例子

更多关于