MovingAveragePositionSystem





//+------------------------------------------------------------------+
//|                                  MovingAveragePositionSystem.mq4 |
//|                                                     FORTRADER.RU |
//|                                              http://FORTRADER.RU |
//|ñòðàòåãèÿ ñ ôîðóìà http://forum.fortrader.ru/index.php?topic=25.0 |
//|èññëåäîâàíèå â 25 íîìåðå æóðíàëà http://www.fortrader.ru/arhiv.php|
//+------------------------------------------------------------------+
#property copyright "FORTRADER.RU"
#property link      "http://FORTRADER.RU"

extern string x ="Òèï ñðåäíåé. 0-SMA, 1-EMA, 2-SMMA, 3-LWMA";
extern int TypeMA=3;
extern int PeriodMA=240;
extern int SdvigMA=0;
extern string x1 ="Íàñòðîéêè óïðàâëåíèÿ êàïèòàëîì";
extern double Lots=0.1; //ñòàðòîâûé ëîò
extern double StarLots=0.1; //â êàêîé ñáðàñûàòü ïðè ïîëó÷åíèè ïðîôèòà îò óâåëè÷åíèÿ ëîòà
extern double MaxLots=10; //â êàêîé ñáðàñûàòü ïðè ïîëó÷åíèè ïðîôèòà îò óâåëè÷åíèÿ ëîòà
extern int LossPips=90; //óáûòîê â ïèïñàõ ïîñëå êîòîðîãî óâåëè÷èâàåì ëîò
extern int ProfitPips=170; //ïðèáûëü ïîñëå êîòîðîé ñáðàñûâàåì ëîò
extern int TakeProfit=1000; //ïðèáûëü ïîñëå êîòîðîé ñáðàñûâàåì ëîò
extern int MM=1;

double lastlot;
datetime Bar;
int start()
  {

   if(Lots>MaxLots){Lots=Lots/2;Print("Äîñòèãíóò ìàêñèìàëüíûé ëèìèò íà îáüåì ñäåëêè");} 
   if(AccountFreeMargin()<(1000*Lots)){Print("Íåõâàòàåò ìàðæè, ïðîáóåì îòêðûòñÿ îáüåìîì â äâà ðàçà ìåíüøèì"); Lots=Lots/2;}
   MaPosManager();
   Lots=positionmartin(Lots);
   if(Bar!=iTime(NULL,0,0))
   {
      Bar=iTime(NULL,0,0);
      OpenMaPattern(Lots);
   }
   return(0);
  }

int flaglot, i,buy,sell;
int OpenMaPattern(double lotss)
   {
      buy=0;sell=0;
      for(int  i=0;i<OrdersTotal();i++)
      {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY ){buy=1;}
      if(OrderType()==OP_SELL){sell=1;}
      }  
   
      double diMA=iMA(NULL,0,PeriodMA,SdvigMA,TypeMA,PRICE_CLOSE,1);
   
      if(Close[1]>diMA && Close[2]<diMA && buy==0){flaglot=0;OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotss,2),Ask,3,0,Ask+TakeProfit*Point,"FORTRADER.RU",16385,0,Red);}
      if(Close[1]<diMA && Close[2]>diMA && sell==0){flaglot=0;OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotss,2),Bid,3,0,Bid-TakeProfit*Point,"FORTRADER.RU",16385,0,Red);}
   }

int MaPosManager()
   {
   double diMA=iMA(NULL,0,PeriodMA,SdvigMA,TypeMA,PRICE_CLOSE,1);

 
   for( i=1; i<=OrdersTotal(); i++)          
     {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
              if( Close[1]<diMA && OrderType()==OP_BUY)
              { 
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); 
                 return(0);
              }
         }
       
             
       if(OrderSelect(i-1,SELECT_BY_POS)==true) 
         { 
               if(Close[1]>diMA  && OrderType()==OP_SELL)
               {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
               return(0); 
               }
         }
             
      }
   
   }
     double result,lastresult;int OrNumber=0,mn;
   
     double  positionmartin(double lastlot)
  {

      if(MM==1)
   {  
   result=0;
    for( i=0; i<=OrdersHistoryTotal(); i++)
     {
        if(true==OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
            if(OrderLots()==Lots && i>=OrNumber)
            {
             if(OrderType()==OP_BUY){result=result+(OrderClosePrice()-OrderOpenPrice());}
             if(OrderType()==OP_SELL){result=result+(OrderOpenPrice()-OrderClosePrice());}
            }
         }
      }
      
     for( i=1; i<=OrdersTotal(); i++)          
     {
         if(OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
              if( OrderType()==OP_BUY && OrderProfit()<0){result=result+(OrderClosePrice()-OrderOpenPrice());}
              if( OrderType()==OP_SELL && OrderProfit()<0){result=result+(OrderOpenPrice()-OrderClosePrice());}
         }
      }
      
      
      if(MarketInfo(Symbol(),MODE_DIGITS)==4){mn=10000;}
      if(MarketInfo(Symbol(),MODE_DIGITS)==2){mn=100;}
      
      result=result*mn;
      Print("Òåêóùèé ðåçóëüòàò ñ ëîòîì ",Lots," = ",result, " ïóíêòîâ ");
      
      if(result<-LossPips)
      {
      Lots=Lots*2;
      Print("Òåêóùèé îòðèöàòåëüíûé ðåçóëüòàò ïðåâûñèë 100 ï, óâåëè÷èâàåì ëîò â 2 ðàçà = ",Lots);
      Print("Çàêðûâàåì îòêðûòûå ïîçèöèè ñ ìåíüøèì ëîòîì ò.ê îíè íàì áîëüøå íåíóæíû");
      for( i=1; i<=OrdersTotal(); i++)          
      {
         if(OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
              if( OrderType()==OP_BUY){OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); }
              if( OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);}
         }
      }
      return(Lots);
      }
      
       if(result>ProfitPips)
      {
      Lots=StarLots;
      Print("Òåêóùèé ïðîôèò ïðåâûñèë 100 ï, ñáðàñûâàåì ëîò äî íà÷àëüíîãî 0,1= ",Lots);
      Print("Çàêðûâàåì îòêðûòûå ïîçèöèè ñ áîëüøèì ëîòîì ò.ê îíè íàì áîëüøå íåíóæíû");
      for( i=1; i<=OrdersTotal(); i++)          
      {
         if(OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
              if( OrderType()==OP_BUY){OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); }
              if( OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);}
         }
      }
       OrNumber=OrdersHistoryTotal();
      Print("Ïîñëåäíèé íîìåð ïîçèöèè ñ âûñîêèì îáüåìîì áûë  ",OrNumber);
        
      return(Lots);
      }
   }

   return(Lots);
 }
 
 





Sample





Analysis



Market Information Used:

Series array that contains close prices for 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 Closes Orders by itself
Checks for the total of closed orders

Other Features:


BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:2.02 Total Net Profit:251.92

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.85 Total Net Profit:-721.49

BackTest : USDCAD on H1

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

BackTest : USDCHF on H1

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

BackTest : USDJPY on H1

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

Request Backtest for MovingAveragePositionSystem


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

Pair: Period: