VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 41
声望: 0

这个 vt_positionid 在策略中怎么获取?

Super Moderator
avatar
加入于:
帖子: 93
声望: 9

在VeighNa的策略中,vt_positionid是用于唯一标识一笔持仓的ID,格式为:gateway_name.vt_symbol.direction(例如:CTP.rb2210.SHFE.多)。以下是获取vt_positionid的方法:


1. 通过持仓数据获取

  • 在策略中,可以通过self.cta_engine.main_engine.get_all_positions()获取所有持仓数据,然后从中提取vt_positionid
  • 示例代码:
    positions = self.cta_engine.main_engine.get_all_positions()
    for position in positions:
        vt_positionid = position.vt_positionid
        print(f"持仓ID: {vt_positionid}, 合约: {position.vt_symbol}, 方向: {position.direction}")
    

2. 通过特定持仓获取

  • 如果你知道具体的合约和持仓方向,可以通过self.cta_engine.main_engine.get_position()获取特定持仓的vt_positionid
  • 示例代码:
    vt_symbol = "rb2210.SHFE"  # 合约代码
    direction = Direction.LONG  # 持仓方向(多或空)
    vt_positionid = f"{self.gateway_name}.{vt_symbol}.{direction.value}"  # 构造vt_positionid
    position = self.cta_engine.main_engine.get_position(vt_positionid)
    if position:
        print(f"持仓ID: {position.vt_positionid}, 数量: {position.volume}, 均价: {position.price}")
    

3. 在策略中直接使用

  • 如果你需要在策略中直接使用vt_positionid,可以根据当前策略的合约和持仓方向动态生成。
  • 示例代码:
    vt_symbol = self.vt_symbol  # 策略当前交易的合约
    direction = Direction.LONG  # 持仓方向(多或空)
    vt_positionid = f"{self.gateway_name}.{vt_symbol}.{direction.value}"  # 构造vt_positionid
    print(f"持仓ID: {vt_positionid}")
    

4. 注意事项

  • vt_positionid的格式必须正确,否则无法获取到持仓数据。
  • direction.value会将持仓方向转换为字符串(如)。
  • 在回测环境中,vt_positionid可能无法使用,因为回测时持仓管理方式与实盘不同。

总结

在策略中获取vt_positionid的方法:

  1. 通过self.cta_engine.main_engine.get_all_positions()获取所有持仓的vt_positionid
  2. 通过self.cta_engine.main_engine.get_position()获取特定持仓的vt_positionid
  3. 根据合约和持仓方向动态生成vt_positionid

希望这些方法能帮助你解决问题!如果还有其他疑问,欢迎继续提问。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】