当ページは、アフィリエイト広告を含みます。

MT4でRSIEAを作る売買シグナル部分 MT4EA作成編第7回

既存EAに手を加えて自作EAを作る解説の2回目です。前回は、RSIの売買判断の数値計算部分についてやりました。

 

参考:MT4組み込みテクニカル指標関数の使い方 iRSI編

 

今回は、RSIEAの売買判断部分です。前回のプログラムでRSI数値計算を行いました。今回はそれに基づいて売買判断をします。売買判断といっても、内容はとてもシンプルです。

 

では、はじめましょう。

RSIEA 売買シグナル部分の解説

書き換えた内容をまずは確認しておきましょう。

 

2、買いシグナル 売りシグナル

 

*元の文章
//買いシグナル
if(pos <= 0 && Close[2] <= SlowHH && Close[1] > SlowHH)

 

//売りシグナル
if(pos >= 0 && Close[2] >= SlowLL && Close[1] < SlowLL)

 

*書換後の文章
//買いシグナル
//if(pos <= 0 && Close[2] <= SlowHH && Close[1] > SlowHH)
if(pos <= 0 && Rsi2 >= 30 && Rsi1 < 30)//buy

 

//売りシグナル
//if(pos >= 0 && Close[2] >= SlowLL && Close[1] < SlowLL)
if(pos >= 0 && Rsi2 <= 70 && Rsi1 >70)//sell

 

元の文章は、ブレイクアウトの売買判断のものですのでここでは解説は割愛させていただきます。まずは買いシグナルからプログラムを確認してみましょう。

RSI買いシグナル文の内容

MT4 RSIEA

RSIの買いシグナルはこの1文でできています。

 

if(pos <= 0 && Rsi2 >= 30 && Rsi1 < 30)//buy

 

この文章は、前に考えてあった売買ロジックをプログラムにしたものです。if文というのは、「もし〜ならこう行動して下さい」という意味のよく使う命令文です。今回「こう行動してください」は、この次に続く注文部分を指しています。注文部分は、変更なしでそのまま使います。

 

ifの次に続く「pos <= 0」というのは「買いポジションがあるかどうか」を確認している部分です。これも元の文章のまま使います。

 

問題はその次ですね。

 

Rsi2 >= 30 && Rsi1 < 30

 

ここがRSI買い判断をする部分です。ここの解説をする前に先日の復習をしておきましょう。

 

参考:手順2:EAの売買ロジックを考える

 

ここでの買いロジックはこうでした。

 

  • 2本前のRSI値 >= 30
  • 1本前のRSI値 <  30

 

前回「Rsi2=2本前のRSI値」であり「Rsi1=1本前のRSI値」だと説明したのを覚えておいでかと思います。これをそのまま置き換えたのが今回のプログラム文です。

 

  • Rsi2 >= 30
  • Rsi1 < 30

 

この2つを&&(&&=and)でつないでいます。2つの条件を満たすときのみ買い注文が発生するという意味です。

 

こう書いてもよくわからないかもしれませんね。ここは、数字を入れてみるとわかりやすくなります。

 

RSIは、相場が下落するとRSI値も下がる傾向にあります。例えば、米ドル円が102円→101.5円→101円という具合に下がってくるとRSI値も下がるという具合です。例えば以下のようにRSI値が推移したとします。

 

  • 2本前のRSI値(Rsi2)=35
  • 1本前のRSI値(Rsi1)=32

 

この状況を先ほどのプログラム文に当てはめるとこうなります。

 

  • Rsi2 >= 30
  • Rsi1 >= 30

 

最初のRsi2 >= 30は条件クリアしていますが、次のRsi1 < 30は条件クリアしていませんね。そのため、このケースでは買い注文は発生しません。

 

では、こうなるといかがでしょう。

 

  • 2本前のRSI値(Rsi2)=35
  • 1本前のRSI値(Rsi1)=29

 

これだと状況が大分違ってきます。先ほど同様にプログラム文に当てはめるとこうなります。

 

  • Rsi2 >= 30
  • Rsi1 < 30

 

if(pos <= 0 && Rsi2 >= 30 && Rsi1 < 30)//buy

 

このプログラム文の両方の条件を満たしていますよね。この場合は、次の買い注文のプログラム文に進むことになります。

 

前々回で書き換えたプログラム全文をみて頂くとこの文の次にこうなっているはずです。

 

ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",MAGIC,0,Blue);
return(0);

 

ここは書き換えていないので元の文章のままです。

 

OrderSendで始まる文章が確認できると思います。これが、注文を出す命令文です。if文の条件を満たすとこの注文が執行されることになります。

 

 

売り注文はその逆

売り注文部分も先ほどの買い注文と仕組みは同じです。RSI売り注文発生の売買ロジックはこうでした。

 

  • 2本前のRSI値 <= 70
  • 1本前のRSI値 >  70

 

買い注文同様に、プログラム文に置き換えるとこうなります。

 

if(pos >= 0 && Rsi2 <= 70 && Rsi1 >70)//sell

 

そして、この条件を満たすと先ほど同様に売り注文が執行されることになります。

 

ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",MAGIC,0,Red);
return(0);

 

OrderSend文が確認できますね。( )内にも注目してみてください。似たような文章ですがちょっと違っています。買い注文のときは「OP_BUY」売り注文のときは「OP_SELL」となっていますよね。

 

  • OP_BUY = 買いの成行注文
  • OP_SELL= 売りの成行注文

 

指値注文にしたいときは、この部分を変更します。ただ、指値注文にするために変更するのはこの部分だけではありません。意欲のでてきた方は、豊嶋先生の本と格闘して挑戦してみるとよいと思います。

 

今回は、単純なやり方をご紹介するのが目的なので、その部分はやりません。

 

これで、RSIの注文が出せるようになりました。

 

ポジションを作った後は、決済ですね。


まとめ

このRSIのロジックは、テクニカル指標での売買判断の基本パターンでもあります。手を動かしながら、身につけていってくださいね。

MT4EA作成編目次

EAを手軽につくるやり方をまとめました。

 

MT4 自動売買関連記事まとめページへ戻る

2014/04/22


記事がお気に召しましたら、共有・拡散お願いします。

このエントリーをはてなブックマークに追加   
TOPへ