EES Hedger





//+------------------------------------------------------------------+
//|                                                   EES Hedger.mq4 |
//|                             Copyright © 2008, Elite E Services   |
//|  http://www.eliteeservices.net          http://www.getfxnow.com  |      
//|                Programmed by:               Mikhail Veneracion   |
//|                                                                  |
//|Support:  http://www.eesfx.com  Group:  http://www.forexcoding.com| 
//|Elite E Services (646)837-0059  2620 Regatta Dr. Suite 102 LV, NV |
//+------------------------------------------------------------------+
/*
Instructions:
Example you are trading SAR EA on GBPUSD and SAR EA uses magicnumber of 1234, 
so you want to use EES Hedger in conjunction with SAR EA in this example, so this is what you do.
Open another GBPUSD chart(same pair SAR EA is trading), does not matter what time frame, but it is 
ideal that you use the same timeframe as what the SAR EA is trading from, or a lower timeframe. Now 
on Advocates external var: Original_EA_Magic enter SAR EA's magicnumber which is in this example 1234. 
Now make sure that Advocate_EA_Magic is different from Original_EA_Magic.
Then that's it. Once SAR EA opens a trade, EES Hedger will open the opposite order.
Now if you want to use EES Hedger for Manual trades. Simply input Original_EA_Magic = 0;
*/

#property copyright "Copyright © 2008, Elite E Services"
#property link      "http://eliteeservices.net" 

extern int
   Original_EA_Magic       = 0,    //This is the magic number that your 1st EA uses where advocate EA will base its trades on
   Advocate_EA_Magic       = 2008, //This is the advocate EAs own magic number please keep it unique to avoid conflict
   Slippage                = 6,    //Amount of allowed slippage
   TakeProfit              = 50,   //Take profit amount, per trade
   StopLoss                = 50,   //Stop loss, per trade
   TS_MinProfit             = 0,   //minimum profit require before trailing stop starts
   TrailingStop            = 25,   //this is the trailing stop in pips
   BreakEvenAfterPips      = 25;   //when this amount in profit in pips is reached SL will be moved to breakeven
extern double 
   Lots                    = 0.1;
   
datetime TT;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   TT=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   //TRAILING STOP SECTION FOR TRADE 2
   if(TrailingStop>0 && subTotalTrade()>0)
   {
       int total = OrdersTotal();
       for(int cnt=0;cnt<total;cnt++)
       {
          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

          if(OrderType()<=OP_SELL &&
             OrderSymbol()==Symbol() &&
             OrderMagicNumber()==Advocate_EA_Magic)
          {
             subTrailingStop(OrderType());
          }
       }
   } 
   //----------------------- BREAK EVEN AFTER PIPS SECTION
   if(BreakEvenAfterPips >0 && subTotalTrade()>0)
   {  
      total = OrdersTotal();
      for(cnt=0;cnt<total;cnt++)
      {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

         if(OrderType()<=OP_SELL &&
            OrderSymbol()==Symbol() &&
            OrderMagicNumber()==Advocate_EA_Magic)
         {
            subBreakEvenAfterPips (OrderType());
         }
      }
   }
   subTradeOpenBar(Original_EA_Magic);
//----
   return(0);
  }
//+------------------------------------------------------------------+

int subTradeOpenBar(int MagicNumber)
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber)
      {
         total = iBarShift(Symbol(), 0, OrderOpenTime(), false);   
         if((total<1)&&(TT!=iTime(Symbol(),0,0)))
         {
            if(OrderType()==OP_BUY)
            {
               //OPEN SELL ORDER
               subOpenOrder(OP_SELL, Lots, StopLoss, TakeProfit, Advocate_EA_Magic);
               TT=iTime(Symbol(),0,0);
               break;
            }
            
            if(OrderType()==OP_SELL)
            {
               //OPEN BUY ORDER
               subOpenOrder(OP_BUY, Lots, StopLoss, TakeProfit, Advocate_EA_Magic);
               TT=iTime(Symbol(),0,0);
               break;
            }
         }
      }
   }
   return(total);
}
int subOpenOrder(int type, double Lotz, int stoploss, int takeprofit,int MagicNumber)
{
   int NumberOfTries = 15;
   string TicketComment = "Advocate EA";
   int
         ticket      = 0,
         err         = 0,
         c           = 0;
         
   double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         bStopLoss   = 0,
         bTakeProfit = 0;

   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(Ask-stoploss*Point,Digits);
      bStopLoss   = NormalizeDouble(Bid+stoploss*Point,Digits);
   }
   
   if(takeprofit!=0)
   {
      aTakeProfit = NormalizeDouble(Ask+takeprofit*Point,Digits);
      bTakeProfit = NormalizeDouble(Bid-takeprofit*Point,Digits);
   }
   
   if(type==OP_BUY)
   {
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lotz,Ask,Slippage,aStopLoss,aTakeProfit,TicketComment,MagicNumber,0,Green);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELL)
   {   
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lotz,Bid,Slippage,bStopLoss,bTakeProfit,TicketComment,MagicNumber,0,Red);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }  
   return(ticket);
}
void subTrailingStop(int Type)
{
   if(Type==OP_BUY)   // buy position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
        
            if(Bid-OrderOpenPrice()>Point*TS_MinProfit &&
              OrderStopLoss()<Bid-Point*TrailingStop)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
               return(0);
            }
          
   }         
   if(Type==OP_SELL)   // sell position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
     
            if(OrderOpenPrice()-Ask>Point*TS_MinProfit)
            {
            if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
               return(0);
            }
            }
           
           
        
   }
}
//---------------------- BREAK EVEN FUNCTION
void subBreakEvenAfterPips(int Type)
{
   if(Type==OP_BUY)
   {
      if(((Bid-OrderOpenPrice()) > (Point*BreakEvenAfterPips))&&(OrderStopLoss()<OrderOpenPrice()))
            OrderModify(
                        OrderTicket(),
                        OrderOpenPrice(),
                        NormalizeDouble(OrderOpenPrice()+(10*Point),Digits),
                        OrderTakeProfit(),
                        0,
                        GreenYellow);
   }
   if(Type==OP_SELL)
   {
    if(((OrderOpenPrice()-Ask) > (Point*BreakEvenAfterPips))&&(OrderStopLoss()>OrderOpenPrice()))
            OrderModify(
                        OrderTicket(),
                        OrderOpenPrice(),
                        NormalizeDouble(OrderOpenPrice()-(10*Point),Digits),
                        OrderTakeProfit(),
                        0,
                        Red);
   }
}
int subTotalTrade()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() &&
         OrderMagicNumber()==Advocate_EA_Magic) total++;
   }
   return(total);
}



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for EES Hedger


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: