内置 stochastic(8,3,3) 计算与我在 Pine 中编写的不同

Built-in stochastic(8,3,3) computes different than the one I coded in Pine

内置随机对照测试:

看起来好像可能应用了另一个平滑。相同设置:

注意我使用了 (8,3,3) 并且这里实际上没有使用或绘制 D。

内置的功能和我使用的功能不是所见即所得吗?

内置:

//@version=5
indicator(title="Stochastic", shorttitle="Stoch", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
periodK = input.int(8, title="%K Length", minval=1)
smoothK = input.int(3, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
plot(k, title="%K", color=#2962FF)
plot(d, title="%D", color=#FF6D00)
h0 = hline(80, "Upper Band", color=#787B86)
h1 = hline(20, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")

我的:

//@version=4
study(title="test", overlay=false)

src  = input(close, title="Index Source")
v2 = security("OANDA:USDJPY", timeframe.period, src)
h2 = security("OANDA:USDJPY", timeframe.period, high)
l2 = security("OANDA:USDJPY", timeframe.period, low)

Length = input (8, minval=1, title = "Stochastic Length")
k = input (3, minval=1, title = "Stochastic %K")
StoV2 = stoch (v2, highest(h2, Length), lowest(l2, Length), Length)
Kv2 = sma (StoV2, k)
plot (Kv2, title  ="%K", color = color.blue, linewidth=2)

记得用美日比较哦!

是的,它们是不同的,因为您的代码执行的操作与内置代码不同。结果不同,因为您在 stoch() 调用中使用了 highest() 和 lowest() 。如果您尝试重现内置函数,则不需要它们。 stoch() 函数在它的进程中已经执行了相当于 highest/lowest 的操作,所以你所拥有的相当于执行 highest(highest())。您还可以通过在一个安全调用中执行操作来减少安全调用的数量,如下所示:

stoch_k = security("OANDA:USDJPY", timeframe.period, sma(stoch(src, high, low, Length), k))