MT4 - RSIをヒストグラムでサブウインドウに表示

sitemap
世界最強のFXキャッシュバックサイト
サブウインドウにヒストグラムでRSIのメーターを表示
公開日:2018/10/23
どうも、連日、インジゲーターを作成している管理人です。

最近、インジゲーターを作るのが楽しくてしょうがない。

作りたいインジゲーターのアイディアを形にしていくのは、苦労する部分もありますが、それ以上に達成感があります。

まだ作りたいインジゲーターの2割くらいしか作れてませんが、時間をかけていろんなインジゲーターを作っていきたいと思います。

さて、昨日までは、オブジェクトを使ったインジゲーターを作って、紹介してきましたが、

今回は、ちょっとオブジェクトから離れて、ずっと作りたかったものを作りました。

それは、

「RSIのメーターをサブウインドウに表示させる」

というインジゲーターです。

このインジゲーターは、サブウインドウにRSIの値をヒストグラムで表示させるインジゲーターです。

どうやって作るかを少し考えていましたが、考えるより作ってみようということでコードを書いて作ってみました。

最初は、オブジェクトで作ろうかと思ったけど、よくよく考えると、以前作った「Simple MACD」でサブウインドウにヒストグラムを使ってメーター見たいのを作ってたのを思い出したので、それを参考に作ってみました。

完成例はこんな感じになりました。

RSIヒストグラム

サブウインドウ上:今回作ったインジゲーター
サブウインドウ下:標準のRSI

単純にRSIをヒストグラムを作るのは意外と簡単でした。

これ以外にもちょこっと工夫したインジゲーターも作ってみました。記事の最後で紹介しています。

それでは、以下から作成過程を説明していきます。
ソースコードの説明
今回は、オブジェクトを使わないですが、グラフというかメーターというか、オブジェクトみたいに可視化する必要があります。

ということで、久しぶりに「SetIndexBuffer」と「SetIndexStyle」を使って、作っていきます。

使い方を思い出すのに少し時間がかかりましたが、順番にコードを書いていきます。

まずは、プロパティから。

①#property indicator_separate_window 
②#property indicator_buffers 1
③#property indicator_color1 Red 

①#property indicator_separate_window
今回は、サブウインドウに表示させるので、「separate_window」を設定します。

②#property indicator_buffers 1
bufferはRSIの値を1つだけ(1色)、使うので「1」に設定します。

③#property indicator_color1 Red
今回は、ヒストグラムの色を「Red(赤)」に設定します。

次に、配列とパラメーターの設定をしていきます。

■配列とパラメーター

double RSIBuf[];
extern int rsi_period = 10;

こんな感じでサクッと書いときます。説明は省略します。

参考ページ:インジゲーター「Simple MACD」

■init()の処理

int init()
  {
   ①SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3,Red);
   ②SetIndexBuffer(0,RSIBuf);  
return(INIT_SUCCEEDED); }

①SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3,Red);
描画スタイルを指定する。ここでは、0番目のインデックスに指定したRSIBufの設定をします。
種類「ヒストグラム」、線「実線」、太さ「3」、色「赤」に指定。

②SetIndexBuffer(0,RSIBuf);
インジケーターバッファーをインジケーターバッファー領域に割り当てる。
ここでは、0番目のインデックスを指定し、RSIBufという配列を指定。

■start()の処理

この処理はかなり久しぶりに書きました。

   ①int limit = 0;
   ②int cnt_bars = 0;                 
   ③cnt_bars = IndicatorCounted();  
   ④limit = Bars-cnt_bars-1; 

①~④
チャートのローソク足の本数を取得して、その分のヒストグラムを表示させるために必要な処理です。
今回は説明を省略します。

■RSIの値をヒストグラムで表示させていく処理

デッドクロスの判定は以下のようになります。

   ①for(int i = 0; i < limit; i++)
   {
      ②RSIBuf[i]  = iRSI(NULL,0,rsi_period,0,i);
   }

①for(int i = 0; i < limit; i++)
過去チャートも含めて、表示されている本数分、ヒストグラムを表示させるためにfor文で繰り返し処理をしていきます。

②RSIBuf[i] = iRSI(NULL,0,rsi_period,0,i);
1本1本、iRSIを使って、RSIの値を取得して、ヒストグラムにしていきます。

意外とシンプルですが、こんな感じの短いコードで作れちゃいました。

参考ページ:インジゲーター「Simple MACD」

それでは、コンパイルして実行してみます。
実行結果
40以下

わかりやすいようにサブウインドウの下部に基準のRSIを表示させています。

見てわかるように、下部のRSIと同じ長さのヒストグラムが並んでいます。

これは、RSIの値の長さをヒストグラムの長さに使っているので、同じ形がヒストグラムで表示されます。

これをちょこっと応用すると、以下のようなインジゲーターも作れます。

RSIインジゲーターセット

1段目:RSIの強さによって色分けしたヒストグラムをメーター化したインジゲーター
2段目:RSIの強さによって色分けしたヒストグラム化したインジゲーター
3段目:今回紹介したインジゲーター
4段目:基準のRSI

目的や好みによって、使い分けることができる、いろんなものが作れます。

このインジゲーターの作り方はまた機会があったら紹介します。
まとめ
いかがだったでしょうか?

今回は、オブジェクトを使わずにRSIの値をヒストグラム化してみました。

オブジェクトもいいけど、こんな感じのメーターを作るときは、違う作り方で簡単に作れるので、うまく使い分けができると効率よくインジゲーターが作れますね。

今後も、オブジェクトとうまく使い分けながらいろいろなインジゲーターを作っていきたいと思います。

それでは、また。
今回使用したMQL一覧
関連ページ
スポンサードリンク
Twitter