RSIOMA EA v1 - Scalper implementation of RSIOMA_v2 indicator - page 2

 

It sounds interesting

Thanks for your post. It seems that the EA is promising.

Best

 

RSI Crosses MA EA help...

'm working on a EA thats suppose to buy or sell when crossing the MA line.

I also wannt the StopLoss to be 75% of the ATR value.

//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "XXX"
#property link "XXX"
//---- input parameters
extern int TakeProfit=5;
extern double Lots=0.1;
extern double TrailingStop=70;
extern int RSIPeriod=8;
extern int MA_Period=8;
extern int AtrPeriod=20;
int StopLoss.1;
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Crossed(double line1, double line2)
  {
   static int last_direction = 0;
   static int current_direction = 0;
   if(line1>line2)
      current_direction = 1; //up
   if(line1<line2)
      current_direction = 2; //down
   if(current_direction != last_direction) //changed
     {
      last_direction = current_direction;
      return (last_direction);
     }
   else
     {
      return (0);
     }
  }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
  {
//----
   int cnt, ticket, total;
   double shortEma, shortRSI;
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0); // check TakeProfit
     }
   shortEma = iMA(NULL, 0, 8, 0, MODE_EMA, PRICE_CLOSE, 0);
   shortRSI = iRSI(NULL, 0, 8, PRICE_CLOSE, 0);
   int isCrossed = Crossed(shortEma, shortRSI);
   total = OrdersTotal();
   if(total < 1)
     {
      if(isCrossed == 1)
        {
         ticket=OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, Ask+TakeProfit*Point,
                          "My EA", 12345, 0, Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
               Print("BUY order opened : ", OrderOpenPrice());
           }
         else
            Print("Error opening BUY order : ", GetLastError());
         return(0);
        }
      double d_ATR = NormalizeDouble(iATR(PERIOD_D1, AtrPeriod, 1, 0), 2); // Get the Daily range
      int i_ATR = d_ATR*100; // Turn it into (full) pips
      StopLoss.1 = i_ATR*075;
      if(isCrossed == 2)
        {
         ticket=OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0,
                          Bid-TakeProfit*Point, "My EA", 12345, 0, Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
               Print("SELL order opened : ", OrderOpenPrice());
           }
         else
            Print("Error opening SELL order : ", GetLastError());
         return(0);
        }
      return(0);
     }
   for(cnt=0; cnt<total; cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY) // long position is opened
           {
            // should it be closed?
            if(isCrossed == 2)
              {
               OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);
               // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid-
                                 Point*TrailingStop, OrderTakeProfit(), 0, Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(isCrossed == 1)
              {
               OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet);
               // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||
                     (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask+Point*TrailingStop,
                                 OrderTakeProfit(), 0, Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+