wajdyss_MA_expert_v3





// expert

#property copyright "Idea by wajdyss"
#property link      "wajdyss@yahoo.com"
 
//ÎÕÇÆÕ ÇáÇßÓÈíÑÊ
extern string ModeNote = "0 = sma, 1 = ema, 2 = smma, 3 = lwma";
extern string PriceNote = "0=Close, 1=Open, 2=High, 3=Low, 4=Median, 5=Typical,6=Weighted Close ";
extern int FastMA = 10;
extern int FastMode  = 1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int FastShift  = 0;
extern int FastPrice  = 0;
extern int SlowMA = 20;
extern int SlowMode  = 1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma
extern int SlowShift  = 0;
extern int SlowPrice  = 0;
extern int TakeProfit=100;
extern int StopLoss=50;
extern int TrailingStop = 0;
extern bool AutoClose=true;
extern double  FirstLots=0.1;
extern bool    Management=true;
//extern double  Risk=0.5;
extern int     Balance=1000;
extern int     MagicNumber = 2009;
 int Open_Hour=0;
 int Close_Hour=231;
 int Close_Minute=45;
 int Friday=51;
 int Friday_Hour=221;
 int Friday_Minute=45;
extern int TextSize=14;
extern color TextColor1=Black;
extern color TextColor2=Blue;
extern color TextColor3=Red;
extern color TextColor4=Black;


int    Ticket1,Ticket2;
int    t1,t2,gT1,gT2;
int handle;
int eyear=9999;
int emonth=9;
int eday=9;
string last_sell_time="LastOrderTimeSell";//***************************************
string last_buy_time ="LastOrderTimeBuy";//***************************************
double Lots;

int init()
{
 last_sell_time=last_sell_time+AccountNumber()+Symbol();//***************************************
 last_buy_time=last_buy_time+AccountNumber()+Symbol();//***************************************
 if(IsTesting())//***************************************
    {//***************************************
     GlobalVariableSet(last_sell_time,0);//***************************************
     GlobalVariableSet(last_buy_time,0);//***************************************
    }//***************************************

  return(0);
}
int deinit()
{
  Comment("");
   ObjectDelete("a label");
 ObjectDelete("b label");
 ObjectDelete("c label");
 ObjectDelete("d label");

  return(0);
}
int start()
{
  //a
          if(ObjectFind("a label") != 0)
   {
      ObjectCreate("a label", OBJ_LABEL, 0,0,0);
      ObjectSetText("a label","ÈÓã Çááå ÇáÑÍãä ÇáÑÍíã" , TextSize, "Arial", TextColor1);
      ObjectSet("a label", OBJPROP_XDISTANCE,350);
     ObjectSet("a label", OBJPROP_YDISTANCE,0);
   }
   
   //b
      if(ObjectFind("b label") != 0)
   {
      ObjectCreate("b label", OBJ_LABEL, 0,0,0);
      ObjectSetText("b label","wajdyss MA expert"  , TextSize, "Arial", TextColor2);
      ObjectSet("b label", OBJPROP_XDISTANCE,340);
     ObjectSet("b label", OBJPROP_YDISTANCE,25);
   }
   
   // c

   
      if(ObjectFind("c label") != 0)
   {
      ObjectCreate("c label", OBJ_LABEL, 0,0,0);
      ObjectSetText("c label","wajdyss@yahoo.com"  , TextSize, "Arial", TextColor3);
      ObjectSet("c label", OBJPROP_XDISTANCE,335);
     ObjectSet("c label", OBJPROP_YDISTANCE,50);
   }

    if ((Year()>eyear) || (Year()==eyear && Month()>emonth) || (Year()==eyear && Month()==emonth && Day()>eday))
    {
       //d
   if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert has expired , contact us by E-mail" ,TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,255);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
      return(0);
    } 
   else 
       if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","http://forum.m-e-c.biz",TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,336);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
      
double lTrailingStop  = TrailingStop;
double sTrailingStop  = TrailingStop;
  if(lTrailingStop>0||sTrailingStop>0){//3  
  TrailingPositionsBuy(lTrailingStop);
  TrailingPositionsSell(sTrailingStop);
  }

    if ((Year()>eyear) || (Year()==eyear && Month()>emonth) || (Year()==eyear && Month()==emonth && Day()>eday))
    {
       //d
   if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert has expired , contact us by E-mail" ,TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,255);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
      return(0);
    } 
   else 
       if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert well expire after ( " + eday+"-"+emonth+"-"+eyear+" )",TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,270);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }

  if ((DayOfWeek()==Friday && Hour()>=Friday_Hour && Minute()>=Friday_Minute) || (DayOfWeek()==Friday && Hour()>Friday_Hour))
    {
    DeleteBuyPendingOrders(MagicNumber);
    DeleteSellPendingOrders(MagicNumber);
    CloseBuyOrders(MagicNumber);
    CloseSellOrders(MagicNumber);
  }
  if((Hour()==Close_Hour && Minute()>=Close_Minute) || (Hour()>Close_Hour))
  {
    DeleteBuyPendingOrders(MagicNumber);
    DeleteSellPendingOrders(MagicNumber);
    CloseBuyOrders(MagicNumber);
    CloseSellOrders(MagicNumber);
  }

  if (MyBuyRealOrdersTotal(MagicNumber)==0 && MySellRealOrdersTotal(MagicNumber)==0)
{
   if(Management==false)
   {
     Lots=FirstLots;
   }
   else
   {
     Lots=NormalizeDouble((((AccountBalance())/Balance*FirstLots)),2);
     if(Lots>MarketInfo(Symbol(),MODE_MAXLOT)) Lots=MarketInfo(Symbol(),MODE_MAXLOT);
     if(Lots<MarketInfo(Symbol(),MODE_MINLOT)) Lots=MarketInfo(Symbol(),MODE_MINLOT);
   }
}

  {Procces_1();}
 
  return(0);
}
//****************************************************************************************************************  

// ÇáæÙíÝÉ ÇáÑÆíÓíÉ
int Procces_1()
{
  double b,s,bsl,ssl,bt,st,b_l,s_l,bsl_l,ssl_l,bt_l,st_l;
  {
    int total=0;//***************************************

	  for (int cnt=0; cnt<OrdersTotal(); cnt++)//***************************************
      {//***************************************
          OrderSelect(cnt,SELECT_BY_POS) ;  //***************************************
      	if(OrderSymbol()!=Symbol())                                  continue;//***************************************
      	if (OrderMagicNumber()!= MagicNumber)                              continue;//***************************************
         
      	if(OrderType()<=OP_SELL)  //***************************************
      	{//***************************************
      		total++ ;//***************************************
      		if (OrderType()==OP_SELL)//***************************************
      		    { //***************************************
      		     GlobalVariableSet(last_sell_time,OrderOpenTime());//***************************************
      		    }//***************************************
      		if (OrderType()==OP_BUY)//***************************************
      		    {//***************************************
      		     GlobalVariableSet(last_buy_time,OrderOpenTime());//***************************************
      		    }//***************************************
      	}//***************************************
      }//***************************************

int last_sell=GlobalVariableGet(last_sell_time);     //***************************************
int last_buy=GlobalVariableGet(last_buy_time);   //***************************************
bool time_b=(TimeCurrent()-last_buy>=Period()*60);//***************************************
bool time_s=(TimeCurrent()-last_sell>=Period()*60);//***************************************

    double h,h1,l,l1,t,FMA1,SMA1,FMA2,SMA2;
    int h2,l2;
    
    FMA1=iMA(Symbol(), 0, FastMA, FastShift, FastMode, FastPrice, 1);
    FMA2=iMA(Symbol(), 0, FastMA, FastShift, FastMode, FastPrice, 2);

    SMA1=iMA(Symbol(), 0, SlowMA, SlowShift, SlowMode, SlowPrice, 1);
    SMA2=iMA(Symbol(), 0, SlowMA, SlowShift, SlowMode, SlowPrice, 2);
    
     b=Ask;
     
     s=Bid;    

    if (StopLoss>0)
    {
    bsl=b-StopLoss*Point;
    ssl=s+StopLoss*Point;
    }
    else
    {
    bsl=0;
    ssl=0;
    }

    if (TakeProfit>0) 
    {
    bt=b+TakeProfit*Point;
    st=s-TakeProfit*Point;
    }
     else 
     {
     bt=0;
     st=0;
     }

   if (FMA1>SMA1 && FMA2<SMA2 &&  MyBuyRealOrdersTotal(MagicNumber)==0 && time_b)
  
    {
    if (AutoClose) CloseSellOrders(MagicNumber);
    if ((Year()>eyear) || (Year()==eyear && Month()>emonth) || (Year()==eyear && Month()==emonth && Day()>eday))
    {
       //d
   if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert has expired , contact us by E-mail" ,TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,255);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
      return(0);
    } 
   else 
       if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert well expire after ( " + eday+"-"+emonth+"-"+eyear+" )",TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,270);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }

     OrderSend(Symbol(),OP_BUY     ,Lots,b,3,bsl,bt,"wajdyss MA expert",MagicNumber,0,Green);
    }

   if (FMA1<SMA1 && FMA2>SMA2 &&  MySellRealOrdersTotal(MagicNumber)==0 && time_s)
    {
    if (AutoClose)     CloseBuyOrders(MagicNumber);

    if ((Year()>eyear) || (Year()==eyear && Month()>emonth) || (Year()==eyear && Month()==emonth && Day()>eday))
    {
       //d
   if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert has expired , contact us by E-mail" ,TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,255);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
       return(0);
    } 
   else 
       if(ObjectFind("d label") != 0)
   {
      ObjectCreate("d label", OBJ_LABEL, 0,0,0);
      ObjectSetText("d label","the expert well expire after ( " + eday+"-"+emonth+"-"+eyear+" )",TextSize, "Arial", TextColor4);
      ObjectSet("d label", OBJPROP_XDISTANCE,270);
     ObjectSet("d label", OBJPROP_YDISTANCE,75);
   }
     OrderSend(Symbol(),OP_SELL     ,Lots,s,3,ssl,st,"wajdyss MA expert",MagicNumber,0,Red);
    }
    return(0);
  }

}
// æÙíÝÉ áÍÓÇÈ ÚÏÏ ÇáÕÝÞÇÊ ÇáÍÇáíÉ
int MyBuyRealOrdersTotal(int Magic)
{
  int c=0;
  int total  = OrdersTotal();
  t1=-1;
  t2=-1;
 
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY))
    {
      if (t1==-1)
      {
        t1=OrderTicket();
      }
      else
      {
        if (t2==-1)
        {
          t2=OrderTicket();
        }
      }
      c++;
    }
  }
  return(c);
}


int MySellRealOrdersTotal(int Magic)
{
  int c=0;
  int total  = OrdersTotal();
  t1=-1;
  t2=-1;
 
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_SELL))
    {
      if (t1==-1)
      {
        t1=OrderTicket();
      }
      else
      {
        if (t2==-1)
        {
          t2=OrderTicket();
        }
      }
      c++;
    }
  }
  return(c);
}


// æÙíÝÉ áÍÐÝ ÇáÕÝÞÇÊ ÇáãÚáÞÉ
int DeleteBuyPendingOrders(int Magic)
{
int total  = OrdersTotal();
 
for (int cnt = total - 1; cnt >= 0; cnt--)
{
 OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
 if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT))
 {
   OrderDelete(OrderTicket());
 }
}
return(0);
}

int DeleteSellPendingOrders(int Magic)
{
int total  = OrdersTotal();
 
for (int cnt = total - 1; cnt >= 0; cnt--)
{
 OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
 if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT))
 {
   OrderDelete(OrderTicket());
 }
}
return(0);
}

// ÇÛáÇÞ ÌãíÚ ÇáÕÝÞÇÊ ÇáãÝÊæÍÉ
//+------------------------------------------------------------------+
int CloseBuyOrders(int Magic)
{
  int total  = OrdersTotal();
  
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
    {
      if (OrderType()==OP_BUY)
      {
        if(OrderClose(OrderTicket(),OrderLots(),Bid,3)==false)
         {
           RefreshRates();
         }
         else
         {
           cnt=0;
           total=OrdersTotal();
         }
      }
      
    }
  }
  return(0);
}  

int CloseSellOrders(int Magic)
{
  int total  = OrdersTotal();
  
  for (int cnt = 0 ; cnt < total ; cnt++)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
    {
      if (OrderType()==OP_SELL)
      {
        if(OrderClose(OrderTicket(),OrderLots(),Ask,3)==false)
         {
           RefreshRates();
         }
         else
         {
           cnt=0;
           total=OrdersTotal();
         }
      }
      
    }
  }
  return(0);
}  



void TrailingPositionsBuy(int trailingStop) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { 
            if (OrderType()==OP_BUY) { 
               if (Bid-OrderOpenPrice()>trailingStop*Point) { 
                  if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss(Bid-trailingStop*Point); 
               } 
            } 
         } 
      } 
   } 
} 
void TrailingPositionsSell(int trailingStop) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { 
            if (OrderType()==OP_SELL) { 
               if (OrderOpenPrice()-Ask>trailingStop*Point) { 
                  if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss(Ask+trailingStop*Point); 
               } 
            } 
         } 
      } 
   } 
} 

void ModifyStopLoss(double ldStopLoss) { 
   bool fm;
   fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); 
} 





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy

Other Features:


BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.37 Total Net Profit:-492.00

BackTest : EURUSD on H1

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

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

BackTest : GBPUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 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 : USDCHF on H1

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

BackTest : USDJPY on H1

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

Request Backtest for wajdyss_MA_expert_v3


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

Pair: Period: