如何为类MACD指标WaveTrend添加SMA(简单移动平均线)
问题解决:WaveTrend指标嵌入SMA显示异常
问题描述
我有一款类似MACD的WaveTrend指标,想给它添加SMA(简单移动平均线)。但嵌入SMA代码后无法正常显示,原因是这类MACD风格的指标属于区间受限型(数值范围大概在±60之间),而SMA的数值范围是0到数千,两者坐标轴范围差距太大导致SMA被压缩得看不见。目前我只能通过单独启用MA并移到下方现有面板作为临时方案,恳请帮忙实现需求。
原代码
// // @author LazyBear //@version=2 // // If you use this code in its original/modified form, do drop me a note. // study(title="WaveTrend [LazyBear]", shorttitle="BUCKET") n1 = input(10, "Channel Length") n2 = input(21, "Average Length") obLevel1 = input(60, "Over Bought Level 1") obLevel2 = input(53, "Over Bought Level 2") obLevel3 = input(40, "Over Bought Level 3") osLevel1 = input(-60, "Over Sold Level 1") osLevel2 = input(-53, "Over Sold Level 2") osLevel3 = input(-40, "Over Sold Level 3") ap = hlc3 esa = ema(ap, n1) d = ema(abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ema(ci, n2) wt1 = tci wt2 = sma(wt1,4) plot(0, color=gray) plot(obLevel1, color=red) plot(osLevel1, color=green) plot(obLevel2, color=red, style=3) plot(obLevel3, color=red) plot(osLevel2, color=green, style=3) plot(osLevel3, color=green) plot(wt1, color=green,title = 'GREEN') plot(wt2, color=red, style=3) plot(wt1-wt2, color=blue, style=area, transp=80) // I am trying to embed sma but it is going in vain. Please help here signal = sma(close, 9) plot(signal, color=color.blue)
解决方案
方案1:将SMA叠加到主图(推荐)
通过给SMA的plot函数添加overlay=true参数,让SMA直接显示在价格主图上,避免受WaveTrend指标面板的坐标轴限制:
// // @author LazyBear //@version=2 // // If you use this code in its original/modified form, do drop me a note. // study(title="WaveTrend [LazyBear]", shorttitle="BUCKET") n1 = input(10, "Channel Length") n2 = input(21, "Average Length") obLevel1 = input(60, "Over Bought Level 1") obLevel2 = input(53, "Over Bought Level 2") obLevel3 = input(40, "Over Bought Level 3") osLevel1 = input(-60, "Over Sold Level 1") osLevel2 = input(-53, "Over Sold Level 2") osLevel3 = input(-40, "Over Sold Level 3") ap = hlc3 esa = ema(ap, n1) d = ema(abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ema(ci, n2) wt1 = tci wt2 = sma(wt1,4) plot(0, color=gray) plot(obLevel1, color=red) plot(osLevel1, color=green) plot(obLevel2, color=red, style=3) plot(obLevel3, color=red) plot(osLevel2, color=green, style=3) plot(osLevel3, color=green) plot(wt1, color=green,title = 'GREEN') plot(wt2, color=red, style=3) plot(wt1-wt2, color=blue, style=area, transp=80) // SMA叠加到主图 signal = sma(close, 9) plot(signal, color=color.blue, overlay=true)
方案2:将SMA放在独立面板
如果想让SMA和WaveTrend在同一个脚本但不同面板显示,可以给SMA的plot函数添加panel=3参数(WaveTrend默认在panel=2),这样SMA会显示在WaveTrend面板的下方:
// // @author LazyBear //@version=2 // // If you use this code in its original/modified form, do drop me a note. // study(title="WaveTrend [LazyBear]", shorttitle="BUCKET") n1 = input(10, "Channel Length") n2 = input(21, "Average Length") obLevel1 = input(60, "Over Bought Level 1") obLevel2 = input(53, "Over Bought Level 2") obLevel3 = input(40, "Over Bought Level 3") osLevel1 = input(-60, "Over Sold Level 1") osLevel2 = input(-53, "Over Sold Level 2") osLevel3 = input(-40, "Over Sold Level 3") ap = hlc3 esa = ema(ap, n1) d = ema(abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ema(ci, n2) wt1 = tci wt2 = sma(wt1,4) plot(0, color=gray) plot(obLevel1, color=red) plot(osLevel1, color=green) plot(obLevel2, color=red, style=3) plot(obLevel3, color=red) plot(osLevel2, color=green, style=3) plot(osLevel3, color=green) plot(wt1, color=green,title = 'GREEN') plot(wt2, color=red, style=3) plot(wt1-wt2, color=blue, style=area, transp=80) // SMA放在独立面板 signal = sma(close, 9) plot(signal, color=color.blue, panel=3)
原理说明
WaveTrend指标的数值范围被限制在±60左右,而SMA是基于价格计算的,数值范围通常在0到数千,两者的坐标轴尺度差距极大。直接在WaveTrend的面板中绘制SMA会导致SMA线条被压缩到几乎看不见。通过overlay=true将SMA移到主图,或者用panel参数指定独立面板,就能避开这个尺度冲突问题。
内容的提问来源于stack exchange,提问作者Karthik dd
相关产品推荐
相关产品推荐

