跳转到内容

接收债券详情

reqContractDetails() 查询的是债券合约时,TWS API 会通过 bondContractDetails() 返回债券详情。

def bondContractDetails(self, reqId, contractDetails):
...

债券详情仍然使用 ContractDetails 对象,只是会填充更多债券相关字段,例如 CUSIP、评级、票息、到期日、可赎回/可回售条款等。

普通合约详情债券详情
重点是 conId、交易所、币种、交易时间还需要债券评级、票息、到期日、赎回/回售条款
股票可用 symbol + STK + SMART + USD债券更依赖 CUSIP/ISIN 等精确标识
返回 contractDetails()返回 bondContractDetails()
股票、期权、期货更常用于行情和下单示例债券字段更多用于产品识别、展示和适当性检查
字段中文含义说明
cusipCUSIP 编码美国和加拿大证券常用识别码。
ratings债券评级可能包含多个评级机构信息。
descAppend追加描述债券描述补充信息。
bondType债券类型例如公司债、政府债等,实际返回以 TWS 为准。
couponType票息类型固定、浮动等。
coupon票息债券票面利率。
maturity到期日债券到期日期。
issueDate发行日债券发行日期。
callable是否可赎回发行人是否可提前赎回。
putable是否可回售持有人是否可按条款回售。
convertible是否可转换是否可转换为其他证券。
nextOptionDate下一可选日期下一次可赎回、可回售或其他可选条款日期。
nextOptionType下一可选类型下一可选条款类型。
nextOptionPartial是否部分可选是否只适用于部分本金或部分条款。
notes备注债券相关补充说明。

债券字段不一定每个都有值。程序要能处理空字符串、空日期和未知字段。

债券合约比股票更依赖明确标识。不要只用 symbol 猜债券,通常应使用 secIdTypesecId,例如 CUSIP、ISIN 等。

from ibapi.contract import Contract
bond = Contract()
bond.secType = "BOND" # BOND 表示债券
bond.exchange = "SMART" # 常见路由写法,实际以账户和产品为准
bond.currency = "USD" # 债券计价币种
bond.secIdType = "CUSIP" # 也可能使用 ISIN 等
bond.secId = "实际 CUSIP" # 使用真实且有权限查询的证券 ID

公开示例不要编造 CUSIP 或真实债券返回。债券代码、评级和发行信息属于具体产品信息,实际使用时应从 TWS、账户可见数据或授权数据源中确认。

def bondContractDetails(self, reqId, details):
row = {
"reqId": reqId,
"conId": details.contract.conId,
"currency": details.contract.currency,
"cusip": details.cusip,
"ratings": details.ratings,
"bondType": details.bondType,
"couponType": details.couponType,
"coupon": details.coupon,
"maturity": details.maturity,
"issueDate": details.issueDate,
"callable": details.callable,
"putable": details.putable,
"convertible": details.convertible,
"nextOptionDate": details.nextOptionDate,
"nextOptionType": details.nextOptionType,
"notes": details.notes,
}
self.rows.append(row)

如果把债券详情展示给用户,建议把空值统一显示为“未返回”,不要直接展示空字符串。

债券合约定义和债券行情不是同一件事。能查到债券详情,不代表一定能订阅实时行情;能在 TWS 中看到某个债券,也不代表所有字段都能通过 API 返回。

常见影响因素包括:

  • 账户地区与产品权限。
  • 债券数据源可见性。
  • 使用的证券 ID 是否准确。
  • TWS 登录账户是否能访问该产品。
  • 该债券是否仍可交易或仍有可用市场数据。

债券详情可以用 AAPL 股票示例验证吗?

Section titled “债券详情可以用 AAPL 股票示例验证吗?”

不可以。AAPL 股票会走普通 contractDetails(),不会走债券回调。只有债券合约才会触发 bondContractDetails()

债券一定有行情权限才能查吗?

Section titled “债券一定有行情权限才能查吗?”

不一定。合约定义和实时行情是不同概念,但债券数据可见性会受账户、地区和产品权限影响。实际返回以 TWS 为准。

债券示例需要真实产品标识和权限。公开文档里给出结构和字段解释,比编造一个不可用 CUSIP 更可靠。

如果没有收到 bondContractDetails() 怎么办?

Section titled “如果没有收到 bondContractDetails() 怎么办?”

先确认你请求的是 secType="BOND",并且使用了正确的 CUSIP、ISIN 或其他证券 ID。若仍没有返回,再检查 TWS 是否能看到该债券、账户是否有对应产品权限,以及是否出现非信息类错误码。