//+------------------------------------------------------------------+ //| Hans123MV22 | //| Copyright ?2006, Milan Volf | //| | //+------------------------------------------------------------------+ #property copyright "Copyright ?2006, Milan Volf" //---- input parameters extern int Start1=10; //begin of the first session; adjust by your broker extern int Start2=14; //begin of the second session extern int EOD=24; // for closing orders at end of day extern int FridayClosing=23; //broker friday closing time extern bool FirstSessionOnly=0; //if it equals 1, it trades the first range only (for testing) extern int Length=4; //length of range for determining high/low extern int Pips=5; //trigger above/bellow range extern int StopLoss=50; extern int BreakEven=30; extern int TrailingStop=0; //if equals 0, it uses breakeven extern int TakeProfit=80; extern double Lots=1; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int i,Ticket,MN; //Normalize times if(EOD==24) EOD=0; if(FridayClosing==0) FridayClosing=24; //Setup comment string Text="Hans123"+Symbol(); //Setup orders if(Hour()==Start1 && Minute()<10){ MN=1; SetOrders(Text,MN); } if(Hour()==Start2 && Minute()<10 && FirstSessionOnly==0){ MN=2; SetOrders(Text,MN); } //Manage opened orders for (i=0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderComment()==Text){ //close open positions at EOD if(Hour()==EOD || (DayOfWeek()>=5 && Hour()==FridayClosing-1 && Minute()>=50)){ switch (OrderType()){ case OP_BUY: OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); break; case OP_SELL: OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); break; default: OrderDelete(OrderTicket()); break; } Sleep(10000); } else { //move at BE if profit>BE if(TrailingStop==0){ if(OrderType()==OP_BUY){ if(High[0]-OrderOpenPrice()>=BreakEven*Point && OrderStopLoss()<OrderOpenPrice()){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green); Sleep(10000); } } if(OrderType()==OP_SELL){ if(OrderOpenPrice()-Low[0]>=BreakEven*Point && OrderStopLoss()>OrderOpenPrice()){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green); Sleep(10000); } } } //use trailing stop else { if(OrderType()==OP_BUY){ if(High[0]-OrderStopLoss()>TrailingStop*Point){ OrderModify(OrderTicket(),OrderOpenPrice(),High[0]-TrailingStop*Point,OrderTakeProfit(),0,Green); Sleep(10000); } } if(OrderType()==OP_SELL){ if(OrderStopLoss()-Low[0]>TrailingStop*Point){ OrderModify(OrderTicket(),OrderOpenPrice(),Low[0]+TrailingStop*Point,OrderTakeProfit(),0,Green); Sleep(10000); } } } } } } return(0); } //+------------------------------------------------------------------+ void SetOrders(string Text,int MN){ int i,Ticket,Bought,Sold; double EntryLong,EntryShort,SLLong,SLShort,TPLong,TPShort; //Determine range EntryLong =iHigh(NULL,60,Highest(NULL,60,MODE_HIGH,Length,1))+(Pips/*+MarketInfo(Symbol(),MODE_SPREAD)*/)*Point; EntryShort =iLow (NULL,60,Lowest (NULL,60,MODE_LOW, Length,1))-Pips*Point; SLLong =MathMax(EntryLong-StopLoss*Point,EntryShort); SLShort =MathMin(EntryShort+StopLoss*Point,EntryLong); TPLong =EntryLong+TakeProfit*Point; TPShort =EntryShort-TakeProfit*Point; //Send orders for (i=0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderComment()==Text && OrderMagicNumber()==MN){ if(OrderType()==OP_BUYSTOP || OrderType()==OP_BUY) Bought++; if(OrderType()==OP_SELLSTOP || OrderType()==OP_SELL) Sold++; } } if(Bought==0){ //no buy order Ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,EntryLong,3,SLLong,TPLong,Text,MN,0,Blue); if(Ticket<0 && High[0]>=EntryLong) Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SLLong,TPLong,Text,MN,0,Blue); Sleep(10000); } if(Sold==0){ //no sell order Ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,EntryShort,3,SLShort,TPShort,Text,MN,0,Magenta); if(Ticket<0 && Low[0]<=EntryShort) Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SLShort,TPShort,Text,MN,0,Magenta); Sleep(10000); } //Check orders for (i=0;i<OrdersTotal();i++){ OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderComment()==Text && OrderMagicNumber()==MN){ if(OrderType()==OP_BUYSTOP && (MathAbs(OrderOpenPrice()-EntryLong)>Point || MathAbs(OrderStopLoss()-SLLong)>Point || MathAbs(OrderTakeProfit()-TPLong)>Point)) OrderModify(OrderTicket(),EntryLong,SLLong,TPLong,0,Blue); if(OrderType()==OP_SELLSTOP && (MathAbs(OrderOpenPrice()-EntryShort)>Point || MathAbs(OrderStopLoss()-SLShort)>Point || MathAbs(OrderTakeProfit()-TPShort)>Point)) OrderModify(OrderTicket(),EntryShort,SLShort,TPShort,0,Magenta); } } } //+------------------------------------------------------------------+ //| Hans Breakout.mq4 | //| Copyright ?2006 Scorpion@fxfisherman.com | //+------------------------------------------------------------------+ #property copyright "WWW.FXFISH.com" #property link "http://www." #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Red #property indicator_color4 Blue extern int Breakout_Pips=5; extern int Exit_Hour = 23; extern int From_Hour_1 = 6; extern int From_Minute_1 = 0; extern int To_Hour_1 = 9; extern int To_Minute_1 = 59; extern int From_Hour_2 = 10; extern int From_Minute_2 = 0; extern int To_Hour_2 = 13; extern int To_Minute_2 = 59; extern int Bars_Count= 10000; //---- buffers double v1[]; double v2[]; double v3[]; double v4[]; int init() { IndicatorBuffers(4); SetIndexArrow(0, 159); SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,Red); SetIndexDrawBegin(0,-1); SetIndexBuffer(0, v1); SetIndexLabel(0,"High1"); SetIndexArrow(1, 159); SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1,Blue); SetIndexDrawBegin(1,-1); SetIndexBuffer(1, v2); SetIndexLabel(1,"Low1"); SetIndexArrow(2, 159); SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,1,Red); SetIndexDrawBegin(2,-1); SetIndexBuffer(2, v3); SetIndexLabel(2,"High2"); SetIndexArrow(3, 159); SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,1,Blue); SetIndexDrawBegin(3,-1); SetIndexBuffer(3, v4); SetIndexLabel(3,"Low2"); watermark(); return(0); } int start() { int i; int shift; double price; date calculated1, calculated2; double pipsBreakout = Breakout_Pips * Point; i = Bars_Count; while(i>=0) { // High/Low 1 date today = StripTime(Time); int nowMins = TimeHour(Time) * 60 + TimeMinute(Time); if (calculated1 < today && nowMins > (To_Hour_1 * 60) + To_Minute_1) { calculated1 = today; double highest1 = High[GetHighest(Symbol(), Period(), MODE_HIGH, Time, From_Hour_1, From_Minute_1, To_Hour_1, To_Minute_1)]; double lowest1 = Low[GetLowest(Symbol(), Period(), MODE_LOW, Time, From_Hour_1, From_Minute_1, To_Hour_1, To_Minute_1)]; } if (calculated1 == today && nowMins < Exit_Hour * 60) { v1 = highest1 + pipsBreakout; v2 = lowest1 - pipsBreakout; } // High/Low 2 if (calculated2 < today && nowMins > (To_Hour_2 * 60) + To_Minute_2) { calculated2 = today; double highest2 = High[GetHighest(Symbol(), Period(), MODE_HIGH, Time, From_Hour_2, From_Minute_2, To_Hour_2, To_Minute_2)]; double lowest2 = Low[GetLowest(Symbol(), Period(), MODE_LOW, Time, From_Hour_2, From_Minute_2, To_Hour_2, To_Minute_2)]; } if (calculated2 == today && nowMins < Exit_Hour * 60) { v3 = highest2 + pipsBreakout; v4 = lowest2 - pipsBreakout; } i--; } return(0); } //+------------------------------------------------------------------+ date StripTime(datetime dt) { return (dt - (TimeHour(dt)*3600) - (TimeMinute(dt)*60) - TimeSeconds(dt)); } //+------------------------------------------------------------------+ //| Get highest/lowest bar between a time period. | //+------------------------------------------------------------------+ int GetHighest(string symbol, int timeframe, int price_mode, datetime date, int from_hour, int from_minute, int to_hour, int to_minute) { date = StripTime(date); datetime from_time = date + (from_hour * 3600) + (from_minute * 60); datetime to_time = date + (to_hour * 3600) + (to_minute * 60); int from_bar = iBarShift(symbol, timeframe, from_time, false); int to_bar = iBarShift(symbol, timeframe, to_time, false); int hh = Highest(symbol, timeframe, price_mode, from_bar - to_bar + 1, to_bar); return(hh); } int GetLowest(string symbol, int timeframe, int price_mode, datetime date, int from_hour, int from_minute, int to_hour, int to_minute) { date = StripTime(date); datetime from_time = date + (from_hour * 3600) + (from_minute * 60); datetime to_time = date + (to_hour * 3600) + (to_minute * 60); int from_bar = iBarShift(symbol, timeframe, from_time, false); int to_bar = iBarShift(symbol, timeframe, to_time, false); int ll = Lowest(symbol, timeframe, price_mode, from_bar - to_bar + 1, to_bar); return(ll); } void watermark() { ObjectCreate("fxfisherman", OBJ_LABEL, 0, 0, 0); ObjectSetText("fxfisherman", "WWW.FXFISH.COM", 11, "Lucida Handwriting", Snow); ObjectSet("fxfisherman", OBJPROP_CORNER, 2); ObjectSet("fxfisherman", OBJPROP_XDISTANCE, 5); ObjectSet("fxfisherman", OBJPROP_YDISTANCE, 10); return(0); } |
|