//+------------------------------------------------------------------+ //| noah10pips2006.mq4 | //| Copyright © 2005, Nick Bilak, beluck[AT]gmail.com | //| http://metatrader.50webs.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Nick Bilak" #property link "http://metatrader.50webs.com/" #include extern int MAGICNUM=1; extern double Lots = 0.1; extern int StopLoss = 55; extern int TakeProfit = 100; extern int TrailingStop = 0; extern int slippage = 3; extern double MaximumRisk = 7.0; extern double MaxLot = 100.0; extern double MinLot = 1.0; extern bool FixedLot = true; extern int TimeZoneOfData=0; // NY 7,15; extern int StartHour=2; // 9:00 PM EST extern int StartMinute=0; extern int EndHour=23; extern int EndMinute=0; extern int FridayEndHour=21; extern int SecureProfit=10; extern int TrailSecureProfit=16; extern int TradeFriday=1; // 0- dont open trades on friday, 1- Trade on friday extern int DontReverse=1; extern int StartYear=2005; extern int StartMonth=6; extern int TradesSet=2; extern int TypeSet=0; // 0 = NONE, 1 = SELL, 2 = BUY extern int ReverseSet=0; // 0=False, 1=True int Today, RefDate, LastBarOfDay, FirstBarOfDay, Loop; double pre_lo, pre_hi, myC, myO, lotsi; int Cnt; int OpenTrades, FilledOrders; double BuyPrice, SellPrice; int TimetoOpen, TimetoClose, tmp, i; int Trades=2; string Type="NONE"; bool Reverse=False; int mode,tr; int myEndHour, myFridayEndHour, myStartHour; bool FirstTime=True; double range; double hi_pass; double lo_pass; double MP; double er_hi; double er_lo; double erange,erange2; double r3; double diffs,diffb; int res; bool bres; int start() { if (TimeYear(Time[0])=RefDate) ) { Cnt++; } LastBarOfDay=Cnt; if (DayOfWeek()==1) RefDate=Today-86400*3; else RefDate=Today-86400; while ( Cnt<(Bars-1) && (Time[Cnt]-TimeZoneOfData*3600>=RefDate) ) { Cnt++; } FirstBarOfDay=Cnt-1; } pre_hi=High[Highest(NULL,0,MODE_HIGH,FirstBarOfDay-LastBarOfDay+1,LastBarOfDay)]; pre_lo=Low[Lowest(NULL,0,MODE_LOW,FirstBarOfDay-LastBarOfDay+1,LastBarOfDay)]; myC=Close[LastBarOfDay]; //pre_hi=High[lookback]; //pre_lo=Low[lookback]; // *** calculate all the 10pip numbers *** hi_pass = pre_hi + 0.002 ; lo_pass = pre_lo - 0.002 ; MP = (((pre_hi - pre_lo) / 2.0) + pre_lo); MP = NormalizeDouble(MP,Digits); hi_pass = NormalizeDouble(hi_pass,Digits); lo_pass = NormalizeDouble(lo_pass,Digits); erange = (pre_hi - pre_lo); //erange2= (pre_hi - pre_lo)*10000; // *** which entry range amount to use? *** // *** less than 160 range *** if (erange <= 0.016) r3 = 0.004; else r3 = erange * 0.25; // *** set entry range *** er_hi = (pre_hi - r3); er_lo = (pre_lo + r3); erange2= (er_hi - er_lo)*10000.0; // *** print the numbers on the chart for reference *** //Comment("BUY @ ", er_hi,"\nSELL @ ", er_lo); // *** draw the lines on the chart *** // *** special case for ER if range < 80 *** // *** Prints an advisory message on the screen *** if (erange <= 0.008) { ObjectDelete("LT80_txt"); ObjectCreate("LT80_txt",OBJ_TEXT,0,Time[35],MP); ObjectSetText("LT80_txt","RANGE<80 ",10,"Arial",White); //SetObjectText("LT80_txt","RANGE<80 ","Arial",10,Black); //MoveObject("LT80_txt",OBJ_TEXT,time[35],mp,time[35],mp,Black); } // *** Draw lines *** ObjectDelete("MP"); ObjectCreate("MP", OBJ_HLINE,0,Time[25],MP); ObjectSetText("MP","MP Range ",8,"Arial",White); ObjectSet("MP",OBJPROP_COLOR,Blue); ObjectSet("MP",OBJPROP_STYLE,STYLE_DOT); //MoveObject("MP",OBJ_HLINE,time[25],mp,Time[25],mp,Blue,1,STYLE_DOT); //SetObjectText("MP_txt","MP Range ","Arial",8,Black); //MoveObject("MP_txt",OBJ_TEXT,time[25],mp,time[25],mp,Black); ObjectDelete("ER_Hi"); ObjectCreate("ER_Hi", OBJ_HLINE,0,Time[25],er_hi); ObjectSetText("ER_Hi","Below Here BUYZONE ->MP ",8,"Arial",White); ObjectSet("ER_Hi",OBJPROP_COLOR,Green); ObjectSet("ER_Hi",OBJPROP_STYLE,STYLE_DASH); //MoveObject("ER_Hi",OBJ_HLINE,time[25],er_hi,Time[25],er_hi,Green,1,STYLE_DASH); //SetObjectText("ER_Hi_txt","Below Here BUYZONE ->MP ","Arial",8,Black); //MoveObject("ER_Hi_txt",OBJ_TEXT,time[25],er_hi,time[25],er_hi,Black); ObjectDelete("ER_Lo"); ObjectCreate("ER_Lo", OBJ_HLINE,0,Time[25],er_lo); ObjectSetText("ER_Lo","Above Here SELLZONE ->MP ",8,"Arial",White); ObjectSet("ER_Lo",OBJPROP_COLOR,Red); ObjectSet("ER_Lo",OBJPROP_STYLE,STYLE_DASH); //MoveObject("ER_Lo",OBJ_HLINE,time[25],er_lo,Time[25],er_lo,red,1,STYLE_DASH); //SetObjectText("ER_Lo_txt","Above Here SELLZONE ->MP ","Arial",8,Black); //MoveObject("ER_Lo_txt",OBJ_TEXT,time[25],er_lo,time[25],er_lo,Black); ObjectDelete("Hi_Pass"); ObjectCreate("Hi_Pass", OBJ_HLINE,0,Time[25],hi_pass); ObjectSetText("Hi_Pass","HiPASS ",8,"Arial",White); ObjectSet("Hi_Pass",OBJPROP_COLOR,Green); ObjectSet("Hi_Pass",OBJPROP_STYLE,STYLE_DOT); //MoveObject("Hi_Pass",OBJ_HLINE,time[25],hi_pass,time[25],hi_pass,Green,1,STYLE_DOT); //SetObjectText("Hi_Pass_txt","HiPASS ","Arial",8,Black); //MoveObject("Hi_Pass_txt",OBJ_TEXT,time[25],hi_Pass,time[25],hi_pass,Black); ObjectDelete("Lo_Pass"); ObjectCreate("Lo_Pass", OBJ_HLINE,0,Time[25],lo_pass); ObjectSetText("Lo_Pass","LoPASS ",8,"Arial",White); ObjectSet("Lo_Pass",OBJPROP_COLOR,Red); ObjectSet("Lo_Pass",OBJPROP_STYLE,STYLE_DOT); //MoveObject("Lo_Pass",OBJ_HLINE,time[25],lo_pass,Time[25],lo_pass,red,1,STYLE_DOT); //SetObjectText("Lo_Pass_txt","LoPASS ","Arial",8,Black); //MoveObject("Lo_Pass_txt",OBJ_TEXT,time[25],lo_pass,time[25],lo_pass,Black); ObjectDelete("Pre_Hi"); ObjectCreate("Pre_Hi", OBJ_HLINE,0,Time[25],pre_hi); ObjectSetText("Pre_Hi","PreHI ",8,"Arial",White); ObjectSet("Pre_Hi",OBJPROP_COLOR,Blue); ObjectSet("Pre_Hi",OBJPROP_STYLE,STYLE_DASH); //MoveObject("Pre_Hi",OBJ_HLINE,time[25],pre_hi,Time[25],pre_hi,Blue,1,STYLE_DASH); //SetObjectText("Pre_Hi_txt","PreHI ","Arial",8,Black); //MoveObject("Pre_Hi_txt",OBJ_TEXT,time[25],pre_hi,time[25],pre_hi,Black); ObjectDelete("Pre_Lo"); ObjectCreate("Pre_Lo", OBJ_HLINE,0,Time[25],pre_lo); ObjectSetText("Pre_Lo","PreLO ",8,"Arial",White); ObjectSet("Pre_Lo",OBJPROP_COLOR,Blue); ObjectSet("Pre_Lo",OBJPROP_STYLE,STYLE_DASH); //MoveObject("Pre_Lo",OBJ_HLINE,time[25],pre_lo,Time[25],pre_lo,Blue,1,STYLE_DASH); //SetObjectText("Pre_Lo_txt","PreLO ","Arial",8,Black); //MoveObject("Pre_Lo_txt",OBJ_TEXT,time[25],pre_lo,time[25],pre_lo,Black); if ( (Ask > MP) && (Ask < er_hi) ) { Comment("Entry Price In BUYZONE"); } else { if ( (Bid < MP) && (Bid > er_lo) ) { Comment("Entry Price In SELLZONE"); } } OpenTrades=0; for (Cnt=0; Cnt23) i=0; myEndHour=i; i++; Cnt++; } // Friday end of day offset //cnt=0; //i=TimeZoneofData; //While (cnt<=FridayEndHour) //{ // if (i>23) then i=0; // myFridayEndHour=i; // i++; // cnt++; //}; myFridayEndHour=FridayEndHour; if ( (Hour()==myEndHour && Minute()>=EndMinute) || (DayOfWeek()==6 && Hour()==myFridayEndHour && Minute()>=EndMinute) ) { //cnt=0;While cnt<=10000 { cnt++; }; for (Cnt=OrdersTotal()-1; Cnt>=0; Cnt--) { if (!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES)) continue; if ( OrderSymbol()==Symbol() ) { mode = OrderType(); Trades=2; Type="NONE"; Reverse=False; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } if (mode == OP_BUYSTOP) bres=OrderDelete(OrderTicket()); if (mode == OP_SELLSTOP) bres=OrderDelete(OrderTicket()); if (mode == OP_BUYLIMIT) bres=OrderDelete(OrderTicket()); if (mode == OP_SELLLIMIT) bres=OrderDelete(OrderTicket()); if (mode == OP_BUY) bres=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); //CloseOrder(ord(cnt,VAL_TICKET),ord(cnt,VAL_LOTS),bid,Slippage,Blue); if (mode == OP_SELL) bres=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); //CloseOrder(ord(cnt,VAL_TICKET),ord(cnt,VAL_LOTS),ask,Slippage,red); if (!bres) Print("Error closing or deleting order : ",ErrorDescription(GetLastError())); } } } // We get the StartHour offset Cnt=0; i=TimeZoneOfData; while (Cnt<=StartHour) { if (i>23) i=0; myStartHour=i; i++; Cnt++; } if (TradeFriday ==1 || DayOfWeek()!=5) { if (Hour()==myStartHour && Minute()>=StartMinute) { if (OpenTrades<1 && erange2 > 40) { if ( (Close[1] > MP) && (Close[1] < hi_pass) ) { Trades=1; Type="NONE"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_SELLSTOP,lotsi,MP,slippage,MP+StopLoss*Point,MP-TakeProfit*Point,"N10",MAGICNUM,0,Red); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); //SetOrder(OP_SELLSTOP,Lotsi,MP,Slippage,MP+StopLoss*Point,MP-TakeProfit*Point,RED); //return; } if ( (Close[1] > lo_pass) && (Close[1] < MP) ) { Trades=1; Type="NONE"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_BUYSTOP,lotsi,MP,slippage,MP-StopLoss*Point,MP+TakeProfit*Point,"N10",MAGICNUM,0,Blue); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); //SetOrder(OP_BUYSTOP,Lotsi,MP,Slippage,MP-StopLoss*Point,MP+TakeProfit*Point,BLUE); //return; } return; } } } // if we only have one Stop order we place the another one to always have ready both sides if (OpenTrades==1 && Trades>=1) { for (Cnt=OrdersTotal()-1; Cnt>=0; Cnt--) { if (!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES)) continue; if ( OrderSymbol()==Symbol() ) { if (OrderType()==OP_SELLSTOP) { if ( (Close[1] > MP) && (Close[1] < hi_pass) ) { Trades=1; Type="NONE"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_BUYSTOP,lotsi,hi_pass,slippage,hi_pass-StopLoss*Point,hi_pass+TakeProfit*Point,"N10",MAGICNUM,0,Blue); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); //SetOrder(OP_BUYSTOP,Lotsi,HI_PASS,Slippage,HI_PASS-StopLoss*Point,HI_PASS+TakeProfit*Point,blue); return; } } if (OrderType()==OP_BUYSTOP) { if ( (Close[1] > lo_pass) && (Close[1] < MP) ) { Trades=1; Type="NONE"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_SELLSTOP,lotsi,lo_pass,slippage,lo_pass+StopLoss*Point,lo_pass-TakeProfit*Point,"N10",MAGICNUM,0,Red); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); //SetOrder(OP_SELLSTOP,Lotsi,LO_PASS,Slippage,LO_PASS+StopLoss*Point,LO_PASS-TakeProfit*Point,Red); return; } } } } } if (DontReverse==1) Reverse=False; // if one order was closed we reverse (only once in a day) if ( OpenTrades<1 && Trades==1 && Reverse ) { if (Type=="BUY") { Trades=0; Type="NONE"; Reverse=False; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_BUY,lotsi,Ask,slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"N10",MAGICNUM,0,Blue); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); return; //SetOrder(OP_BUY,Lotsi,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,Blue); } if (Type=="SELL") { Trades=0; Type="NONE"; Reverse=False; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } res=OrderSend(Symbol(),OP_SELL,lotsi,Bid,slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"N10",MAGICNUM,0,Red); if (res<=0) Print("Error opening order : ",ErrorDescription(GetLastError())); return; //SetOrder(OP_SELL,Lotsi,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,Red); } } // if we have opened positions we take care of them for (Cnt=OrdersTotal()-1; Cnt>=0; Cnt--) { if (!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES)) continue; if ( OrderSymbol()==Symbol() ) { if (OrderType() == OP_BUY) { for (i=OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if ( OrderSymbol()==Symbol() ) { if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP) { Trades=1; Type="SELL"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } bres=OrderDelete(OrderTicket()); if (!bres) Print("Error deleting order : ",ErrorDescription(GetLastError())); //return; } } } if (!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES)) continue; //We secure SecureProfit (10) pips after TrailSecureProfit (16) pips if ( OrderStopLoss()<=OrderOpenPrice()+SecureProfit*Point && Bid-OrderOpenPrice()>=TrailSecureProfit*Point ) { tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+SecureProfit*Point,0,0,DeepSkyBlue); //ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE),((Ord(cnt,VAL_OPENPRICE))+SecureProfit*Point),0,DeepSkyBlue); Trades=0; Type="NONE"; Reverse=False; tmp=OrderOpenPrice()+SecureProfit*Point; Print("BUY Stoploss trailed to Openprice+SecureProfit=",tmp); //Exit; } // Trailing stop after profit secured if (TrailingStop>0) { if ( OrderStopLoss()>=OrderOpenPrice()+SecureProfit*Point && OrderStopLoss()=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if ( OrderSymbol()==Symbol() ) { if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP) { Trades=1; Type="BUY"; Reverse=True; tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } bres=OrderDelete(OrderTicket()); if (!bres) Print("Error deleting order : ",ErrorDescription(GetLastError())); return; } } } if (!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES)) continue; //We secure SecureProfit (10) pips after TrailSecureProfit (16) pips if ( OrderStopLoss()>=OrderOpenPrice()-SecureProfit*Point && OrderOpenPrice()-Ask>=TrailSecureProfit*Point ) { tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-SecureProfit*Point,0,0,DeepSkyBlue); //ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE),((Ord(cnt,VAL_OPENPRICE))-SecureProfit*Point),0,DeepSkyBlue); Trades=0; Type="NONE"; Reverse=False; tmp=OrderOpenPrice()-SecureProfit*Point; Print("SELL Stoploss trailed to Openprice-SecureProfit=",tmp); //Exit; } if (TrailingStop>0) { if ( OrderStopLoss()<=OrderOpenPrice()-SecureProfit*Point && OrderStopLoss()>Ask+TrailingStop*Point ) { tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(5000); } OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,Purple); //ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),Ask+Point*(TrailingStop+SecureProfit),0,Purple); Trades=0; Type="NONE"; Reverse=False; //Exit; } } } } } //Alert(StrToTime("2005.11.30")); return; } double LotsRisk(int StopLoss) { double lot=Lots; //---- select lot size if (!FixedLot) lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk*0.001/StopLoss,1); else lot=Lots; //---- return lot size if(lotMaxLot) lot=MaxLot; return(lot); }