Bloomberg API FX Forwards NDFs not returning prices

Viewed 238

Please can anyone advise how I may retrieve FX Forwards NDF's outright bid / outright ask or indeed any price data for USD/KRW for the 1W, 1M, 3M etc tenors.

I have attempted to follow the DAPI instructions as well as attempting to find answers via Stackoverflow to no avail. I can however succesfully retrieve live bid asks for SPOT USD KRW or even Equities such as AAPL no problem

I have tried using different combinations of the tickers, although I see no error codes no actual live prices come back? Please does anyone have any ideas to get live ticking NDF outright prices:

Any & all help is greatly appreciated :) as Bloomberg seemingly don't provide any assistance

['USD/KRW N 2M Curncy'], ['USD/KRW N 3M Curncy'] , ['USD/KRW N 3M ICAP Curncy']

p.s the Excel Bloomberg formula such as =BFxForward("USDKRW","3M","BidOutright") is essentially what I'm trying to replicate via python, attempting to follow the DAPI instructions seems to not work.

I have used the C++ BLPAPI pdf examples to attempt to get this working however no NDF examples seemingly exist.

def main_subscribe():


tickers = ['USD/KRW N 2M Curncy', 'USD/KRW N 6M Curncy', 'USD/KRW N 9M Curncy']
fields = ['BID', 'LAST_BID_TIME_TODAY_REALTIME', 'ASK','MID']
interval = 2
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 subscription data from
    if not session.openService('//blp/mktdata'):
        print("Failed to open '//blp/mktdata")
        return

    # init subscriptions
    subs = blpapi.SubscriptionList()
    flds = ','.join(fields)
    istr = interval and 'interval=%.1f' % interval or ''
    for ticker in tickers:
        subs.add(ticker, flds, istr, blpapi.CorrelationId(ticker))
    
    session.subscribe(subs)

    # Process received events
    while(True):
        # We provide timeout to give the chance for Ctrl+C handling:
        ev = session.nextEvent(900)
        for msg in ev:
            print(msg)
        # if ev.eventType() == blpapi.Event.SUBSCRIPTION_DATA:


        #     try:
        #         for msg in ev:
        #             #print(msg)
        #             print(f"{fields[0]}:{msg.getElementAsString(fields[0])} , {fields[3]}:{msg.getElementAsString(fields[3])} , {fields[2]}:{msg.getElementAsString(fields[2])} , {fields[1]}:{msg.getElementAsString(fields[1])}")
        #     except Exception as e:
        #         print(e)
        #         #print(msg)
        #         None
        
finally:
    # Stop the session
    session.stop()

This is the output when main-subscribe is run:

CID: {[ valueType=POINTER classId=0 value=0000024DBF510CB0 ]}
RequestId: -----------------------------
MarketDataEvents = {
MKTDATA_EVENT_TYPE = SUMMARY
MKTDATA_EVENT_SUBTYPE = INITPAINT
API_RULES_VERSION = 201411210
SIMP_LAST_PX_ALL_SESS_DIR_RT = 1
SMART_FIELDS_METADATA_VERSION_RT = "21.10.08.02 "
IS_DELAYED_STREAM = false
MID = 1.000000
RT_API_MACHINE = "apipubx0@----------"
RT_YLD_CHG_NET_1D = 0.000000
IND_BID_FLAG = false
IND_ASK_FLAG = false
BASE_PRICE_ENABLED_RT = false
EVT_DELTA_TIMES_RT = 0
ALL_PRICE_COND_CODE = ""}
1 Answers

This is the KRW <Curncy> FRD <Go> screen in the Bloomi Terminal:

enter image description here

If you hover the mouse over the 3M outright Bid (in the circle), the pop-up shows the underlying ticker to be KWN+3M BGN Curncy.

When I put this ticker in Excel as: =BDP("KWN+3M BGN Curncy","BID","UpdateFrequency",500) then I get updating bid side pricing which matches the Terminal screen.

Since the underlying DAPI for Excel and Python is the same, I would guess that this ticker will work with the blpapi too. I usually find it is quicker to test tickers and fields in Excel.

Related