サブウインドウにヒストグラムでRSIのメーターを表示
公開日:2018/10/23
どうも、連日、インジゲーターを作成している管理人です。
最近、インジゲーターを作るのが楽しくてしょうがない。
作りたいインジゲーターのアイディアを形にしていくのは、苦労する部分もありますが、それ以上に達成感があります。
まだ作りたいインジゲーターの2割くらいしか作れてませんが、時間をかけていろんなインジゲーターを作っていきたいと思います。
さて、昨日までは、オブジェクトを使ったインジゲーターを作って、紹介してきましたが、
今回は、ちょっとオブジェクトから離れて、ずっと作りたかったものを作りました。
それは、
「RSIのメーターをサブウインドウに表示させる」
というインジゲーターです。
このインジゲーターは、サブウインドウにRSIの値をヒストグラムで表示させるインジゲーターです。
どうやって作るかを少し考えていましたが、考えるより作ってみようということでコードを書いて作ってみました。
最初は、オブジェクトで作ろうかと思ったけど、よくよく考えると、以前作った「
Simple MACD」でサブウインドウにヒストグラムを使ってメーター見たいのを作ってたのを思い出したので、それを参考に作ってみました。
完成例はこんな感じになりました。
サブウインドウ上:今回作ったインジゲーター
サブウインドウ下:標準の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」
それでは、コンパイルして実行してみます。
実行結果
わかりやすいようにサブウインドウの下部に基準のRSIを表示させています。
見てわかるように、下部のRSIと同じ長さのヒストグラムが並んでいます。
これは、RSIの値の長さをヒストグラムの長さに使っているので、同じ形がヒストグラムで表示されます。
これをちょこっと応用すると、以下のようなインジゲーターも作れます。
1段目:RSIの強さによって色分けしたヒストグラムをメーター化したインジゲーター
2段目:RSIの強さによって色分けしたヒストグラム化したインジゲーター
3段目:今回紹介したインジゲーター
4段目:基準のRSI
目的や好みによって、使い分けることができる、いろんなものが作れます。
このインジゲーターの作り方はまた機会があったら紹介します。
まとめ
いかがだったでしょうか?
今回は、オブジェクトを使わずにRSIの値をヒストグラム化してみました。
オブジェクトもいいけど、こんな感じのメーターを作るときは、違う作り方で簡単に作れるので、うまく使い分けができると効率よくインジゲーターが作れますね。
今後も、オブジェクトとうまく使い分けながらいろいろなインジゲーターを作っていきたいと思います。
それでは、また。
今回使用したMQL一覧
関連ページ