投资组合的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
对象具有从数据或时刻模拟多变量正常场景的函数(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)
20000年4
请注意,PortfolioMAD
对象确定并修复中资源的数量NumAssets
以及场景的数量NumScenarios
基于场景矩阵。您可以通过调用PortfolioMAD
对象与不同的场景矩阵。然而,一旦NumAssets
属性已在对象中设置,则不能输入具有不同数量资产的场景矩阵。的getScenarios
函数允许您从PortfolioMAD
对象。您还可以使用以下方法获得场景的均值和协方差estimateScenarioMoments
.
中指向场景的函数句柄可以恢复场景,尽管不推荐给普通用户使用PortfolioMAD
对象。访问部分或所有场景PortfolioMAD
对象的隐藏属性localScenarioHandle
是一个函数句柄,该函数指向一个获取已设置的场景的函数。直接从aPortfolioMAD
对象p
,使用
[]: [];
startrow
来endrow
,使用场景= p.localScenarioHandle(startrow, endrow);
1
≤startrow
≤endrow
≤numScenarios
.
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
为方便起见,两个函数(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从上面,这一系列的示例演示了模拟变量的多变量正常场景的等效方法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
的默认行为simulateNormalScenariosByData
就是与资产回报合作。相反,如果你用资产价格作为变量Y,simulateNormalScenariosByData
接受一个名称-值对参数名称“DataFormat”
将相应的值设置为“价格”
表示函数的输入是以资产价格而不是回报的形式出现的(函数的默认值)“DataFormat”
参数是“返回”
).此示例模拟了包含资产价格数据的场景Y为PortfolioMAD
对象问
:
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
设置为1
.simulateNormalScenariosByMoments
提供一个附加的可选参数来指定资产的数量,以便标量展开使用正确的资产数量。此外,如果资产收益协方差输入一个标量或向量,则形成一个对角矩阵,其中一个标量沿对角线展开,一个向量成为对角线。
PortfolioMAD
|setcost
|setScenarios
|simulateNormalScenariosByMoments
|simulateNormalScenariosByData