【发布时间】:2011-06-17 07:51:06
【问题描述】:
我们遇到了资产管理方面的问题。我认为(并希望)它为这个论坛提出了足够有趣的问题来考虑它。我们对文献进行了相当广泛的搜索,找到了围绕这个问题讨论的内容,但没有直接涉及这个问题。
背景
我们有资产的时间序列数据,我们从中计算相关矩阵。对于使用 Mathematica 的 5 个资产,它可能看起来像这样:
m = Correlation[data]
{{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}}
m //TableForm
1.000000, 0.635562, 0.698852, 0.404792, -0.32746
0.635562, 1.000000, 0.410075, 0.314375, -0.0636438
0.698852, 0.410075, 1.000000, 0.374416, -0.260137
0.404792, 0.314375, 0.374416, 1.000000, 0.293135
-0.32746, -0.0636438, -0.260137, 0.293135, 1.000000
在资产管理领域,人们想要多元化。如果投资组合中的两项或多项资产相关性过高,则会集中风险,而不是分散风险。
我们想要什么
我们想要一种方法或方法来构建资产组合,以最大限度地降低投资组合的“集中”风险,同时始终在所有工具中持有一些头寸
我将通过以下几个示例来说明集中风险,但首先...
为什么这是一个有趣的问题?
有几件事使这个问题变得有趣且具有挑战性:
虽然与“有效边界”相关,但我们对使用的各个工具的未来性能没有任何假设。
最小化方差给出了答案,但不是一个直观令人满意甚至有用的答案。
主成分分析似乎是一种自然的方式来看待这个问题,但似乎也没有为我们提供我们需要的东西。
我们已经研究过使用熵最大化,但是虽然我们的一位熟悉离散熵的人认为它看起来很有希望,但当我们尝试从连续熵的角度来思考这个问题时,它被证明是死路一条。下面的代码让我们了解了我们所看到的(不确定它是否实际运行):
(* This function computes the distribution of returns, given a \
distribution of price movements.*)
returnDistribution[P_, n_] := Module[ {xv, wv},
wv = Array[w, n];
xv = Array[x, n];
varsInPlane =
Append[Delete[xv, n], (r - Total[Delete[wv*xv, n]])/wv[[n]]];
Integrate[PDF[P, varsInPlane],
Map[Function[{#, -Infinity, Infinity}], Delete[xv, n]]
]
]
dist = MultinormalDistribution[
ConstantArray[0, 3], {{1, 0.9, 0}, {0.9, 1, 0}, {0, 0, 1}}];
rd = returnDistribution[dist, 3]
(* The problem we want to solve is this *)
wv = Array[w, n];
Maximize[{rd*Log[rd, 2],
Total[wv] == 1 && And @@ Thread[wv >= 0]}, wv]
Attilio Meucci 有一篇论文“管理多元化”和一些看起来很有前途的 MatLab 代码,
http://www.symmys.com/AttilioMeucci/Research/PublFinance/PublFinance.html
但在看过我的一位同事之后,他的评论是:
他似乎在做大致相同的事情 我想做的事(之前 放弃这个想法),除了他是 有点作弊。而不是实际上 计算连续熵,他 只是对待每个校长 组件作为离散赌注。但 基本上,他的论文是精炼的 我所做的计算版本 多个相关的硬币翻转。这 强迫你从其他人那里获取熵 变量,而不是来自额外的 当前变量的位数。
对一个不正常的人做他正在做的事 不过,分发可能更棘手 我想一个人可以使用 生成模型 表格“95% 标准正常 分配,5%的东西真的 不好”。
集中风险示例
几个简单的例子来说明集中风险
如果我们在思想实验中查看由 3 项资产组成的投资组合,就最容易理解我们想要实现的目标。假设其中 2 个工具的相关性为 1 (100%),第三个为 0,其相关矩阵如下所示:
1, 1, 0
1, 1, 0
0, 0, 1
在这种情况下,从我们的角度来看,将 25% 放在 2 只相关股票中,将 50% 放在不相关股票中是有意义的。
25%, 25%, 50%
这抵消了集中在相关工具上的风险,同时认识到 100% 相关资产实际上仍然是不同的工具,其相关性在未来可能会发生变化。
人们可能会认为,当两个具有 100% 相关性的资产移动相同时,那么广泛的可能分配同样可以满足我们的目的,例如:
50%, 0%, 50%
0%, 50%, 50%
10%, 40%, 50%
...或主题的任何此类变体。
但是,由于我们不知道它们未来的相关性将如何演变,我们认为最好和最直观的解决方案仍然是:
25%, 25%, 50%
另一个例子
在由 5 个资产组成的投资组合中,其中 4 个具有 100% 相关性,1 个具有 0% 相关性,相关矩阵如下所示:
1, 1, 1, 1, 0
1, 1, 1, 1, 0
1, 1, 1, 1, 0
1, 1, 1, 1, 0
0, 0, 0, 0, 1
我们想要的投资组合分配将具有以下比例:
12.5%、12.5%、12.5%、12.5%、50%
当然,现实世界给我们带来了更大的复杂性。
我们尝试过的事情
最小化方差(有希望但不起作用)
有人建议最小化方差来做到这一点,但正如人们所看到的那样,它并没有产生一个直观的解决方案:
一些说明这一点的 Mathematica 代码如下:
For 3 assets:
m3 = {{1, 1, 0}, {1, 1, 0 }, { 0, 0 , 1}};
Array[x, Length@m3];
Minimize[{p.m3.p, Tr@p == 1 && And @@ Thread[p >= 0]}, p]
{1/2, {x[1] -> 1/4, x[2] -> 1/4, x[3] -> 1/2}}
这看起来不错。它给了我们:
25%、25%、50%
但是……
对于 5 个资产:
m5 = {{1, 1, 1, 1, 0}, {1 , 1, 1, 1, 0 }, {1 , 1, 1, 1, 0 }, {1 , 1,1, 1, 0 }, { 0, 0 , 0, 0, 1}};
p = Array[x, Length@m5];
Minimize[{p.m5.p, Tr@p == 1 && And @@ Thread[p >= 0]}, p]
{1/2, {x[1] -> 1/16, x[2] -> 1/4, x[3] -> 1/8, x[4] -> 1/16, x[5] ->1/2}}
不如它给我们的那么好:
6.25%, 25%, 12.50%, 6.25%, 50%
因此,即使对于这种简单(如果是人为的)案例,最小化方差也不起作用,更不用说更现实的事情了。
一个有希望的解决方案
我们讨论的一位贡献者提出了一种很有前途的方法 - 至少对于没有任何负相关性的案例。也许它会导致有人提出更完整的解决方案。
再次使用 Mathematica 代码:
m = {{1, 1, 0}, {1, 1, 0}, {0, 0, 1}};
Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]
{1/4, 1/4, 1/2}
正是我们想要的。注意:对于那些不熟悉 Mathematica 代码的人,函数:“Tr”查找矩阵的迹,“/@”将函数映射到列表或矩阵。其余的可能是有道理的。
四个资产的另一个例子:
m = {{1, 1, 1, 0}, {1, 1, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 1}};
Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]
{1/6, 1/6, 1/6, 1/2}
再次,正是我们想要的。
这比最小化方差更好,但在一个更真实的例子中(文章中描述的第一个例子)我们得到了一些不起作用的东西:
m = {{1.0, 0.635562, 0.698852, 0.404792, -0.32746}, {0.635562, 1.0, 0.410075, 0.314375, -0.0636438}, {0.698852, 0.410075, 1.0, 0.374416, -0.260137}, {0.404792, 0.314375, 0.374416, 1.0, 0.293135}, {-0.32746, -0.0636438, -0.260137, 0.293135, 1.0}}
Tr /@ PseudoInverse[m]/Tr[ Tr /@ PseudoInverse[m]]
{0.267806, 0.0898877, 0.22403, -0.0541658, 0.472441}
在这种情况下,我们为第 4 个资产分配了负数 (-0.0541658),这对于我们想要实现的目标没有意义。
结论
所以,我们需要一种 MinimizeVarianceIntuitively 函数。我希望所有这些都足够清楚地描述了我们想要实现的目标。对于以完全不同的方式解决这个问题或扩展我们已经尝试过的任何事情的任何建议或想法都非常感谢。
随便看看这个的人总是建议CAPM(资本资产定价模型)这样做。它不是。考虑到上述相关性将资产与资产相关联,而不是每个资产与“市场”相关联,因此它没有可使用的“贝塔”。此外,所描述的问题没有假设回报或使用无风险利率或价格的正态分布。我可以看到 CAPM 看起来像是一种执行此操作的方法,但我不知道它是如何应用的。
非常感谢,
阿伦·加拉帕塔
【问题讨论】:
标签: statistics wolfram-mathematica correlation variance