Blessing





//+------------------------------------------------------------------+
//|                                       Blessing Martingale_v5.mq4 |
//|                                                            timbo |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "timbo"
#property link      ""

//---- input parameters

extern int     levels = 8;
extern int     TP=40;
extern double  Lots=0.06;
extern bool    UseStopLoss=true;
extern int     magic=111;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    
   int cmd = 2; double Lot = Lots; double price; int slippage = 4; double stoploss=0; double takeprofit; color colour;
   int BuyTicket = 0;
   int SellTicket = 0;


   BuyTicket = FixTakeProfit(magic,0);

   if(BuyTicket == 0)
   {
      CleanAllPendings(magic,2);
      
      cmd = 0; price = Ask; colour = Green; takeprofit = Ask + TP*Point;
      if(UseStopLoss == true) stoploss = Ask - levels*TP*Point;
      OpenOrder(cmd, Lot, price, slippage, stoploss, takeprofit, magic, colour);
      
      SetPendingOrders(2,Lot,price,slippage,stoploss,TP,magic,levels);
      return(0);
   }

   SellTicket = FixTakeProfit(magic,1);

   if(SellTicket == 0)
   {
      CleanAllPendings(magic,3);
      
      cmd = 1; price = Bid; colour = Red; takeprofit = Bid - TP*Point; 
      if(UseStopLoss == true) stoploss = Bid + levels*TP*Point; 
      OpenOrder(cmd, Lot, price, slippage, stoploss, takeprofit, magic, colour);
      
      SetPendingOrders(3,Lot,price,slippage,stoploss,(-TP),magic,levels);
      return(0);
   }


//----
   return(0);
  }
//+------------------------------------------------------------------+

int OpenOrder(int cmd, double Lot, double price, int slippage, double stoploss, double takeprofit, int magic, color colour)
{
   RefreshRates();
   while(IsTradeAllowed() == false) Sleep(10000);
   int ticket = OrderSend(Symbol(), cmd, Lot, price, slippage, stoploss, takeprofit, NULL, magic, 0, colour);
   if(ticket < 0)
   {
      Print(price," == ",stoploss);
      Alert("!!! Error opening order !!! ", GetLastError());
      ticket = 0;
   }
   return(ticket);
}

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

int FixTakeProfit(int magic, int cmd)
{
   int ticket = 0; int i;
   datetime time = 0;
   for(i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == cmd)
      {
         if(OrderOpenTime() > time) { time = OrderOpenTime();ticket = OrderTicket(); }
      }
   }
   
   if(ticket != 0)
   {
      OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
      double takeprofit = OrderTakeProfit();
   
      for(i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == cmd)
         {
            if(OrderTakeProfit() != takeprofit) 
            { 
               while(IsTradeAllowed() == false) Sleep(10000);
               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),takeprofit,0,Yellow); 
            }
         }
      }
   }
   
   return(ticket);
}   
//+------------------------------------------------------

void CleanAllPendings(int magic,int cmd)
{   
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == cmd)
         {
            int ticket = OrderTicket();
            while(IsTradeAllowed() == false) Sleep(10000);
            OrderDelete(ticket,CLR_NONE);
         }
      }
}

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

void SetPendingOrders(int cmd,double Lot,double price,int slippage,double stoploss,int TP,int magic, int levels)
{
   for(int i=0;i<levels-1;i++)
   {
      while(IsTradeAllowed() == false) Sleep(10000);
      OpenOrder(cmd,Lot*MathPow(2,i),price-(i+1)*TP*Point,slippage,stoploss,price-i*TP*Point,magic,CLR_NONE);
   }
   return(0);
}

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



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached
Checks for the total of open orders

It can change open orders parameters, due to possible stepping strategy

Other Features:

It issuies visual alerts to the screen

BackTest : USDJPY on H1

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

BackTest : EURUSD on H1

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

BackTest : USDCAD on H1

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

BackTest : EURUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.14 Total Net Profit:-10000.37

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.28 Total Net Profit:-9986.76

BackTest : GBPUSD on H1

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

BackTest : EURUSD on H1

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

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 Blessing


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

Pair: Period: