2012-11-20 42 views
0

我有以下函數用於輸入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。但是,我想它返回的參數估計,rhoV。誰能告訴我如何解決這個功能,這樣做呢?

+0

VBA函數只能返回單個值。如果你在VBA中工作,我會建議在函數定義中加入'rho'和'V'作爲ByRef參數;那麼當函數更改這些參數的值時,您將能夠看到函數外部的更改。但是,我不認爲Excel單元格中的公式可以使用ByRef參數。 –

+0

從你的函數返回一個數組,然後在工作表中輸入公式作爲公式數組(使用Ctrl + Shift + Enter)http://www.cpearson.com/excel/ReturningArraysFromVBA.aspx –

+0

@TimWilliams,同意regd。返回一個數組,但是如何捕獲估計的參數rho和V,因爲它們在循環中發生變化,其中正在計算錯誤。我應該在循環內重新計算這些參數並在那裏更新它們的值? – user1155299

回答

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 
+0

,但所有這一切都返回我通過的原始ρ和V參數,即0.1和0.1。我希望它返回它在過程中估計的rho和V. – user1155299

+0

這些「估計」值在哪裏生成?除非您的原始輸入在函數中被修改,否則我沒有看到任何可能返回的其他變量。你不能返回你沒有的值。我不知道在你的其他函數'Afn'和'Vfn'中會發生什麼,這就是我所能提供的。 –

+0

而不是在這裏發佈這些功能,我想我應該回去跟蹤。感謝您一直以來的幫助。 – user1155299