post

RSIに移動平均線を適用させる~その2

前回は、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に移動平均線を追加(関数でレベル線を指定)

post

RSIに移動平均線を適用させる

なれRSIはギザギザしたラインなので意外に見にくかったりしませんか?もし、RSIに移動平均線がついていたら便利ではないでしょうか?

などと書いてみましたが、実際ストキャスティクスではKラインに対してDラインで滑らかにしています。DラインはKラインの移動平均線なんですよね。だからおかしな考え方ではないと思います。まあ、ゴールデンクロス、デッドクロスが売買タイミングになるかどうかはわかりませんが。

同じようにビルWilliamsの%Rオシレーターも同じように移動平均線をつけてみてはいかがでしょう?

RSIに移動平均線をつけた

RSIに移動平均線をつけた(クリックするともとの大きさで見られます)

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

RSIに移動平均線を適用(プログラムソース)

ナレーションでSラインとか言ってしまいました(笑)

post

海外FXも狭スプレッドになった

今日もプログラムとは離れますが、今日FBSで取引をしようと思ってMT5を立ち上げてびっくり。

スプレッドが0.5pipsになっていました(EUR/USD・ユーロ/米ドルとUSD/JPY・米ドル/円)

(図をクリックするともとの大きさで見られます)

0.5pips(0.5銭)といったら、日本の会社とほとんど変わらない狭さです。ここまで狭かったら、1分足~5分足でスキャルピングもできます。海外FX会社のスプレッドが広いというのはもう昔の話なのかもしれません。しかもドル円がここまで狭いのは驚きです。もう、日本の会社を使う必要ないのではないでしょうかね。

ただ、一つだけFBSの難点は、入出金が米ドルかユーロでしかできないというところ(´;ω;`)せっかく取引で儲けても、出金のときにもう一回為替のレートがのるのです(笑)円安だったら損しちゃいますね。