ch_2006





//+------------------------------------------------------------------+
//|                                                      ch_2006.mq4 |
//|                     Copyright © 2006, Ðàìèëü Ñàôèóëëîâè÷ Èðãèçîâ |
//|                                                popcorn@aaanet.ru |
//+------------------------------------------------------------------+
//|                              Automated Trading Championship 2006 |
//|                              Ïîäêëþ÷àåòñÿ ê ãðàôèêó USDCHF 1 ìèí |
//+------------------------------------------------------------------+


#define m  20050611
extern int takeprofit            = 165;
extern int stoploss              = 165;
extern double lots               = 0.1;
extern double risk               = 0.25;
extern int mm                    = 1;
extern int pu1                   = 1;
extern int pu2                   = 71;
extern int pu3                   = 326;
extern int puu                   = 410;
extern int sl                    = 22;
extern int sl_min                = 2;
extern double p                  = 0.22;
extern int dd                    = 7;
extern int ddma                  = 9;
extern double kr                 = 0.5;

//-----------------------------------------------------------------------------
int kol_buy()
  {
   int kol_ob=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderType()==OP_BUY)  kol_ob++;
     }
   return(kol_ob);
  }    
//-----------------------------------------------------------------------------
int kol_sell()
  {
   int kol_os=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderType()==OP_SELL)  kol_os++;
     }
   return(kol_os);
  }  
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------- 

   datetime lastt=0; 
   int slip=10;
   int i,kol_sek,tic,total,gle,kk;
   double mah1_1,mah2_1,mah3_1,mal1_1,mal2_1,mal3_1,mah1_2,mah2_2,mah3_2,mal1_2,mal2_2,mal3_2,ma1,ma2;
   double lotsi,slp,slp_min;
      
int start()
   {
   if(Bars<100 || IsTradeAllowed()==false || Year()!=2006 || AccountFreeMargin()<AccountBalance()*kr) return; 
   if (mm!=0) lotsi=MathCeil(AccountFreeMargin()*risk/100)/10; else lotsi=lots;
   if (lotsi>=5) lotsi=5-0.1; 
    
   mah1_1=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_HIGH,1); 
   mal1_1=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_LOW,1);
   mah2_1=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_HIGH,1); 
   mal2_1=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_LOW,1);
   mal3_1=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_LOW,1);
   mal3_2=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_LOW,2);
   mah3_1=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_HIGH,1);
   mah3_2=iMA(NULL,0,pu3,1,MODE_SMA,PRICE_HIGH,2);
   mah1_2=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_HIGH,2); 
   mal1_2=iMA(NULL,0,pu1,1,MODE_SMA,PRICE_LOW,2);
   mah2_2=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_HIGH,2); 
   mal2_2=iMA(NULL,0,pu2,1,MODE_SMA,PRICE_LOW,2);
   ma1=iMA(NULL,0,puu,1,MODE_SMA,PRICE_MEDIAN,1);
   ma2=iMA(NULL,0,puu,1,MODE_SMA,PRICE_MEDIAN,2);
  
   slp=sl*Point;
   slp_min=sl_min*Point;
   
   bool sob=false,sos=false;
   sob=CurTime()>lastt+60*61 &&
      mah1_2<mah2_2 && mah1_1>=mah2_1 && 
      ma1>ma2 && mah2_1>mah2_2 && mah3_1>mah3_2 &&
      (mah2_1-mah2_2)>(mah3_1-mah3_2) && 
      (mah3_1-mal3_1)<(mah2_1-mal2_1) &&
//      ma1<mah3_1 && mah3_1<mah2_1 && mah2_1<mah1_1 &&
      mah1_1>mah3_1 && mah1_1<=mah3_1+dd*Point &&
      mah2_1>mah3_1 && High[1]<=ma1+ddma*Point &&
      kol_buy()<2 && kol_buy()+kol_sell()<3;
   sos=CurTime()>lastt+60*61 &&
      mal1_2>mal2_2 && mal1_1<=mal2_1 &&
      ma1<ma2 && mal2_1<mal2_2 && mal3_1<mal3_2 &&
      (mal2_2-mal2_1)>(mal3_2-mal3_1) && 
      (mah3_1-mal3_1)<(mah2_1-mal2_1) &&
//      ma1>mal3_1 && mal3_1>mal2_1 && mal2_1>mal1_1 &&
      mal1_1<mal3_1 && mal1_1>=mal3_1-dd*Point &&
      mal2_1<mal3_1 && Low[1]>=ma1-ddma*Point &&
      kol_sell()<1 && kol_buy()+kol_sell()<3;
      
      tic=-1;kk=0;
      if (sob) 
         {
         while(tic==-1 && kk<3)
            {
            tic=OrderSend(Symbol(),OP_BUY,lotsi,Ask,slip,Ask-stoploss*Point,Ask+takeprofit*Point," ",m,0,Yellow);
            if (tic==-1)
               {
               gle=GetLastError();
               kk++;               
               Print("Îøèáêà ¹",gle," ïðè buy ",kk);
               Sleep(6000);
               RefreshRates();   
               }
            }   
         lastt=CurTime();
         return;
         }
      tic=-1;kk=0;  
      if (sos) 
         {
         while(tic==-1 && kk<3)
            {
            tic=OrderSend(Symbol(),OP_SELL,lotsi,Bid,slip,Bid+stoploss*Point,Bid-takeprofit*Point," ",m,0,Red);
            if (tic==-1)
               {
               gle=GetLastError();
               kk++;               
               Print("Îøèáêà ¹",gle," ïðè sell ",kk);
               Sleep(6000);
               RefreshRates();   
               }
            }
         lastt=CurTime();
         return;
         } 
          
   total=OrdersTotal();
         
         for(i=0;i<total;i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderSymbol()==Symbol())
            {
               if(OrderType()==OP_BUY)
               {
               if(OrderStopLoss()<OrderOpenPrice() && High[1]>OrderOpenPrice()+slp)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+slp_min,OrderTakeProfit(),0,White);
                  return;
                  }
               if(OrderStopLoss()>OrderOpenPrice() 
                  && OrderStopLoss()+1*Point<High[1]-(slp-slp_min)-(High[1]-slp-OrderOpenPrice())*p)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),High[1]-(slp-slp_min)-(High[1]-slp-OrderOpenPrice())*p,
                     OrderTakeProfit(),0,Yellow);
                  return;   
                  }   
               }
               if(OrderType()==OP_SELL)
               {
               if((OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0) && Low[1]<OrderOpenPrice()-slp)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-slp_min,OrderTakeProfit(),0,White);
                  return;
                  } 
               if(OrderStopLoss()<OrderOpenPrice() 
                  && OrderStopLoss()-1*Point>Low[1]+(slp-slp_min)+(OrderOpenPrice()-Low[1]-slp)*p)
                  {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Low[1]+(slp-slp_min)+(OrderOpenPrice()-Low[1]-slp)*p,
                     OrderTakeProfit(),0,Red);
                  return;   
                  }   
               }      
            }
         }
   }
   



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


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 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 : 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 ch_2006


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

Pair: Period: