autoFX_HaNoo_v10





/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

/*
+------------------------------------------------------------------+
|                                                     autoFX_HaNoo |
|                                     Copyright 2005, AutoFX Corp. |
|                                                      version 1.0 |
|                                                                  |
|                                  o idea and realization by matt  |
| o realization and rewritten/enhanced to MQL4 by NOO@AutoFX Corp. |
+------------------------------------------------------------------+
for going long you must have the HA in White, 
Awesome Oscilator > 0, and Close[1] > 200 day EMA.  The reverse is 
true for going short.  The exit is ofcourse when the HA turns colors.
*/

#property copyright "Copyright 2005, AutoFX Corp."
#property link      "http://www.AutoFX.cn/"

#include <stdlib.mqh>

// V.*******************************************************
// ****          Variables Declared                     ****
// ****   variables declared here are GLOBAL in scope   ****
// *********************************************************
extern double Lots = 1.0;
extern int    Slippage = 2;
extern int    UseDefaultSeting = 1;
extern int    StopLoss = 50; 
extern int    TakeProfit = 0;
extern int    TrailingStop = 30;
extern int    ProfitKeep = 10;

double   LotMM = 0;
datetime NewBarTime;
int      DebugMsg = 0;

string CurrentSymbol;
int    CurrentPeriod;
double CurrentPoint;

int    MagicNumber = 20050907;
string MagicName = "HaNoo";
int    ServerTimeZone = 0;
   
double haOpen[3],haHigh[3],haLow[3],haClose[3];  //indicators: Heiken Ashi
int    haDirection[3];

double ema;  //indicators: ema
double ao;  //indicators: ao


//+------------------------------------------------------------------+
int init() { 
   CurrentSymbol = Symbol();
   CurrentPeriod = Period();
   CurrentPoint  = MarketInfo (CurrentSymbol, MODE_POINT);
   
// C.*****************************************************
// ***   Main Script Conditions                        ***
// *******************************************************
   if(TakeProfit<10) {
      Print("TakeProfit<10");
      return(-1);
   }
   if(Bars < 300) {
      Print("Bars less than 300, Not enough bars on chart.");
      return(-1);
   }
   
// P.***********************************************************
// *** Define Parameter in different period                  ***
// *************************************************************
   switch(CurrentPeriod) {
      case 30:  //30min
         if(UseDefaultSeting==1) { StopLoss=50; TakeProfit=0; TrailingStop=30; ProfitKeep=10; }
         break;
      case 60:  //1H
         if(UseDefaultSeting==1) { StopLoss=50; TakeProfit=0; TrailingStop=30; ProfitKeep=10; }
         break;         
      default:
         Comment("\n","Current Period ( ",CurrentPeriod," ) IS NOT GOOD for Trade by this Experts. ");
         return(0);
         break;
   }
   
   return(0);
}  //close for init()

//+------------------------------------------------------------------+
int start()
{
// T.**********************************************
// *** Trade in TimeZone                        ***
// ************************************************
   if(TimeHour(CurTime()) + ServerTimeZone >= 19 || TimeHour(CurTime()) + ServerTimeZone <= 0) {
      Comment ("\n","Current Time : ",TimeToStr(CurTime())," ( GTM=", ServerTimeZone," ) is NOT GOOD for Trade by this Robot",
               "\n");
      return(0);
   }
   

// I.*****************************************************
// ***    Messages & Screen Output Setting             ***
// *******************************************************
   if(NewBarTime != Time[0]) {ObjectsDeleteAll(0, OBJ_ARROW); NewBarTime = Time[0];}
   //DebugMsg = 0;    //999 for nothing
   DebugMsg ++;
   if(DebugMsg>1) DebugMsg=0;
   
// I.*****************************************************
// ***    Get Indicators Results                       ***
// *******************************************************
   haLow[0]  =iCustom(NULL,0,"#HeikenAshi",0,0);
   haHigh[0] =iCustom(NULL,0,"#HeikenAshi",1,0);
   haOpen[0] =iCustom(NULL,0,"#HeikenAshi",2,0);
   haClose[0]=iCustom(NULL,0,"#HeikenAshi",3,0);
   if (haOpen[0] < haClose[0] && haHigh[0] > haLow[0]) haDirection[0] =  1;
   if (haOpen[0] > haClose[0] && haHigh[0] < haLow[0]) haDirection[0] = -1;

   haLow[1]  =iCustom(NULL,0,"#HeikenAshi",0,1);
   haHigh[1] =iCustom(NULL,0,"#HeikenAshi",1,1);
   haOpen[1] =iCustom(NULL,0,"#HeikenAshi",2,1);
   haClose[1]=iCustom(NULL,0,"#HeikenAshi",3,1);
   if (haOpen[1] < haClose[1] && haHigh[1] > haLow[1]) haDirection[1] =  1;
   if (haOpen[1] > haClose[1] && haHigh[1] < haLow[1]) haDirection[1] = -1;

   haLow[2]  =iCustom(NULL,0,"#HeikenAshi",0,2);
   haHigh[2] =iCustom(NULL,0,"#HeikenAshi",1,2);
   haOpen[2] =iCustom(NULL,0,"#HeikenAshi",2,2);
   haClose[2]=iCustom(NULL,0,"#HeikenAshi",3,2);
   if (haOpen[2] < haClose[2] && haHigh[2] > haLow[2]) haDirection[2] =  1;
   if (haOpen[2] > haClose[2] && haHigh[2] < haLow[2]) haDirection[2] = -1;

   ema=iMA(NULL,0,200,1,MODE_EMA,PRICE_CLOSE,1);  //ema200
   ao=iAO(NULL, 0, 0);


// L.1******************************************************
// ****       LONG / SHORT TRADE LOGIC                  ****
// *********************************************************
   //Direction
   bool GoLong_DIR = false, GoShort_DIR = false;
   if(ao>0 && Close[1]>ema) GoLong_DIR =true;
   if(ao<0 && Close[1]<ema) GoShort_DIR=true;

   //Momentum 
   bool GoLong_MOM = false, GoShort_MOM = false;
   GoLong_MOM =true; GoShort_MOM=true;

   //open order in BAR
   bool GoLong_BAR = false, GoShort_BAR = false,  CloseLong_BAR = false, CloseShort_BAR = false;
   GoShort_BAR=true;  GoLong_BAR =true;


   //Entry Sign
   bool GoLong_SIN = false, GoShort_SIN = false;
   if(haDirection[2]==-1 && haDirection[1]==1) GoLong_SIN =true;
   if(haDirection[2]== 1 && haDirection[1]==1) GoShort_SIN=true;
   

   //Exit Sign
   bool CloseLong_SIN = false, CloseShort_SIN = false;
   if(GoLong_SIN ==true ) CloseShort_SIN = true;
   if(GoShort_SIN==true ) CloseLong_SIN  = true;
   
       
   //LONG and SHORT TRADE LOGIC
   bool GoLong = false, CloseLong = false, GoShort = false, CloseShort = false;
   GoLong  = GoLong_DIR  && GoLong_MOM  && GoLong_SIN  && GoLong_BAR;
   GoShort = GoShort_DIR && GoShort_MOM && GoShort_SIN && GoShort_BAR;
   CloseLong  = CloseLong_SIN && CloseLong_BAR;
   CloseShort = CloseShort_SIN && CloseShort_BAR; 



// O.*******************************************************
// ****            Pending Order Management             ****
// *********************************************************
   int   OrderResult;
   int   TradesTotal=0, TradesBUY=0, TradesSELL=0;
   for(int i=0;i<OrdersTotal();i++)
   {
      if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false )  continue;
      if( OrderSymbol() != CurrentSymbol || OrderMagicNumber() != MagicNumber )  continue;

      OrderResult = 0;
      switch(OrderType())
      {
         case OP_BUY:
            // close order if trigger exit sign
            if(CloseLong==true) OrderResult = OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
            if( OrderResult ==-1 ) ReportError("in OP_BUY close"); else { TradesBUY ++; TradesTotal ++; }
            break;
         case OP_SELL:
            // close order if trigger exit sign
            if(CloseShort==true) OrderResult = OrderClose(OrderTicket(),OrderLots(),Ask,0,Red);
            if( OrderResult ==-1 ) ReportError("in OP_SELL close"); else { TradesSELL ++; TradesTotal ++; }
            break;
      }
   }


// S.1******************************************************
// ****       calculate TakeProfit and StopLoss for     ****
// ****    (B)id (sell, short) and (A)sk(buy, long)     ****
// *********************************************************
   double  CalcStopLossBUY=0,CalcTakeProfitBUY=0;
   double  CalcStopLossSELL=0,CalcTakeProfitSELL=0;
   
   CalcStopLossBUY=Ask-(StopLoss * CurrentPoint);
   CalcTakeProfitBUY = Bid+(TakeProfit * CurrentPoint);

   CalcStopLossSELL=Bid+(StopLoss * CurrentPoint);
   CalcTakeProfitSELL = Ask-(TakeProfit * CurrentPoint);

   if(TakeProfit==0) {CalcTakeProfitBUY=0; CalcTakeProfitSELL=0;}
   if(StopLoss==0)   {CalcStopLossBUY=0; CalcStopLossSELL=0;}


