Ademola





//+------------------------------------------------------------------+
//|                                                      Ademola.mq4 |
//|                                        Copyright © 2008, LEGRUPO |
//|                                           http://www.legrupo.com |
//|                                                     Version: 1.0 |
//| History:                                                         |
//| 1.0 => Release version to the public                             |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, LEGRUPO"
#property link      "http://www.legrupo.com"
//+------------------------------------------------------------------+
//| EX4 imports                                                      |
//+------------------------------------------------------------------+
#include <stderror.mqh>
#include <stdlib.mqh>

//---- input parameters
extern int ExpertID = 108888;
extern double    TakeProfit=40;
extern bool useStopLoss = true;
extern double    StopLoss=20;
extern double    Lots=0.01;
extern int Slippage = 3;

extern bool   useTimeFilter        = true;
extern int    startTradeTime       = 1;

extern bool UseMoneyManagement = true;
extern bool AccountIsMicro = true;
extern int Risk = 10; // risk in percentage % (10% of risk in this case)

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int MagicNumber = MakeMagicNumber();
   if(UseMoneyManagement==true) {
      Lots = DefineLotSize(); //Adjust the lot size     total
   }
   int order_type = -1;
   double tp, sl, price = 0.0;
   if (TimeHour(TimeCurrent()) == startTradeTime) {
      // new day
      datetime time = StrToTime(+Year()+"."+Month()+"."+Day()+" 00:00");
      for(int i=1; i<=Bars; i++) {
         if (Time[i] == time) {
            double day_O = Open[i];
            double day_H = High[i];
            double day_L = Low[i];
            double day_C = Close[i];
            break;
         }
      }
      ObjectDelete("Day open");
      ObjectDelete("X");
      ObjectDelete("X1");
      ObjectDelete("X2");
      ObjectDelete("X3");
      ObjectDelete("X4");
      if(!ObjectCreate("Day open", OBJ_VLINE, 0, time, Ask)) {
         Alert("Error: Day open #",ErrorDescription(GetLastError()));
      } else {
         ObjectSet("Day open", OBJPROP_STYLE, STYLE_DASH);
         ObjectSet("Day open", OBJPROP_COLOR, Red);
         
         // X LINE
         double x_line=NormalizeDouble((day_H+day_L)/2, Digits);
         if(!ObjectCreate("X", OBJ_HLINE, 0, time, x_line)) {
            Alert("Error: LINE X #",ErrorDescription(GetLastError()));
         } else {
            ObjectSet("X", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("X", OBJPROP_COLOR, Green);
         }
         
         // X1 LINE
         double x1_line=NormalizeDouble(((day_H+day_L)/2)+40*Point, Digits);
         if(!ObjectCreate("X1", OBJ_HLINE, 0, time, x1_line)) {
            Alert("Error: LINE X1 #",ErrorDescription(GetLastError()));
         } else {
            ObjectSet("X1", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("X1", OBJPROP_COLOR, Purple);
         }
         
         // X2 LINE
         double x2_line=NormalizeDouble(((day_H+day_L)/2)+80*Point, Digits);
         if(!ObjectCreate("X2", OBJ_HLINE, 0, time, x2_line)) {
            Alert("Error: LINE X2 #",ErrorDescription(GetLastError()));
         } else {
            ObjectSet("X2", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("X2", OBJPROP_COLOR, Purple);
         }
         
         // X3 LINE
         double x3_line=NormalizeDouble(((day_H+day_L)/2)-40*Point, Digits);
         if(!ObjectCreate("X3", OBJ_HLINE, 0, time, x3_line)) {
            Alert("Error: LINE X3 #",ErrorDescription(GetLastError()));
         } else {
            ObjectSet("X3", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("X3", OBJPROP_COLOR, Red);
         }
         
         // X4 LINE
         double x4_line=NormalizeDouble(((day_H+day_L)/2)-80*Point, Digits);
         if(!ObjectCreate("X4", OBJ_HLINE, 0, time, x4_line)) {
            Alert("Error: LINE X4 #",ErrorDescription(GetLastError()));
         } else {
            ObjectSet("X4", OBJPROP_STYLE, STYLE_SOLID);
            ObjectSet("X4", OBJPROP_COLOR, Red);
         }
      }
      
      if (CountLongs(MagicNumber) == 0 || CountShorts(MagicNumber) == 0) {
         price = x1_line;
         tp = x2_line;
         if (useStopLoss) {
            sl = x4_line;
         } else {
            sl = 0;
         }
      
         int ticket_buy = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,Slippage,sl,tp,"Ademola",MagicNumber,0,CLR_NONE);
         if(ticket_buy>0)
         {
            if(OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
         } else {
            Alert("Ademola Error opening order : ",ErrorDescription(GetLastError()));
            return(0);
         } // fim ticket_buy
      
      
         price = x3_line;
         tp = x4_line;
         if (useStopLoss) {
            sl = x2_line;
         } else {
            sl = 0;
         }
         int ticket_sell = OrderSend(Symbol(),OP_SELLSTOP,Lots,price,Slippage,sl,tp,"Ademola",MagicNumber,0,CLR_NONE);
         if(ticket_sell>0)
         {
            if(OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
         } else {
            Alert("Ademola Error opening order : ",ErrorDescription(GetLastError()));
            return(0);
         } // fim ticket_sell
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+


int MakeMagicNumber()
{
   int SymbolCode  = 0;
   int PeriodCode  = 0;
   int MagicNumber = 0; 
   
   //---- Symbol Code
        if( Symbol() == "AUDCAD" || Symbol() == "AUDCADm" ) { SymbolCode = 1000; }
   else if( Symbol() == "AUDJPY" || Symbol() == "AUDJPYm" ) { SymbolCode = 2000; }
   else if( Symbol() == "AUDNZD" || Symbol() == "AUDNZDm" ) { SymbolCode = 3000; }
   else if( Symbol() == "AUDUSD" || Symbol() == "AUDUSDm" ) { SymbolCode = 4000; }
   else if( Symbol() == "CHFJPY" || Symbol() == "CHFJPYm" ) { SymbolCode = 5000; }
   else if( Symbol() == "EURAUD" || Symbol() == "EURAUDm" ) { SymbolCode = 6000; }
   else if( Symbol() == "EURCAD" || Symbol() == "EURCADm" ) { SymbolCode = 7000; }
   else if( Symbol() == "EURCHF" || Symbol() == "EURCHFm" ) { SymbolCode = 8000; }
   else if( Symbol() == "EURGBP" || Symbol() == "EURGBPm" ) { SymbolCode = 9000; }
   else if( Symbol() == "EURJPY" || Symbol() == "EURJPYm" ) { SymbolCode = 1000; }
   else if( Symbol() == "EURUSD" || Symbol() == "EURUSDm" ) { SymbolCode = 1100; }
   else if( Symbol() == "GBPCHF" || Symbol() == "GBPCHFm" ) { SymbolCode = 1200; }
   else if( Symbol() == "GBPJPY" || Symbol() == "GBPJPYm" ) { SymbolCode = 1300; }
   else if( Symbol() == "GBPUSD" || Symbol() == "GBPUSDm" ) { SymbolCode = 1400; }
   else if( Symbol() == "NZDJPY" || Symbol() == "NZDJPYm" ) { SymbolCode = 1500; }
   else if( Symbol() == "NZDUSD" || Symbol() == "NZDUSDm" ) { SymbolCode = 1600; }
   else if( Symbol() == "USDCAD" || Symbol() == "USDCADm" ) { SymbolCode = 1700; }
   else if( Symbol() == "USDCHF" || Symbol() == "USDCHFm" ) { SymbolCode = 1800; }
   else if( Symbol() == "USDJPY" || Symbol() == "USDJPYm" ) { SymbolCode = 1900; }
                     
   //---- Calculate MagicNumber
   MagicNumber = ExpertID+SymbolCode;
   return(MagicNumber);
}

double DefineLotSize() {
   double lotMM = MathCeil(AccountFreeMargin() *  Risk / 1000) / 100;
   if(AccountIsMicro==false) { //normal account
      if (lotMM < 0.1) lotMM = Lots;
      if ((lotMM > 0.5) && (lotMM < 1)) lotMM=0.5;
      if (lotMM > 1.0) lotMM = MathCeil(lotMM);
      if  (lotMM > 100) lotMM = 100;
   } else { //micro account
      if (lotMM < 0.01) lotMM = Lots;
      if (lotMM > 1.0) lotMM = MathCeil(lotMM);
      if  (lotMM > 100) lotMM = 100;
   }
   return (lotMM);
}
//+------------------------------------------------------------------+
//| Calculate concurrent Long position                               |
//+------------------------------------------------------------------+
int CountLongs(int MagicNumber)
{
 int count=0;
 int trade;
 int trades=OrdersTotal();
 for(trade=0;trade<trades;trade++)
 {
  OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
  
  if( OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber )
   continue;
   
  if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)
   count++;
 }//for
 return(count);
}
//+------------------------------------------------------------------+
//| Calculate concurrent short position                              |
//+------------------------------------------------------------------+
int CountShorts(int MagicNumber)
{
 int count=0;
 int trade;
 int trades=OrdersTotal();
 for(trade=0;trade<trades;trade++)
 {
  OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
  
  if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber )
   continue;
   
  if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
  count++;
 }//for
 return(count);
}
//+------------------------------------------------------------------+
//| Close Long Position                                              |
//+------------------------------------------------------------------+
void CloseLongs(int MagicNumber)
{
 int i = OrdersTotal();
 
 while( CountLongs(MagicNumber) != 0 && i >= 0 )
 {  
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   
   if( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber )
   {
     i--;
     continue;
   }
   else if(OrderType()==OP_BUY || OrderType()== OP_BUYLIMIT || OrderType()==OP_BUYSTOP)
   {
     OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
     OrderDelete(OrderTicket());
     i--;
   }
 }
}
//+------------------------------------------------------------------+
//| Close Short Position                                             |
//+------------------------------------------------------------------+
void CloseShorts(int MagicNumber)
{
 int i = OrdersTotal();
 
 while( CountShorts(MagicNumber) != 0 && i >= 0 )
 {  
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   
   if( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
   {
     i--;
     continue;
   }
   else if(OrderType()== OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
  {
   OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
   OrderDelete(OrderTicket());
  }
 }
}



Sample





Analysis



Market Information Used:

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



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached

Checks for the total of open orders
It Closes Orders by itself

Other Features:

It issuies visual alerts to the screen

BackTest : EURUSD on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.21 Total Net Profit:-1779.55

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:133.54

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:2.86 Total Net Profit:50.69

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.28 Total Net Profit:-103.30

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:1.95 Total Net Profit:35.53

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.10 Total Net Profit:-892.17

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.09 Total Net Profit:-3538.42

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:0.00 Total Net Profit:60.80

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-04-16 Profit Factor:0.16 Total Net Profit:-54.04

BackTest : EURUSD on H1

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

Request Backtest for Ademola


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

Pair: Period: