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

请问在CAT策略交易模块,怎样才能获取到持仓的信息,比如成交均价,当前盈亏?

Member
avatar
加入于:
帖子: 3
声望: 0

代码获取。想要根据目前持仓的盈亏,设置止损,有什么方法吗?

Super Moderator
avatar
加入于:
帖子: 64
声望: 7

1. 获取实际持仓信息

使用self.cta_engine.get_position()方法获取PositionData对象,需要传入positionidpositionid的格式为:gateway_name.vt_symbol.Direction.value,其中Direction

long_position_id = f"{self.gateway_name}.{self.vt_symbol}.多"
   long_position = self.cta_engine.get_position(long_position_id)

   short_position_id = f"{self.gateway_name}.{self.vt_symbol}.空"
   short_position = self.cta_engine.get_position(short_position_id)

2. 直接使用pnl字段

PositionData中的pnl字段已经记录了当前持仓的盈亏,直接使用即可。

if long_position:
       print(f"多头持仓均价: {long_position.price}, 数量: {long_position.volume}, 盈亏: {long_position.pnl}")
   if short_position:
       print(f"空头持仓均价: {short_position.price}, 数量: {short_position.volume}, 盈亏: {short_position.pnl}")

注意事项

  • 仅实盘支持self.cta_engine.get_position()方法仅在实盘环境中有效,回测时无法使用。
  • self.gateway_name是交易接口名称(如CTP),self.vt_symbol是合约代码(如rb2210.SHFE)。
  • 如果持仓均价为0,可能是MainEngine尚未收到持仓数据,需要确保交易接口已正确连接并订阅了持仓信息。

通过以上方法,你可以在实盘中直接获取实际持仓信息并使用pnl字段查看当前盈亏。

Super Moderator
avatar
加入于:
帖子: 64
声望: 7

1. 基于固定金额止损

当持仓亏损达到固定金额时触发止损。

if pnl < -1000:  # 亏损超过1000时止损
       self.sell(latest_price, abs(self.pos), stop=True)  # 本地停止单

2. 基于百分比止损

当持仓亏损达到一定比例时触发止损。

stop_loss_ratio = 0.02  # 止损比例
   if pnl / position.price / position.volume < -stop_loss_ratio:  # 亏损超过2%时止损
       self.sell(latest_price, abs(self.pos), stop=True)  # 本地停止单

3. 基于ATR动态止损

使用ATR(平均真实波动幅度)动态设置止损,适用于波动性较大的市场。

atr_value = self.am.atr(14)  # 计算ATR
   stop_loss_price = latest_price - atr_value * 2  # 多头止损
   self.sell(stop_loss_price, abs(self.pos), stop=True)  # 本地停止单

4. 基于移动止损

随着价格变动动态调整止损位置,锁定部分利润。

if self.pos > 0:  # 多头持仓
       self.intra_trade_high = max(self.intra_trade_high, latest_price)
       stop_loss_price = self.intra_trade_high - atr_value * 2
       self.sell(stop_loss_price, abs(self.pos), stop=True)  # 本地停止单

5. 本地停止单的特点

  • 本地触发stop=True表示本地停止单,由VeighNa Trader在本地监控价格触发,而非交易所。
  • 触发机制:当价格达到止损价时,VeighNa会以市价或限价单发出委托。
  • 适用场景:适合流动性较好的合约,避免滑点过大。

6. 注意事项

  • 实盘支持:止损逻辑仅在实盘环境中有效,回测时无法使用。
  • 价格更新:确保latest_price为最新价格,可通过on_baron_tick获取。
  • 流动性风险:本地停止单在触发后可能因市场波动导致滑点,需谨慎使用。

通过以上方法,可以根据持仓盈亏动态设置止损,有效控制风险。

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

沪公网安备 31011502017034号

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