Pine Script用for循环遍历日线判断EMA排列时报ta.ema警告如何解决
问题解决:Pine Script按周期校验EMA排列计数的实现方法
警告原因说明
ta.ema()是Pine Script的序列计算类函数,依赖逐根K线的连续计算逻辑,不能放在for循环内部调用历史K线的数值,否则会触发计算一致性警告,也可能导致结果偏差。
实现方案(无需for循环,效率更高)
你要实现的「过去10个周期内有7个周期满足EMA20>EMA60>EMA120」的需求,直接用Pine内置的序列统计函数即可完成,代码如下:
// 全局预先计算三个EMA序列,避免循环内调用 ema20 = ta.ema(close, 20) ema60 = ta.ema(close, 60) ema120 = ta.ema(close, 120) // 定义单根K线满足多头排列的条件 is_long_arrange = ema20 > ema60 and ema60 > ema120 // 统计过去10个周期内满足条件的次数 lookback_days = 10 require_days = 7 count_long = ta.sum(is_long_arrange ? 1 : 0, lookback_days) // 生成最终标记 long_trend = count_long >= require_days
如果你必须用for循环实现的修正方案
如果要保留for循环写法,需要提前把所有K线的排列判断结果计算完成,循环内仅读取预计算的判断值,代码如下:
ema20 = ta.ema(close, 20) ema60 = ta.ema(close, 60) ema120 = ta.ema(close, 120) is_long_arrange = ema20 > ema60 and ema60 > ema120 int count_long = 0 bool long_trend = false lookback_days = 10 require_days = 7 for i = 0 to lookback_days - 1 if is_long_arrange[i] count_long += 1 long_trend := count_long >= require_days
注意:for循环遍历历史K线的写法,运行效率远低于内置的
ta.sum()函数,非必要场景推荐使用第一种方案。
内容的提问来源于stack exchange,提问作者Toward Lu
相关产品推荐
相关产品推荐

