使用xbbg获取历史期权数据报错求助及Python脚本咨询
解决xbbg调用bds()的参数错误及历史期权数据下载脚本
一、解决xbbg中bds()参数错误问题
Excel的BDS函数允许按顺序追加位置参数,但xbbg的bds()函数仅接受前两个位置参数(标的代码、请求字段),后续的Override参数必须通过关键字参数传递,不能直接按位置追加。
正确调用方式如下:
from xbbg import blp # 获取2019年10月10日SPY的期权链 opt_chain = blp.bds("SPY US Equity", "opt_chain", single_date_override="20191010") print(opt_chain)
核心逻辑:把single_date_override作为关键字参数传入,而非位置参数,即可避免"参数数量过多"的错误。
二、下载标的历史期权OHLCV及持仓量的Python脚本
以下是可复用的脚本,实现从获取期权链到批量下载合约数据的完整流程:
from xbbg import blp import pandas as pd import time def download_historical_option_data( ticker: str, target_date: str, fields: list = ["PX_OPEN", "PX_HIGH", "PX_LOW", "PX_LAST", "PX_VOLUME", "OPEN_INT", "BID", "ASK"] ) -> pd.DataFrame: # 1. 获取指定日期的期权链(包含已到期合约) opt_chain = blp.bds( ticker, "opt_chain", single_date_override=target_date, include_expired_contracts="Y" ) opt_tickers = opt_chain["Security Description"].tolist() # 2. 分批下载合约数据,避免请求限流 all_data = [] batch_size = 50 # 每批请求的合约数量 for i in range(0, len(opt_tickers), batch_size): batch_tickers = opt_tickers[i:i+batch_size] # 批量下载单日数据 data = blp.bdh( batch_tickers, fields, start_date=target_date, end_date=target_date ) data = data.stack().reset_index().rename(columns={"level_1": "Option Ticker"}) all_data.append(data) time.sleep(1) # 每批请求后延迟1秒,减少限流风险 # 3. 合并所有数据 result = pd.concat(all_data, ignore_index=True) return result # 示例调用:下载2019年10月10日SPY期权的盘口、OHLCV及持仓量 spy_opt_data = download_historical_option_data("SPY US Equity", "20191010") print(spy_opt_data.head())
脚本说明
- 支持批量下载,通过分批请求+延迟避免彭博接口限流
- 默认包含买卖盘(
BID/ASK)、OHLCV及持仓量字段,可根据需求调整 - 自动整合所有期权合约数据,返回结构化DataFrame
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

