High Low v2 EA v2

Author: Copyright � 2008, TradingSytemForex
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
High Low v2 EA v2
//+------------------------------------------------------------------+
//|                                               High Low v2 EA.mq4 |
//|                              Copyright © 2008, TradingSytemForex |
//|                                http://www.tradingsystemforex.com |
//+------------------------------------------------------------------+

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

#define OrSt "High Low v2 EA"

extern string IS="---------------- Indicator Settings";
extern int barn=300;
extern int Length=6;
extern string LM="---------------- Lot Management";
extern double Lots=0.3;
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 bool UseAutoSL=false;
extern bool UseAutoTS=false;
extern int SL=0; //stop loss
extern int TP=0; //take profit
extern int TS=0; //trailing stop
int TS_Step=1; //trailing stop step
extern int Spread=10; //stop loss
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;
int zigzag=0;

// expert start function
int start(){int j=0,limit=1;double BV=0,SV=0;BV=0;SV=0;
  if(CntO(OP_BUY,Magic)>0) TL=1;if(CntO(OP_SELL,Magic)>0) TL=-1;for(int i=1;i<=limit;i++){
  
  zigzag=czig(0);

  if(zigzag>0){if(Reverse) SV=1; else BV=1; break;}
  if(zigzag<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) || (RealSL_Enabled && (OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled && (Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;}
if((BV>0) || (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 (UseAutoSL==false&&SL==0) SLI=0; else if (UseAutoSL==false&&SL>0) SLI=Bid+SL*Point;
else if(UseAutoSL){if(High[1]>High[2]&&High[1]>High[3])SLI=High[1]+Spread*Point;if(High[2]>High[1]&&High[2]>High[3])SLI=High[2]+Spread*Point;
if(High[3]>High[1]&&High[3]>High[2])SLI=High[3]+Spread*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(UseAutoSL==false&&SL==0) SLI=0; else if (UseAutoSL==false&&SL>0) SLI=Ask-SL*Point;
else if(UseAutoSL){if(Low[1]<Low[2]&&Low[1]<Low[3])SLI=Low[1]-Spread*Point;if(Low[2]<Low[1]&&Low[2]<Low[3])SLI=Low[2]-Spread*Point;
if(Low[3]<Low[1]&&Low[3]<Low[2])SLI=Low[3]-Spread*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();}}}

double SLI2=0;
if(UseAutoSL){if(High[1]>High[2]&&High[1]>High[3])SLI2=High[1]+Spread*Point;if(High[2]>High[1]&&High[2]>High[3])SLI2=High[2]+Spread*Point;
if(High[3]>High[1]&&High[3]>High[2])SLI2=High[3]+Spread*Point;}
double SLI3=0;
if(UseAutoSL){if(Low[1]<Low[2]&&Low[1]<Low[3])SLI3=Low[1]-Spread*Point;if(Low[2]<Low[1]&&Low[2]<Low[3])SLI3=Low[2]-Spread*Point;
if(Low[3]<Low[1]&&Low[3]<Low[2])SLI3=Low[3]-Spread*Point;}

if(UseAutoTS&&OrderType()==OP_BUY&&SLI3>OrderStopLoss())ModSL(SLI3);
if(UseAutoTS&&OrderType()==OP_SELL&&SLI2<OrderStopLoss())ModSL(SLI2);

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);}

//zigzag function
int czig(int timeframe) {int res=0;int j=0;int limit=500;double zig=0;
for (int i=0; i<=limit; i++) {double ZZ1=iCustom(NULL,timeframe,"High_Low v2",barn,Length,0,i+1);double ZZ2=iCustom(NULL,timeframe,"High_Low v2",barn,Length,0,i);if (ZZ2>0) {j=i; zig=ZZ2; break;}}
for (i=j+1; i<=limit; i++) {ZZ1=iCustom(NULL,timeframe,"High_Low v2",barn,Length,0,i+1);ZZ2=iCustom(NULL,timeframe,"High_Low v2",barn,Length,0,i);if (ZZ2>0) {break;}}
if (zig>ZZ2) {res=-1;}if (zig<ZZ2) {res=1;}return(res);}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---