Pine Script如何为绘制的指标线设置固定0-100波动范围
实现方案
要让指标线始终在0-100区间波动,且历史最低值为0、最高值为100,直接用min-max线性归一化对原始计算的n值做缩放即可,不会改变原指标的走势形态,只会等比例调整数值范围。
核心逻辑
- 先按原规则逐根K线计算涨跌累加的原始n值
- 统计当前加载的全部历史K线范围内,n值的全局最小值、全局最大值
- 通过线性映射公式把原始n值等比例转换到0-100区间,映射后原始最小值对应0,原始最大值对应100
- 增加异常判断,避免全局最大最小值相等时出现除以0的运行错误
修改后可直接运行的完整代码
//@version=5 indicator("0-100 Normalized Up/Down Count", shorttitle="NormN", overlay=false) // 按原规则计算原始n值 var int n = 0 if close > close[1] n += 1 else n -= 1 // 获取全历史周期n的最小、最大值 float nAllMin = ta.lowest(n, bar_index + 1) float nAllMax = ta.highest(n, bar_index + 1) // 归一化映射到0-100区间 float nNormalized = na if nAllMax != nAllMin nNormalized := (n - nAllMin) / (nAllMax - nAllMin) * 100 else // 全周期n无波动时固定在中位值50 nNormalized := 50 // 绘制指标线和区间边界参考线 plot(nNormalized, color=color.new(color.blue, 0), linewidth=2, title="Normalized N") hline(0, "0 Bound", color=color.gray, linestyle=hline.style_dashed) hline(100, "100 Bound", color=color.gray, linestyle=hline.style_dashed)
注意事项
该归一化的计算基准是当前图表加载的全部K线数据:如果你调整K线周期、增减加载的历史K线数量,全局最小/最大值会发生变化,归一化后的数值也会同步更新,始终保证当前加载的历史区间内指标最低点为0、最高点为100。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

