寻求Plotting Hline触发条件:每20根K线触发的if参数方案
Pine Script 实现每20根K线触发一次的逻辑
原代码的核心问题是if条件用了字符串,完全没有触发逻辑,下面是修正后的实现方案:
修正后的代码
//Input options highlength = input.int(20, "High Length") lowlength = input.int(20, "Low Length") Tah = ta.highest(highlength) Tal = ta.lowest(lowlength) //color fill var highhighs = float(na) var lowlows = float(na) var line Linehighhighs = na var line Linelowlows = na // 记录上次触发的K线索引 var int last_trigger_bar = na // 每20根K线触发一次,首次加载时也执行一次 if ta.barssince(last_trigger_bar) == 20 or na(last_trigger_bar) last_trigger_bar := bar_index // 更新触发记录 highhighs := Tah lowlows := Tal Linehighhighs := line.new(bar_index, highhighs, bar_index, highhighs, color = color.white, width = 2) Linelowlows := line.new(bar_index, lowlows, bar_index, lowlows, color = color.white, width = 2) else // 线条创建后,才更新其终点X坐标 if not na(Linehighhighs) line.set_x2(Linehighhighs, bar_index) if not na(Linelowlows) line.set_x2(Linelowlows, bar_index)
关键修改说明
- 触发逻辑实现:
- 用
var int last_trigger_bar = na记录上次触发的K线位置,var保证变量只会初始化一次。 ta.barssince(last_trigger_bar) == 20:计算从上一次触发到当前的K线数量,达到20时触发动作。- 保留
or na(last_trigger_bar)是为了让脚本首次加载时就执行一次触发,避免初始无线条的状态;如果不需要首次触发,直接删掉这部分即可。
- 用
- 避免报错:在
else分支里加了if not na(...)判断,防止首次运行时因线条未创建出现错误。
内容的提问来源于stack exchange,提问作者Foenkelito
相关产品推荐
相关产品推荐

