如何在TradingView的Pine Script中绘制SMA均线的趋势切线线段
解决Pine Script中绘制SMA5切线线段的问题
我来帮你搞定这个SMA切线的需求~首先咱们先理清楚你原来代码里的问题:你之前的代码其实是把前1根K线的收盘价(因为sma(close,1)就是close本身)和前5根的SMA5值连起来了,这既不是SMA5的切线,也没有以当前K线为中心。
要实现以当前K线为中心、长度约5根K线的SMA5切线线段,核心思路是先算出SMA5在当前位置的趋势斜率,再基于这个斜率画出覆盖前后各2根K线的线段(这样总长度就是5根K线,中心正好在当前K线)。
下面是修正后的完整代码:
//@version=4 study("SMA5 Tangent Line (5-bar centered)", overlay=true) // 输入参数:线段覆盖的总K线数,默认5 line_length = input(5, title="Total Line Length (Bars)", minval=3) // 计算中心偏移:总长度的一半取整,比如5根的话就是前后各2根 offset = math.floor(line_length / 2) // 计算SMA5均线 sma5 = sma(close, 5) // 计算SMA5的斜率:当前SMA与前一根SMA的差值,代表每根K线的变化量 slope = sma5 - sma5[1] // 创建持久化的线段对象 var line tangent_line = line.new(na, na, na, na, color=color.yellow, width=2) // 仅在最后一根K线更新线段 if barstate.islast // 线段左端点:当前K线往前offset根的位置,y值为当前SMA减去斜率乘以offset(反方向推延) line.set_xy1(tangent_line, bar_index - offset, sma5 - slope * offset) // 线段右端点:当前K线往后offset根的位置,y值为当前SMA加上斜率乘以offset(顺方向延伸) line.set_xy2(tangent_line, bar_index + offset, sma5 + slope * offset)
代码解释:
- 参数设置:
line_length控制线段总长度,offset自动计算前后偏移的K线数,这样你改长度时不用手动算偏移,比如设为7的话就自动前后各3根。 - 斜率计算:
slope = sma5 - sma5[1]得到SMA5每根K线的变化幅度,这就是切线的趋势方向。 - 线段端点计算:左端点是当前K线往前offset根,y值用当前SMA减去斜率×offset(相当于沿着趋势往回推);右端点是往后offset根,y值用当前SMA加上斜率×offset(顺着趋势往前延伸),这样线段正好以当前K线为中心,覆盖
line_length根K线,且完全贴合SMA5在当前点的切线方向。
如果你想调整线段的颜色、宽度,直接修改line.new里的color和width参数就行~
内容的提问来源于stack exchange,提问作者user15087454
相关产品推荐
相关产品推荐

