Navigation´╝ÜHome > Content >

anubis.mq4

Time: 2012-10-14 | Download file:anubis.mq4

//+------------------------------------------------------------------+
//|                                                 "Anubis"    .mq4 |
//|                                                                  | 
//|                                               compiled for       |
//|                                                                  | 
//|                                                Automated         |
//|                                          Trading Championship    |
//|                                                   2006           | 
//+------------------------------------------------------------------+ 


#property copyright "Copyright c 2006, Andrew Tikhonov" 
#include  

#define          TRENDMAGIC   23061234
#define          FLATMAGIC    23065678 

#define          UNDEF   0
#define          LONG    1
#define          SHORT  -1

//---- input parameters 
extern string    expName    = "Anubis";
extern double    Lots       = 1; 
extern double    CCIthres   = 80; // 82
extern int       CCIPeriod  = 11; // 12
extern int       Stoploss   = 100;
extern int       breakeven  = 65; 
extern int       M_FastEMA  = 20; // 24
extern int       M_ShowEMA  = 50; // 26
extern int       M_Signal   = 2;
extern double    RFactor    = 0.6;

int       shortOrders = 2;
int       longOrders  = 2;

extern double    closeK     = 2; // 4.5 // 3.5
extern int       thres      = 28; // 25
extern double    stdK       = 2.9; // 3 // 6.2

int openLongBar = 0;
int openShortBar = 0;

double lastLongPrice;
double lastShortPrice;

datetime expTime = 0;

//================================================================= 
void init() {}

//================================================================= 
bool numOrders(int & longs, int & shorts)
{ 
  int i;
  
  longs  = 0; 
  shorts = 0; 
  
  for(i=OrdersTotal()-1; i>=0; i--) { 
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
    if(OrderMagicNumber()==FLATMAGIC) {
      if (OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT) { longs++; }
      if (OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT) { shorts++; }
    }
  }
} 

