Bloomberg API 参数传递

Bloomberg API argument passing

作为我下载许多期权波动率项目的一部分,我之前的代码将给定资产的 CHAIN_TICKERS 保存在文本文件 (BB.txt) 中,格式如下:

MSFT US 01/20/17 C23
MSFT US 01/20/17 C25
MSFT US 01/20/17 C30
MSFT US 01/20/17 C33
MSFT US 01/20/17 C35
MSFT US 01/20/17 C38
MSFT US 01/20/17 C40
MSFT US 01/20/17 C43
MSFT US 01/20/17 C45
MSFT US 01/20/17 C47
MSFT US 01/20/17 C50
MSFT US 01/20/17 C52.5
MSFT US 01/20/17 C55
MSFT US 01/20/17 C57.5
MSFT US 01/20/17 C60
MSFT US 01/20/17 C65
MSFT US 01/20/17 C70

首先,我定义了一个结构来保存不同选项的相关数据:

struct option{
string ticker;
char date;
double strike;
double vol;
} options [1000];

现在,为了进一步分析,我想下载这些期权的波动率。目前我只是逐行读取文本文件,然后将代码传递给 for 循环内的下载函数。

std::fstream myfile("BB.txt");
int linenumber = 0;
string linetext;
string ticker;
while (std::getline(myfile, linetext))
{
    options[linenumber].ticker = linetext;
    linenumber++;
}


for (int i = 0; i < linenumber; i++)
{
    std::cout << options[i].ticker << endl;
    ticker = options[i].ticker;
    try
    {
        example.run2(ticker);
    }
    catch (Exception &e)
    {
        std::cerr << "Library Exception!!!" << e.description() << std::endl;
    }
}

我的 run2 的代码如下所示:

public void run2(string ticker)
{ ...
request.append("securities", ticker);
request.append("fields", "IVOL_MID");
CorrelationId cid(this);
session.sendRequest(request, cid);

(followed by the eventhandler processMessage taken from the SimpleRefDataOverrideExample.cpp of the Bloomberg API)

现在,问题在行中:

request.append("securities", ticker);

错误 C2664:无法将参数 2 从 'std::string' 转换为 'bool',因此附加值似乎必须是布尔值?这让我感到困惑,因为之前我总是在字段中输入 "MSFT US EQUITY" 之类的文本而没有任何问题。

那么,如何将我的代码传递给 run2 函数,以便下载相应代码的波动率?

(此外,有没有比将我的所有 CHAIN_TICKERS 导出到文本文件然后重新导入更简单的方法?)

有文档 blpapi::Request hereblpapi::Request::append 没有在第二个位置占用 std::string 的重载。关于 bool 的抱怨只是您的编译器试图猜测您可能指的是哪个重载。

尝试使用 const char * 的版本,使用 ticker.c_str():

request.append("securities", ticker.c_str());