跳转到内容

可做空

Shortable 用来查看股票可做空状态。它需要在 genericTickList 中请求 236

这个字段只表示可做空程度或可借状态提示,不等于你的账户一定可以成功卖空。最终还要受账户权限、股票借券、风控和订单检查影响。

官方参考:Available Tick Types

ShortabletickGeneric() 值是一个可做空程度提示:

返回值范围中文含义
> 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。开发时应以实际回调保存原始 tickTypevalue,不要只看请求编号。

AAPL 236 请求到达 TWS,但没有返回可做空字段值:

TICK_REQ_PARAMS=reqId=97803;name=shortable_236;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0
GENERIC_ROWS=0
ERROR=reqId=97803;name=shortable_236;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97803;name=shortable_236;code=300;msg=无法使用tickerId找到EId::97803

这说明请求格式被 TWS 接收,但 API 行情订阅不足。

卖空相关系统不要只依赖 Shortable 一个字段。更稳妥的流程是:

  1. 读取 Shortable 作为界面提示或预检查。
  2. 下单前做账户和合约检查。
  3. 用 WhatIf 或订单预检查确认保证金和拒单风险。
  4. 监听订单状态和错误码,处理最终拒单。

Shortable 能帮助提前提示风险,但不是卖空成功的承诺。