我有以下函數用於輸入2個初始參數rho和V,並基於最小化的平方和誤差,我希望它返回估計的參數rho和V.使用VBA返回估計參數
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的ρ和V,所以我選擇A1:A2作爲params
。 在單元格C3:C6,我有MktStrike與價值觀
30
31
32
33
在單元格D3:D6,我有MktVol與價值觀
0.23
0.24
0.25
0.26
此功能現在返回sumof平方錯誤(我運行它在Excel作爲=RhoAndV(A1:A3,C3:C6,D3:D6,0.25,10,1,0.5)
並返回.003
。但是,我想它返回的參數估計,rho
和V
。誰能告訴我如何解決這個功能,這樣做呢?
VBA函數只能返回單個值。如果你在VBA中工作,我會建議在函數定義中加入'rho'和'V'作爲ByRef參數;那麼當函數更改這些參數的值時,您將能夠看到函數外部的更改。但是,我不認爲Excel單元格中的公式可以使用ByRef參數。 –
從你的函數返回一個數組,然後在工作表中輸入公式作爲公式數組(使用Ctrl + Shift + Enter)http://www.cpearson.com/excel/ReturningArraysFromVBA.aspx –
@TimWilliams,同意regd。返回一個數組,但是如何捕獲估計的參數rho和V,因爲它們在循環中發生變化,其中正在計算錯誤。我應該在循環內重新計算這些參數並在那裏更新它們的值? – user1155299