【发布时间】:2019-02-28 12:10:23
【问题描述】:
对 VBA 非常陌生,所以如果这是一个非常简单的问题,我们深表歉意。这是与财务/投资组合管理相关的。
我想创建一个 VBA 函数,它可以为我提供一组资产的全局最小方差投资组合 (GMVP) 权重,其中仅包含资产的方差-协方差矩阵。
我可以将这个公式直接键入 Excel 上的单元格以获得权重:=MMULT(MINVERSE(S),Ones)/SUM(MMULT(MINVERSE(S),Ones)) 其中 S 是方差-协方差矩阵,ones 是包含“1”s 的列矩阵
映射矩阵的维度没有问题(如果 S 是 5x5,那么矩阵将是 5x1)
我一直在尝试制作一个 VBA 函数,这样我就不必每次都输入冗长的公式来查找 GMVP。这是我的代码。在此之前,我还尝试将所有内容都写在很长的单行中,使用“/”分隔(没有用)
我想知道是不是因为我们不能使用“/”来划分VBA中的矩阵?有没有办法把公式变成函数?
谢谢!
Function GMVPcol(S As Range, Ones As Range) As Range
Dim num As Range
Dim dem As Range
num = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(S), Ones)
dem = Application.WorksheetFunction.Sum(Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(S), Ones))
GMVPcol = Application.WorksheetFunction.MMult(num, Application.WorksheetFunction.MInverse(dem))
End Function
【问题讨论】:
-
Range 是 VBA 中的一个对象。因此,它需要关键字
set。它也应该设置为一个对象。