post

前回は、RSIに移動平均線を適用させるプログラムの骨格の部分を解説しました。骨格だけでも十分使うことができますが、オシレーター系のインジケーターは、「レベル」とセットで使われる事が多いです。

RSIでは70,30というのが一つの目安になっていますよね。70以上で買われすぎ、30以下で売られ過ぎというように(厳密に言うとこの考え方は良くないらしいですが、ここでは触れません)。RSIを適用するときに70,30のラインを入れて使う人が多いと思いますし、MT5に最初から入っているRSIにも70,30のラインはあらかじめ入っています。

今回は最初から70,30のレベルに線を入れる2つの方法についての内容になります。

1.#propertyで指定する方法。

#property indicator_level1 30
#property indicator_level2 50
#property indicator_level3 70
#property indicator_levelcolor clrOrange
#property indicator_levelwidth 1
#property indicator_levelstyle STYLE_DASHDOT

(1)property indicator_level1 30
赤字はレベル線の数だけ必要。これは1番目のレベルが30ということ

(2)property indicator_levelcolor
レベル線の色、指定しない場合はデフォルトのsilver

(3)property indicator_levelwidth
レベル線の太さ、指定しない場合はデフォルトの1

(4)property indicator_levelstyle
レベル線の形、指定しない場合はデフォルトのSTYLE_DOT(点線)なお、指定しても線の太さが2以上になると自動的にSTYLE_SOLID(実線)になる

なお、(2)(3)(4)はレベル線が何本あっても一括でしか指定できない

#propertyで指定するメリット

・プログラムが簡単
・ユーザーでの変更も容易

この画面から変更も新しいレベル線の追加も容易にできます。

#propertyで指定するデメリット

・色、太さ、形状は一括指定なので、きめ細かい指定はできない

2.IndicatorSetInteger、 IndicatorSetDouble関数で指定

//(1)レベル線の数を指定する
IndicatorSetInteger(INDICATOR_LEVELS,3);

//(2)レベル線の数字を指定する
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,30.0);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50.0);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,70.0);

//(3)レベル線の色を指定する
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,lclrRed);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrYellow);
IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrLime);

//(4)レベル線の太さを指定する
IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,1);
IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,3);
IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,3);

//(5)レベル線の種類を指定する
IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_DOT);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_SOLID);
IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DASHDOTDOT);

(1)はレベル線を何本指定するかを表します。ここに指定した数以上のものを以下の関数で書いても表示されません。

(2)はレベルの数字の指定です。最初の線の順番は0番目になります。

(3)(4)(5)は省略可能です。省略するとデフォルトのsilver、太さ1,STYLE_DOTが適用されます。

関数で指定するメリット

・レベル線一本ずつ指定できる。

関数で指定するデメリット

・プログラムが複雑になる
・ユーザーが変更できない

レベル線を一本ずつ細かく指定できるので、より直感的にわかりやすいインジケーターになります。一方で、ユーザーがレベル線を増やそうとしても、反映されません。(時間足を変えただけで消えてしまいます)。また、プログラムコードが長くなります。サンプルコードでは、直接数字を関数内に埋め込んでいますが、実際は変数にしてinputで指定するのがプログラムの作法ですが、そうすると、

この部分が増えて面倒くさくなります。ここはインジケーター本体の変数をいれるべきところで、レベル線で複雑にしたくないところです。

ですので、どちらを採用するかは、プログラムの使われ方で判断してください。#propertyで指定するのは、他の人にも使ってもらうインジケーター用、関数で指定するのは自分専用などという感じです。

プログラムはこちらからダウンロードしてください

RSIに移動平均線を追加(#propertyでレベル線を指定)
RSIに移動平均線を追加(関数でレベル線を指定)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です