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
here。blpapi::Request::append
没有在第二个位置占用 std::string
的重载。关于 bool
的抱怨只是您的编译器试图猜测您可能指的是哪个重载。
尝试使用 const char *
的版本,使用 ticker.c_str()
:
request.append("securities", ticker.c_str());
作为我下载许多期权波动率项目的一部分,我之前的代码将给定资产的 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
here。blpapi::Request::append
没有在第二个位置占用 std::string
的重载。关于 bool
的抱怨只是您的编译器试图猜测您可能指的是哪个重载。
尝试使用 const char *
的版本,使用 ticker.c_str()
:
request.append("securities", ticker.c_str());