अस्वीकरण: पायथन और ब्लूमबर्ग एपीआई के लिए नया।

मैं पाइथन का उपयोग करके सुरक्षा के लिए एक डेटा बिंदु से पूछताछ करने का प्रयास कर रहा हूं - तृतीय पक्ष मॉड्यूल बाधाओं के कारण किसी अन्य मॉड्यूल का उपयोग नहीं कर रहा हूं।

मैंने BBG का SimpleHistoryExample लिया है और अपनी आवश्यकताओं के अनुसार संपादित किया है। अब मुझे केवल PX_LAST का मान वापस करने का तरीका खोजने की आवश्यकता है।

# SimpleHistoryExample.py
from __future__ import print_function
from __future__ import absolute_import

import blpapi
from optparse import OptionParser
prevMonthEnd = "20191031"

def parseCmdLine():
    parser = OptionParser(description="Retrieve reference data.")
    parser.add_option("-a",
                      "--ip",
                      dest="host",
                      help="server name or IP (default: %default)",
                      metavar="ipAddress",
                      default="localhost")
    parser.add_option("-p",
                      dest="port",
                      type="int",
                      help="server port (default: %default)",
                      metavar="tcpPort",
                      default=8194)

    (options, args) = parser.parse_args()

    return options


def main():
    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = blpapi.SessionOptions()
    sessionOptions.setServerHost(options.host)
    sessionOptions.setServerPort(options.port)

    print("Connecting to %s:%s" % (options.host, options.port))
    # 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 historical data from
        if not session.openService("//blp/refdata"):
            print("Failed to open //blp/refdata")
            return

        # Obtain previously opened service
        refDataService = session.getService("//blp/refdata")

        # Create and fill the request for the historical data
        request = refDataService.createRequest("HistoricalDataRequest")
        request.getElement("securities").appendValue("EURUSD Curncy")
        request.getElement("fields").appendValue("PX_LAST")
        request.set("periodicityAdjustment", "ACTUAL")
        request.set("periodicitySelection", "DAILY")
        request.set("startDate", "20191130")
        request.set("endDate", "20191130")
        request.set("maxDataPoints", 1000)

        print("Sending Request:", request)
        # 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:
                print(msg)

            if ev.eventType() == blpapi.Event.RESPONSE:
                # Response completely received, so we could exit
                break
    finally:
        # Stop the session
        session.stop()

if __name__ == "__main__":
    print("SimpleHistoryExample")
    try:
        main()
    except KeyboardInterrupt:
        print("Ctrl+C pressed. Stopping...")
0
Sam Harper 2 पद 2019, 18:00

2 जवाब

सबसे बढ़िया उत्तर

आपके पास एक ऐतिहासिक डेटा अनुरोध है, जिसका अधिकांश मामलों में मतलब है कि आप कई दिनों का अनुरोध कर रहे हैं, इसलिए आपको इससे निपटना होगा और आप प्रत्येक दिन के लिए प्रारूप कैसे चाहते हैं। इस मामले में आप सिर्फ एक दिन का अनुरोध कर रहे हैं, तो चलिए उस बारे में बात करते हैं।

सबसे पहले, सप्ताहांत न चुनें। आपको एक दिन चाहिए जहां डेटा मौजूद होने की उम्मीद है। एक दिन पहले कोशिश करें। कच्ची प्रतिक्रिया इस तरह दिखती है:

HistoricalDataResponse = {
    securityData = {
        security = "EURUSD Curncy"
        eidData[] = {
        }
        sequenceNumber = 0
        fieldExceptions[] = {
        }
        fieldData[] = {
            fieldData = {
                date = 2019-11-29
                PX_LAST = 1.101800
            }
        }
    }
}

उनमें से प्रत्येक के लिए, blpapi डेटा संरचनाओं तक पहुँचा जा सकता है। अंततः, यह आप पर निर्भर करता है कि आप इसे कैसे संरचित करना चाहते हैं।

इसका उपयोग इस रूप में न करें, क्योंकि यह त्रुटिपूर्ण है, लेकिन यहां डेटा प्राप्त करने का एक उदाहरण दिया गया है। यह इसे एक ही तारीख के लिए एक निर्देश में डाल रहा है, जो आपके प्रतिक्रिया अनुभाग पर ध्यान केंद्रित कर रहा है जो आपके ऊपर दिए गए प्रश्न में है:

# inside your existing while loop above
if ev.eventType() == blpapi.Event.RESPONSE:
    response = {}
    sec_data = msg.getElement("securityData")
    field_data = sec_data.getElement("fieldData")
    for individual_date_quote in field_data.values():
        for elem in individual_date_quote.elements():
            response[str(elem.name())] = elem.getValueAsString()
    print("response dict:", response)
    # Response completely received, so we could exit
    break

जो आपको देगा:

response dict: {'date': '2019-11-29', 'PX_LAST': '1.101800'}

Jika menggunakan Universal Image Loader, pastikan Anda menggunakan .bitmapConfig(Bitmap.Config.RGB_565) karena menggunakan paling sedikit memori per gambar.

1
NikT 25 मई 2021, 02:53

यदि आप केवल मूल्य का उपयोग करना चाहते हैं और इसे किसी निर्देश या वस्तु में संग्रहीत किए बिना प्रिंट करना चाहते हैं, तो आप इसे निम्नानुसार कर सकते हैं:

while(True):
    ev = session.nextEvent(500)
    for msg in ev:
        print(msg.getElement("securityData").getElement("fieldData").getElement("fieldData").getElementAsInt("PX_LAST"))

आप getElementAsFloat() का उपयोग करके एक फ्लोट के रूप में मान भी प्राप्त कर सकते हैं जो कि प्रारूप है जो मैं पूर्णांक के बजाय सुझाऊंगा।

अगर आप इसे कहीं स्टोर करना चाहते हैं तो आप इसके लिए सिर्फ एक निर्देश बना सकते हैं और कुछ ऐसा कर सकते हैं:

while(True):
    ev = session.nextEvent(500)
    for msg in ev:
        oneDateForEquity = msg.getElement("securityData").getElement("fieldData").getElement("fieldData").getElementAsString("date")
        someDict[oneDateForEquity]['PX_LAST'] = msg.getElement("securityData").getElement("fieldData").getElement("fieldData").getElementAsString("PX_LAST")

और अन्य PX_LAST मानों को तिथियों के साथ संग्रहीत करें।

1
Cagri 9 पद 2020, 22:44