Saturday, July 7, 2018

Simple Moving Average Crossover Robot

Step 1.
create Simple Moving Average Crossover Robot file in expert folder and

Step 2. copy paste code given below on your SimpleMovingAverageCrossoverRobot file :
//code start
//+------------------------------------------------------------------+
// Simple Moving Average Crossover Robot
//https://forexwithcandlestick.blogspot.com
//
// Disclaimer: This EA is provided to you without any warranty
// Please use first on demo account before live account 
// We WILL not responsible for
// FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR
// ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE,
// EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OF THIS EA OR
// FOREXEADVISOR STRATEGY BUILDER    
//  
// USE THIS EA AT YOUR OWN RISK.
// 
// Before adding this expert advisor to a chart, make sure there are NO
// open positions.
// 
//+------------------------------------------------------------------+


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


extern int MagicNumber=10001;
extern double Lots =0.01;
extern double StopLoss=0.00;
extern double TakeProfit=100.00;
extern int TrailingStop=15;
extern int Slippage=3;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
//current chart, current period, 20 candles, No shift, simple , close price
double SlowMovingAverage = iMA (NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
//current chart, current period, 20 candles, No shift, simple , close price
double LastSlowMovingAverage = iMA (NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1);

//current chart, current period, 10 candles, No shift, simple , close price
double FastMovingAverage = iMA (NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0);
//current chart, current period, 10 candles, No shift, simple , close price
double LastFastMovingAverage = iMA (NULL,0,10,0,MODE_SMA,PRICE_CLOSE,1);
//--------------------------------------------------------------------
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
//if the fast SMA is now above
if ((LastFastMovingAverage < LastSlowMovingAverage) && (FastMovingAverage > SlowMovingAverage))
 {
        result=OrderSend(Symbol(),OP_BUY,AdvancedMM(),Ask,Slippage,0,0,"Simple Moving Average Crossover Robot https://forexwithcandlestick.blogspot.com",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
//if the fast SMA is now above
if ((LastFastMovingAverage > LastSlowMovingAverage) && (FastMovingAverage < SlowMovingAverage))

{
        result=OrderSend(Symbol(),OP_SELL,AdvancedMM(),Bid,Slippage,0,0,"Simple Moving Average Crossover Robot https://forexwithcandlestick.blogspot.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
double AdvancedMM()
{
 int i;
 double AdvancedMMLots = 0;
 bool profit1=false;
 int SystemHistoryOrders=0;
  for( i=0;i<OrdersHistoryTotal();i++)
  {  OrderSelect(i,SELECT_BY_POS ,MODE_HISTORY);
     if (OrderMagicNumber()==MagicNumber) SystemHistoryOrders++;
  }
 bool profit2=false;
 int LO=0;
 if(SystemHistoryOrders<2) return(Lots);
 for( i=OrdersHistoryTotal()-1;i>=0;i--)
  {
     if(OrderSelect(i,SELECT_BY_POS ,MODE_HISTORY))
     if (OrderMagicNumber()==MagicNumber) 
     {
        if(OrderProfit()>=0 && profit1) return(Lots);
        if( LO==0)
        {  if(OrderProfit()>=0) profit1=true;
           if(OrderProfit()<0)  return(OrderLots());
           LO=1;
        }
        if(OrderProfit()>=0 && profit2) return(AdvancedMMLots);
        if(OrderProfit()>=0) profit2=true;
        if(OrderProfit()<0 ) 
        {   profit1=false;
            profit2=false;
            AdvancedMMLots+=OrderLots();
        }
     }
  }
 return(AdvancedMMLots);
}


//----------------------------------------------------------------------------------------
//code end
Step 3.
Now open MT4 and go to :
Insert >> Indicator >> Moving Average 
Set parameter : Period : 10 , shift : 0 , MA Method : Simple , Apply to : close , style : Yellow then OK
repeate again 
Insert >> Indicator >> Moving Average 
Set parameter : Period : 20 , shift : 0 , MA Method : Simple , Apply to : close , style : Red then OK 

Step 4. 
Lunch your MT4 and findSIMPLEMOVINGAVERAGECROSSOVERROBOT and drag and drop on your favourite currency window 
set your parameter and allow live trading on commen section.
Step 5.
Now just watch your robot automatic place order on SIMPLE MOVING AVERAGE CROSSOVER signal.
Happy Trading Now 

No comments:

Post a Comment