C++ QuantLib:Garch需要帮助

C++ QuantLib:Garch需要帮助,c++,quantlib,C++,Quantlib,我正在一个简单的Windows命令提示符应用程序中使用QuantLib,但无法使Garch函数工作 我不确定我是否理解如何使用Garch11对象,这可能是我的程序无法工作的原因之一。我也找不到任何使用它的例子。文件也(国际海事组织)含糊不清。我很感激任何关于如何使用它的帮助或线索 我想做的是通过一个价格向量的方法(最小值4,因为这是garch模型对象的最小值),并返回这个系列的波动率作为向量或双精度,不介意 有两种方法可以构建我的目标,一种是通过希腊人,另一种是通过自我优化。这两种方法都将在我的

我正在一个简单的Windows命令提示符应用程序中使用QuantLib,但无法使Garch函数工作

我不确定我是否理解如何使用Garch11对象,这可能是我的程序无法工作的原因之一。我也找不到任何使用它的例子。文件也(国际海事组织)含糊不清。我很感激任何关于如何使用它的帮助或线索

我想做的是通过一个价格向量的方法(最小值4,因为这是garch模型对象的最小值),并返回这个系列的波动率作为向量或双精度,不介意

有两种方法可以构建我的目标,一种是通过希腊人,另一种是通过自我优化。这两种方法都将在我的应用程序中进行测试

目前,当我运行代码时,每次运行代码都会得到不同的输出,例如:

D:\Users\ypx7647\Documents\Visual Studio 2017\Projects\GarchTest\Release>GarchTest.exe
iQuotes size = 4
ts size = 4
GarchByGreeks iTs size = 4
_alpha = 0.000000 _beta = 0.000000 _omega = 0.000000
oTs size = 4
tsOut size = 4
oGarch[0] = 121.182504
oGarch[1] = 121.182504
oGarch[2] = 121.182504
oGarch[3] = 121.182504
oGarch size = 4
og size = 4

D:\Users\ypx7647\Documents\Visual Studio 2017\Projects\GarchTest\Release>GarchTest.exe
iQuotes size = 4
ts size = 4
GarchByGreeks iTs size = 4
_alpha = 0.000000 _beta = 0.000000 _omega = 0.000000
oTs size = 4
tsOut size = 4
oGarch[0] = 11003897096.575457
oGarch[1] = 11000266346.069284
oGarch[2] = 10995727907.936573
oGarch[3] = 10998450970.816200
oGarch size = 4
og size = 4
调试代码后,我看到使用希腊语传递的Garch11构造函数没有注册传递的相同值。这是一个问题

接下来,返回的对象返回与输入对象相同数量的值。我不想这样,只需要返回波动性。这是第二个问题

我遇到的另一个问题是,我无法将EndCriteria参数的大小参数作为变量传递,这会导致应用程序崩溃。据我所知,所有参数均配置为尺寸参数,因此无需转换或铸造

为了让代码正常工作(我不是C++专家),我需要做哪些更改

以下是我的代码(包括调试行):

GarchTest.cpp

#include "stdafx.h"
#include "CGarch.h"

int main()
{
//  CGarch* Garch = new CGarch(Method::SelfOptimisation);
CGarch* Garch = new CGarch();

std::vector<double> p, og;

p.push_back(121.230000);
p.push_back(121.190000);
p.push_back(121.140000);
p.push_back(121.170000);

Garch->GarchOnArray(p,og);

std::cout << "og size = " << std::to_string(og.size()) << std::endl;

delete Garch;
return 0;
}
#包括“stdafx.h”
#包括“CGarch.h”
int main()
{
//CGarch*Garch=新的CGarch(方法:自优化);
CGarch*Garch=新CGarch();
std::向量p,og;
p、 推回(121.230000);
p、 推回(121.190000);
p、 推回(121.140000);
p、 推回(121.170000);
Garch->GarchOnArray(p,og);
std::cout代码,例如

CGarch::CGarch()
{
    _method = Method::Greeks;

    CGarch::CGarch(0.0, 0.1, 0.3);
}
无效。如果要委托给另一个构造函数,可以在C++11及更高版本中编写

CGarch::CGarch() : CGarch(0.0, 0.1, 0.3)
{
    _method = Method::Greeks;
}

我不知道你的版本是什么(这取决于你的编译器决定它的意思)但我怀疑这只是创建了一个单独的临时文件,并且您的数据成员没有初始化。

这些类型的不一致行为通常指向代码中有未初始化的变量。使用调试器逐步检查您的代码,找出您的结果与预期的不同之处。@Frank是的,但我确实想到了这一点,我不确定我的QuantLib调用应用程序是否正确(因为它基于测试套件代码和文档)我看不到任何未初始化的。但基本上你可能是对的。@hnefatl有效点。我总是忘记调试器及其有用性。谢谢你的输入。我不知道这一点。但是,鉴于你没有对QuantLib特定代码发表评论,我不得不假设它是正确的。我的假设正确吗?我知道我自己从来没有用过Garch,所以我得找点时间看看你的代码。如果你做了上面的更正会怎么样?
CGarch::CGarch()
{
    _method = Method::Greeks;

    CGarch::CGarch(0.0, 0.1, 0.3);
}
CGarch::CGarch() : CGarch(0.0, 0.1, 0.3)
{
    _method = Method::Greeks;
}