1. 相場
  2. TradingView

【TradingView】MACDを改造する

人気のインジケーターであるMACDを改造します。俗に言う「MACD BB」を自作します。


2021年2月17日

インジケーターの改造

TradingViewのインジケーターを自作するシリーズの第3回目。

「インジケーターを自作してみよう」と思っても、何から手を付ければ良いのか。 オリジナルの理論があって、それをインジケーター化するというのもあるでしょうが、 まず手をつけるのはこんな所からではないでしょうか。

  • 既存のインジケーターをカスタマイズする
  • 既存のインジケーターを組み合わせる

何かしら元になるインジケーターがあって、それを改造したいという動機からはじめる人がほとんどのはずです。

「インジケーターの初期設定から毎回自分のお気に入りの設定に変更するのがめんどくさいから、 初期設定を変更したものを作ってしまおう」なんてのが良い例です。

ただ、それでは面白くありませんので、今回は人気の指標であるMACDを題材にして、その改造にチャレンジしてみましょう。

この記事を読むことで、以下のことが分かります。

  • インジケーターの改造のやり方
  • エリアを塗りつぶす方法
  • 状態により色を変化させる方法
  • MACD BB

    MACDをどのように改造するかですが、何か特別なアイデアがあるわけではないので、昔からある MACD BB を自作してみたいと思います。

    MACD BBの「BB」はボリンジャーバンドの頭文字です。つまり、MACDとボリンジャーバンドを組み合わせたインジケーターがMACD BBとなります。

    また、ボリンジャーバンドの正体は標準偏差ですから、MACDに標準偏差の視点を付加したものとも考えられるでしょう。

    まずは、これから作るインジケーターがどのような見た目になるのかを確認してみましょう。

    (チャートをクリックすることで全画面で確認できます)

    特徴

    色で相場の状態変化が判断できる。ドットの間隔で値動きの勢いが視覚的に捉えられる。そして、「ゼロラインとの位置関係」や「ダイバージェンス」など、 普通のMACDと同じような使い方ができることも特徴と言えそうです。

    コード

    //@version=4
    study(title="MACD BB", shorttitle="MACD+")
    
    // 1. Input
    src    = input(defval=hl2, type=input.source, title="Source")
    length = input(defval=10, minval=1, title="BB Periods")
    dev    = input(defval=1, minval=0.5, step=0.1, title="Deviations")
    
    bullColor   = #2e8b57
    bearColor   = #cd5c5c
    normalColor = #BBBBBB
    
    // 2. MACD
    fastLength   = input(12, minval=1) 
    slowLength   = input(26,minval=1)
    fastMA       = ema(src, fastLength)
    slowMA       = ema(src, slowLength)
    macd         = fastMA - slowMA
    
    // 3. BB
    Std   = stdev(macd, length)
    Upper = sma(macd, length) + (Std * dev)
    Lower = sma(macd, length) - (Std * dev)
    
    // 4. Fill
    Band1 = plot(Upper, color=color.white, transp=100, style=plot.style_line, title="Upper Band")
    Band2 = plot(Lower, color=color.white, transp=100, style=plot.style_line, title="lower Band")
    fill(Band1, Band2, color=color.white, transp=90, title="Fill")
    
    // 5. Chnage Color
    cc = macd >= Upper ? bullColor : macd <= Lower ? bearColor : normalColor
    
    // 6. Plot
    plotshape(macd, color=cc, location=location.absolute, style=shape.circle)
    plot(0, title="zero line", color=color.white, style=plot.style_cross, transp=80)
    

    1. Input

    毎度おなじみのinput()です。インジケーターの設定からも変更可能なパラメーターを変数に格納しておきます。

    input(type=input.source)で、 指標を計算する大元のソースを選択できるようにします。初期設定のhl2は、高値と安値を足して2で割ったものです。

    上昇基調、下降基調、その他の場合で、3色のプロットにしようと思いますので、それぞれの色の初期設定もここで行なっています。

    2. MACD

    emaはTradingViewがあらかじめ用意している関数です。ソースと期間を渡してやることで、EMAの値を計算してくれます。 長期と短期のEMAの値からmacdを計算します。

  • MAは、移動平均(Maving Avarage)
  • CDは、Convergence/Divergence
  • 簡単に言えば、MACDとは期間の異なる2本の移動平均線の「差」です。

    3. BB

    stdevもTradingViewの標準機能です。これで標準偏差を計算するわけですが、先ほど計算したmacdをソースに使うのがポイントです。

    インジケーターの計算した値を別のインジケータで更に加工することになり、これはインジケーターを組み合わせるひとつの方法だと言えるでしょう。

    macdの値の移動平均を取り、その上下1標準偏差を計算してバンドを描写するエリアを決定します。

    4. Fill

    ここからはプロットに関する部分です。エリアを塗りつぶすためには、その幅を決める2本のラインを指定しなければなりません。

    2本のラインをそれぞれ変数で受け取って、fillに渡してやることでエリアを塗りつぶすことができます。

    ➡ fill()

    5. Chnage Color

    状態によって色を変える部分です。インジケーターの自作で何度もお世話になるであろう基本的なテクニックとなります。

    条件式 ? 真の場合 : 偽の場合が基本となる記述方法です。2つの場合分けであればこれでいけます。 条件式にマッチしていれば、真の場合の部分が適応され、それ以外の場合は偽の部分が適応されます。

    今回は3色なのでこの基本構造を組み合わせ、

    条件式① ? 真の場合(1色): 条件式② ? 真の場合(2色): 偽の場合(3色)

    としています。まず条件式①が評価され、それが真であれば1色目が、偽であれば条件式②が評価されるという流れです。

    ➡ 三項演算子

    6. Plot

    最後にそれぞれの色でプロットしてやります。ここでは通常のラインではなくドットにしたいのでplotshape()を使っています。

    描写できる記号にはいくつかあって、ドットであればstyle=shape.circleがイメージに近そうです。

    ゼロラインの描写はplot()を使います。ソースを渡すのではなく、固定の数値(今回の場合はゼロ)を渡すことで水平線を描写することが出来ます。

    ➡ plotshape()

    参考

    TradingViewでもコードを公開しています。公開から1日で18回いいねをもらえました。参考になる部分があったら、いいねボタンを押してあげてください!

    相場の最新記事

    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