如何在Python中加载Bloomberg Live曲线



使用xbbg,我尝试检索bloomberg交换曲线(s23也称为YCSW0023 Index(。

要做到这一点,我需要:

from xbbg import blp
import asyncio
async def main():
async for d in blp.live('s23', max_cnt = 1):
print(d)
await main()


main()

但它只会返回:

V:ABCD.py:16: RuntimeWarning: coroutine 'main' was never awaited
main()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

这是否意味着我用错了股票代码?这是否意味着我使用了错误的语法或其他什么?

在excel上检索实时曲线我们做:

=BCURVE("S23")

在Excel中,BCurve()函数做了很多事情:

  • S23曲线id解析为YCSW0023 Index曲线行情机(可能使用低级别的//blp/instrumentsBloomberg api服务(
  • 使用批量数据字段之一(可能是PAR_CURVE(获取曲线成员
  • 在电子表格上列出曲线工具、期限和类型
  • 在取决于仪器类型的单元格中创建单独的bdp函数调用:有些将是"实时"流媒体价格,但其他(如固定件(不会;有些人会将期货价格转换为利率,有些人不会

如何处理将取决于曲线的最终用途。你想要最新利率的一次性快照,还是希望实时利率在后台不断变化,不断更新曲线?

由于我猜不出你的确切要求,这里有一个可能的例子(我省略了曲线id/曲线ticker转换(。这至少应该为各种函数提供一个起点。

from xbbg import blp
import asyncio
import re
async def getTicks(result, tkrs):
remaining = len(tkrs)
async for tick in blp.live(tkrs,flds=['BID'],max_cnt=0):       
tkr = tick['TICKER']
res = result[tkr]
if res['Rate'] is None:
remaining -= 1
#Change futures prices to rates
if res['Type'] == 'FUTURE_RATE':
res['Rate'] = 100 - tick['BID']
else:
res['Rate'] = tick['BID']
#Break out if have a rate for all tickers
if remaining <= 0: break
curveTicker = 'YCSW0023 Index'
#Get the bulk data for par curve members
members = blp.bds(curveTicker,'PAR_CURVE')
tickers = [re.sub(' +', ' ',tkr) for tkr in members.ticker] #Get rid of extra spaces in ticker
tenors = [tnr for tnr in members.tenor]
types = [typ for typ in members.point_type]
results = { tickers[n]:{'Tenor':tenors[n],'Type': types[n],'Rate':None} for n in range(len(tickers))}
live_tickers = []
#Use bdp() for non-live rates (eg fixings)
for tkr in results:
res = results[tkr]
if res['Type'] == 'CASH':
res['Rate'] = blp.bdp(tkr,'PX_LAST').iloc[0][0]
else:
live_tickers.append(tkr)
#Kick off the capture of the live subscriptions
asyncio.run(getTicks(results,live_tickers))
for inst in results:
print(inst,results[inst])

输出:

US0003M Index {'Tenor': '3 MO', 'Type': 'CASH', 'Rate': 2.9210000000000003}
EDU2 Comdty {'Tenor': '128 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.3299999999999983}
EDZ2 Comdty {'Tenor': '212 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.8400000000000034}
EDH3 Comdty {'Tenor': '310 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.7900000000000063}
EDM3 Comdty {'Tenor': '401 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.6500000000000057}
EDU3 Comdty {'Tenor': '492 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.424999999999997}
EDZ3 Comdty {'Tenor': '583 DY', 'Type': 'FUTURE_RATE', 'Rate': 3.219999999999999}
USSWAP2 Curncy {'Tenor': '2 YR', 'Type': 'SWAP', 'Rate': 3.4258}
USSWAP3 Curncy {'Tenor': '3 YR', 'Type': 'SWAP', 'Rate': 3.1821}
USSWAP4 Curncy {'Tenor': '4 YR', 'Type': 'SWAP', 'Rate': 3.0191}
USSWAP5 Curncy {'Tenor': '5 YR', 'Type': 'SWAP', 'Rate': 2.9225}
USSW6 Curncy {'Tenor': '6 YR', 'Type': 'SWAP', 'Rate': 2.8721}
USSWAP7 Curncy {'Tenor': '7 YR', 'Type': 'SWAP', 'Rate': 2.8436}
USSW8 Curncy {'Tenor': '8 YR', 'Type': 'SWAP', 'Rate': 2.8264}
USSW9 Curncy {'Tenor': '9 YR', 'Type': 'SWAP', 'Rate': 2.8231}
USSWAP10 Curncy {'Tenor': '10 YR', 'Type': 'SWAP', 'Rate': 2.8309}
USSWAP11 Curncy {'Tenor': '11 YR', 'Type': 'SWAP', 'Rate': 2.852}
USSWAP12 Curncy {'Tenor': '12 YR', 'Type': 'SWAP', 'Rate': 2.8632}
USSWAP15 Curncy {'Tenor': '15 YR', 'Type': 'SWAP', 'Rate': 2.9057}
USSWAP20 Curncy {'Tenor': '20 YR', 'Type': 'SWAP', 'Rate': 2.9057}
USSWAP25 Curncy {'Tenor': '25 YR', 'Type': 'SWAP', 'Rate': 2.8384}
USSWAP30 Curncy {'Tenor': '30 YR', 'Type': 'SWAP', 'Rate': 2.7625}
USSWAP40 Curncy {'Tenor': '40 YR', 'Type': 'SWAP', 'Rate': 2.5562}
USSWAP50 Curncy {'Tenor': '50 YR', 'Type': 'SWAP', 'Rate': 2.3034}

最新更新