c – 通过API的Bloomberg Equity Option Chain

c – 通过API的Bloomberg Equity Option Chain,第1张

概述我目前正在开展一个项目,可以帮助我为给定的股票创建隐含的波动率表面.为此,我正在编写一个脚本,将下载此特定股票的所有可用选项 – 通过我收集的内容,可以通过Bloomberg API使用批量字段/覆盖发送请求.这是我目前的代码: d_host = "localhost";d_port = 8194;SessionOptions sessionOptions;sessionOptions.se 我目前正在开展一个项目,可以帮助我为给定的股票创建隐含的波动率表面.为此,我正在编写一个脚本,将下载此特定股票的所有可用选项 – 通过我收集的内容,可以通过Bloomberg API使用批量字段/覆盖发送请求.这是我目前的代码:
d_host = "localhost";d_port = 8194;Sessionoptions sessionoptions;sessionoptions.setServerHost(d_host.c_str());sessionoptions.setServerPort(d_port);Session session(sessionoptions);Service refDataService = session.getService("//blp/refdata");Request request = refDataService.createRequest("ReferenceDataRequest");request.append("securitIEs","MSFT US EQUITY");request.append("fIElds","CHAIN_TICKERS");// add overrIDesElement overrIDes = request.getElement("overrIDes");Element overrIDe1 = overrIDes.appendElement();overrIDe1.setElement("fIEldID","CHAIN_PUT_CALL_TYPE_OVRD");overrIDe1.setElement("value","C");Element overrIDe2 = overrIDes.appendElement();overrIDe2.setElement("fIEldID","CHAIN_POINTS_OVRD");overrIDe2.setElement("value",100);Element overrIDe3 = overrIDes.appendElement();overrIDe3.setElement("fIEldID","CHAIN_EXP_DT_OVRD");overrIDe3.setElement("value","20250203");std::cout << "Sending Request: " << request << std::endl;CorrelationID cID(this);session.sendRequest(request,cID);(followed by event handling)

现在我有几个问题/问题:

>代码编译没有问题,但在Bloomberg终端上运行时,会打印以下错误:

我该如何解决这个问题呢?我假设我在覆盖字段的某个地方犯了一个错误.
>我需要调整我的代码以下载特定成熟度下的所有可用选项,即我希望获得所有选项的列表,直到今天15年.
>然后,我如何下载每个期权的隐含波动率?我是否需要将代码存储在一个数组中,然后为每个选项发送一个“IVol_MID”字段的请求,或者是否有某种方法可以立即获得所有的波动率?

编辑:这是我的事件处理程序的代码,因为这似乎是问题.

session.sendRequest(request,cID);    while (true)    {        Event event = session.nextEvent();        MessageIterator msgiter(event);        while (msgiter.next()) {            Message msg = msgiter.message();            if (msg.correlationID() == cID) {                processMessage(msg);            }        }        if (event.eventType() == Event::RESPONSE) {            break;        }    } voID processMessage(Message &msg){    Element securityDataArray = msg.getElement(Security_DATA);    int numSecuritIEs = securityDataArray.numValues();    for (int i = 0; i < numSecuritIEs; ++i) {        Element securityData = securityDataArray.getValueAsElement(i);        std::cout << securityData.getElementAsstring(Security)            << std::endl;        const Element fIEldData = securityData.getElement(FIELD_DATA);        for (size_t j = 0; j < fIEldData.numElements(); ++j) {            Element fIEld = fIEldData.getElement(j);            if (!fIEld.isValID()) {                std::cout << fIEld.name() << " is NulL." << std::endl;            }            else {                std::cout << fIEld.name() << " = "                    << fIEld.getValueAsstring() << std::endl;            }        }        Element fIEldExceptionArray =            securityData.getElement(FIELD_EXCEPTIONS);        for (size_t k = 0; k < fIEldExceptionArray.numValues(); ++k) {            Element fIEldException =                fIEldExceptionArray.getValueAsElement(k);            std::cout <<                fIEldException.getElement(ERROR_INFO).getElementAsstring(                "category")                << ": " << fIEldException.getElementAsstring(FIELD_ID);        }        std::cout << std::endl;    }
解决方法 问题出在您未显示的事件处理代码中.你可能错误地解析它.

运行您的查询我得到以下结果:

MSFT US 01/20/17 C23MSFT US 01/20/17 C25MSFT US 01/20/17 C30MSFT US 01/20/17 C33MSFT US 01/20/17 C35MSFT US 01/20/17 C38MSFT US 01/20/17 C40MSFT US 01/20/17 C43MSFT US 01/20/17 C45MSFT US 01/20/17 C47MSFT US 01/20/17 C50MSFT US 01/20/17 C52.5MSFT US 01/20/17 C55MSFT US 01/20/17 C57.5MSFT US 01/20/17 C60MSFT US 01/20/17 C65MSFT US 01/20/17 C70

注意:我使用的是Java API,但它基本相同.

更新:

您的代码不能正确解析字段数据数组元素:返回的数据包含一系列序列,因此您需要分两步解析它.而不是fIEld.getValueAsstring(),你应该有一个看起来像这样的代码(它在Java中,没有经过测试):

//...for (int i = 0; i < fIEld.numValues(); i++) {  Element sequence = fIEld.getValueAsElement(i);  ElementIterator it = sequence.elementIterator();  while (it.hasNext()) {    Element e = it.next();    System.out.println(e.getValueAsstring());  }

如果这不起作用,我建议您逐步调试代码并检查您收到的数据类型并相应地处理它.

有关详细信息,请阅读Developer’s guide,特别是A.2.3.

总结

以上是内存溢出为你收集整理的c – 通过API的Bloomberg Equity Option Chain全部内容,希望文章能够帮你解决c – 通过API的Bloomberg Equity Option Chain所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1240925.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存