1. 相場
  2. TradingView

【TradingView】MACDを改造する【その2】

人気のインジケーターであるMACDを改造するの第2弾です。今回は、TradingView用の「Wave Trend Oscillator」を自作します。


2021年3月7日

またMACDを改造する

MACDに標準偏差の考えを取り入れた「MACD BB」の自作を以前やってみました。

MACD(マックディー)というカッコいい名前が付いていますが、その中身は非常に単純なものです。 シンプルだからこそ、そこから派生する様々なインジケーターが生み出されています。

今回は、その1つとも言える「Wave Trend Oscillator」をTradingView用に作ってみたいと思います。

MACD

まず、ベースとなるMACDの計算式を簡単に確認しておきます。基本となるのは下記の2本のラインです。

  • MACD = 短期EMA - 長期EMA
  • シグナル = MACDのEMA
  • 期間の異なる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

    今回作るインジケーターの見た目は、下の画像のようなものになります。クリックで全面表示が可能です。

    比較

    より特徴を理解するために他と比較してみます。

  • MACD(TradingView内蔵のもの)
  • MACD BB(前回作ったもの)
  • 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でも公開しております。こちらも参考にしてみてください。

    ➡ Simple Wave Trend

    相場の最新記事

    1. 12月25日から12月29日

    2. 12月18日から12月22日

    3. 12月11日から12月15日

    4. 12月4日から12月8日

    5. 11月27日から12月1日

    PAGE TOP