问题描述
在进行量化 交易的过程中,使用获取可转债标的行情的接口,但是提示报错12319*.SZ不支持。
解决方案
在 ptrade 量化平台中获取可转债数据时,如果遇到数据为空或提示 12319*.SZ不支持 的报错,通常是由以下几个原因导致的。请按照以下步骤进行排查和解决:
1. 检查可转债基础数据权限是否开通
如果您使用的是 get_cb_info() 接口获取可转债基础信息,该接口依赖于可转债基础数据权限。如果您的账户未开通此权限,调用该接口将返回空的 DataFrame。
解决方法:请联系您的开户券商,确认并申请开通 ptrade 的“可转债基础数据权限”。
2. 检查代码后缀及格式是否正确
ptrade 对标的代码的后缀有严格要求。可转债代码必须包含正确的市场后缀:
- 深交所可转债:后缀为
.SZ(例如:123190.SZ) - 上交所可转债:后缀为
.SS(例如:110059.SS)
如果报错提示不支持,请检查您传入的代码字符串是否拼写正确,是否多加了空格或使用了错误的市场后缀。
3. 确认标的当前是否可交易(是否已退市或停牌)
如果您请求的是已经退市的可转债,部分行情接口可能无法返回最新数据。建议先通过 get_cb_list() 获取当前市场所有可转债代码列表,确认该代码是否在列表中。
4. 正确获取可转债数据的代码示例
以下是一个标准的获取可转债列表及行情的示例代码,供您参考:
def initialize(context):
# 每日盘前获取可转债列表
run_daily(context, get_trade_cb_list, "9:25")
def get_trade_cb_list(context):
# 1. 获取当前可转债市场的所有代码列表
cb_list = get_cb_list()
# 2. 过滤出可交易的可转债(排除停牌、退市等)
cb_snapshot = get_snapshot(cb_list)
g.trade_cb_list = [cb_code for cb_code in cb_list if
cb_snapshot.get(cb_code, {}).get("trade_status") not in
[None, "HALT", "SUSP", "STOPT", "DELISTED"]]
log.info("当天可交易的可转债数量:%s" % len(g.trade_cb_list))
def handle_data(context, data):
# 假设我们要获取 123190.SZ 的行情
target_cb = '123190.SZ'
# 确保代码在可交易列表中
if target_cb in g.trade_cb_list:
# 获取历史行情
hist = get_history(5, '1d', 'close', security_list=target_cb)
log.info("可转债历史行情:\n%s" % hist)
# 获取基础信息(需券商开通权限)
cb_info = get_cb_info()
if not cb_info.empty:
info = cb_info[cb_info['bond_code'] == target_cb]
log.info("可转债基础信息:\n%s" % info)
else:
log.warning("获取可转债基础信息为空,请检查是否开通权限!")
总结:遇到 不支持 报错时,首先核对代码后缀(.SZ 或 .SS),其次使用 get_cb_list() 验证代码有效性;如果 get_cb_info() 返回空,请务必联系券商开通相应的数据权限。