billwiliamsea





//+------------------------------------------------------------------+
//|                                                           ID.mq4 |
//|                                          Copyright © 2006, Oasis |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Oasis"

extern double          Lots = 1;
extern double       MaxLots = 10;
extern double       UnitLot = 1000;
extern bool        Reinvest = false;
extern int         StopLoss = 0;
extern int       TakeProfit = 0;
extern int      TotalOrders = 1;
extern int    AlligatorMode = 1; // 2 - RedLine (íå ïðîâåðåíî) 1 - All (ïðîâåðåíî)
// --- --- --- 
extern bool             Buy = true;  // - ïðîâåðåíî
extern bool            Sell = true;  // - ïðîâåðåíî
extern bool     TwoPosition = false; // - ïðîâåðåíî
extern bool         ACCross = false; // - ïðîâåðåíî
extern bool             AC2 = false; // - ïðîâåðåíî
extern bool             AC3 = false; // - ïðîâåðåíî
extern bool         AOCross = false; // - ïðîâåðåíî
extern bool        AOSaucer = false; // - ïðîâåðåíî
extern bool         AO2Peak = false; // - îøèáêà
extern bool  FractalsSignal = false; // - ïðîâåðåíî
extern bool             Ang = false; // - íå ïðîâåðåíî
extern bool       CloseZone = false; // - ïðîâåðåíî
extern bool    CloseFractal = false; // - ïðîâåðåíî
extern bool  CloseAlligator = false; // - ïðîâåðåíî
//extern bool     TradingZone = false; // - íå ðàáîòàåò


// Ãëîáàëüíûå ïåðåìåííûå
datetime TimeOpen, TimeID, Time1, Time2, TimeOpenFra;
datetime TimePeak, PreTimePeak;
double Peak, PrePeak, Lot;
double FractalUpper, FractalLower;
double SL, TP;
int Ticket;
   // --- ïåðåìåííûå Zone
   bool BarsGreen, BarsRed;
   double PriceZone;

// Èíèöèàëèçàòîð âûïîëíåíèÿ íà öåíå îòêðûòèÿ
bool StartProgram()
   {
   if(TimeOpen != Time[0])
      {
      TimeOpen = Time[0];
      return(true);
      }else
      return(false);
   }

void init()
  {
   // --- Ïåðâè÷íàÿ ïðîâåðêà (50 ïîñëåäíèõ áàðîâ)
   for(int a = 50; a >= 1; a--)
      {
       Fractal(a);
       AOModel(a);
       FiveBars(a);
       // --- îòêðûòèå ôðàêòàëîì BUY
       if(OrdersTotal() < TotalOrders &&
          FractalsSignal == true && High[a] >= FractalUpper && 
          TimeID != Time1 && High[a] > AlligatorMax(a))
           TimeID = Time1;
       // --- îòêðûòèå ôðàêòàëîì SELL
       if(OrdersTotal() < TotalOrders &&
          FractalsSignal == true && Low[a] <= FractalLower && 
          TimeID != Time2 && Low[a] < AlligatorMin(a))
           TimeID = Time2;
      }
   Print("Ïåðâè÷íàÿ ïðîâåðêà çàêîí÷åíà.");
  } // Çàâåðøåíèå êîäà íà init()

void start()
  {   
   // --- --- --- --- --- ÒÎÐÃÎÂÎÅ ßÄÐÎ --- --- --- --- ---
   
   // çàêðûòèå â çîíå
   if(BarsGreen == true)
      {
       if(Bid < PriceZone)
          {
           BarsGreen = false;
           if(CloseZone) CloseAll();
          }      
      }
   if(BarsRed == true)
      {
       if(Bid > PriceZone)
          {
           BarsRed = false;
           if(CloseZone) CloseAll();
          }
      }
   
   // ---
      
   // --- îòêðûòèå ôðàêòàëîì BUY
   if(FractalsSignal == true && Buy == true && 
      Bid >= FractalUpper && TimeID != Time1 && 
      ( (AlligatorMode == 2 && Bid > AlligatorRed()) || 
        (AlligatorMode == 1 && Bid > AlligatorMax()) ))
      {
       if(TwoPosition == true && OrdersTotal() != 0)
          {
           if(_OrderType() == OP_SELL) CloseAll();
          }
       
       if(OrdersTotal() < TotalOrders) Buy();
       TimeID = Time1;
       TimeOpenFra = Time[0];
      }
      
   // --- îòêðûòèå ôðàêòàëîì SELL
   if(FractalsSignal == true && Sell == true &&
      Bid <= FractalLower && TimeID != Time2 && 
      ( (AlligatorMode == 2 && Bid < AlligatorRed()) || 
        (AlligatorMode == 1 && Bid < AlligatorMin()) ))
      {
       if(TwoPosition == true && OrdersTotal() != 0)
          {
           if(_OrderType() == OP_BUY) CloseAll();
          }
           
       if(OrdersTotal() < TotalOrders) Sell();
       TimeID = Time2;
       TimeOpenFra = Time[0];
      }
      
   // --- îòêðûòèå àíãóëÿöèåé BUY
   if(Ang == true && OrdersTotal() < TotalOrders &&
      Low[1] < Low[2] && Low[1] < Low[3] && 
      High[1] < AlligatorMin() && Bid > High[1])
      Buy();
      
   // --- îòêðûòèå àíãóëÿöèåé SELL
   if(Ang == true && OrdersTotal() < TotalOrders &&
      High[1] > High[2] && High[1] > High[3] &&
      Low[1] > AlligatorMax() && Bid < Low[1])
      Sell();
   
   if(StartProgram()) // --- êîä íà öåíå îòêðûòèÿ
      {
       // Âûïîëíåíèå ôóíêöèé
       AOModel();
       Fractal();
       FiveBars();
       
       // BUY
       
       if(OrdersTotal() < TotalOrders &&
          ((AC2      == true && ACBuy1()) ||
           (AC3      == true && ACBuy2()) ||
           (ACCross  == true && ACBuy3()) ||
           (AOCross  == true && AOBuy1()) || 
           (AOSaucer == true && AOBuy2()) || 
           (AO2Peak  == true && AOModel() == 1)) &&
           Bid > AlligatorMax())
           Buy();
       
       // SELL
       
       if(OrdersTotal() < TotalOrders &&
          ((AC2      == true && ACSell1()) ||
           (AC3      == true && ACSell2()) ||
           (ACCross  == true && ACSell3()) ||
           (AOCross  == true && AOSell1()) || 
           (AOSaucer == true && AOSell2()) || 
           (AO2Peak  == true && AOModel() == 2)) &&
           Bid < AlligatorMin())
           Sell();

   // Çàêðûòèå ôðàêòàëîì (ïîääåðæêà îäíîãî îðäåðà) --- íà öåíå îòêðûòèÿ
   
   if(OrdersTotal() != 0 && CloseFractal == true)
      {
       if(OrderSelect(Ticket, SELECT_BY_TICKET))
         {
          if(OrderType() == OP_BUY && iFractals(NULL, 0, MODE_UPPER, 3) != 0 &&
             Ask > OrderOpenPrice() + (Ask - Bid) + 1*Point)
             OrderClose(Ticket, Lots, Bid, 3, Orange);
             
          if(OrderType() == OP_SELL && iFractals(NULL, 0, MODE_LOWER, 3) != 0 &&
             Bid < OrderOpenPrice() - (Ask - Bid) - 1*Point)
             OrderClose(Ticket, Lots, Ask, 3, Orange);
         }
      }

   // Çàêðûòèå Àëëèãàòîðîì (Çóáû Àëëèãàòîðà) --- íà öåíå îòêðûòèÿ  !! íå çàáûòü ïîääåðæêà îäíîãî îðäåðà
   
   if(OrdersTotal() != 0 && CloseAlligator == true)
      {
       if(OrderSelect(Ticket, SELECT_BY_TICKET))
         {
          if(OrderType() == OP_BUY && Close[1] < AlligatorRed() && TimeOpenFra != Time[0])
             CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange);
             
          if(OrderType() == OP_SELL && Close[1] > AlligatorRed() && TimeOpenFra != Time[0])
             CloseAll();//OrderClose(Ticket, Lots, Bid, 3, Orange);
         }
      }
          
   } // îêîí÷àíèå êîäà íà StartProgram()

   // --- ÎÊÎÍ×ÀÍÈÅ ÒÎÐÃÎÂÎÃÎ ßÄÐÀ ---

   // --- --- --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ    

   // !!ÎÊÎÍ×ÀÍÈÅ!! --- Ìîäåëü ïîâåäåíèÿ - Òîðãîâëÿ â çîíàõ
   
} // Çàâåðøåíèå êîäà íà Start()

