RSIインジケータEA

サンプルEA

サンプルEA

RSIインジケータEA

RSIインジケータを使用したEAです。RSI指標を監視しながら自動取引を実行します。

パラメータのデフォルトの設定は、
① RSI値が30以下で成行買い注文実行。
② 買い注文がある状態の時、RSI値が60以上になったら決済。
③ RSI値が70以上で成行売り注文実行。
④ 売り注文がある状態の時、RSI値が40以下になったら決済。
⑤ 計算期間は14期間。

パラメータのデフォルト設定は、通常の日足チャート用に設定していますが、取引通貨ペアや時間軸によって設定を変更した方が良いので、ストラテジーテスターのシミュレーション機能を使っていろいろ検討してみてください。 

コード

// RSIインジケータのEA
#property strict

extern double lots = 0.01;  // ロット数
extern int magic = 1001;    // マジックナンバー
extern int period = 14;     // RSIの計算期間
extern int buy = 30;        // 指標以下で買い注文
extern int buy_close = 60;  // 指標以上で買い注文の決済
extern int sell = 70;       // 指標以上で売り注文
extern int sell_close = 40; // 指標以下で売り注文の決済

int slippagePips = 3;       // スリッページを3Pipsに設定
int slippagePoint;          // スリッページの単位をPipsからPointへ変換した変数
double PipsPerCunit;        // 1Pipsあたり各国通貨単位に変換する係数

int i, j, ticket, type;     // i,j:計数用の変数, ticket:チケットNoの変数, type:買い注文or売り注文のタイプ
bool tf;                    // true or false

void OnInit() {

    int coe = 1;                        // 2,4桁表示業者の場合の係数は「1」
    if(_Digits == 3 || _Digits == 5) {  // 3,5桁表示業者の場合の係数は「10」
        coe = 10;
    }
    PipsPerCunit = _Point * coe;        //1Pipsあたりを各国通貨単位に変換する係数
    slippagePoint = slippagePips * coe; //スリッページの単位をPipsからPointへ変換
}

void OnDeinit(const int reason) {       //終了処理
   ObjectsDeleteAll();                  // オブジェクトテキストをEA削除時消すための処理
}

void OnTick() { //レート変動毎の処理

   // 既に注文されているかチェック。無しの時、ticket=-1。
   ticket = -1;
   for(j=0; j < OrdersTotal(); j++) { 
      if(OrderSelect(j, SELECT_BY_POS) == false) {
         break;
      }
      
      if(magic == OrderMagicNumber() && OrderSymbol() == _Symbol) {
         ticket = OrderTicket();
         type = OrderType();
         break;
      }
   }
   
   double RSI = iRSI(NULL, 0, period, 0, 0);
   
   // 現在、注文が成立していなくて、条件が合えば注文実行
   if(ticket == -1) {
      if(RSI <= buy) {
         ticket = OrderSend(Symbol(), OP_BUY,  lots, Ask, slippagePoint, 0, 0, "買い注文", magic, 0, clrNONE); // 買い注文
      } else if(RSI >= sell) {
         ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, slippagePoint, 0, 0, "売り注文", magic, 0, clrNONE); // 売り注文
      }
   
   // 現在、注文が成立していて、条件が合えば決済実行
   } else { 
      if(RSI >= buy_close && type == OP_BUY) {
         tf = OrderClose(ticket, lots, Bid, slippagePoint);
      }else if(RSI <= sell_close && type == OP_SELL) {
         tf = OrderClose(ticket, lots, Ask, slippagePoint);
      }
   }
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

 ストラテジーテスターを使って次の条件でシミュレーションした結果です。パラメータの設定はデフォルトです。

取引内容

レポート

※ストラテジーテスターによるシミュレーション結果は、保存されているヒストリカルデータや現在のスワップによって異なってきます。

タイトルとURLをコピーしました