FT_BillWillams_Trader





//+------------------------------------------------------------------+
//|                                        FT_BillWillams_Trader.mq4 |
//|                                                     FORTRADER.RU |
//|                                              http://FORTRADER.RU |
//+------------------------------------------------------------------+
#property copyright "FORTRADER.RU"
#property link      "http://FORTRADER.RU"

extern string FT1="------Íàñòðîéêè ôðàêòàëà:----------";
extern int CountBarsFractal=5;//êîëè÷åñòâî áàðîâ èç êîòîðûõ ñîñòîèò ôðàêòàë
extern int ClassicFractal=1; //âêëþ÷åíèå âûêëþ÷åíèå êëàññè÷åñêîãî ïàòòåðíà
extern int MaxDistance=1000;//âêëþ÷åíèå êîíòðîëÿ ðàññòîÿíèÿ îò çåëåíîé ëèíèè äî òî÷êè âõîäà
extern string FT2="------Íàñòðîéêè òèïà ïðîáîÿ ôðàêòàëà:----------";
extern int indent=1; //êîëè÷åñòâî ïóíêòîâ äëÿ îòñòóïà îò ìàêñèìóìà è ìèíèìóìà
extern int TypeEntry=2; //òèï âõîäà ïîñëå ïðîáîÿ ôðàêòàëà 1 - íà òåêóùåì áàðå 2 - íà áàðå çàêðûòèÿ 3 íà îòêàòå ê òî÷êå âõîäà ïîñëå ïðîáîÿ
extern int RedContol=1; //êîíòðîëèðîâàòü íàõîäèòñÿ ëè ïðîáîéíàÿ öåíà âûøå íèæå óðîâíÿ êðàñíîé ëèíèè
extern string FT3="------Íàñòðîéêè àëëèãàòîðà:----------";
extern int jaw_period=13;  // -   Ïåðèîä óñðåäíåíèÿ ñèíåé ëèíèè (÷åëþñòè àëëèãàòîðà). 
extern int jaw_shift=8;  // -   Ñìåùåíèå ñèíåé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
extern int teeth_period=8;  // -   Ïåðèîä óñðåäíåíèÿ êðàñíîé ëèíèè (çóáîâ àëëèãàòîðà). 
extern int teeth_shift=5;  // -   Ñìåùåíèå êðàñíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
extern int lips_period=5; //  -   Ïåðèîä óñðåäíåíèÿ çåëåíîé ëèíèè (ãóá àëëèãàòîðà). 
extern int lips_shift=3;  // -   Ñìåùåíèå çåëåíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
extern int ma_method=0;   //- îò 0 äî 3 ìåòîä óñðåäíåíèÿ. Ìîæåò áûòü ëþáûì èç çíà÷åíèé ìåòîäîâ ñêîëüçÿùåãî ñðåäíåãî (Moving Average). 
extern int applied_price=4; // - îò 0 äî 6  -   Èñïîëüçóåìàÿ öåíà. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò. 
extern string FT4="-------Íàñòðîéêè êîíòðîëÿ òðåíäà ïî àëëèãàòîðó:----------";
extern int TrendAligControl=0; // âêëþ÷åíèå êîíòðîëÿ òðåíäà ïî àëèãàòîðó
extern int jaw_teeth_distense=10; //ðàçíèöà ìåæäó çåëåíîé è êðàñíîé
extern int teeth_lips_distense=10;//ðàçíèöà ìåæäó êðàñíîé è ñèíèåé
extern string FT5="-------Íàñòðîéêè êîíòðîëÿ çàêðûòèÿ ñäåëêè:----------";
extern int CloseDropTeeth=2; //Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè êîñàíèè èëè ïðîáîå ÷åëþñòè. 0 - îòêëþ÷åíèå 1 - ïî êàñàíèþ 2 ïî çàêðûòèþ áàðà
extern int CloseReversSignal=2;//Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè 1- îáðàçîâàíèè îáðàòíîãî ôðàêòàëà 2 - ïðè ñðàáàòûâàíèè îáðàòíîãî ôðàêòàëà 0 âûêëþ÷åíî 
extern string FT6="-------Íàñòðîéêè ñîïðîâîæäåíèÿ StopLoss ñäåëêè:----------";
extern int TrailingGragus=1; //Âêëþ÷åíèå òðåéëèíã ñòîïà ïî öåíîâîìó ãðàäóñó íàêëîíà, åñëè ñèëüíûé óãîë òî òðåéëèíã ïî çåëåíîé, åñëè ìàëûé óãîë òî òðåéëèíã ïî êðàñíîé
extern int smaperugol=5;
extern int raznica=5;
extern string FT7="-------Íàñòðîéêè  StopLoss è TakeProfit èáüåìà ñäåëêè:----------";
extern double  StopLoss=50;
extern double  TakeProfit=50;
extern double  Lots=0.1;

