You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:55:33