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

Stochastics指标K线峰值被截断,如何突破0-100区间获取真实极值?

解决Pine脚本中Stochastics指标被0/100截断的问题

默认Pine脚本的stoch()函数会自动将计算结果钳制在0-100区间内,这就是你看到峰值、谷值被截断成平台的原因。要获取真实的峰值和谷值,你需要手动实现未做区间限制的随机指标计算逻辑,替代内置的stoch()函数。

修改思路

内置stoch()的核心公式是:

stoch = 100 * (currentValue - lowestLow) / (highestHigh - lowestLow)

但内置函数会自动把结果限制在0-100之间(分子为负时取0,结果超过100时取100)。我们只需要手动实现这个计算,去掉区间钳制的步骤即可。

修改后的完整代码

rsiLength = input(title="RSI Length", type=input.integer, defval=14)
lbLength = input(title="Look Back Length", type=input.integer, defval=5)
avgLength = input(title="Average Length", type=input.integer, defval=8)
drawSig = input(title="Signal On/Off?", type=input.bool, defval=false)
sigLength = input(title="Signal Length", type=input.integer, defval=6)
src = input(title="Source", type=input.source, defval=close)
ob = input(title="Over Bought", type=input.float, defval=50.0)
os = input(title="Over Sold", type=input.float, defval=30.0)

// 计算RSI
rsi = rsi(src, rsiLength)

// 手动计算未被截断的随机值(替代内置stoch函数)
rsi_high = ta.highest(rsi, lbLength)
rsi_low = ta.lowest(rsi, lbLength)
unclamped_stoch = 100 * (rsi - rsi_low) / (rsi_high - rsi_low)

// 计算平滑后的K线(未被0/100截断)
k = sma(unclamped_stoch, avgLength)

// 绘制未截断的K线
plot(series=k, title="Unclamped Stochastics K", color=color.orange, linewidth=2)

h1 = hline(price=ob, title="Overbought", color=color.red)
h2 = hline(price=os, title="Oversold", color=color.green)
hline(price=(ob + os) / 2, title="Center", color=color.gray, linestyle=hline.style_dashed)

关键说明

  • 用ta.highest()和ta.lowest()手动获取回溯周期内RSI的最高/最低值
  • 直接计算随机值时不做任何区间限制,这样当当前RSI低于周期内最低值时,结果会小于0;高于周期内最高值时,结果会大于100
  • 最后对这个未截断的随机值做SMA平滑,得到的K线就能完整显示真实的峰值和谷值

内容的提问来源于stack exchange,提问作者Jeff sfk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:32:39