Thread: Ema Cross!
View Single Post
  #35 (permalink)  
Old 02-06-2006, 06:34 PM
SpecII SpecII is offline
Junior Member
 
Join Date: Dec 2005
Posts: 15
SpecII is on a distinguished road
Quote:
Originally Posted by codersguru
Thanks again ! Could I see your code for multiple pairs?
Hi,I'm posting the code.It's right?

Thanks

PHP Code:
//+------------------------------------------------------------------+
//|                                                    EMA_CROSS.mq4 |
//|                                                      Coders Guru |
//|                                         http://www.forex-tsd.com |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| TODO: Add Money Management routine                               |
//+------------------------------------------------------------------+

#property copyright "Coders Guru"
#property link      "http://www.forex-tsd.com"

//---- input parameters
extern double    TakeProfit=130;
extern double    Lots=1;
extern double    TrailingStop=20;

extern int ShortEma 10;
extern int LongEma 80;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   
return(0);
  }

int Crossed (double line1 double line2)
   {
      static 
int last_direction 0;
      static 
int current_direction 0;
      
      
//Don't work in the first load, wait for the first cross!
      
static bool first_time true;
      if(
first_time == true)
      {
         
first_time false;
         return (
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); //not changed
      
}
   }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int OrdersPerSymbol=0;  
//---- 

   
int cntticket;
   
double SEmaLEma;
   
   
   if(
Bars<100)
     {
      Print(
"bars less than 100");
      return(
0);  
     }
   if(
TakeProfit<10)
     {
      Print(
"TakeProfit less than 10");
      return(
0);  // check TakeProfit
     
}
     
     
OrdersPerSymbol=0;
    for(
cnt=OrdersTotal();cnt>=0;cnt--)
     {
      
OrderSelect(cntSELECT_BY_POSMODE_TRADES); 
      if (
OrderSymbol()==Symbol() )
     {
     
OrdersPerSymbol++;
     }
   }
     
     
   
SEma iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
   
LEma iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);
   
   
   static 
int isCrossed  0;
   
isCrossed Crossed (LEma,SEma);
   
  
// total  = OrdersTotal(); 
   
if(OrdersPerSymbol 1
     {
       if(
isCrossed == 1)
         {
            
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"EMA_CROSS",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);
         }
         if(
isCrossed == 2)
         {

            
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"EMA_CROSS",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<OrdersTotal();cnt++)
     {
      
OrderSelect(cntSELECT_BY_POSMODE_TRADES);
      
//OrderPrint();
      
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(
OrderType()==OP_BUY)   // long position is opened
           
{
            
// should it be closed?
           
           /* REMOVED - Trailling stop only close
           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?
            
            /* REMOVED - Trailling stop only close
            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);
  }
//+------------------------------------------------------------------+ 
Reply With Quote