(1)概要
(2)plot関数
(3)change関数・iff関数
(4)input関数
(5)security関数、相関係数インジケータ
(6)fill関数
(7)bgcolor関数
(8)複数行を一括でコメントアウトできる?
(9)line.new関数・line.set関数、ピボット・インジケータ
(10)関数宣言(カスタム関数)、ピボット・ハイ・ロー・インジケータ
(11)ジグザグ(ZigZag)インジケータ
(12)平均足バー・マルチタイムフレーム(MTF)
(13)ストラテジー・バックテストの概要
(14)ストラテジー・サンプル「EMAクロス+固定TP/SL」
(15)ストラテジーの「最適化」をめぐるTradingViewとMetaTraderの違い
(16)Security関数のgapsとlookaheadとは?
(17)アラート条件の設定:alertcondition
はじめに
今回は、前回作成した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 )