現在利用しているRSI逆張りシンプルEAソース公開

スポンサーリンク

数年のMT4運用の末にたどり着いたのがこのシンプルさ。

「MT4入門初級編」とかに出てきそうです。

このEAをパラメータを変えたり、一時的に運用停止しながら、地合いに合わせて微調整して使っています。

どの通貨ペアでもどの時間軸でも使えます。

#include 
#define versionValue "1.00"
#property strict

extern int MAGIC = 29388; //マジックナンバー
extern double ONE_LOT_AMMOUNT = 5000.0; // 0.01ロットポジションを取るための口座残高
extern double LIMIT_RSI_HIGH = 74.0; // 売りエントリのRSI値
extern double LIMIT_RSI_LOW = 22.0; // 買いエントリのRSI値
int SLIPPAGE = 20;
extern double takeProfitBuy = 0.003; // 買いエントリの利食い幅
extern double stopLossBuy = 0.003; // 買いエントリの損切り幅
extern double takeProfitSell = 0.003; // 売りエントリの利食い幅
extern double stopLossSell = 0.003; // 売りエントリの損切り幅


//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
   //---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   //---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
   // 現在エントリしてるか
   
   int ordersTotalNum = OrdersTotal();
   if(ordersTotalNum == 0)
   {
      // エントリしてなかったらエントリ
      bed();
      return;
   }
}   

// エントリ処理
void bed()
{
   
   // RSI取得
   double iRIPrice = iRSI(NULL,NULL,14,PRICE_CLOSE,1);
   
   // ロット数計算
   double lots = 0;
   
   // double lastProfit = 0;
   
   lots = MathFloor((AccountBalance()) / ONE_LOT_AMMOUNT )* MarketInfo(Symbol(),MODE_LOTSTEP);
   
   // RSIが規定値がよりも高ければ、反転を期待して売り注文
   if(iRIPrice > LIMIT_RSI_HIGH)
   {
      // まずはSL/TPなしで発注
      int ticketNo=OrderSend(Symbol(),OP_SELL,lots,Bid,SLIPPAGE,0,0,NULL,MAGIC,0,clrYellow);
      if(ticketNo == -1)
      {
         Print("###Order Sell 001");
         Print(ErrorDescription(GetLastError()));
         return;
      }
   
      // OrderPriceが確定してから、TP/SLを設定
      if(OrderSelect(ticketNo,SELECT_BY_TICKET)==true)
      {
         double openPrice = OrderOpenPrice();
         double currentSL = openPrice + stopLossSell;
         double currentTP = openPrice - takeProfitSell;

         if(!OrderModify(ticketNo,Bid,currentSL,currentTP,0,clrYellow))
         {
            Print("###Order Sell 002");
            Print(ErrorDescription(GetLastError()));
         }
      }
   }
   // RSIが規定値がよりも低ければ反転を期待して、買い注文
   else if(iRIPrice < LIMIT_RSI_LOW)
   {
      // まずはSL/TPなしで発注
      int ticketNo=OrderSend(Symbol(),OP_BUY,lots,Ask,SLIPPAGE,0,0,NULL,MAGIC,0,clrYellow);
      if(ticketNo == -1)
      {
         Print("###Order Buy 001");
         Print(ErrorDescription(GetLastError()));
         return;
      }
      
      // OrderPriceが確定してから、TP/SLを設定
      if(OrderSelect(ticketNo,SELECT_BY_TICKET)==true)
      {
         double openPrice = OrderOpenPrice();
         double currentSL = openPrice - stopLossBuy;
         double currentTP = openPrice + takeProfitBuy;
         if(!OrderModify(ticketNo,Ask,currentSL,currentTP,0,clrYellow))
         {
            Print("###Order Buy 002");
            Print(ErrorDescription(GetLastError()));
         }
      }
   }
}

//+------------------------------------------------------------------+

 

私が運用中のEA
スポンサーリンク
システムトレードでそこそこ設ける方法

コメント