人気のインジケーターであるMACDを改造するの第2弾です。今回は、TradingView用の「Wave Trend Oscillator」を自作します。
2021年3月7日
またMACDを改造する
MACDに標準偏差の考えを取り入れた「MACD BB」の自作を以前やってみました。
MACD(マックディー)というカッコいい名前が付いていますが、その中身は非常に単純なものです。 シンプルだからこそ、そこから派生する様々なインジケーターが生み出されています。
今回は、その1つとも言える「Wave Trend Oscillator」をTradingView用に作ってみたいと思います。
MACD
まず、ベースとなるMACDの計算式を簡単に確認しておきます。基本となるのは下記の2本のラインです。
期間の異なる2本の移動平均線の差に注目するのがMACDです。さらに、相場の転換を早く察知するためにシグナルラインを用意します。
これをコード化すると以下のようになるでしょう。(TradingView内蔵のMACDは、EMAではなく、SMAでも計算が出来るようになっていました。)
src = close
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma
signal = ema(macd, signal_length)
MACDはオシレーター系のインジケーターで、MACDラインとシグナルのクロスを見ることで、相場の転換点を探します。
Wave Trend Oscillator
今回作るインジケーターの見た目は、下の画像のようなものになります。クリックで全面表示が可能です。
比較
より特徴を理解するために他と比較してみます。
上記の3つを並べてみたのが下の画像。
それぞれパラメーターの設定が異なりますが、見た目は非常に近いものになります。 Wave Trendは、買われ過ぎ/売られ過ぎが明確なのと、ダイバージェンスを捉えるのが得意といった特徴がありそうです。
コード
//@version=4
study("WaveTrend+", shorttitle="WT")
// Input
src = input(title="Source", type=input.source, defval=hlc3)
chanlen =input(10, title="Channel Length", minval=1)
avglen = input(21, title="Average Length", minval=1)
smoothing = input(4, title="Signal Smoothing", minval=0)
obupper = input(60, title="Over Bought Upper")
oblower = input(53, title="Over Bought Lower")
osupper = input(-53, title="Over Sold Upper")
oslower = input(-60, title="Over Sold Lower")
bullColor = #2e8b57
bearColor = #cd5c5c
normalColor = #BBBBBB
// Calculation
srcEMA = ema(src, chanlen)
diff = abs(src - srcEMA)
diffEMA = ema(diff, chanlen)
CI = (src - srcEMA) / (0.015 * diffEMA)
Fast = ema(CI, avglen)
Slow = sma(Fast, smoothing)
// Plot
cc = Fast >= Slow ? bullColor : bearColor
plot(Fast, title="Wave Trend", color=cc, linewidth=2)
plot(Slow, title="Signal Line", color=color.silver, transp=40)
plot(0, title="zero line", color=color.white, style=plot.style_cross, transp=80)
obLine1 = plot(obupper, display=display.none, editable=false)
obLine2 = plot(oblower, display=display.none, editable=false)
fill(obLine1, obLine2, title="Over Bought band", color=color.red)
osLine1 = plot(osupper, display=display.none, editable=false)
osLine2 = plot(oslower, display=display.none, editable=false)
fill(osLine1, osLine2, title="Over Sold band", color=color.blue)
ちょっと長いコードですが、ほとんどが設定と描写に関するもので、計算を行う部分は6行しかありません。
解説
// Calculation
srcEMA = ema(src, chanlen)
diff = abs(src - srcEMA)
diffEMA = ema(diff, chanlen)
CI = (src - srcEMA) / (0.015 * diffEMA)
Fast = ema(CI, avglen)
Slow = sma(Fast, smoothing)
diff = abs(src - srcEMA)
MACDは短期と長期の移動平均線の差を見ますが、Wave Trendの場合、移動平均線と価格との差を見ます。
価格には「(高値 + 安値 + 終値) ÷ 3」を使うのが一般的です。上記のコードではsrc
に、これが入っています。
CI = (src - srcEMA) / (0.015 * diffEMA)
分かりずらいのは、この部分だけでしょう。
価格は、移動平均線の上に位置するときも下に位置するときもあります。ですから、
(src - srcEMA)
の計算結果は、状況によりプラスの値とマイナスの値の両方を取ります。
一方、(0.015 * diffEMA)
は必ずプラスの値を取ります。これで先ほどの値を割るのは、
0を中心とした上下100%以内に計算結果を収めるためです。
つまり、この1行は出力を一定範囲内で上下するオシレーター化するものです。
まとめ
ごちゃごちゃといくつものインジケーターを並べたくない人にお勧めしたいインジケーターです。
大きな流れを把握した上で、「押し目買い」や「戻り売り」のシグナルとして使ってみると面白いかもしれません。
反転するときは、大きかったり、小さかったりする「W」のパターンがよく出現します。 こういったことや、
なども合わせて考えることで、さらに勝率が上がりそうです。
参考
今回紹介したインジケーターはTradingViewでも公開しております。こちらも参考にしてみてください。