//+------------------------------------------------------------------+ 
//+------------------------------------------------------------------+ 
void setFlatBreakeven() { 
    
  int i; 
  if (OrdersTotal()==0) return; 
  for (i=OrdersTotal()-1; i>=0; i--) 
  { 
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
    if(OrderType()==OP_BUY && OrderMagicNumber()==FLATMAGIC) 
    { 
      if (Bid-breakeven*Point>OrderOpenPrice() && OrderOpenPrice()>OrderStopLoss()) 
      { 
        OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Aqua); 
        return; 
      } 
    } 
    if(OrderType()==OP_SELL && OrderMagicNumber()==FLATMAGIC) 
    { 
      if (Ask+breakeven*Point 22000) { mylots = mylots * 3.2; }
  else if (AccountBalance() > 14000) { mylots = mylots * 2; }

  return(NormalizeDouble(mylots * factor, 1));
}

//================================================================= 
bool checkFreeMargin()
{
  double lotsize  = MarketInfo(Symbol(),MODE_LOTSIZE);
  double leverage = AccountLeverage();
  double minlot   = MarketInfo(Symbol(),MODE_MINLOT);
  
  if (AccountFreeMargin() < (Ask * lotsize/leverage * minlot)) {
    Print ("--- NOT ENOUGH MONEY ---");
    return (false);
  }
  return (true);
}

//================================================================= 
int start_flatSystem() 
{ 
   if (expTime != Time[0]) { expTime = Time[0]; }
   else { return; }

   if (!checkFreeMargin()) { return(0); }

   if (!IsConnected()) { Print("not connected!"); }
   if (IsStopped()) { Print("stopped!"); }
   if (!IsTradeAllowed()) { Print("Trade NOT allowed!"); }
   if (IsTradeContextBusy()) { Print("Trade context busy!"); }

   int i; 
   double iCCI0;
   double iMACD1, iMACD2, iMACDs1, iMACDs2;

   int openLong  = 0;
   int openShort = 0;

   int openCmd = UNDEF;

   int numLongs;
   int numShorts;

   numOrders(numLongs, numShorts);

   double stDev = iStdDev(Symbol(),PERIOD_H4,20,0,MODE_SMA,PRICE_CLOSE,1);

   iCCI0  = iCCI(Symbol(), PERIOD_H4, CCIPeriod, PRICE_CLOSE, 0);

   iMACD1  = iMACD(Symbol(),PERIOD_M15,M_FastEMA,M_ShowEMA,M_Signal,PRICE_CLOSE,MODE_MAIN,1);
   iMACD2  = iMACD(Symbol(),PERIOD_M15,M_FastEMA,M_ShowEMA,M_Signal,PRICE_CLOSE,MODE_MAIN,2);
   iMACDs1 = iMACD(Symbol(),PERIOD_M15,M_FastEMA,M_ShowEMA,M_Signal,PRICE_CLOSE,MODE_SIGNAL,1);
   iMACDs2 = iMACD(Symbol(),PERIOD_M15,M_FastEMA,M_ShowEMA,M_Signal,PRICE_CLOSE,MODE_SIGNAL,2);

   if (iCCI0 > CCIthres && IsTesting())
   {
     // ObjectCreate("UP"+Bars,OBJ_ARROW,0,Time[1],Low[1]-iATR(NULL,0,12,1));
     // ObjectSet("UP"+Bars,OBJPROP_ARROWCODE,159);
     // ObjectSet("UP"+Bars,OBJPROP_COLOR,Red);
   }

   if (iCCI0 < (-1)*CCIthres && IsTesting())
   {
     // ObjectCreate("DN"+Bars,OBJ_ARROW,0,Time[1],High[1]+iATR(NULL,0,12,1));
     // ObjectSet("DN"+Bars,OBJPROP_ARROWCODE,159);
     // ObjectSet("DN"+Bars,OBJPROP_COLOR,Blue);
   }

   double take;
      
   //double take= TakeProfit*Point;
   take= stdK * iStdDev(Symbol(),PERIOD_H4,30,MODE_EMA,0,PRICE_CLOSE,1);
        
   if(iCCI0 > CCIthres && iMACD2 >= iMACDs2 && iMACD1 < iMACDs1 && iMACD1 > 0)
   { openCmd = SHORT; }
      
   if (iCCI0 < (-1)*CCIthres && iMACD2 <= iMACDs2 && iMACD1 > iMACDs1 && iMACD1 < 0)
   { openCmd = LONG; }
       
   if (numShorts == 0) { lastShortPrice = 0 ;}
   if (numLongs  == 0) { lastLongPrice = 0 ;}

   double myprice;
       
   if (openCmd == SHORT && openShortBar != Bars && numShorts < shortOrders)
   {
     if (MathAbs(Ask-lastShortPrice) > 20*Point)
     {
       RefreshRates();
              
       OrderSend(Symbol(),OP_SELL,getLots(),Bid,3,Bid+Stoploss*Point,Bid-take,expName,FLATMAGIC,0,Blue); 
       openShortBar = Bars;
       lastShortPrice = Ask;
     }
   }

   if (openCmd == LONG && openLongBar != Bars && numLongs < longOrders)
   {
     if (MathAbs(Ask-lastLongPrice) > 20*Point)
     {
       RefreshRates();

       OrderSend(Symbol(),OP_BUY,getLots(),Ask,3,Ask-Stoploss*Point,Ask+take,expName,FLATMAGIC,0,Red); 
       openLongBar = Bars;
       lastLongPrice = Ask;
     }
   }
   
   setFlatBreakeven();

   if (OrdersTotal() > 0)
   {
   
     double iATR1 = iATR(Symbol(),PERIOD_M15,12,1);
     double iClose1 = iClose(Symbol(),PERIOD_M15,1);
     double iOpen1 = iClose(Symbol(),PERIOD_M15,1);
 
     for(i=OrdersTotal()-1; i>=0; i--) 
     { 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
       if(OrderMagicNumber()==FLATMAGIC) 
       {
         if(OrderType()==OP_BUY) 
         { 
           if((iClose1 - iOpen1 > closeK * iATR1) ||
              (iMACD1 < iMACD2 && Bid - OrderOpenPrice() > thres*Point))
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); 
         }          
         if(OrderType()==OP_SELL) 
         { 
           if((iOpen1 - iClose1 > closeK * iATR1) ||
              (iMACD1 > iMACD2 && OrderOpenPrice() - Ask > thres*Point ))
           OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); 
         } 
       } 
     } 
   }
   
   return(0); 
} 

//================================================================= 
int start()
{ 
  start_flatSystem();
  return (0);
}

Recommend