人気のインジケーターである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を計算します。
3. BB
stdev
もTradingViewの標準機能です。これで標準偏差を計算するわけですが、先ほど計算したmacdをソースに使うのがポイントです。
インジケーターの計算した値を別のインジケータで更に加工することになり、これはインジケーターを組み合わせるひとつの方法だと言えるでしょう。
macdの値の移動平均を取り、その上下1標準偏差を計算してバンドを描写するエリアを決定します。
4. Fill
ここからはプロットに関する部分です。エリアを塗りつぶすためには、その幅を決める2本のラインを指定しなければなりません。
2本のラインをそれぞれ変数で受け取って、fill
に渡してやることでエリアを塗りつぶすことができます。
5. Chnage Color
状態によって色を変える部分です。インジケーターの自作で何度もお世話になるであろう基本的なテクニックとなります。
条件式 ? 真の場合 : 偽の場合
が基本となる記述方法です。2つの場合分けであればこれでいけます。
条件式にマッチしていれば、真の場合の部分が適応され、それ以外の場合は偽の部分が適応されます。
今回は3色なのでこの基本構造を組み合わせ、
条件式① ? 真の場合(1色): 条件式② ? 真の場合(2色): 偽の場合(3色)
としています。まず条件式①が評価され、それが真であれば1色目が、偽であれば条件式②が評価されるという流れです。
6. Plot
最後にそれぞれの色でプロットしてやります。ここでは通常のラインではなくドットにしたいのでplotshape()
を使っています。
描写できる記号にはいくつかあって、ドットであればstyle=shape.circle
がイメージに近そうです。
ゼロラインの描写はplot()
を使います。ソースを渡すのではなく、固定の数値(今回の場合はゼロ)を渡すことで水平線を描写することが出来ます。
参考
TradingViewでもコードを公開しています。公開から1日で18回いいねをもらえました。参考になる部分があったら、いいねボタンを押してあげてください!