スポンサーリンク

だれでも自作インジケータが作れる「Pine Script(Pineスクリプト)」入門ガイド(3)change関数・iff関数

はじめに

今回は、前回作成したMACDインジケータについて、今回のchange関数、iff関数を使うことで、MACDのヒストグラムを改良してみたいと思います。

前回のMACDインジケータ

前回、Plot関数の詳細設定を使うことで、以下のようにMACDインジケータにヒストグラムを追加しました。

↑MACDとしてはすでに使えそうです。しかし、普段よくみるMACDとは、まだ微妙に違いますね。

今回は、「ヒストグラムが前の足より増加した場合と、減少した場合で、色を変える」設定を追加したいと思います。

change関数とiff関数

change関数

change関数は、「現在の値と前の値の差」を取得します。
change(source, length)
lengthという引数は、何本前の値かという意味です。デフォルトは「1」(すぐ前の値)で、省略できます。

MeraTrader(MQL言語)でEAやインジケータを使ったことがある人はわかりますが、PineScriptのchange関数は手っ取り早くてとても便利です。

iff関数

iff関数は、「もし…なら…他に…」という値を設定します。前回に紹介した3項演算子「? :」と同じです。
iff(condition, then, _else)

iff関数は、ネスト(nest:入れ子にすること)が可能です。

たとえば、「iff(条件1, iff(条件2, ケース1, ケース2), iff(条件3, ケース3, ケース4))
と設定すると、

  • 条件1を満たす場合:
    • 条件2を満たす場合はケース1
    • 条件2を満たさない場合はケース2
  • 条件1を満たない場合:
    • 条件3を満たす場合はケース3
    • 条件3を満たさない場合はケース4

と場合分けできます。

他の言語で、If式がネストできるのと同じですね。

MACDのヒストグラムを改良

前回記事のサンプルで描画したMACDに対して、上記のchange関数とiff関数を利用して、ヒストグラム(MACDとシグナルの乖離幅)の増減で色を変えてみたいと思います。

前回のスクリプトは以下の通りです。

//@version=4
study(“MACD”)
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA – slowMA
signal = sma(macd, 9)
plot(macd, color=color.blue)
plot(signal, color=color.orange)
hist = macd – signal
plot(hist, style = plot.style_histogram, linewidth = 4, 
 color = macd >= signal ? color.green : color.red )

今回は、下記の通り、前回のスクリプトを変更します。(plot関数の色設定以外は、変更なしです。)

//@version=4
study("MACD")
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
plot(macd, color=color.blue)
plot(signal, color=color.orange)
hist = macd - signal
//以下が変更可箇所です。
plot(hist, style = plot.style_histogram, linewidth = 4,
 color = iff(macd >= signal,
 iff(change(hist) >= 0, #3DA69A, #B6DFDB),
 iff(change(hist) <= 0, #E6544B, #FBCDD2)))

変更箇所は;
macdがsignal以上の場合、さらに1本前より増加していれば濃い緑、減少していれば薄い緑
macdがsignal未満の場合、さらに1本前より減少していれば濃い赤、増加していれば薄い赤
と設定しています。

結果、今回表示させたインジケータは、以下の通りです。MACDのヒストグラムがそれらしくなりました。

【参考】
なお、前回紹介した3項演算子「? :」もネストにして使えます。下記のように書き換えることで、結果は上記と同じMACDが表示されます。(ブーリアン型で各ケースを定義しているので、わかりやすいです。)

//@version=4
study("MACD")
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
plot(macd, color=color.blue)
plot(signal, color=color.orange)
hist = macd - signal
case1 = macd >= signal and change(hist) >= 0
case2 = macd >= signal and change(hist) < 0
case3 = macd < signal and change(hist) <= 0
case4 = macd < signal and change(hist) > 0
plot(hist, style = plot.style_histogram, linewidth = 4, color
 = case1 ? #3DA69A
 : case2 ? #B6DFDB
 : case3 ? #E6544B
 : case4 ? #FBCDD2
 : na )
タイトルとURLをコピーしました