请求修复Pinescript突破策略:优化高点交叉标记逻辑
解决方案(针对需求2)
以下是修改后的代码,实现“突破信号间隔至少4个交易时段”的要求:
// 计算20周期前高(延迟1周期,避免未来函数) high20 = ta.highest(high, 20)[1] // 基础突破逻辑:当前收盘价突破前高,且前4个周期均未突破该前高 breakoutCondition = close >= high20 and close[1] <= high20 and close[2] <= high20 and close[3] <= high20 and close[4] <= high20 // 记录上一次信号的K线位置,var关键字确保变量值持续保存 var int lastSignalBar = na // 信号触发条件:满足突破逻辑,且距离上一次信号至少4个周期(首次信号无前置判断) signalCondition = breakoutCondition and (ta.barssince(lastSignalBar) >= 4 or na(lastSignalBar)) // 更新上一次信号的位置 if signalCondition lastSignalBar = bar_index // 绘制参考线与信号 plot(high20) plotshape(signalCondition, shape.cross, color=color.orange)
关键修改说明
- 修正原代码逻辑错误:原
close[1] and close[2]的写法无实际判断意义,改为明确判断前4个周期收盘价均低于等于high20 - 添加信号间隔控制:通过
ta.barssince(lastSignalBar)计算两次信号的周期差,确保间隔≥4个交易时段,na(lastSignalBar)处理首次信号的初始化情况 - 使用
var关键字保存上一次信号的索引,避免脚本每次重新运行时重置变量值
内容的提问来源于stack exchange,提问作者Master Owl
相关产品推荐
相关产品推荐

