Friday, November 19, 2021

9 SMA and 20 SMA Crossover with last candle stoploss

In this ea use  9sma  above 20 and stoploss is last candle low for buy position and last candle high stoploss for sell position.



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

//|                                              4 sma crossover.mq4 |

//|                        Copyright 2021, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

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

#property copyright "Copyright 2021, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

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

//| Expert initialization function                                   |

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

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



extern int MagicNumber=10001;

extern double Lots =0.01;

extern double StopLoss=5;

extern double TakeProfit=50;

extern int TrailingStop=50;

extern int Slippage=3;

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

//    expert start function

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

int start()

{

  double MyPoint=Point;

  if(Digits==3 || Digits==5) MyPoint=Point*10;

  double lastclose = 0;

  int i = OrdersHistoryTotal(); 

  int a = OrdersHistoryTotal() - 1;

  int b = OrdersHistoryTotal();

   

  for (i = a;i < b ;i++)

     {

           if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY) == true)

              {      

                

                 //Alert("orders found"+ OrderTicket() + " " + OrderCloseTime() + " " + OrderOpenPrice());

                 lastclose = OrderCloseTime();

              

              }

     }

  double high5 = High[iHighest(NULL, 0, MODE_HIGH, 5, 1)];   

  double low5 = Low[iLowest(NULL, 0, MODE_LOW, 5, 1)];

  double last1 = iTime(NULL,0,1);

  double last2 = iTime(NULL,0,2);

  double ntime = last1-last2;

  double nexttime = ntime+lastclose;

  double last0 = iTime(NULL,0,0);

  double TheStopLoss=0;

  double TheTakeProfit=0;

  if( TotalOrdersCount()==0) 

  {

     int result=0;

     if(last0 > nexttime && (iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0))&& iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0) >= Low[1] && High[1] >= iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0) &&(Ask>High[1]) && high5 < Ask) // Here is your open buy rule

     {

        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.strategyon.co.in",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(last0 > nexttime && (iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0))&&(iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0)>=Low[1])&& High[1] >= iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0) &&(Low[1]>Bid) && low5 > Bid) // Here is your open Sell rule

     {

      result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.strategyon.co.in",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);

     }

  }

Comment("totalorder " , TotalOrdersCount(), " balance " , AccountBalance(), " equity " , AccountEquity() , "last ",lastclose, " close " , ntime , " next " ,nexttime , " last0 " , last0, "high5 " ,high5 , "low5 " ,low5);  

  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((AccountEquity() > AccountBalance() && Close[1]<iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0)) || iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0) < iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)) //here is your close buy rule

              {

                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);

              }

            if(TrailingStop>0)  

              {                  //buy trailing start

               if(OrderOpenPrice()<Low[1])

                 {

                  if(OrderStopLoss()<Low[1])

                    {

                   //  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);

                     OrderModify(OrderTicket(),OrderOpenPrice(),Low[1],OrderTakeProfit(),0,Green);

                     return(0);

                    }

                 }

              }

           }

         else 

           { //sell trailing start

                if((AccountEquity() > AccountBalance() && Close[1]>iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0)) || iMA(NULL,0,9,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0)) // here is your close sell rule

                {

                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);

                }

            if(TrailingStop>0)  

              {                 

               if((OrderOpenPrice())> High[1])

                 {

                  if((OrderStopLoss()>(High[1])) || (OrderStopLoss()==0))

                    {

                     //OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);

                     OrderModify(OrderTicket(),OrderOpenPrice(),High[1],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);