Belkhayate Expert Advisor v1





//+------------------------------------------------------------------+
//|                                    Belkhayate Expert Advisor.mq4 |
//|                                 based on the oan4fx's indicators |
//|                              Copyright © 2008, TradingSytemForex |
//|                                http://www.tradingsystemforex.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2008, TradingSytemForex"
#property link "http://www.tradingsystemforex.com"

#define OrSt "Belkhayate Expert Advisor"

extern string COG="---------------- Center Of Gravity";
extern double bars_back=120;
extern double m=4;
extern double kstd1=1.4;
extern double kstd2=2.4;
extern double kstd3=3.4;
extern string CAN="---------------- Center Of Gravity";
extern int Length=3;
extern int H_period=3;
extern int L_period=3;
extern int C_period=3;
extern string LM="---------------- Lot Management";
extern double Lots=0.1;
extern bool MM=false; //money management
extern double Risk=10; //risk in percentage
extern string TSTB="---------------- TP SL TS BE";
bool RealSL_Enabled=false;
int RealSL=5; //stop loss under 15 pîps
bool RealTP_Enabled=false;
int RealTP=10; //take profit under 10 pîps
extern int SL=0; //stop loss
extern int TP=0; //take profit
extern int TS=0; //trailing stop
extern int TS_Step=1; //trailing stop step
extern int BE=0; //breakeven
extern string EXT="---------------- Extras";
extern bool Reverse=false;
extern bool Add_Positions=false; //positions cumulated
extern int MaxOrders=100; //maximum number of orders
extern int Magic=0;

int Slip=3;static int TL=0;double MML=0;

// expert start function
int start(){int j=0,limit=1;double BV=0,SV=0;BV=0;SV=0;double COG0,COG1,COG2,COG3,COG4,COG5,COG6,CAN1;
if(CntO(OP_BUY,Magic)>0)TL=1;if(CntO(OP_SELL,Magic)>0)TL=-1;for(int i=1;i<=limit;i++){

COG0=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd1,1102,0,i);
COG1=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd1,1102,1,i);
COG2=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd1,1102,2,i);
COG3=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd2,1102,1,i);
COG4=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd2,1102,2,i);
COG5=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd3,1102,1,i);
COG6=iCustom(NULL,0,"Center_Of_Gravity",bars_back,m,0,kstd3,1102,2,i);
CAN1=iCustom(NULL,0,"CandleAverage_v3",Length,H_period,L_period,C_period,0,i);

if((Bid<COG2 && CAN1<0)||(Bid<COG4 && CAN1<0)||(Bid<COG6 && CAN1<0)){if(Reverse)SV=1;else BV=1;break;}
if((Ask>COG1 && CAN1>0)||(Ask>COG3 && CAN1>0)||(Ask>COG5 && CAN1>0)){if(Reverse)BV=1;else SV=1;break;}}

// expert money management
if(MM){if(Risk<0.1||Risk>100){Comment("Invalid Risk Value.");return(0);}
else{MML=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}}
if(MM==false){MML=Lots;}

// expert init positions
int cnt=0,OP=0,OS=0,OB=0,CS=0,CB=0;OP=0;for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if((OrderType()==OP_SELL||OrderType()==OP_BUY)&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0))OP=OP+1;}
if(OP>=1){OS=0; OB=0;}OB=0;OS=0;CB=0;CS=0;

// expert conditions to open position
if(SV>0){OS=1;OB=0;}if(BV>0){OB=1;OS=0;}

// expert conditions to close position
if((SV>0)||(Ask>COG0)||(RealSL_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled&&(Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;}
if((BV>0)||(Bid<COG0)||(RealSL_Enabled&&(Ask-OrderOpenPrice())/Point>=RealSL)||(RealTP_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealTP)){CS=1;}
for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0)){if(CB==1){OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Red);return(0);}}
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0)){
if(CS==1){OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);return(0);}}}double SLI=0,TPI=0;int TK=0;

// expert open position value
if((AddP()&&Add_Positions&&OP<=MaxOrders)||(OP==0&&!Add_Positions)){
if(OS==1){if(TP==0)TPI=0;else TPI=Bid-TP*Point;if(SL==0)SLI=0;else SLI=Bid+SL*Point;TK=OrderSend(Symbol(),OP_SELL,MML,Bid,Slip,SLI,TPI,OrSt,Magic,0,Red);OS=0;return(0);}	
if(OB==1){if(TP==0)TPI=0;else TPI=Ask+TP*Point;if(SL==0)SLI=0;else SLI=Ask-SL*Point;TK=OrderSend(Symbol(),OP_BUY,MML,Ask,Slip,SLI,TPI,OrSt,Magic,0,Lime);OB=0; return(0);}}
for(j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0)){TrP();}}}return(0);}

// expert number of orders
int CntO(int Type,int Magic){int _CntO;_CntO=0;
for(int j=0;j<OrdersTotal();j++){OrderSelect(j,SELECT_BY_POS,MODE_TRADES);if(OrderSymbol()==Symbol()){if((OrderType()==Type&&(OrderMagicNumber()==Magic)||Magic==0))_CntO++;}}return(_CntO);}

// expert trailing stop
void TrP(){double pb,pa,pp;pp=MarketInfo(OrderSymbol(),MODE_POINT);if(OrderType()==OP_BUY){pb=MarketInfo(OrderSymbol(),MODE_BID);

//expert breakeven
if(BE>0){if((pb-OrderOpenPrice())>BE*pp){if((OrderStopLoss()-OrderOpenPrice())<0){ModSL(OrderOpenPrice()+0*pp);}}}
if(TS>0){if((pb-OrderOpenPrice())>TS*pp){if(OrderStopLoss()<pb-(TS+TS_Step-1)*pp){ModSL(pb-TS*pp);return;}}}}
if(OrderType()==OP_SELL){pa=MarketInfo(OrderSymbol(),MODE_ASK);if(BE>0){if((OrderOpenPrice()-pa)>BE*pp){if((OrderOpenPrice()-OrderStopLoss())<0){ModSL(OrderOpenPrice()-0*pp);}}}
if(TS>0){if(OrderOpenPrice()-pa>TS*pp){if(OrderStopLoss()>pa+(TS+TS_Step-1)*pp||OrderStopLoss()==0){ModSL(pa+TS*pp);return;}}}}}

//expert stoploss
void ModSL(double ldSL){bool fm;fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);}

//expert add positions function
bool AddP(){int _num=0; int _ot=0;
for (int j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol()&&OrderType()<3&&((OrderMagicNumber()==Magic)||Magic==0)){	
_num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();}}if(_num==0) return(true);if(_num>0 && ((Time[0]-_ot))>0) return(true);else return(false);}



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:




Custom Indicators Used:
Center_of_Gravity
CandleAverage_v3

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

From 2009-08-01 to 2009-10-01 Profit Factor:2.24 Total Net Profit:731.12

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.77 Total Net Profit:-180.53

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:1.77 Total Net Profit:355.73

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.99 Total Net Profit:-3.16

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:1.33 Total Net Profit:304.37

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:1.72 Total Net Profit:332.48

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:1.90 Total Net Profit:934.02

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-04-16 Profit Factor:0.29 Total Net Profit:-3821.88

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:1.01 Total Net Profit:45.57

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.96 Total Net Profit:-13.78

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.75 Total Net Profit:-106.38

Request Backtest for Belkhayate Expert Advisor v1


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

Pair: Period: