目次
RSIとは?
以下の記事を参考にしてください。
RSIとは?使い方や注意点について解説
よくあるトレードルール
RSIを使用したトレードルールは以下のような逆張り手法として使用されます。
エントリールール
・RSIが70以上
→売る
・RSIが30以下
→買う
トレードルールのあいまいな箇所
(1)どのタイミングエントリーを判断するか?
・最新の足が確定するまで待つか?それとも待たないか?
(例) 1本前の足の終値を使用するか?(Close[1]またはOpen[0])
現在の足の値段を使用するか?(Close[0])
・RSIが一定の値を超えて、しばらく様子を見るか?
(例) RSIが70以上になってから5分以上経過したらエントリーする
・RSIの値が戻るタイミングでエントリーする
(例) RSIが75になった後、70以下になったタイミングでエントリーする
(2)エクジットはどうするか?
・RSIが50になったらエクジット
・RSIが反対方向になったらエクジット
(例) RSIが70でエントリーしたら、RSIが30でエクジットする
(3)損切はどうするか?
・設定しない
・直近の高値
・固定値
検証
以下の2つのルールで検証を行います
【A】単純なドテン型
(1)どのタイミングエントリーを判断するか?
・現在の足の値段を使用する(Close[0])
(2)エクジットはどうするか?
・RSIが反対方向になったら
(3)損切はどうするか?
・設定しない
【B】RSIの反転を確認する
(1)どのタイミングエントリーを判断するか?
・RSIの値が戻るタイミングでエントリーする
→ RSIが75になった後、70以下になったタイミングでエントリーする
(2)エクジットはどうするか?
・RSIが50になったら
(3)損切はどうするか?
・設定しない
【A】 単純なドテン型
ソースコード
『FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)』(豊嶋久道)
のP296に記載があるので、割愛します。
結果
【B】 RSIの反転を確認する
ソースコード
※以下のソースコードは、
『FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)』(豊嶋久道)
で紹介されているライブラリーを使用しています。
そのため、コピペだと動きません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
// マイライブラリー #include <MyLib.mqh> // マジックナンバー #define MAGIC 20094021 #define COMMENT "RSI_反転ロジック追加" // 外部パラメータ extern double Lots=0.1; extern int Slippage=3; extern int _entry_High_Value = 70; extern int _entry_Low_Value = 30; extern int _signal_High_Value= 75; extern int _signal_Low_Value=25; extern int _exit_High_Value = 50; extern int _exit_Low_Value = 50; //状態管理(どのラインでエントリーしたか管理する) //エントリーしたかどうか把握する。エントリーをしたらTrueで、エクジットしたら、Falseにする extern int _entry_High_State = false; extern int _entry_Low_State = false; //シグナルが発生したかどうか把握する。 extern int _signal_High_State= false; extern int _signal_Low_State=false; extern ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; extern int RSIPeriod=14; // RSIの期間 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int EntrySignal(int magic) { // オープンポジションの計算 double pos=MyCurrentOrders(MY_OPENPOS,magic); // RSIの計算 double rsi_0=iRSI(NULL,0,RSIPeriod,applied_price,0); if(!_signal_Low_State && pos==0 && !_entry_Low_State) { _signal_Low_State=rsi_0<_signal_Low_Value; } if(!_signal_High_State && pos==0 && !_entry_High_State) { _signal_High_State=rsi_0>_signal_High_Value; } bool SellSignal=false; bool BuySignal=false; if(_signal_Low_State && !_entry_Low_State) { BuySignal=true; } if(_signal_High_State && !_entry_High_State) { SellSignal=true; } int ret=0; // 買いシグナル if(pos<=0 && BuySignal) { _entry_Low_State=true; _signal_Low_State=false; ret=1; } // 売りシグナル if(pos>=0 && SellSignal) { _entry_High_State=true; _signal_High_State=false; ret=-1; } return(ret); } // エグジット関数 void ExitPosition(int magic) { // オープンポジションの計算 double pos=MyCurrentOrders(MY_OPENPOS,magic); // RSIの計算 double rsi_0=iRSI(NULL,0,RSIPeriod,applied_price,0); //RSIがエクジット値と交差する bool isUnderHighExit=rsi_0<_exit_High_Value; bool isOverLowExit=rsi_0>_exit_Low_Value; int ret=0; //if(pos < 0 && 売りポジションの決済シグナル) ret = 1; if(pos<0 && isUnderHighExit) { ret=1; _entry_High_State = false; _entry_Low_State = false; _signal_High_State= false; _signal_Low_State=false; } //if(pos > 0 && 買いポジションの決済シグナル) ret = -1; if(pos>0 && isOverLowExit) { ret=-1; _entry_High_State=false; _entry_Low_State = false; _signal_High_State= false; _signal_Low_State=false; } // オープンポジションの決済 if(ret!=0) MyOrderClose(Slippage,magic); } // スタート関数 int start() { // 売買ポジションのエグジット ExitPosition(MAGIC); // エントリーシグナル int sig_entry=EntrySignal(MAGIC); // 買い注文 if(sig_entry>0) { MyOrderClose(Slippage,MAGIC); MyOrderSend(OP_BUY,Lots,Ask,Slippage,0,0,COMMENT,MAGIC); } // 売り注文 if(sig_entry<0) { MyOrderClose(Slippage,MAGIC); MyOrderSend(OP_SELL,Lots,Bid,Slippage,0,0,COMMENT,MAGIC); } return(0); } //+------------------------------------------------------------------+ |
結果
おまけ
使用する値段をClose(終値)でなく、Open(始値)だった場合
まとめ
単純なRSIを使用した逆張り戦法は有効ではありません。
改善案
・損切を設定する
→強いトレンドが発生した時に、RSIは上(下)に張り付いて、ぼろ負けするのを防ぐ
・フィルターをかける
・利確のタイミングを変更して、より大きな利益を得られるようにする
関連記事
RSIと同様に売られすぎ・買われすぎを測るインジケータとしてストキャスティクスというインジケータがあります。
ストキャスティクスの検証結果は以下に記載しています。
→ストキャスティクスを使用した手法をMT4で検証する
~FXを始めてみませんか?~
XMは、口座を開設するだけで、3000円のボーナスが無料でもらえます。
資金はないけど、FXを試しに挑戦してみたい方でも大丈夫です。
(サイト主もXMを使用しています)
コメント