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

震荡器枢轴高点均线与低点均线差值计算问题求助

问题解决:枢轴高低点均线差值计算的NA值处理

我有一个震荡器(trend),已经成功计算出枢轴高点(pivot highs)和枢轴低点(pivot lows)的移动平均线,但计算两者差值时遇到问题。核心问题是最后一个枢轴高点对应的枢轴低点均线值为NA,反之亦然。假设均线最新已知值为+0.8和-1.0,预期差值为1.8,但当前代码在遇到NA时会返回0,不符合预期。

原代码如下:

len_high = input.int(12)
len_low = input.int(12)
float pivotHigh = ta.pivothigh(trend, len_high, len_high)
float pivotLow = ta.pivotlow(trend, len_low, len_low)
avg_pvt_high = ta.ema(pivotHigh,10)
avg_pvt_llow = ta.ema(pivotLow,10)
plot(avg_pvt_high, color = color.rgb(208, 25, 62))
plot(avg_pvt_llow, color = color.green)

var float piv_diff = 0
piv_diff := na(avg_pvt_high) or na(avg_pvt_llow) ? 0 : math.abs(avg_pvt_high)+math.abs(avg_pvt_llow)
if barstate.islast
    label.new(bar_index+2, trend, str.tostring(piv_diff, "#.00"), style = label.style_none)

解决方案

问题出在当avg_pvt_high或avg_pvt_llow为NA时,直接将差值置为0。我们需要保留最近一次有效的均线值来计算差值,而不是直接返回0。可以用ta.valuewhen()函数获取最近的非NA值,确保差值计算始终基于有效数据。

修改后的代码如下:

len_high = input.int(12)
len_low = input.int(12)
float pivotHigh = ta.pivothigh(trend, len_high, len_high)
float pivotLow = ta.pivotlow(trend, len_low, len_low)
avg_pvt_high = ta.ema(pivotHigh,10)
avg_pvt_low = ta.ema(pivotLow,10)  // 修正原代码变量名拼写错误:avg_pvt_llow → avg_pvt_low
plot(avg_pvt_high, color = color.rgb(208, 25, 62))
plot(avg_pvt_low, color = color.green)

// 获取最近一次有效的枢轴高点/低点均线值
last_valid_high = ta.valuewhen(not na(avg_pvt_high), avg_pvt_high, 0)
last_valid_low = ta.valuewhen(not na(avg_pvt_low), avg_pvt_low, 0)

// 基于最近有效值计算差值
piv_diff = math.abs(last_valid_high) + math.abs(last_valid_low)

if barstate.islast
    label.new(bar_index+2, trend, str.tostring(piv_diff, "#.00"), style = label.style_none)

关键修改说明:

  1. 修正变量名错误:原代码中avg_pvt_llow拼写错误,改为avg_pvt_low避免逻辑偏差。
  2. 追踪最近有效值:通过ta.valuewhen()提取最近一次非NA的均线值,即使当前某条均线无新值,也能用上一次的有效数据计算差值。
  3. 简化变量声明:移除不必要的var初始化,直接基于有效值计算差值,避免旧值残留问题。

修改后,当其中一条均线暂时为NA时,会自动沿用最近的有效数值,即可得到预期的1.8差值结果。

内容的提问来源于stack exchange,提问作者Roman Mohren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:45