0

我有以下函数用于输入 2 个初始参数 rho 和 V,并且基于最小的平方误差和,我希望它返回估计的参数 rho 和 V。

Public Function RhoAndV(params, MktStrike, MktVol, Vol, Fwd, Tau, Beta)
    Dim rho, V, Alpha As Double
    Dim i As Integer, L As Integer
    Dim sqdError() As Double, ModelVol() As Double
    rho = params(1)
    V = params(2)
    Alpha = AFn(Fwd, Fwd, Tau, Vol, Beta, rho, V)
    'MsgBox ("Alpha=" & Alpha)
    L = MktVol.Cells.Count
    ReDim ModelVol(L) As Double, sqdError(L) As Double
    For i = 1 To L
        ModelVol(i) = Vfn(Alpha, Beta, rho, V, Fwd, MktStrike(i), Tau)
        'MsgBox ("ModelVol(i)=" & ModelVol(i))
        sqdError(i) = (ModelVol(i) - MktVol(i)) ^ 2
    Next i
    RhoAndV = Application.SUM(sqdError)
    End Function

我在单元格 A1:A2 中有 rho 和 V,其值为 0.1 和 0.1,因此我选择 A1:A2 作为params. 在单元格 C3:C6 中,我有带有值的 MktStrike

30
31
32
33

在单元格 D3:D6 中,我有 MktVol 的值

0.23
0.24
0.25
0.26

这个函数现在返回平方误差的总和(我在 Excel 中运行它,=RhoAndV(A1:A3,C3:C6,D3:D6,0.25,10,1,0.5)它返回.003。但是,我希望它返回估计的参数,rhoV。谁能告诉我如何修复这个函数来做到这一点?

4

1 回答 1

1

您可以将原始函数修改为以下示例。返回值的方式取决于您是将它们返回到行(例如 D3:E3)还是列(例如 D3:D4)

Function RhoAndV(params, MktStrike, MktVol, Vol, Fwd, Tau, Beta)

    'rest of your code

    'RhoAndV = Array(rho, V) 'returning to a row
    RhoAndV = Application.Transpose(Array(rho, V)) 'returning to a column
End Function
于 2012-11-21T00:28:42.710 回答