// Ôóíêöèîíàë

   // Ñèãíàëû AC --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ
   
      // --- Buy
      
      bool ACBuy1() // Äâà çåëåíûõ ñòîëáöà âûøå 0
         {
          if(AC(1) > AC(2) &&
             AC(2) > AC(3) &&
             AC(3) < AC(4) &&
             AC(3) > 0)
             return(true); else return(false);
         }
      bool ACBuy2() // Òðè çåëåíûõ ñòîëáöà íèøå 0
         {
          if(AC(1) > AC(2) &&
             AC(2) > AC(3) &&
             AC(3) > AC(4) &&
             AC(4) < AC(5) &&
             ((AC(1) < 0) || 
              (AC(1) > 0 && AC(2) < 0)))
             return(true); else return(false);
         }
      bool ACBuy3() // Äâà çåëåíûõ ñòîëáöà ïðè ïåðåñå÷åíèè
         {
          if(AC(1) > AC(2) &&
             AC(2) > AC(3) &&
             AC(3) < AC(4) &&
             AC(1) > 0 &&
             AC(2) < 0)
             return(true); else return(false);
         }
         
      // --- Sell
      
      bool ACSell1() // Äâà êðàñíûõ ñòîëáöà íèæå 0
         {
          if(AC(1) < AC(2) &&
             AC(2) < AC(3) &&
             AC(3) > AC(4) &&
             AC(3) < 0)
             return(true); else return(false);
         }
      bool ACSell2() // Òðè êðàñíûõ ñòîëáöà âûøå 0
         {
          if(AC(1) < AC(2) &&
             AC(2) < AC(3) &&
             AC(3) < AC(4) &&
             AC(4) > AC(5) &&
             ((AC(1) > 0) || 
              (AC(1) < 0 && AC(2) > 0)))
             return(true); else return(false);
         }
      bool ACSell3() // Äâà êðàñíûõ ñòîëáöà ïðè ïåðåñå÷åíèè
         {
          if(AC(1) < AC(2) &&
             AC(2) < AC(3) &&
             AC(3) > AC(4) &&
             AC(1) < 0 &&
             AC(2) > 0)
             return(true); else return(false);
         }
         
   // Ñèãíàëû AO --- --- --- Âûïîëíåíèå íà öåíå îòêðûòèÿ
   
      // --- Buy
      
      bool AOBuy1() // Ïåðåñå÷åíèå
         {
          if(AO(1) > 0 &&
             AO(2) < 0)
             return(true); else return(false);
         }
      bool AOBuy2() // Áëþäöå
         {
          if(AO(1) > AO(2) &&
             AO(2) < AO(3) &&
             AO(2) > 0)
             return(true); else return(false);
         }
         
      // --- Sell
      
      bool AOSell1() // Ïåðåñå÷åíèå
         {
          if(AO(1) < 0 &&
             AO(2) > 0)
             return(true); else return(false);
         }
      bool AOSell2() // Áëþäöå
         {
          if(AO(1) < AO(2) &&
             AO(2) > AO(3) &&
             AO(2) < 0)
             return(true); else return(false);
         }
         
      // --- --- --- Ìîäåëü äâå âåðøèíû AO! Bull - 1; Bear - 2; N/A - 0
      
      int AOModel(int Shift = 0)
         {
          int a = 0;

          if(AO(Shift + 1) > 0 && Peak < 0) 
             {Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;}
          if(AO(Shift + 1) < 0 && Peak > 0)
             {Peak = 0; TimePeak = 0; PrePeak = 0; PreTimePeak = 0;}
          
          /*if(Peak < 0 &&                         // --- Bull
            (AO(Shift + 1) > AO(Shift + 2) && 
             AO(Shift + 2) < AO(Shift + 3) && 
             AO(Shift + 1) < 0 && 
             AO(Shift + 3) < 0) &&
             AO(Shift + 2) > Peak)
            a = 1; else a = 3;
            
          if(Peak > 0 &&                         // --- Bear
            (AO(Shift + 1) < AO(Shift + 2) && 
             AO(Shift + 2) > AO(Shift + 3) && 
             AO(Shift + 1) > 0 && 
             AO(Shift + 3) > 0) &&
             AO(Shift + 2) < Peak)
            a = 2; else {if(a != 1) a = 3;}*/

          if((AO(Shift + 1) > AO(Shift + 2) &&   // --- Âåðøèíà ìåíüøå íóëÿ 
              AO(Shift + 2) < AO(Shift + 3) && 
              AO(Shift + 1) < 0 && 
              AO(Shift + 3) < 0/* &&
              AO(Shift + 2) < Peak*/) ||
             (AO(Shift + 1) < AO(Shift + 2) &&   // --- Âåðøèíà áîëüøå íóëÿ 
              AO(Shift + 2) > AO(Shift + 3) && 
              AO(Shift + 1) > 0 && 
              AO(Shift + 3) > 0/* &&
              AO(Shift + 2) > Peak*/) &&
              TimePeak != Time[Shift + 2])
            {
            PrePeak = Peak;
            PreTimePeak = TimePeak;
            Peak = AO(Shift + 2);
            TimePeak = Time[Shift + 2];
            
            if(Peak < 0 && PrePeak < 0 && Peak > PrePeak) 
               a = 1; else a = 3;
            if(Peak > 0 && PrePeak > 0 && Peak < PrePeak) 
               a = 2; else {if(a != 1) a = 3;}
            }else a = 3;
          //if(a != 3) Print(a);
          if(a == 1) return(1);
          if(a == 2) return(2);
          if(a == 3) return(0);
         }
         
   // Ôèëüòð Àëëèãàòîð!
   
      // Ìèíèìàëüíîå çíà÷åíèå
      
      double AlligatorMin(int Shift = 1)
         {
         double Min;
         
          Min = MathMin(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift),
                        iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift));
                       
          Min = MathMin(Min,
                        iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift));
          
          Min = NormalizeDouble(Min, Digits);                       
          return(Min);
         }
         
      // Ìàêñèìàëüíîå çíà÷åíèå
      
      double AlligatorMax(int Shift = 1)
         {
         double Max;
         
          Max = MathMax(iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, Shift),
                        iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, Shift));
                       
          Max = MathMax(Max,
                        iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift));
                       
          Max = NormalizeDouble(Max, Digits);
          return(Max);
         }
         
      // Êðàñíàÿ ëèíèÿ àëëèãàòîðà
      
      double AlligatorRed(int Shift = 1)
         {
         double _Red = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, Shift);
         return(NormalizeDouble(_Red, Digits));
         }
         
   // Ôðàêòàë
   
   void Fractal(int Shift = 0)
      {
       if(iFractals(NULL, 0, MODE_UPPER, Shift + 3) > 0 && 
          (
           (iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorMax(Shift + 3) && AlligatorMode == 1) ||
           (iFractals(NULL, 0, MODE_UPPER, Shift + 3) > AlligatorRed(Shift + 3) && AlligatorMode == 2))
          )
          {
           FractalUpper = iFractals(NULL, 0, MODE_UPPER, Shift + 3);
           Time1 = Time[Shift + 3];
           Print("Íàéäåí ôðàêòàë ââåðõ, çíà÷åíèå: ", DoubleToStr(FractalUpper, Digits));
          }
          
       if(iFractals(NULL, 0, MODE_LOWER, Shift + 3) > 0 &&
          (
           (iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorMin(Shift + 3) && AlligatorMode == 1) ||
           (iFractals(NULL, 0, MODE_LOWER, Shift + 3) < AlligatorRed(Shift + 3) && AlligatorMode == 2))
          )
          {
           FractalLower = iFractals(NULL, 0, MODE_LOWER, Shift + 3);
           Time2 = Time[Shift + 3];
           Print("Íàéäåí ôðàêòàë âíèç, çíà÷åíèå: ", DoubleToStr(FractalLower, Digits));
          }      
      }
      
   // 5 áàðîâ îäíîãî öâåòà
   
   void FiveBars(int Shift = 0) 
      {
       int NumBarsGreen = 0,  NumBarsRed = 0;
       for(int a = 1; a <= 5; a++)
          {
           if(AO(Shift + a) > AO(Shift + a + 1) &&
              AC(Shift + a) > AC(Shift + a + 1))
              NumBarsGreen++;
           if(AO(Shift + a) < AO(Shift + a + 1) &&
              AC(Shift + a) < AC(Shift + a + 1))
              NumBarsRed++;
          }
          
       if(NumBarsGreen == 5 &&
          Low[Shift + 1] > AlligatorMax(Shift + 1)) 
          {BarsGreen = true; BarsRed   = false; PriceZone = Low[Shift + 1];}
          
       if(NumBarsRed   == 5 &&
          High[Shift + 1] < AlligatorMin(Shift + 1))
          {BarsRed   = true; BarsGreen = false; PriceZone = High[Shift + 1];}
       // ---   
       if(BarsGreen == true && PriceZone < Low[Shift + 1]) PriceZone = Low[Shift + 1];
       if(BarsRed   == true && PriceZone > High[Shift + 1]) PriceZone = High[Shift + 1];
      }
      
   // Çàêðûòèå âñåõ îòêðûòûõ ïîçèöèé
   
   void CloseAll()
      {
       int Orders;
       Orders = OrdersTotal();
       for(int a = Orders; a > 0; a--)
          {
           if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
              {
               int OrdTicket = OrderTicket();
               double OrdLots = OrderLots();
               if(OrderType() == OP_BUY)
                  OrderClose(OrdTicket, OrdLots, Bid, 3, Orange);
                  else
                  OrderClose(OrdTicket, OrdLots, Ask, 3, Orange);
              }
          }
      }
   
   // Çíà÷åíèå èíäèêàòîðà AO!
   
   double AO(int Shift) 
      {
       return(NormalizeDouble(iAO(NULL, 0, Shift), Digits + 1));
      }
      
   // Çíà÷åíèå èíäèêàòîðà AC!
   
   double AC(int Shift)
      {
       return(NormalizeDouble(iAC(NULL, 0, Shift), Digits + 2));
      }
      
   // Îòêðûòèå - Buy()
   
   void Buy()
      {
       if(Reinvest)
          Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Ask), 1); else Lot = Lots;
       if(Lot >= MaxLots) Lot = MaxLots;
       if(StopLoss   != 0) 
          SL = Bid - StopLoss*Point; else SL = 0;
       if(TakeProfit != 0) 
          TP = Bid + TakeProfit*Point; else TP = 0;
       //---
       if(AccountFreeMargin() - Lot*UnitLot*Ask > 0)
          Ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, SL, TP, "", 0, 0, Red);
      }
      
   // Îòêðûòèå - Sell()
   
   void Sell()
      {
       if(Reinvest)
          Lot = NormalizeDouble((AccountFreeMargin()*Lots)/(UnitLot*Bid), 1); else Lot = Lots;
       if(Lot >= MaxLots) Lot = MaxLots;
       if(StopLoss   != 0) 
          SL = Ask + StopLoss*Point; else SL = 0;
       if(TakeProfit != 0) 
          TP = Ask - TakeProfit*Point; else TP = 0;
       //---
       if(AccountFreeMargin() - Lot*UnitLot*Bid > 0)
          Ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, SL, TP, "", 0, 0, Blue);
      }
      
   // Òèï îòêðûòîé ïîçèöèè (åñëè îíà åñòü)
   
   int _OrderType()
      {
       if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
          {
           if(OrderType() == OP_BUY) return(0);
           if(OrderType() == OP_SELL) return(1);
          }
      }



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
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:

Fractals
Bill Williams Alligator
Bill Williams Awesome oscillator
Bill Williams Accelerator/Decelerator oscillator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself
It automatically opens orders when conditions are reached

Other Features:

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 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 : EURUSD on H1

From 2009-08-01 to 2009-10-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 billwiliamsea


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

Pair: Period: