Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 使用VBA返回估计参数_Function_Vba - Fatal编程技术网

Function 使用VBA返回估计参数

Function 使用VBA返回估计参数,function,vba,Function,Vba,我使用下面的函数输入两个初始参数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 = p

我使用下面的函数输入两个初始参数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
0.23
0.24
0.25
0.26
在单元格D3:D6中,我有带值的MktVol

30
31
32
33
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
。有人能告诉我如何修复此函数吗?

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


VBA函数只能返回一个值。如果您在VBA中工作,我建议将
rho
V
作为ByRef参数添加到函数定义中;然后当函数更改这些参数的值时,您将能够看到函数外的更改。但是,我认为公式不适用Excel单元格可以使用ByRef参数。从函数中返回一个数组,然后在工作表中以公式数组的形式输入公式(使用Ctrl+Shift+enter)@TimWilliams,同意regd。返回一个数组,但是我如何在计算错误的循环中捕获估计参数rho和V的变化。我应该在循环中重新计算这些参数并在那里更新它们的值吗?rho和V在循环中如何变化?是否将它们通过ByRef传递给函数Vfn?是否要返回所有值还是只返回最终值?我只想返回最终值。现在,第一个循环接受rho和V的初始值。我不确定如何通过ByRef传递它并正确执行。但所做的只是返回我传递的原始rho和V参数,即0.1和0.1。我希望它返回它所传递的rho和V过程中的估计。那些“估计”在哪里正在生成值?除非您的原始输入在函数中被修改,否则我看不到任何其他可以返回的变量。您不能返回您没有的值。我不知道在您的其他函数
Afn
Vfn
中会发生什么,所以我只能提供这些。我想,与其在这里发布这些函数,不如在这里发布这些函数我应该回去查一下。谢谢你的帮助。