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 に値 0.1 と 0.1 の rho と V があるので、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。ただし、推定されたパラメーターと を返すようにしたいのですが、rhoこのV関数を修正する方法を教えてください。

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 に答える