Locker





//+------------------------------------------------------------------+
//|                                                       Locker.mq4 |
//|                     Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷ |
//|                                             vitalya_1983@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷"
#property link      "vitalya_1983@list.ru"
extern double  NeedProfit  = 0.001,   //Íà ñêîëüêî ïðîöåíòîâ Ìû óâåëè÷èâàåì áàëàíñ?
               StepLot     = 0.2,   //Âòîðè÷íûå ëîòû
               Lot         = 0.5;   //Ñòàðòîâûé ëîò
extern int     Step        = 50;    //Øàãè ìåæäó ëîêèðîâàíèåì
extern bool    spasenie    = true;
string text = "Locker.mq4";
int  i,ticket1,ticket2;
double ChekPoint,Profit1,Profit2,HighBuy,LowSell;
bool mode_buy,mode_sell,Stop=false;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  double buy_profit=0;
  double sell_profit=0;
//----
   for (i=OrdersTotal();i>=1;i--)                        //Ñþäà ìû âòûêàå èíäèêàòîðà
      {
      OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() == OP_SELL && OrderSymbol () ==Symbol())  
         {
         sell_profit=sell_profit+OrderProfit();
         Lot=OrderLots();
         StepLot = NormalizeDouble (Lot/1.2,2);
         }
      if(OrderType() == OP_BUY && OrderSymbol () ==Symbol())  
         {
         buy_profit=buy_profit+OrderProfit();
         Lot=OrderLots();
         StepLot = NormalizeDouble (Lot/1.2,2);
         }
      if (sell_profit<buy_profit)
      mode_buy=true;
      if (sell_profit>buy_profit)
      mode_sell=true;
      }
      
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
//----
   if ((spasenie&&!Stop)||!spasenie)
      {
      int orders=0;
      bool Otkryt_orders = false;
      for (i=OrdersTotal();i>=1;i--)                        //Ñþäà ìû âòûêàå èíäèêàòîðà
         {
         OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
         if((OrderType() == OP_SELL||OrderType() == OP_BUY) && OrderSymbol () ==Symbol())  
         Otkryt_orders = true;
         orders++;
         }
      if (!Otkryt_orders||mode_buy||mode_sell)
         {
         if (!Otkryt_orders&&(!mode_buy&&!mode_sell))
            {
            RefreshRates();
            OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0,text,0,Blue);
            }
         if (mode_buy&&!mode_sell)
            {
            mode_buy = false;
            RefreshRates();
            OrderSend(Symbol(),OP_BUY,StepLot,Ask,5,0,0,text,0,Blue);
            }
         if (!mode_buy&&mode_sell)
            {
            mode_sell=false;
            RefreshRates();
            OrderSend(Symbol(),OP_SELL,StepLot,Bid,5,0,0,text,0,Blue);
            }
      
         ChekPoint = Ask;
         HighBuy=Ask;
         LowSell=Bid;
         }
      if (Otkryt_orders)
         {
         double CurrentProfit=0;                                        //Ïîäñ÷èòûâàåì äîõîäíîñòü ñåðèè
         for (i=OrdersTotal();i>=1;i--)
            {
            OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
            if((OrderType() == OP_SELL||OrderType() == OP_BUY) && OrderSymbol () ==Symbol())  
            CurrentProfit=CurrentProfit+OrderProfit();
            }
         if (orders>=8)                                                 //Åñëè îðäåðîâ ìíîãî, çàêðûâàåì ïåðåêðûòûå îðäåðà
            {
            for (i=OrdersTotal();i>=1;i--)
               {
               ticket1 = 0;
               Profit1 = 0;
               OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
               if(OrderType() == OP_SELL&& OrderSymbol () ==Symbol())  
                  {
                  ticket1 = OrderTicket();
                  Profit1 = OrderProfit();
                  }
               for (int n=OrdersTotal();n>=1;n--)
                  {
                  ticket2 = 0;
                  Profit2 = 0;
                  OrderSelect(n-1, SELECT_BY_POS, MODE_TRADES);
                  if(OrderType() == OP_BUY&& OrderSymbol () ==Symbol()&&(ticket1!=0&&ticket2!=0))
                     {
                     ticket2 = OrderTicket();
                     Profit2 = OrderProfit();
                     if (Profit1==Profit2*(-1))
                        {
                        RefreshRates();
                        OrderSelect(ticket1, SELECT_BY_TICKET);
                        OrderClose(OrderTicket() ,OrderLots(),Ask,5,Blue);
                        RefreshRates();
                        OrderSelect(ticket2, SELECT_BY_TICKET);
                        OrderClose(OrderTicket() ,OrderLots(),Bid,5,Blue);
                        break;
                        }
                     }
                  }
               }
            }
         if (CurrentProfit>=NeedProfit*AccountBalance())                   //Åñëè íàø ïðîôèò ó íàñ â êàðìàíå, çàêðûâàåìñÿ
            {
            for (i=OrdersTotal();i>=1;i--)
               {
               OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
               if(OrderType() == OP_SELL && OrderSymbol () ==Symbol())  
                  {
                  RefreshRates ();
                  OrderClose(OrderTicket() ,OrderLots(),Ask,5,Blue);
                  }
               if(OrderType() == OP_BUY && OrderSymbol () ==Symbol())  
                  {
                  RefreshRates ();
                  OrderClose(OrderTicket() ,OrderLots(),Bid,5,Red);
                  }
               }
            if (spasenie)
            Stop=false;
            }
         if (CurrentProfit<-1*NeedProfit*AccountBalance())                            //Åñëè â ìèíóñå, ñòàâèì Ëîêè. 
            {
            if (Ask>ChekPoint+(Step*Point)&&Ask>HighBuy)
               {
               Alert (ChekPoint+(Step*Point));
               RefreshRates();
               OrderSend(Symbol(),OP_BUY,StepLot,Ask,5,0,0,text,0,Blue);
               ChekPoint = Ask;
               HighBuy=Ask;
               }
            if (Bid<ChekPoint-(Step*Point)&&Bid<LowSell)
               {
               RefreshRates();
               OrderSend(Symbol(),OP_SELL,StepLot,Bid,5,0,0,text,0,Blue);
               ChekPoint = Bid;
               LowSell=Bid;
               }
            }
         }
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+



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 Closes Orders by itself

Other Features:

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

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

BackTest : GBPUSD on H1

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

BackTest : USDCAD on H1

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

BackTest : USDJPY on H1

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

Request Backtest for Locker


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

Pair: Period: