3 EMA and 2 LWMA

 
//+------------------------------------------------------------------+
//|                                                   Prodi5MAs.mq4 |
//|                                    Copyright © 2011, PRODI GROUP |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, PRODI GROUP OF MIAMI / ALGORITHM SYSTEMS"
#property link      ""

extern int     EMA1period = 15;
extern int     EMA2period = 20;
extern int     EMA3period = 50;
extern int     LWMA1period = 15;
extern int     LWMA2period = 20;
extern double  valperiod = 15;
extern int GatorJaws = 13;
extern int GatorJawsShift = 8;
extern int TeergJaws = 8;
extern int TeergJawsShift = 5;
extern int LipsJaws = 5;
extern int LipsJawsShift = 3;
extern double GatorUpValue = 0.00110;
extern double GatorDownValue = -0.00110;
extern double RSISLperiod =15;
extern double  Order1Lots = 0;
extern double  Order2Lots = 0;
extern double  Order3Lots = 0;
extern double  Order4Lots = 0;
extern double  Order1TakeProfit = 0;
extern double  Order2TakeProfit = 0;
extern double  Order3TakeProfit = 0;
extern double  MoveSLafterOrder1 = 0;
extern double  MoveSLafterOrder2 = 0;
extern double  MoveSLafterOrder3 = 0;
extern double  TrailingStopForOrder4 = 0;
extern int     StartTradeHour = 0;
extern int     EndTradeHour = 24;
extern int     MagicNumber = 164783;
extern bool    UseEmails = false;

double val=0;

bool cont;
int dig = 1, i, AllOrders, currPos = 0, orderTicket, cycle;
bool ThereIsOrder1, ThereIsOrder2, ThereIsOrder3, ThereIsOrder4;
datetime prevDate;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+


int init()
  {
   if( MarketInfo(Symbol(),MODE_DIGITS) == 3 || MarketInfo(Symbol(),MODE_DIGITS) == 5)
      dig = 10;
   currPos = 0;
   prevDate = Time[0];
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   bool NewBar = isNewBar();

   double EMA1 = iMA(Symbol(), Period(), EMA1period, 0, MODE_EMA, PRICE_OPEN, 1);

   double EMA2 = iMA(Symbol(), Period(), EMA2period, 0, MODE_EMA, PRICE_OPEN, 1);
   
   double EMA3 = iMA(Symbol(), Period(), EMA3period, 0, MODE_EMA, PRICE_OPEN, 1);

   double preEMA1 = iMA(Symbol(), Period(), EMA1period, 0, MODE_EMA, PRICE_OPEN, 2);

   double preEMA2 = iMA(Symbol(), Period(), EMA2period, 0, MODE_EMA, PRICE_OPEN, 2);
   
   double preEMA3 = iMA(Symbol(), Period(), EMA3period, 0, MODE_EMA, PRICE_OPEN, 2); 
   
   double LWMA1 = iMA(Symbol(), Period(), LWMA1period, 0, MODE_LWMA, PRICE_CLOSE, 1);
   
   double LWMA2 = iMA(Symbol(), Period(), LWMA2period, 0, MODE_LWMA, PRICE_OPEN, 1);
   
   double preLWMA1 = iMA(Symbol(), Period(), LWMA1period, 0, MODE_LWMA, PRICE_CLOSE, 2);

   double preLWMA2 = iMA(Symbol(), Period(), LWMA2period, 0, MODE_LWMA, PRICE_OPEN, 2);
   
   double GatorDown = iGator(Symbol(),Period(),GatorJaws,GatorJawsShift,TeergJaws,TeergJawsShift,LipsJaws,LipsJawsShift,MODE_EMA,PRICE_CLOSE,MODE_LOWER,0);
   
   double GatorUp = iGator(Symbol(),Period(),GatorJaws,GatorJawsShift,TeergJaws,TeergJawsShift,LipsJaws,LipsJawsShift,MODE_EMA,PRICE_CLOSE,MODE_UPPER,0);
   
   val = iRVI(NULL, 0, 15,MODE_MAIN,0);
 

   AllOrders = 0;
   ThereIsOrder1 = false;
   ThereIsOrder2 = false;
   ThereIsOrder3 = false;
   ThereIsOrder4 = false;
   
   for ( i = 0; i < OrdersTotal(); i++)
      {
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
         {
            AllOrders++;
            if(OrderComment() == "Order 1") ThereIsOrder1 = true;
            if(OrderComment() == "Order 2") ThereIsOrder2 = true;
            if(OrderComment() == "Order 3") ThereIsOrder3 = true;
            if(OrderComment() == "Order 4") ThereIsOrder4 = true;
         }
      }

   for ( i = 0; i < OrdersTotal(); i++)
      {
         OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

         if(!ThereIsOrder1 && ThereIsOrder2 && ThereIsOrder3 && ThereIsOrder4)
         {
            if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && ((OrderType() == OP_BUY && OrderStopLoss() != OrderClosePrice() + MoveSLafterOrder1*Point*dig) || (OrderType() == OP_SELL && OrderStopLoss() != OrderClosePrice() - MoveSLafterOrder1*Point*dig)))
            {
               if (OrderType() == OP_BUY) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + MoveSLafterOrder1*Point*dig, OrderTakeProfit(), 0, NULL); 
               if (OrderType() == OP_SELL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - MoveSLafterOrder1*Point*dig, OrderTakeProfit(), 0, NULL); 
            }
         }

         if(!ThereIsOrder1 && !ThereIsOrder2 && ThereIsOrder3 && ThereIsOrder4)
         {
            if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && ((OrderType() == OP_BUY && OrderStopLoss() < OrderClosePrice() + MoveSLafterOrder2*Point*dig) || (OrderType() == OP_SELL && OrderStopLoss() > OrderClosePrice() - MoveSLafterOrder2*Point*dig)))
            {
               if (OrderType() == OP_BUY) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + MoveSLafterOrder2*Point*dig, OrderTakeProfit(), 0, NULL); 
               if (OrderType() == OP_SELL) OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - MoveSLafterOrder2*Point*dig, OrderTakeProfit(), 0, NULL); 
            }
         }

         if(!ThereIsOrder1 && !ThereIsOrder2 && !ThereIsOrder3 && ThereIsOrder4 && TrailingStopForOrder4 > 0)
         {
            if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && ((OrderType() == OP_BUY && OrderStopLoss() < Bid - TrailingStopForOrder4*Point*dig) || (OrderType() == OP_SELL && OrderStopLoss() > Ask + TrailingStopForOrder4*Point*dig )))
            {
               if (OrderType() == OP_BUY) OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStopForOrder4*Point*dig, OrderTakeProfit(), 0, NULL); 
               if (OrderType() == OP_SELL) OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStopForOrder4*Point*dig, OrderTakeProfit(), 0, NULL); 
            }
         }


      }

   if (NewBar && ((currPos <= 0 && EMA1 > EMA2 && EMA1 > EMA3 && (preEMA1 <= preEMA2 || preEMA1 <= preEMA3) && val > 0 && CheckTime()) || ((LWMA1 > LWMA2 && EMA1 && preLWMA1 <= preLWMA2 )> EMA3 && val > 0 && !ThereIsOrder1 && !ThereIsOrder2 && !ThereIsOrder3 && !ThereIsOrder4)) )
  
   {
      CloseAll();
      Open_Buy(Ask + Order1TakeProfit*Point*dig, Order1Lots, "Order 1");
      Open_Buy(Ask+ Order2TakeProfit*Point*dig, Order2Lots, "Order 2");
      Open_Buy(Ask+ Order3TakeProfit*Point*dig, Order3Lots, "Order 3");
      Open_Buy(0, Order4Lots, "Order 4");
      currPos = 1;
      if (UseEmails && !IsTesting() && !IsOptimization()) SendMail("Orders Opened At " + Symbol() + " Buy: " + DoubleToStr(Ask, Digits), TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES));                
   }  

   if (NewBar && ((currPos >= 0 && EMA1 < EMA2 && EMA1 < EMA3 && (preEMA1 >= preEMA2 || preEMA1 >= preEMA3) && val < 0 &&  CheckTime()) || ((LWMA1 < LWMA2 && preLWMA1 >= preLWMA2)< EMA3  && val < 0 && !ThereIsOrder1 && !ThereIsOrder2 && !ThereIsOrder3 && !ThereIsOrder4)) )
   
   {
      CloseAll();
      
      Open_Sell(Bid - Order1TakeProfit*Point*dig, Order1Lots, "Order 1"); 
      Open_Sell(Bid - Order2TakeProfit*Point*dig, Order2Lots, "Order 2");
      Open_Sell(Bid - Order3TakeProfit*Point*dig, Order3Lots, "Order 3"); 
      Open_Sell(0, Order4Lots, "Order 4");
      currPos = -1;
      if (UseEmails && !IsTesting() && !IsOptimization()) SendMail("Orders Opened At " + Symbol() + " Sell: " + DoubleToStr(Bid, Digits), TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES));
      
  }   

     if (iRSI(NULL,0,RSISLperiod,PRICE_CLOSE,0) <= 50 && AllOrders > 0)
      CloseOneSize(OP_BUY);

   if (iRSI(NULL,0,RSISLperiod,PRICE_CLOSE,0) >= 50 && AllOrders > 0)
      CloseOneSize(OP_SELL);

   return(0);

can any one help with this code im trying to have it enter a trade when the 2 LWMA cross and the #3Ema confirms the trend, but it doesnt enter when the 2 LWMA cross, can someone pin point what i did wroung???

 

disregard the "&& EMA1 && " in >>>((LWMA1 > LWMA2 && EMA1 && preLWMA1 <= preLWMA2 )> EMA3 . that was a typo while pasting it into forum

 
prodi:
can any one help with this code im trying to have it enter a trade when the 2 LWMA cross and the #3Ema confirms the trend, but it doesnt enter when the 2 LWMA cross, can someone pin point what i did wroung???
  1. for ( i = 0; i < OrdersTotal(); i++)
          {
             OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
             if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
    Always test return codes
    for ( i = 0; i < OrdersTotal(); i++) if(
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
    && OrderMagicNumber() == MagicNumber 
    && OrderSymbol() == Symbol() 
    ){

  2. if(OrderComment() == "Order 1") ThereIsOrder1 = true;
    Brokers can change comments, partially or completely
  3.  if(!ThereIsOrder1 && ThereIsOrder2 && ThereIsOrder3 && ThereIsOrder4)
    Do you mean
     if((!ThereIsOrder1) && ThereIsOrder2 && ThereIsOrder3 && ThereIsOrder4)
    or
     if(!(ThereIsOrder1 && ThereIsOrder2 && ThereIsOrder3 && ThereIsOrder4))
    Don't rely on precedence, don't mix and's, or's and not's
  4. if (NewBar 
    && ((currPos <= 0 && EMA1 > EMA2 && EMA1 > EMA3 && (preEMA1 <= preEMA2 || preEMA1 <= preEMA3) && val > 0 && CheckTime()) 
    || ((LWMA1 > LWMA2 && EMA1 && preLWMA1 <= preLWMA2 )> EMA3 && val > 0 
    && !ThereIsOrder1 && !ThereIsOrder2 && !ThereIsOrder3 && !ThereIsOrder4)) )
    That statement, besides being utterly unreadable, Will NOT COMPILE [(bool && EMA1 && bool) > EMA3] or if it does is gibberish [apples > oranges]

    Split into readable peices, print the values so you can find out WHY.

    bool EmaIsUp       = EMA1 > EMA2 && EMA1 > EMA3,
         EmaWasPrevNot = preEMA1 <= preEMA2 || preEMA1 <= preEMA3,
         EmaIsBuy      = EmaIsUp && EmaWasPrevNot,
         LwmaIsUp      = 
         LwmaWasNot=
    if (NewBar && CheckTime() && EmaIsBuy && LwmaIsBuy && val > 0...