如何在Pine Script中获取条件第二次触发时间及两次触发K线间隔
解决两次条件触发间隔K线数计算问题
你的代码逻辑存在问题:(ta.barssince(condition))[bars_since]实际取的是最近一次触发K线位置的ta.barssince(condition)值,而该位置的barssince结果本身就是0,所以得到的结果自然为0。
正确的做法是通过记录触发点的全局K线索引来计算间隔,具体代码如下:
//@version=5 indicator("两次触发间隔K线数", overlay=true) deliveryVolumePercentage = input.float(60, "阈值") condition = ta.cross(deliveryVolumePercentage, 60) // 定义存储触发点K线索引的数组,var确保仅初始化一次 var int[] triggerBars = array.new_int() // 条件触发时,将当前K线的全局索引存入数组 if condition array.push(triggerBars, bar_index) // 计算最后两次触发的间隔K线数 last_two_diff = 0 if array.size(triggerBars) >= 2 // 获取最后一次和倒数第二次触发的K线索引 last_trigger_idx = array.get(triggerBars, array.size(triggerBars) - 1) second_last_trigger_idx = array.get(triggerBars, array.size(triggerBars) - 2) // 索引差值即为间隔的K线数量 last_two_diff = last_trigger_idx - second_last_trigger_idx // 绘制计算结果 plot(last_two_diff, title="最后两次触发间隔K线数", color=color.red, linewidth=2)
核心逻辑说明
- 用
var关键字定义数组,避免每次K线刷新时重置数组内容。 - 每次条件触发时,将
bar_index(全局唯一的K线索引)存入数组,完整保留所有触发点的位置信息。 - 当数组中至少有两个触发点时,取最后两个索引的差值,直接得到两次触发之间的K线数量。
内容的提问来源于stack exchange,提问作者Dev Oberay
相关产品推荐
相关产品推荐

