投资组合的MAD是意思绝对偏离。对于疯狂功能的定义,请参阅风险代理.虽然少数概率分布存在MAD的解析解,金宝搏官方网站但另一种方法是从资产回报的概率分布中使用样本来计算MAD的期望。这些样本称为情景,给定一组情景,投资组合优化问题就变成了随机优化问题。
作为投资组合重量的函数,产品组合的MAD是一个凸面的非平滑功能(参见Konno和Yamazaki [50]投资组合优化)。Portfoliomad对象将MAD计算为此非线性功能,可以由求解器处理粉刺
优化工具箱™。非线性规划求解器粉刺
有几种可以选择的算法setSolver
函数,两种算法在实践中工作得最好是'SQP'
和'active-set'
.
有MAD投资组合优化问题的重新公式(见Konno和Yamazaki [50])投资组合优化)的结果是一个线性规划问题,这个问题可以用标准线性规划技术或随机规划求解器求解。这Portfoliomad.
但是,对象不以这种方式重构问题。这Portfoliomad.
对象将MAD作为非线性功能计算。MAD的凸起,作为投资组合权重和沉闷边缘的函数,当场景很大时,使MAD产品组合优化问题在实践中,对于某些非线性编程求解器,例如粉刺
从优化工具箱。使用时更多地了解工作流程Portfoliomad.
对象,看到portfoliomad对象工作流程.
由于平均绝对偏差产品组合优化与资产方案有效,因此返回执行优化,因此存在多种方式来指定和模拟方案。在许多具有MAD投资组合优化的应用中,资产返回可能具有明显的非正常概率分布,具有多种模式,返回,分布截断等等。在其他应用中,资产返回是由于各种仿真方法的模拟,这些方法可能包括Monte-Carlo仿真,准随机仿真等。通常,风险因素的潜在概率分布可能是多变量正常的,但是由此产生的转化是充分的非线性,以导致截然不同的非正规资产返回。
例如,这发生在粘合和衍生物中。在具有违约概率的非零概率的粘合的情况下,这种方案可能包括返回的资产返回,即表示默认值,一些值略大于-100%,以指示恢复速率。
虽然Portfoliomad.
Object具有模拟来自数据或时刻的多变量正常方案的功能(simulateNormalScenariosByData
和simulateNormalScenariosByMoments
),通常的方法是直接从您自己的模拟函数指定场景。这些场景是作为矩阵直接输入的,矩阵的每一行包含所有资产的样本,矩阵的每一列包含资产的样本。MAD组合优化工具的架构通过函数句柄引用场景,因此已经设置的场景不能作为属性直接访问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)
4 20000.
请注意Portfoliomad.
对象确定并修复中资源的数量NumAssets
以及场景的数量numscenarios.
基于方案的矩阵。您可以通过调用来更改场景的数量Portfoliomad.
对象与不同的场景矩阵。然而,一旦NumAssets
已在对象中设置了属性,您无法输入具有不同数量的资产的方案矩阵。这GetScenarios.
函数允许您从a中恢复方案Portfoliomad.
对象。您还可以使用以下方法获得场景的均值和协方差estimateScenarioMoments
.
虽然不推荐用于休闲用户,但是通过使用指向方案的功能句柄来恢复方案的替代方法Portfoliomad.
对象。访问部分或所有场景Portfoliomad.
对象的隐藏属性localscenariohandle
是一个函数句柄,该函数指向一个获取已设置的场景的函数。直接从aPortfoliomad.
目的P.
,使用
场景= p.localscenariohandle([],[]);
startrous.
到endrow
,使用场景= p.localScenarioHandle(startrow, endrow);
1
≤.startrous.
≤.endrow
≤.numScenarios
.
setscenarios.
函数您还可以使用使用的场景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 = PortfolioMAD; p = setScenarios(p, AssetScenarios); disp(p.NumAssets) disp(p.NumScenarios)
4 20000.
这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
为方便起见,两个函数(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从上面,这一系列的示例演示了模拟变量的多变量正常场景的等效方法Portfoliomad.
对象。假设一个Portfoliomad.
中创建的对象P.
使用资产回报X使用simulateNormalScenariosByData
:
p = PortfolioMAD;p = simulateNormalScenariosByData(p, X, 20000);[寄入式副,乘法电录] =估计脑内(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
默认行为simulateNormalScenariosByData
是与资产回报合作。相反,您将资产价格与变量相反y那simulateNormalScenariosByData
接受一个名称-值对参数名称“DataFormat”
具有相应的值设置为“价格”
表示函数的输入是以资产价格而不是回报的形式出现的(函数的默认值)“DataFormat”
参数是'返回'
)。此示例使用资产价格数据模拟方案y为Portfoliomad.
目的问:
:
p = PortfolioMAD;p = simulateNormalScenariosByData(p, Y, 20000,)“dataformat”那“价格”);[寄入式副,乘法电录] =估计脑内(P)
搬运工= 0.0043 0.0083 0.0099 0.1500 Passetcovar = 0.0053 0.0003 0.0001 0.0002 0.0003 0.0024 0.0017 0.000.0001 0.0017 0.000 0.0027 0.0002 0.0010 0.0027 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 = PortfolioMAD;p = simulateNormalScenariosByData(p, Y, 20000,)“dataformat”那“价格”);q = portfoliomad;q = simulatenormalscenarydata(q,y,20000,“dataformat”那“价格”那'缺失数据', 真的);[传递映射] =估计序列(P)[qassetmean,qassetcovar] =估计脑体(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
并且使用时间表来模拟Portfoliocvar的方案。
负载CAPMuniverse时间= 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
使用'缺失数据'
通过PortfolioMAD提供给占了丢失的数据选项。
p = PortfolioMAD;p = simulatenormalscenariosbydata(p,Stocktt,20000,'缺失数据',真正的);[寄入式副,乘法电录] =估计脑内(P)
passetmean = 0.0017 0.0013 0.0005 0.0001 0.0019 0.0049 0.0003 0.0003 0.0006 -0.0001 0.0005 0.0011 0.0002 0.0001 passetcovar = 0.0014 0.0005 0.0006 0.0006 0.0006 0.0003 0.0005 0.0003 0.0006 0.0004 0.0005 0.0007 0.0002 -0.0000 0.0005 0.0025 0.0007 0.0005 0.0010 0.0005 0.0005 0.0003 0.0006 0.0004 0.0006 0.0012 0.0002 -0.0000 0.00060.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.0006 0.0005 0.0006 0.0009 0.0006 0.0002 0.0005 0.0003 0.0006 0.0004 0.0005 0.0006 0.0002 -0.0000 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.0005 0.0004 0.0002 0.0007 0.0013 0.00020.0002 0.0002 0.0002 0.0003 0.0011 0.0001 -0.0000 0.0005 0.0005 0.0006 0.0005 0.0005 0.0002 0.0010 0.0003 0.0005 0.0003 0.0005 0.0006 0.0002 -0.0000 0.0003 0.0003 0.0004 0.0003 0.0003 0.0002 0.0003 0.0005 0.0004 0.0002 0.0004 0.0004 0.0002 -0.0000 0.0006 0.0006 0.0008 0.0006 0.0006 0.0002 0.0005 0.0004 0.0011 0.0005 0.0007 0.00070.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.0008 0.0002 -0.0000 0.0007 0.0012 0.0008 0.0006 0.0011 0.0011 0.0006 0.0004 0.0007 0.0005 0.0008 0.0020 0.0002 -0.0000 0.0002 0.00020.0002 0.0002 0.0002 0.0002 0.0002 0.0002 0.0002 0.0002 0.0002 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 -0.0000 0.0000
使用名称-值输入“DataFormat”
处理返回或价格数据和'缺失数据'
忽略或使用具有缺失值的样本。此外,simulateNormalScenariosByData
从a中提取资产名称或标识符桌子
或时间表
如果是争论“GetAssetList”
被设置为真正的
(默认值是假
)。如果是“GetAssetList”
值是真正的
,标识符用于设置assetlist.
财产的Portfoliomad.
对象。因此,重复的形成Portfoliomad.
目的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 = PortfolioMAD;p = SimulateNormalscenariosbymoments(P,M,C,20000); [passetmean, passetcovar] = estimateScenarioMoments(p)
搬运工= 0.0040 0.0084 0.0105 0.1513乘量电动机= 0.0053 0.0003 0.0002 0.0001 0.0003 0.0024 0.0017 0.0009 0.0002 0.0017 0.000 0.0028 0.0001 0.0009 0.0028 0.0102
simulateNormalScenariosByMoments
在资产返回的时刻对参数执行标量扩展。如果NumAssets
尚未设置,标量参数被解释为标量NumAssets
设置为1
.simulateNormalScenariosByMoments
提供一个附加的可选参数来指定资产的数量,以便标量展开使用正确的资产数量。此外,如果资产收益协方差输入一个标量或向量,则形成一个对角矩阵,其中一个标量沿对角线展开,一个向量成为对角线。
Portfoliomad.
|setcost
|setscenarios.
|simulateNormalScenariosByData
|simulateNormalScenariosByMoments