//+------------------------------------------------------------------+ //| OpenTiks.mq4 | //| Copyright © 2008, ZerkMax | //| zma@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, ZerkMax" #property link "zma@mail.ru" extern string S1="---------------- General Settings"; extern int Shift1 = 0; extern int Shift2 = 1; extern int Shift3 = 2; extern int Shift4 = 3; extern int TrailingStop = 30; extern int StopLoss = 0; extern double Lots = 0.1; extern bool RiskManagement=false; //money management extern double RiskPercent=10; //risk in percentage extern int magicnumber = 777; extern bool PolLots = true; extern int MaxOrders = 1; extern string S2="---------------- Time Filter"; extern bool TradeOnSunday=true;//|---------------time filter on sunday extern bool MondayToThursdayTimeFilter=false;//|-time filter the week extern int MondayToThursdayStartHour=0;//|-------start hour time filter the week extern int MondayToThursdayEndHour=24;//|--------end hour time filter the week extern bool FridayTimeFilter=false;//|-----------time filter on friday extern int FridayStartHour=0;//|-----------------start hour time filter on friday extern int FridayEndHour=21;//|------------------end hour time filter on friday int prevtime; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if((TradeOnSunday==false&&DayOfWeek()==0)||(MondayToThursdayTimeFilter&&DayOfWeek()>=1&&DayOfWeek()<=4&&!(Hour()>=MondayToThursdayStartHour&&Hour()<=MondayToThursdayEndHour))||(FridayTimeFilter&&DayOfWeek()==5&&!(Hour()>=FridayStartHour&&Hour()<=FridayEndHour))) { CloseBuyOrders(magicnumber); CloseSellOrders(magicnumber); return(0); } //---- //risk management bool MM=RiskManagement; if(MM){if(RiskPercent<0.1||RiskPercent>100){Comment("Invalid Risk Value.");return(0);} else{Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*RiskPercent*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)* MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}} if(MM==false){Lots=Lots;} int i=0; int total = OrdersTotal(); for(i = 0; i <= total; i++) { if(TrailingStop>0) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == magicnumber) { TrailingStairs(OrderTicket(),TrailingStop); } } } bool BuyOp=false; bool SellOp=false; if (High[Shift1]>High[Shift2]&&High[Shift2]>High[Shift3]&&High[Shift3]>High[Shift4]&&Open[Shift1]>Open[Shift2]&&Open[Shift2]>Open[Shift3]&&Open[Shift3]>Open[Shift4]) BuyOp=true; if (High[Shift1](Point*trldistance)) { if(OrderStopLoss()MarketInfo(Symbol(), MODE_MINLOT)) { OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green); } else { OrderClose(ticket,OrderLots(),Ask,3,Green); } } } } else { if((OrderOpenPrice()-Ask)>(Point*trldistance)) { if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red); if (PolLots) if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT)) { OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green); } else { OrderClose(ticket,OrderLots(),Bid,3,Green); } } } } } //|---------close buy orders int CloseBuyOrders(int Magic) { int result,total=OrdersTotal(); for (int cnt=total-1;cnt>=0;cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3); switch(OrderType()) { case OP_BUYLIMIT: case OP_BUYSTOP: result=OrderDelete(OrderTicket()); } } } } return(0); } //|---------close sell orders int CloseSellOrders(int Magic) { int result,total=OrdersTotal(); for(int cnt=total-1;cnt>=0;cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,3); switch(OrderType()) { case OP_SELLLIMIT: case OP_SELLSTOP: result=OrderDelete(OrderTicket()); } } } } return(0); }