Очень плохо знаком с VBA, поэтому прошу прощения, если это действительно простой вопрос.Это связано с управлением финансами / портфелем.
Я хотел бы создать функцию VBA, которая может дать мне веса глобального портфеля минимальных отклонений (GMVP) для набора активов только с помощью матрицы дисперсии-ковариации активов.
Я могу ввести эту формулу непосредственно в ячейки Excel, чтобы получить веса: = MMULT (MINVERSE (S), единицы) / SUM (MMULT (MINVERSE (S), единицы))) где S - дисперсионно-ковариационная матрица, а единицы - матрица столбцов, содержащая «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