可做空
Shortable 用来查看股票可做空状态。它需要在 genericTickList 中请求 236。
这个字段只表示可做空程度或可借状态提示,不等于你的账户一定可以成功卖空。最终还要受账户权限、股票借券、风控和订单检查影响。
官方参考:Available Tick Types
Shortable 的 tickGeneric() 值是一个可做空程度提示:
| 返回值范围 | 中文含义 |
|---|---|
> 2.5 | 至少有 1000 股可供卖空。 |
> 1.5 | 如果能定位到可借股票,可能可卖空。 |
<= 1.5 | 不可卖空。 |
较新的 TWS 还可能返回 Shortable Shares,表示可卖空股数;它仍然不等于订单一定成交。
app.reqMktData( 97803, aapl_stock(), "236", False, False, [],)Shortable 常通过 tickGeneric() 返回:
def tickGeneric(self, reqId, tickType, value): if tickType == 46: print("可做空状态", reqId, value)genericTickList 中写的是请求编号 236,回调里常见的字段编号是 46。开发时应以实际回调保存原始 tickType 和 value,不要只看请求编号。
参考边界样例
Section titled “参考边界样例”AAPL 236 请求到达 TWS,但没有返回可做空字段值:
TICK_REQ_PARAMS=reqId=97803;name=shortable_236;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0GENERIC_ROWS=0ERROR=reqId=97803;name=shortable_236;code=10089;msg=请求的市场数据对于API来说需要额外订阅ERROR=reqId=97803;name=shortable_236;code=300;msg=无法使用tickerId找到EId::97803这说明请求格式被 TWS 接收,但 API 行情订阅不足。
卖空相关系统不要只依赖 Shortable 一个字段。更稳妥的流程是:
- 读取
Shortable作为界面提示或预检查。 - 下单前做账户和合约检查。
- 用 WhatIf 或订单预检查确认保证金和拒单风险。
- 监听订单状态和错误码,处理最终拒单。
Shortable 能帮助提前提示风险,但不是卖空成功的承诺。