FT_TrendFollower





//+------------------------------------------------------------------+
//|                                             FT_TrendFollower.mq4 |
//|                                                     FORTRADER.RU |
//|                                              http://FORTRADER.RU |
//| http://www.forexsystems.ru/showthread.php?p=6794                 |
//+------------------------------------------------------------------+
#property copyright "FORTRADER.RU"
#property link      "http://FORTRADER.RU Ñèñòåìà ïî TrendFollower"

extern string GMMA0="Íàñòðîéêà GMMA:";
extern int SrartGMMAPer=50; 
extern int EndGMMAPer=200; 
extern int CountLine=5; 

extern string EMA48="Íàñòðîéêà EMASIG4-8:";
extern int EMA4=4;
extern int EMA8=8;

extern string TradeBar="Íà êàêîì áàðå ðàáîòàåì:";
extern int TradeShift=1;


extern string SL="Íàñòðîéêè ÑòîïËîññà:";
extern int Stoploss1=1;
extern int Stoploss1Pips=5;
extern int Stoploss2=0;
extern int Stoploss2Pips=25;

extern string Q="Íàñòðîéêè Âûõîäà:";
extern int Quit=1;//çàêðûòèå ïîëîâèíû íà îïîðíîé òî÷êå ïîëîâèíû ïðè ñìåíå ëèíèè íà êðàñíóþ
extern int HMAPer=80;
extern int Quit1=0;
extern int Quit2=0;
extern int ChPer=34;



int nummodb,nummodbS;

double ggma[1000];
double ggmalast[1000];
int indexline,trend,EmaSigOk,CloseOk,LaguerreOk,EmaSigOkS,CloseOkS,LaguerreOkS;double ema4,ema8,Laguerre,dMacdMain;

int init(){return(0);}
int deinit(){return(0);}

int start()
{int controlgreen,controlvverh,controlvverhS;double sl;int i;
if(errorchek()!=""){Print(errorchek());return(0);}
    
    exit();
    GMMA();

if(Close[1]<ggma[indexline-1]){CloseOk=1;}
if(Close[1]>ggma[indexline-1]){CloseOkS=1;}


if(CloseOk==1 && Close[1]>ggma[0]){LaguerreOk=0;EmaSigOk=0;CloseOk=0;}
if(CloseOkS==1 && Close[1]<ggma[0]){LaguerreOkS=0;EmaSigOkS=0;CloseOkS=0;}
  
    //ñìîòðèì âñå ëè çåëåíûå âûøå êðàñíûõ 
    trend=2;
    if(ggma[indexline-(CountLine+CountLine)]>ggma[indexline-CountLine] )
    {
    trend=1;
    }
    if(ggma[indexline-(CountLine+CountLine)]<ggma[indexline-CountLine] )
    {
    trend=0;
    }
    
    
   Laguerre();
   if(trend==1 && Laguerre<0.15 && Close[1]>ggma[indexline-1]&& Low[1]<ggma[0]){LaguerreOk=1;}
   if(trend==0 && Laguerre>0.75 && Close[1]<ggma[indexline-1]&& High[1]>ggma[0]){LaguerreOkS=1;}
   EMASIG();
   if(trend==1 && ema4<ema8){EmaSigOk=1;}
   if(trend==0 && ema4>ema8){EmaSigOkS=1;}
 
    for( i=CountLine;i>=0;i--)
    {
    //ïîñìîòðèì íàïðàâëåííû âñå êðàñíûå çåëåíûå è æåëòûå ââåðõ
    if(ggma[indexline-(CountLine+i)]>ggmalast[indexline-(CountLine+i)]){controlvverh=controlvverh+1;}
    if(ggma[indexline-(CountLine+CountLine+i-1)]>ggmalast[indexline-(CountLine+CountLine+i-1)]){controlvverh=controlvverh+1;}
    if(ggma[i]>ggmalast[i]){controlvverh=controlvverh+1;}
    }
    for( i=CountLine;i>=0;i--)
    {
    //ïîñìîòðèì íàïðàâëåííû âñå êðàñíûå çåëåíûå è æåëòûå ââåðõ
    if(ggma[indexline-(CountLine+i)]<ggmalast[indexline-(CountLine+i)]){controlvverhS=controlvverhS+1;}
    if(ggma[indexline-(CountLine+CountLine+i-1)]<ggmalast[indexline-(CountLine+CountLine+i-1)]){controlvverhS=controlvverhS+1;}
    if(ggma[i]<ggmalast[i]){controlvverhS=controlvverhS+1;}
    }
    
    
    
    MACD();
    
    if(trend==1 && Laguerre>0.15 && LaguerreOk==1 && ema4>ema8 && EmaSigOk==1 && dMacdMain>0 && controlvverh>(indexline/2)  )
    {LaguerreOk=0;EmaSigOk=0;CloseOk=0;
    if(Stoploss1==1){sl=Low[1]-(Stoploss1Pips+MarketInfo(Symbol(),MODE_SPREAD))*Point; if(MathAbs(Ask-sl)<15*Point){sl=Ask-15*Point;}}
    if(Stoploss2==1){sl=Ask-Stoploss2Pips*Point;}
    OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NormalizeDouble(sl,4),0,"FORTRADER.RU",1337,0,Green);
    nummodb=0;
    }
    
    if(trend==0 && Laguerre<0.75 && LaguerreOkS==1 && ema4<ema8 && EmaSigOkS==1 && dMacdMain<0 && controlvverhS>(indexline/2)  )
    {LaguerreOkS=0;EmaSigOkS=0;CloseOkS=0;
    if(Stoploss1==1){sl=High[1]+(Stoploss1Pips+MarketInfo(Symbol(),MODE_SPREAD))*Point; if(MathAbs(Bid-sl)<15*Point){sl=Bid+15*Point;}}
    if(Stoploss2==1){sl=Bid+Stoploss2Pips*Point;}
    OrderSend(Symbol(),OP_SELL,0.1,Bid,3,NormalizeDouble(sl,4),0,"FORTRADER.RU",1337,0,Green);
    nummodbS=0;
    }
  
return(0);
}

int MACD()
{
 dMacdMain = iMACD(Symbol(),NULL,5,35,5,PRICE_CLOSE,MODE_MAIN,1);
}

int EMASIG()
{
ema4=iMA(NULL,0,EMA4,0,MODE_EMA,PRICE_CLOSE,TradeShift);
ema8=iMA(NULL,0,EMA8,0,MODE_EMA,PRICE_CLOSE,TradeShift);
}

int Laguerre()
{
Laguerre=iCustom(Symbol(),NULL,"Laguerre",0,TradeShift);
}

int GMMA()
{indexline=0;
//âû÷èñëèì îáùåå êîëè÷åñòâî ëèíèé
int cline=5*CountLine;
//âû÷èñëèì øàã ëèíèé
int shagline=(EndGMMAPer-SrartGMMAPer)/cline;

//ïîëó÷èì çíà÷åíèÿ ëèíèé ëèíèè

for(int per=SrartGMMAPer;per<=EndGMMAPer;per=per+shagline)
{
ggma[indexline]=iMA(NULL,0,per,0,MODE_EMA,PRICE_CLOSE,TradeShift);
ggmalast[indexline]=iMA(NULL,0,per,0,MODE_EMA,PRICE_CLOSE,TradeShift+1);
indexline=indexline+1;
}

}

string errorchek()
{
if(SrartGMMAPer>EndGMMAPer){return("Îøèáêà! SrartGMMAPer íå ìîæåò áûòü áîëüøå EndGMMAPer");}
if(SrartGMMAPer==EndGMMAPer){return("Îøèáêà! SrartGMMAPer íå ìîæåò áûòü ðàâíî EndGMMAPer");}
if(CountLine==0){return("Îøèáêà! CountLine íå ìîæåò áûòü 0");}
if(CountLine>10){return("Îøèáêà! CountLine íå ìîæåò áûòü áîëüøå 10");}
if(CountLine>SrartGMMAPer){return("Îøèáêà! CountLine íå ìîæåò áûòü áîëüøå SrartGMMAPer");}
if(CountLine>EndGMMAPer){return("Îøèáêà! CountLine íå ìîæåò áûòü áîëüøå EndGMMAPer");}
if(EMA4>EMA8){return("Îøèáêà! EMA4 íå ìîæåò áûòü áîëüøå EMA8");}
if(Stoploss1==1 && Stoploss2==1){return("Îøèáêà! StopLoss íå ìîæåò áûòü âëþ÷åíî äâà âàðèàíòà îäíîâðåìåííî");}
if(TradeShift>1 || Stoploss1>1 || Stoploss2>1 || Quit>1 || Quit1>1 || Quit2>1){return("Îøèáêà! çíà÷åíèÿ TradeShift>1 || Stoploss1>1 || Stoploss2>1 || Quit>1 Quit1>1 || Quit2>1 íå ìîãóò áûòü áîëüøå 1");}
if(Quit>0 && Quit1>0 || Quit2>0){return("Îøèáêà! Âàðèàíò ñòîï ëîññà ìîæåò áûòü òîëüêî îäèí");}
if(Quit1>0 && Quit>0 || Quit2>0){return("Îøèáêà! Âàðèàíò ñòîï ëîññà ìîæåò áûòü òîëüêî îäèí");}
if(Quit2>0 && Quit>0 || Quit1>0){return("Îøèáêà! Âàðèàíò ñòîï ëîññà ìîæåò áûòü òîëüêî îäèí");}

return("");
}

int exit()
{
double Pivot= (iHigh(Symbol(),1440,1) + iLow(Symbol(),1440,1) +  iClose(Symbol(),1440,1))/3;
double support1 = (2 * Pivot) - iHigh(Symbol(),1440,1);
double resist1 = (2 * Pivot) - iLow(Symbol(),1440,1);
double support2 = Pivot - (iHigh(Symbol(),1440,1) - iLow(Symbol(),1440,1));
double resist2 = Pivot + (iHigh(Symbol(),1440,1) - iLow(Symbol(),1440,1));

double hma=iCustom(Symbol(),0,"HMA",HMAPer,0,TradeShift);
double hma1=iCustom(Symbol(),0,"HMA",HMAPer,1,TradeShift);
double hma2=iCustom(Symbol(),0,"HMA",HMAPer,2,TradeShift);

double vltUP=iMA(NULL,0,ChPer,0,MODE_SMA,PRICE_HIGH,TradeShift);
double vltDW=iMA(NULL,0,ChPer,0,MODE_SMA,PRICE_LOW,TradeShift);

Comment("hma " ,hma, " hma1 " ,hma1," hma2 " ,hma2);


for( int i=1; i<=OrdersTotal(); i++)          
     {
     /*çàêðûòèå ïî ïèâîòó è ñóïåð ëèíèè-------------------------------------------------------------------------------*/
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_BUY && Bid>resist1 && OrderProfit()>0  && nummodb==0 && OrderSymbol()==Symbol() && Quit==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Bid,3,Violet); 
          nummodb++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_BUY && hma1!=EMPTY_VALUE && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodb==1 && Quit==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Bid,3,Violet); 
         nummodb++;
         }
        }
        /*çàêðûòèå ïî ïèâîòó -------------------------------------------------------------------------------*/
              if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_BUY && Bid>resist1 && OrderProfit()>0  && nummodb==0 && OrderSymbol()==Symbol() && Quit1==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Bid,3,Violet); 
          nummodb++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_BUY && Bid>resist2 && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodb==1 && Quit1==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Bid,3,Violet); 
         nummodb++;
         }
        }
        /*çàêðûòèå ïî ïèâîòó è êàíàëó âîëàòèëüíîñòè-------------------------------------------------------------------------------*/ 
                     if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_BUY && Bid>resist1 && OrderProfit()>0  && nummodb==0 && OrderSymbol()==Symbol() && Quit2==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Bid,3,Violet); 
          nummodb++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_BUY && Open[1]<vltDW && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodb==1 && Quit2==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Bid,3,Violet); 
         nummodb++;
         }
        }
        
        ///////////////////////////ÏÐÎÄÀÆÈ/////////////////////////////////////////////////////////////////////////////////////////////////////
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_SELL && Ask<support1 && OrderProfit()>0  && nummodbS==0 && OrderSymbol()==Symbol() && Quit==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Ask,3,Violet); 
          nummodbS++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_SELL && hma!=EMPTY_VALUE && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodbS==1 && Quit==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Ask,3,Violet); 
         nummodbS++;
         }
        }
        /*çàêðûòèå ïî ïèâîòó -------------------------------------------------------------------------------*/
       if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_BUY && Ask<support1 && OrderProfit()>0  && nummodbS==0 && OrderSymbol()==Symbol() && Quit1==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Ask,3,Violet); 
          nummodbS++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_BUY && Ask<support2 && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodbS==1 && Quit1==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Ask,3,Violet); 
         nummodbS++;
         }
        }
        /*çàêðûòèå ïî ïèâîòó è êàíàëó âîëàòèëüíîñòè-------------------------------------------------------------------------------*/ 
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
        {                                       
         if(OrderType()==OP_BUY && Ask<support1 && OrderProfit()>0  && nummodbS==0 && OrderSymbol()==Symbol() && Quit2==1)
         {  
          OrderClose(OrderTicket(),NormalizeDouble(OrderLots()/2,2),Ask,3,Violet); 
          nummodbS++;
         }
        }
        
       if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // À
         if(OrderType()==OP_BUY && Open[1]>vltUP && OrderProfit()>0 && OrderSymbol()==Symbol() && nummodbS==1 && Quit2==1)
         {  
         OrderClose(OrderTicket(),NormalizeDouble(OrderLots(),2),Ask,3,Violet); 
         nummodbS++;
         }
        }
      }

return(0);
}



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Series array that contains open prices of each bar


Indicator Curves created:


Indicators Used:

MACD Histogram
Moving average indicator



Custom Indicators Used:
Laguerre
HMA

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

It Closes Orders by itself

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:1.23 Total Net Profit:20.90

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.44 Total Net Profit:-85.20

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 : USDCAD on H1

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

BackTest : USDCHF on H1

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

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.32 Total Net Profit:-75.90

Request Backtest for FT_TrendFollower


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

Pair: Period: