You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:39:34