// O.*******************************************************
// ****      Open Long/Short Trade Order                ****
// *********************************************************
   // place new orders based on direction
      OrderResult = 0;
      
      if(GoLong==true && TradesBUY<1)
      {
         OrderResult = OrderSend(Symbol(),OP_BUY,LotMM,Ask,Slippage,CalcStopLossBUY,CalcTakeProfitBUY,MagicName+" BUY "+CurrentPeriod,MagicNumber,0,White);
         if( OrderResult == -1 )  ReportError ("in OP_BUY open");
         if( OrderResult !=  0 )  { return(0); }
      }
        
      if(GoShort==true && TradesSELL<1)
      {
         OrderResult = OrderSend(Symbol(),OP_SELL,LotMM,Bid,Slippage,CalcStopLossSELL,CalcTakeProfitSELL,MagicName+" SEL "+CurrentPeriod,MagicNumber,0,Red);
         if( OrderResult == -1 )  ReportError ("in OP_SELL open");
         if( OrderResult !=  0 )  { return(0); }
      }
      
   
// T.3******************************************************
// **** Stop Loss & TrailingStop Management             ****
// *********************************************************
      for(i=0;i<OrdersTotal();i++)
      {
         if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false )  continue;
         if( OrderSymbol() != CurrentSymbol || OrderMagicNumber() != MagicNumber )  continue;
         OrderResult = 0;
         
         if(OrderType()==OP_BUY)
         {
            if( OrderProfit()>0 )
            {
               if( ProfitKeep!=0 && TrailingStop!=0 && OrderStopLoss()!=0 && Bid-OrderStopLoss()>ProfitKeep*CurrentPoint+TrailingStop*CurrentPoint && Bid-OrderOpenPrice()>ProfitKeep*CurrentPoint+TrailingStop*CurrentPoint ) { OrderResult = OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*CurrentPoint,OrderTakeProfit(),0,BlueViolet); }
               if( OrderResult ==-1 ) ReportError("in OP_BUY modify");
            }
         }
         
         if(OrderType()==OP_SELL)
         {
            if( OrderProfit()>0 )
            {
               if( ProfitKeep!=0 && TrailingStop!=0 && OrderStopLoss()!=0 && OrderStopLoss()-Ask>ProfitKeep*CurrentPoint+TrailingStop*CurrentPoint && OrderOpenPrice()-Ask>ProfitKeep*CurrentPoint+TrailingStop*CurrentPoint ) { OrderResult = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*CurrentPoint,OrderTakeProfit(),0,Cyan); }
               if( OrderResult ==-1 ) ReportError("in OP_SELL modify");
            }
         }

      } // close for if(cnt=0;cnt<total;cnt++)


// R.*******************************************************
// ****           Debug Messages                        ****
// *********************************************************
   if(DebugMsg != 999)
   {
      switch(DebugMsg) {
         case 0:
         Comment ("\n","AO=",ao,
                  "\n","ema=",ema,"Close[1]=",Close[1],
                  "\n",
                  "\n","GoLong_DIR= ",GoLong_DIR," GoShort_DIR= ",GoShort_DIR,
                  "\n",
                  "\n","[HA0] Direction=",haDirection[0],
                  "\n","[HA1] Direction=",haDirection[1],
                  "\n","[HA2] Direction=",haDirection[2],
                  "\n",
                  "\n","GoLong_SIN= ",GoLong_SIN," GoShort_SIN= ",GoShort_SIN,
                  "\n","CloseLong_SIN= ",CloseLong_SIN," CloseShort_SIN= ",CloseShort_SIN,
                  "\n",
                  "\n","GoLong= ",GoLong," CloseLong= ",CloseLong," GoShort= ",GoShort," CloseShort= ",CloseShort,
                  "\n");
         break;
         case 1: 
         Comment ("\n","(",CurrentSymbol,") Trades Total= ",TradesTotal, " Lots= ",LotMM,
                  "\n",
                  "\n",TradesBUY,".onBUY ", TradesSELL,".onSELL ",
                  "\n",
                  "\n","BarTime= ",TimeToStr(NewBarTime)," (GTM= ", ServerTimeZone,") ",
                  "\n",
                  "\n","StopLoss= ",StopLoss, " TakeProfit= ",TakeProfit, " TrailingStop= ",TrailingStop, " ProfitKeep= ",ProfitKeep,
                  "\n","AccountBalance= ",AccountBalance(),
                  "\n","FreeMargin= ",AccountFreeMargin(),
                  "\n");
         break;
      }
   }//close for if(DebugMsg != 999)


   return(0);

} // close for start


//+------------------------------------------------------------------+
void ReportError (string ErrMsg)
{
   int err = GetLastError();
   Print("Error(",err,"): ", ErrorDescription(err)," ( ",ErrMsg," ) ");
}





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


Indicator Curves created:


Indicators Used:


Moving average indicator
Bill Williams Awesome oscillator


Custom Indicators Used:
#HeikenAshi

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself
It automatically opens orders when conditions are reached
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.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 : 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 autoFX_HaNoo_v10


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

Pair: Period: