BARS-Alligator





//+------------------------------------------------------------------+
//|                                                         ****.mq4 |
//|                                                             BARS |
//|                                                 www.*********.ru |
//+------------------------------------------------------------------+
#property copyright "BARS-Alligator"
#property link      "****"
// Ýêñïåðò ðàáîòàåò ïî "Öåíàì îòêðûòèÿ".
// Ýêïåðò ñïîñîáåí ðàáîòàòü ïðè îòêðûòèè ïîçèöèé â óñëîâèÿõ ðûíî÷íîãî 
// èñïîëíåíèÿ òîðãîâûõ çàÿâîê Market Watch , - WHÑ, BROCO è ò.ï.
// Äîáàâëåí âñòðîåííûé áëîê ÌÌ (êîððåêòíî ðàáîòàåò òîëüêî íà âàëþòàõ). 
// Ïðåäóñìîòðåí çàïðåò îäíîèìåííûõ ñäåëîê íà îäíîì áàðå áîëåå îäíîé - 
//  - ïðèìåíåíà  ô-ÿ È.Êèìà NumberOfBarOpenLastPos(). 
// Ýêñïåðò àäàïòèðîâàí ïîä óñëîâèÿ ×åìïèîíàòà Ðîáîòîâ 2008  ïî 
// êîëè÷åñòâó îðäåðîâ è ëîòîâ.

//---- input parameters

extern int     Magic=5675;
extern int     Orders =3;
extern int     StopLoss=50;
extern int     TakeProfit=50;
extern string   ___= "Ïàðàìåòðû èíä. Àëëèãàòîð";
extern int     JawsPeriod=13;
extern int     JawsShift=8;
extern int     TeethPeriod=8;
extern int     TeethShift=5;
extern int     LipsPeriod=5;
extern int     LipsShift=3;
extern string   ____= "Ïàðàìåòðû Òðåéëèíã ñòîïà";
extern bool     UseTrailing = true;//âûêëþ÷àòåëü òðåéëèíãà
extern int     lMinProfit         = 40;//ïîðîã òðàëà äëèííûõ ïîç
extern int     lTrailingStop      = 50;//ðàçìåð òðàëà äëèííûõ ïîç
extern int     lTrailingStep      = 5;// øàã òðàëà
extern int     sMinProfit              = 40;//ïîðîã òðàëà êîðîòêèõ ïîç
extern int     sTrailingStop           = 50;//ðàçìåð òðàëà êîðîòêèõ ïîç
extern int     sTrailingStep           = 5; //øàã òðàëà
extern string     ______= "Ïàðàìåòðû áëîêà MoneyManagement";
extern double    Lots = 0.1;
extern bool      MoneyManagement=true;
extern int       MarginPercent=3;
//----------------------------------
double SL,TP;
int ticket;
 double lots;
static int prevtime = 0;
//-- Ïîäêëþ÷àåìûå ìîäóëè --
//#include  <b-Lots.mqh> // áèáëèîòåêà ÌÌ
#include <stderror.mqh>
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 
if (Time[0] == prevtime) return(0); // Áàð ïðåæíèé, à ñëåäîâàòåëüíî âûõîäèì
   prevtime = Time[0]; // Ñâåæèé áàð, çàïîìèíàåì âðåìÿ
//----
if (UseTrailing) TrailPositions(); //òðåéëèíã ñòîï
// Îáúÿâëÿåì ïåðåìåííûå
int total, cnt;
double MA1,MA2,MA3,MA4,MA5,MA6;
int err;
// double lots;
// Âû÷èñëÿåì íà÷àëüíûå ïàðàìåòðû èíäèêàòîðîâ äëÿ ïîèñêà óñëîâèé âõîäà

  MA1 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 1);   // çåë¸íàÿ
  MA2 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 1); // êðàñíàÿ ëèíèÿ
  MA3 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORTEETH, 2);   // êðàñíàÿ
  MA4 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORLIPS, 2); // çåë¸íàÿ
  MA5 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW , 1);   /// ñèíèÿ ëèíèÿ.
  MA6 = iAlligator(NULL, 0, JawsPeriod, JawsShift, TeethPeriod, TeethShift, LipsPeriod, LipsShift, MODE_SMMA, PRICE_CLOSE, MODE_GATORJAW , 2);  /// ñèíèÿ ëèíèÿ.
  total=OrdersTotal();
Comment( LotsCounting() );
//=======================================================================
  // Ïðîâåðêà ñðåäñòâ
  if(AccountFreeMargin()<(1000*Lots))
     {
       Print("We have no money. Free Margin = ", AccountFreeMargin());   
       return(0);  
     }
//============Îòêðûòèå ïîçèöèé  =======================================  
if ( NumberOfPositions(NULL , -1, Magic )<Orders ) { //åñëè  îòêðûòûõ ïîçèöèé ìåíåå Orders
//==================================================================== 
  // Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè áàé
if (! NumberOfBarOpenLastPos(NULL, 0,OP_BUY, Magic)  ==0) { //çàïðåò íåñê. ïîç íà îäíîì áàðå
  if(  MA1>=MA5 && MA4<MA6)//ïîêóïàåì
     { SL=0;TP=0;
      if(StopLoss>0)   SL=Ask-Point*StopLoss;
      if(TakeProfit>0) TP=Ask+Point*TakeProfit;
      lots=LotsCounting();    
   ticket=WHCOrderSend(Symbol(),OP_BUY,lots,Ask,3,SL,TP,"Ïîêóïàåì- õè-õè ",Magic,0,Green);
   if(ticket < 0) {
            Print("Îøèáêà îòêðûòèÿ îðäåðà BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0); 
         } 
       }
     }
//=================================================================
// Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè ñåëë 
if (! NumberOfBarOpenLastPos(NULL, 0,OP_SELL, Magic)  ==0) {//çàïðåò íåñê. ïîç íà îäíîì áàðå 
  if(MA1<=MA5&&  MA4>MA6 )//ïðîäàåì
     { SL=0;TP=0;
      if(StopLoss>0)   SL=Bid+Point*StopLoss;
      if(TakeProfit>0) TP=Bid-Point*TakeProfit;
      lots=LotsCounting(); 
   ticket=WHCOrderSend(Symbol(),OP_SELL,lots,Bid,3,SL,TP,"Ïðîäàåì- òðà-ëÿ-ëÿ",Magic,0,Red);
   if(ticket < 0){
            Print("Îøèáêà îòêðûòèÿ îðäåðà SELL #", GetLastError()); 
            Sleep(10000);  
            prevtime = Time[1]; 
            return (0); 
         } 
       }
     }
//=====================================================================
 }    //åñëè  îòêðûòûõ ïîçèöèé ìåíåå Orders 
//============ êîíåö áëîêà îòêðûòèÿ ïîçèöèé ===========================
 
//================Çàêðûòèå ïîçèöèé=====================================
//----------------------------------------------------------------------
   for ( int v = OrdersTotal() - 1; v >= 0; v -- )                  {       
      if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES))                {           
        if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)     { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if((MA1<=MA2&&MA4>MA3&& OrderProfit( ) >=0))     {
         OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); // çàêðûâàåì ïîçèöèþ
                // return(0); // âûõîäèì         
              }   }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if(MA1>=MA2&&MA4<MA3&& OrderProfit( ) >=0) {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // çàêðûâàåì ïîçèöèþ
                // return(0); // âûõîäèì
              }   }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total 
//================== Êîíåö áëîêà çàêðûòèÿ  =============================
   
  return(0);
  }
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ Êîíåö ôóíêöèè int start() ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ
 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void TrailPositions() {// ôóíêöèÿ òðåéëèíã ñòîï
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)                                      {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;    
     if (OrderType() == OP_BUY && OrderMagicNumber()==Magic)           {
      if (Bid-OrderOpenPrice() > lMinProfit*Point)                      {
        if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
                                                     OrderTakeProfit(), 0, Blue);
        }}}
    if (OrderType() == OP_SELL && OrderMagicNumber()==Magic)                 {
      if (OrderOpenPrice()-Ask > sMinProfit*Point)                            {
        if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point 
                                                       || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
                                                      OrderTakeProfit(), 0, Blue);
        }}}}  }
//------------------------------------------------------------------------------+
//======================== Áëîê ÌÌ ============================================== 
  //ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ  
double LotsCounting() { double lots=Lots;
   if (MoneyManagement)      {
      double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE);
      double freemargin=AccountFreeMargin();
      lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1);
      Comment(NormalizeDouble((MarginPercent*freemargin/lotsize),1));    }
   if (lots>5) lots=4.9; if (lots<0.1) lots=0.1;return (lots);   }
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ
// Ôóíêöèÿ orders for WHC - 
//Äëÿ  îòêðûòèå ïîçèöèé â óñëîâèÿõ ðûíî÷íîãî èñïîëíåíèÿ òîðãîâûõ çàÿâîê Market Watch
int WHCOrderSend(string symbol, 
                 int cmd, 
                 double volume, 
                 double price, 
                 int slippage, 
                 double stoploss, 
                 double takeprofit, 
                 string comment, 
                 int magic, 
                 datetime expiration, 
                 color arrow_color)
{
   int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);   
   int check = -1;
   if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
      if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
         check = GetLastError();
         if (check != ERR_NO_ERROR) {
            Print("OrderModify error: ", ErrorDescription(check));
         }
      }
   } else {
      check = GetLastError();
      if (check != ERR_NO_ERROR){
         Print("OrderSend error: ",ErrorDescription(check));
      }
   }
   return (ticket);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî ïîçèöèé.                                 |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íîìåð áàðà îòêðûòèÿ ïîñëåäíåé ïîçèöèè èëè -1.       |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   ("" èëè NULL - òåêóùèé ñèìâîë)          |
//|    tf - òàéìôðåéì                  (    0       - òåêóùèé òàéìôðåéì)       |
//|    op - îïåðàöèÿ                   (   -1       - ëþáàÿ ïîçèöèÿ)           |
//|    mn - MagicNumber                (   -1       - ëþáîé ìàãèê)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:

Bill Williams Alligator


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

From 2009-11-01 to 2009-11-30 Profit Factor:0.30 Total Net Profit:-234.03

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:3.54 Total Net Profit:1034.98

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:1461.73

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.63 Total Net Profit:-150.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.55 Total Net Profit:-2698.98

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:2.26 Total Net Profit:11735.36

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.45 Total Net Profit:-90.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-04-16 Profit Factor:0.65 Total Net Profit:-1462.69

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:1.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.80 Total Net Profit:-30.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.88 Total Net Profit:-30.00

Request Backtest for BARS-Alligator


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

Pair: Period: