FT_BillWillams_AO





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

extern string FT1="------Íàñòðîéêè ôðàêòàëà:----------";
extern int CountBarsFractal=5;//êîëè÷åñòâî áàðîâ èç êîòîðûõ ñîñòîèò ôðàêòàë
extern string FT2="------Íàñòðîéêè ñèãíàëà íà âõîä:----------";
extern int indent=1; //êîëè÷åñòâî ïóíêòîâ äëÿ îòñòóïà îò ìàêñèìóìà è ìèíèìóìà
extern string FT3="------Íàñòðîéêè àëëèãàòîðà:----------";
extern int jaw_period=13;  // -   Ïåðèîä óñðåäíåíèÿ ñèíåé ëèíèè (÷åëþñòè àëëèãàòîðà). 
 int jaw_shift=8;  // -   Ñìåùåíèå ñèíåé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
extern int teeth_period=8;  // -   Ïåðèîä óñðåäíåíèÿ êðàñíîé ëèíèè (çóáîâ àëëèãàòîðà). 
 int teeth_shift=5;  // -   Ñìåùåíèå êðàñíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
extern int lips_period=5; //  -   Ïåðèîä óñðåäíåíèÿ çåëåíîé ëèíèè (ãóá àëëèãàòîðà). 
 int lips_shift=3;  // -   Ñìåùåíèå çåëåíîé ëèíèè îòíîñèòåëüíî ãðàôèêà öåíû. 
 int ma_method=0;   //- îò 0 äî 3 ìåòîä óñðåäíåíèÿ. Ìîæåò áûòü ëþáûì èç çíà÷åíèé ìåòîäîâ ñêîëüçÿùåãî ñðåäíåãî (Moving Average). 
 int applied_price=4; // - îò 0 äî 6  -   Èñïîëüçóåìàÿ öåíà. Ìîæåò áûòü ëþáîé èç öåíîâûõ êîíñòàíò. 
 
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=500;
extern double  TakeProfit=500;
extern double  Lots=0.1;

extern int shift=1;


  int fractalnew,vpravovlevo,numsredbar,colish;
  int signal,signals;
  double oldopb,opb,ops,oldops, buyprice,sellprice;
  int buy,sell;
  
int start()
  {
   //óïðàâëåíèå ïîçàìè
   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(signal==0 && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)] && RedContol(High[numsredbar],0)==true && buy==0)
   {
   signal=signal+1;   
   }
   
   double A =iAO(NULL,0,shift+2);
   double B =iAO(NULL,0,shift+1);
   double C =iAO(NULL,0,shift);
   
   //ïðîâåðèì íå çàõîäèë ëè Ñ ìåíüøå íóëÿ
   if(C<0){signal=0;}
   
   //ïðîâåðèì íå ïîðà ëè ðàçìåùàòü ïîêóïê
   if(A>B && B<C && C>0 && B>0 && A>0 && signal==1){signal=signal+1;buyprice=High[shift]+indent*Point;}
   
   //ïðîâåðèì íå ïîðà ëè âõîäèòü â ðûíîê
   if(Ask>=buyprice && signal==2 && C>B)
   {
   double sl=NormalizeDouble(Ask-StopLoss*Point,4);
   double tp=NormalizeDouble(Ask+TakeProfit*Point,4);
   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"FORTRADER.RU",16384,10,Green);
   signal=0;
   }
   
   
   /*------------------------------------------ÏÐÎÄÀÆÀ----------------------------------------*/
   
   //íàéäåì ôðàêòàë íà ïðîäàæó
   if(signals==0&& Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)]  && RedContol(Low[numsredbar],1)==true && sell==0 )
   {
   signals=signals+1;   
   }
   
   //ïðîâåðèì íå çàõîäèë ëè Ñ áîëüøå íóëÿ
   if(C>0 && signals==1){signals=0;}
   
    //ïðîâåðèì íå ïîðà ëè ðàçìåùàòü ïîêóïê
   if(A<B && B>C && C<0 && B<0 && A<0 && signals==1){signals=signals+1;sellprice=Low[shift]-indent*Point;}

   //ïðîâåðèì íå ïîðà ëè âõîäèòü íà ïðîäàæó
   if(Bid<=sellprice && signals==2 && C<B)
   {
   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);
   signals=0;
   }
    
   return(0);
  }






/********************************Ôóíêöèèè******************************************/

   //ôóíêöèÿ êîíòðîëÿ öåíû ôðàêòàëà, íèæå îíà ïàñòè èëè âûøå
   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);
   }
   
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;}
      }  
//extern int CloseDropTeeth=2; //Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè êîñàíèè èëè ïðîáîå ÷åëþñòè. 0 - îòêëþ÷åíèå 1 - ïî êàñàíèþ 2 ïî çàêðûòèþ áàðà
//extern int CloseReversSignal=2;//Âêëþ÷åíèå çàêðûòèÿ ñäåëêè ïðè 1- îáðàçîâàíèè îáðàòíîãî ôðàêòàëà 2 - ïðè ñðàáàòûâàíèè îáðàòíîãî ôðàêòàëà 0 âûêëþ÷åíî 
   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);
            }
          }
      }
      
         for( i=1; i<=OrdersTotal(); i++)          
     {
          
         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);
            }
          }
      }
      
         for( i=1; i<=OrdersTotal(); i++)          
     {
          
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl>sma-smal && OrderProfit()>0)
             {
             if(OrderStopLoss()<lips && MathAbs(Bid-lips)>12*Point)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
      }     
       
          for( i=1; i<=OrdersTotal(); i++)          
     {    
        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) && MathAbs(Ask-teeth)>12*Point)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
      }
      
         for( i=1; i<=OrdersTotal(); i++)          
     {   
         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);
           }
         }
      }
      
         for( i=1; i<=OrdersTotal(); i++)          
     {    
          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);
           }
         }     
      }   
       
          for( i=1; i<=OrdersTotal(); i++)          
     {  
        if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {
            if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips<smal-sma && OrderProfit()>0)
             {
             if(OrderStopLoss()>lips && MathAbs(Ask-lips)>12*Point)
              {
             OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
      }     
       
          for( i=1; i<=OrdersTotal(); i++)          
     {    
        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) && MathAbs(Ask-teeth)>12*Point)
              {
              OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
              return(0);
              }  
             } 
          }
                      
       }
       

}



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
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Bill Williams Awesome oscillator
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.81 Total Net Profit:-83.75

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.42 Total Net Profit:-213.74

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:1.68 Total Net Profit:267.42

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.43 Total Net Profit:-187.93

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.42 Total Net Profit:-135.71

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:1.03 Total Net Profit:4.82

Request Backtest for FT_BillWillams_AO


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

Pair: Period: