Pine Script触发警报时strategy.position_avg_price返回NaN问题求助
问题原因
实盘警报触发时,策略的开仓操作尚未实际执行,strategy.position_avg_price 变量还未被赋值,因此返回NaN。而回测场景是事后模拟,开仓动作与指标计算同步完成,该变量能实时获取仓位均价。
解决方案
放弃依赖strategy.position_avg_price计算止损,直接使用触发开仓信号那根K线的价格(如收盘价close)来计算止损位,代码修改如下:
- 定义开仓价格与止损位:
// 存储开仓信号触发时的K线收盘价 entry_price = close // 计算多头止损位 long_stop_level := entry_price - nLoss
- 开仓警报代码保持原逻辑即可:
// 触发多头开仓警报 if entry_long alert_string = pc_id + ',' + 'buy' + ',' + symbol + ',' + 'sl=' + str.tostring(long_stop_level) + ',' + 'risk=' + str.tostring(posSize) alert(alert_string, alert.freq_once_per_bar_close)
补充说明
如果实盘使用市价单开仓,实际成交价格可能与信号K线收盘价存在小幅滑点,这是正常交易现象。若需更精准的止损计算,可结合strategy.entry的返回值获取订单填充价格,但需要额外处理订单确认逻辑,复杂度较高。上述方案是兼顾简洁性与实用性的最优解。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