int start()
  {

   ClassicFractal();
   return(0);
  }
  double oldopb,opb,ops,oldops, otkatb,otkats;
  int fractalnew,vpravovlevo,numsredbar,colish;
  
 int  ClassicFractal()
  {   int buy,sell;double sl,tp;
   

   //óïðàâëåíèå ïîçàìè
   ClassicFractalPosManager();
   
      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;}
      }  
      
   //íàéäåì ñêîüëêî ñìîòðåòü âïðàâî è â ëåâî
   vpravovlevo=(CountBarsFractal-1)/2;
   numsredbar=(CountBarsFractal-vpravovlevo);
   colish=numsredbar-1;
   
   /*----------------------------------------ÏÎÊÓÏÊÀ------------------------------------------*/
   
   //íàéäåì ôðàêòàë íà ïîêóïêó
   if(High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)] && (RedContol(Close[1],0)==true && RedContol==1))
   {
   opb=NormalizeDouble(High[numsredbar]+indent*Point,4);

   }
    //ïðîâåðêà âõîäà íà êàñàíèè èëè ïî çàêðûòèþ áàðà
   if(buy==0&&  ((Ask>opb && TypeEntry==1 ) || (Close[1]>opb && TypeEntry==2)) 
   && opb!=oldopb && MaxDistance(opb)==true && opb>0 
   && ((RedContol(Close[1],0)==true && RedContol==1) || RedContol==0)
   && ((TrendAligControl(0)==true && TrendAligControl==1) || TrendAligControl==0))
   {oldopb=opb;
   sl=NormalizeDouble(Ask-StopLoss*Point,4);
   tp=NormalizeDouble(Ask+TakeProfit*Point,4);
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"FORTRADER.RU",16384,10,Green);
   }
   
   /*------------------------------------------ÏÐÎÄÀÆÀ----------------------------------------*/
   
   //íàéäåì ôðàêòàë íà ïðîäàæó
   if(Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)]  && (RedContol(Close[1],1)==true && RedContol==1) )
   {
   ops=NormalizeDouble(Low[numsredbar]-indent*Point,4);
  

   }
   //ïðîâåðêà âõîäà íà êàñàíèè èëè ïî çàêðûòèþ áàðà
   if(sell==0&& ( (Bid<ops && TypeEntry==1) ||  (Close[1]<ops && TypeEntry==2))   
   && oldops!=ops && MaxDistance(ops)==true 
   && ((RedContol(Close[1],1)==true && RedContol==1) ||RedContol==0)
   && ((TrendAligControl(1)==true && TrendAligControl==1) || TrendAligControl==0))
   {
   oldops=ops;
   sl=NormalizeDouble(Bid+StopLoss*Point,4);
   tp=NormalizeDouble(Bid-TakeProfit*Point,4);
   OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"FORTRADER.RU",16384,10,Green);
   }
   

  return(0);
  }

bool MaxDistance(double entryprice)
{

double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);

if(MathAbs(entryprice-lips)<MaxDistance*Point){return(true);}
return(false);
}

bool RedContol(double entryprice,int  type)
{

double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);

if(entryprice>teeth && type==0){return(true);}
if(entryprice<teeth && type==1){return(true);}
return(false);
}

bool TrendAligControl(int type)
{

double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);
double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);
double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1);


if(type==0 && lips-teeth>teeth_lips_distense*Point && teeth-jaw>jaw_teeth_distense*Point ){return(true);}
if(type==1 && teeth-lips>teeth_lips_distense*Point && jaw-teeth>jaw_teeth_distense*Point ){return(true);}


return(false);
}

int ClassicFractalPosManager()
{int i,buy,sell;
double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1);
double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);
double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);
double lipsl=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,2);
double sma=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,1);
double smal=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,2);

      buy=0;sell=0;
      for(  i=0;i<OrdersTotal();i++)
      {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY ){buy=1;}
      if(OrderType()==OP_SELL ){sell=1;}
      }  

   for( i=1; i<=OrdersTotal(); i++)          
     {
         if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         { 
            if(OrderType()==OP_BUY && ((CloseDropTeeth==1 && Bid<=jaw ) ||  (CloseDropTeeth==2 && Close[1]<=jaw )))
            { 
            OrderClose(OrderTicket(),Lots,Bid,3,Violet); 
            return(0);
            }
          }
          
         if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         { 
            if(OrderType()==OP_BUY && 
            ((CloseReversSignal==1 && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)] ) 
            ||(CloseReversSignal==2 && sell==1 )))
            { 
            OrderClose(OrderTicket(),Lots,Bid,3,Violet); 
            return(0);
            }
          }
          
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl>sma-smal && OrderProfit()>0)
             {
             if(OrderStopLoss()<lips)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
           
           
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl<=sma-smal && OrderProfit()>0)
             {
             if(OrderStopLoss()<teeth || lips>teeth)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
         
         if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         { 
           if(OrderType()==OP_SELL && ((CloseDropTeeth==1 && Ask>=jaw ) ||  (CloseDropTeeth==2 && Close[1]>=jaw )))
           {
           OrderClose(OrderTicket(),Lots,Ask,3,Violet); 
           return(0);
           }
         }
          
          if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         { 
           if(OrderType()==OP_SELL && ((CloseReversSignal==1 && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)]) 
           ||  (CloseReversSignal==2 && buy==1  )))
           {
           OrderClose(OrderTicket(),Lots,Ask,3,Violet); 
           return(0);
           }
         }     
         
         
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips<smal-sma && OrderProfit()>0)
             {
             if(OrderStopLoss()>lips)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
           
           
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips>smal-sma && OrderProfit()>0)
             {
             if(OrderStopLoss()>teeth || lips<teeth)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
                      
       }
       

}



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
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 Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.34 Total Net Profit:-211.30

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.50 Total Net Profit:-120.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

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.21 Total Net Profit:-51.80

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 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 : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.62 Total Net Profit:-52.69

Request Backtest for FT_BillWillams_Trader


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

Pair: Period: