Как получить переопределения в исторических API Bloomberg через Python - PullRequest
1 голос
/ 13 апреля 2011

В API Excel Bloomberg допускает переопределения и позволяет задавать определенную периодичность:

BDH("IBM EQUITY","BEST SALES","1/1/2011","2/1/2011","BEST FPERIOD OVERRIDE","BF",, "DAYS=W","FILL=C","SORT=D")

В Python:

import win32com.client
from datetime import datetime

blp = win32com.client.Dispatch('Bloomberg.Data.1')
ibm_sales=blp.BLPGetHistoricalData('ibm equity', 'best sales', datetime(2011,1,1), datetime(2011,2,1))

Как добавить переопределения "BEST FPERIOD OVERRIDE", "BF"?

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

Не уверен, что это может помочь, но в .NET SDK должен использоваться следующий синтаксис:

Element overrides = request["overrides"];
Element override1 = overrides.AppendElement();
override1.SetElement("fieldId", "BEST FPERIOD OVERRIDE");
override1.SetElement("value", "BF");
2 голосов
/ 11 апреля 2012

Одно изменение, которое вы должны внести в ответ Эрвина, чтобы сделать эту работу в python, - это изменение переопределений.AppendElement () для переопределений. AppendElment (). Я не уверен, почему эта опечатка проявляется в Python, а не в других языках, но это так.

0 голосов
/ 16 апреля 2019

Пожалуйста, смотрите эту функцию Python, которая может обрабатывать до 6 переопределений.

# Fill SessionOptions
sessionOptions = blpapi.SessionOptions()
sessionOptions.setServerHost('localhost')
sessionOptions.setServerPort(8194)

# Create a Session
session = blpapi.Session(sessionOptions)

# Start a Session
if not session.start():
    print("Failed to start session.")
    return

try:
    # Open service to get Bloomberg data from
    if not session.openService("//blp/refdata"):
        print("Failed to open //blp/refdata")
        return
    # Obtain previously opened service
    refDataService = session.getService("//blp/refdata")
    request = refDataService.createRequest("ReferenceDataRequest")
    request.getElement("securities").appendValue(securities)
    request.getElement("fields").appendValue(requestField)
    overrides1 = request.getElement("overrides").appendElement()
    overrides1.setElement("fieldId", overrideID1)
    overrides1.setElement("value", overrideValue1)

    if (overrideID2 is not None and overrideValue2 is not None):
        overrides2 = request.getElement("overrides").appendElement()
        overrides2.setElement("fieldId", overrideID2)
        overrides2.setElement("value", overrideValue2)      
    if (overrideID3 is not None and overrideValue3 is not None):
        overrides3 = request.getElement("overrides").appendElement()
        overrides3.setElement("fieldId", overrideID3)
        overrides3.setElement("value", overrideValue3)    
    if (overrideID4 is not None and overrideValue4 is not None):
        overrides4 = request.getElement("overrides").appendElement()
        overrides4.setElement("fieldId", overrideID4)
        overrides4.setElement("value", overrideValue4)  
    if (overrideID5 is not None and overrideValue5 is not None):
        overrides5 = request.getElement("overrides").appendElement()
        overrides5.setElement("fieldId", overrideID5)
        overrides5.setElement("value", overrideValue5)  
    if (overrideID6 is not None and overrideValue6 is not None):
        overrides6 = request.getElement("overrides").appendElement()
        overrides6.setElement("fieldId", overrideID6)
        overrides6.setElement("value", overrideValue6)  

    # Send the request
    session.sendRequest(request)

    # Process received events
    while(True):
        # We provide timeout to give the chance for Ctrl+C handling:
        ev = session.nextEvent(500)
        for msg in ev:
            if msg.messageType() == "ReferenceDataResponse":
                return msg.getElement("securityData").getValueAsElement(0).getElement("fieldData").getElementAsString(requestField)
        if ev.eventType() == blpapi.Event.RESPONSE:
            # Response completely received, so we could exit
            break
finally:
    # Stop the session
    session.stop()    
...