请教大佬,PositionData 中的 volume - frozen 得到的是可用数量吗?也就是说,对于A股T+1来说如果原来空仓,今天买入的数量 = volume = frozen ,T+1日 frozen = 0,yd_volume = volume 吗
请教大佬,PositionData 中的 volume - frozen 得到的是可用数量吗?也就是说,对于A股T+1来说如果原来空仓,今天买入的数量 = volume = frozen ,T+1日 frozen = 0,yd_volume = volume 吗
我来帮您查询 PositionData 的字段定义和含义。
让我再查询 PositionData 的具体字段定义:
让我查询 PositionData 的源代码定义:
根据源代码,我找到了 PositionData 的完整定义。让我再查询一下 A 股接口中这些字段的具体处理:
让我查看一下 A 股接口(如 vnpy_xt)中 PositionData 的具体实现:
根据源码分析,我现在可以给您一个准确的回答。
根据 vnpy/trader/object.py 中的源码定义:
@dataclass
class PositionData(BaseData):
symbol: str
exchange: Exchange
direction: Direction
volume: float = 0 # 总持仓量
frozen: float = 0 # 冻结数量
price: float = 0 # 持仓均价
pnl: float = 0 # 持仓盈亏
yd_volume: float = 0 # 昨仓/可用持仓
您的理解基本正确,但需要澄清一点:
以 vnpy_xt(迅投)接口为例,持仓查询的处理逻辑如下:
position: PositionData = PositionData(
volume=xt_position.volume, # 总持仓
yd_volume=xt_position.can_use_volume, # 可用持仓(可卖出)
frozen=xt_position.volume - xt_position.can_use_volume, # 冻结持仓
# ...
)
| 场景 | volume |
frozen |
yd_volume |
说明 |
|---|---|---|---|---|
| 空仓买入当日 | 100 | 100 | 0 | 当日买入的 100 股被冻结,不可卖出 |
| T+1 日 | 100 | 0 | 100 | 冻结解除,全部变为可用持仓 |
| 部分卖出后 | 60 | 0 | 60 | 无冻结,剩余 60 股可卖 |
volume - frozen 确实等于可用持仓数量(即可卖出的持仓)
对于 A 股,yd_volume 实际表示"可用持仓"(can_use_volume),而非字面上的"昨仓"概念。这是因为:
Direction.NET)yd_volume 反映的是实际可卖出的数量您的等式在 A 股场景下成立:
volume = 买入量,frozen = 买入量,yd_volume = 0frozen = 0,yd_volume = volume注意:不同交易接口对
yd_volume的实现可能略有差异。期货接口中yd_volume通常确实表示昨日持仓(用于区分平今/平昨),而股票接口中通常表示可用持仓。具体行为请以您使用的接口实现为准。
参考来源:vnpy/trader/object.py、vnpy_xt/xt_gateway.py