У меня возникли проблемы с созданием автоматического решателя для задачи оптимизации портфеля. До сих пор я создал несколько матриц ковариации, и теперь мне нужно использовать решатель, чтобы найти веса для скользящего еженедельного портфеля минимальной дисперсии.
Данные расположены следующим образом
W1 W2 W3 W4 W5 Sum Var
Код, который я пытаюсь реализовать, выглядит следующим образом.
Sub Macro1()
'Keyboard Shortcut: Ctrl+y
ThisWorkbook.Worksheets("Sheet8").Activate
SolverReset
SolverOk SetCell:="ActiveCell", MaxMinVal:=2, ValueOf:=0, ByChange:="ActiveCell.Offset(0,-6):ActiveCell.Offset(0,-2)", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="ActiveCell.Offset(0,-1)", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="ActiveCell.Offset(0,-6):ActiveCell.Offset(0,-2)", Relation:=3, FormulaText:="0"
SolverSolve True
ActiveCell.Offset(5, 0).Select
End Sub
Код выполняется, однако он не изменяет веса и оставляет ранее вычисленную дисперсию без изменений. . Я также замечаю, что всякий раз, когда я запускаю код, excel меняет параметр «Formula Calculation Option» с Automati c на Manual. Это может быть причиной того, почему дисперсия или веса не меняются. Буду признателен за любую помощь.
PS Я также пробовал использовать Range
ByChange: = "ActiveCell.Offset (0, -6): ActiveCell.Offset (0, -2) "Однако для этой версии я получал ошибку времени выполнения 1004. Диапазон метода объекта -" Global "не удалось
Заранее большое спасибо