//+------------------------------------------------------------------+ //| FXAnalyser_v6.mq4 | //| Copyright © 2006, Renato P. dos Santos | //| inspired on 4xtraderCY's and SchaunRSA's ideas | //| http://www.strategybuilderfx.com/forums/showthread.php?t=16086 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Renato P. dos Santos" #property link "http://www.strategybuilderfx.com/forums/showthread.php?t=16086" extern double Lots = 0; extern int StopLoss = 30; extern int TakeProfit = 200; extern int TrailingStop = 30; extern int PipsGoal = 200; extern int PipsLoss = 40; extern int TimeFrame = 5; extern double RiskLevel = 0.004; extern bool UseSound = True; color clOpenBuy = DodgerBlue; color clModiBuy = DodgerBlue; color clCloseBuy = DodgerBlue; color clOpenSell = Red; color clModiSell = Red; color clCloseSell = Red; color clDelete = White; string Name_Expert = "FXAnalyser_v6"; string NameFileSound = "expert.wav"; int MODE_DIV=0; int MODE_SLOPE=1; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { if (Period()!=TimeFrame) { Alert("This advisor works better on the M",TimeFrame," chart"); return(0); } if (!ExistPositions()) { if (DayOfWeek()==6 && Hour()>=20) { CloseAllTrades(); Comment("weekend"); return(0); }} if (!ExistPositions()) { if (Hour()<2 || Hour()>18) { CloseAllTrades(); Comment("bad hours."); return(0); }} // if (!(IsTesting() || IsDemo())) { if (GoalCheck()) { CloseAllTrades(); Comment("goal attained"); PlaySound("applause.wav"); return(0); }} if (!(IsTesting() || IsDemo())) { if (LossCheck()) { CloseAllTrades(); Comment("excessive loss!"); PlaySound("alert.wav"); return(0); }} if (Bars<100) { Comment("bars less than 100!"); PlaySound("alert.wav"); return(0); } if (StopLoss<5) { Alert("wrong StopLoss"); PlaySound("alert.wav"); return(0); } if (TakeProfit<2*StopLoss) { Alert("wrong TakeProfit!"); PlaySound("alert.wav"); return(0); } if (GetSizeLot()<0.1) { Alert("not enough margin!"); PlaySound("alert.wav"); return(0); } int EMADiv_OpenLevel,EMADiv_CloseLevel,EMASlope_OpenLevel,EMASlope_CloseLevel; if(StringSubstr(Symbol(),0,6)=="EURUSD") { EMADiv_OpenLevel=6; EMADiv_CloseLevel=1; EMASlope_OpenLevel=6; EMASlope_CloseLevel=2; } if(StringSubstr(Symbol(),0,6)=="USDJPY") { EMADiv_OpenLevel=6; EMADiv_CloseLevel=1; EMASlope_OpenLevel=6; EMASlope_CloseLevel=2; } if(StringSubstr(Symbol(),0,6)=="GBPUSD") { EMADiv_OpenLevel=7; EMADiv_CloseLevel=1; EMASlope_OpenLevel=7; EMASlope_CloseLevel=2; } if(StringSubstr(Symbol(),0,6)=="USDCHF") { EMADiv_OpenLevel=6; EMADiv_CloseLevel=1; EMASlope_OpenLevel=6; EMASlope_CloseLevel=2; } if(EMADiv_OpenLevel==0) { Comment("Incorrect pair!"); PlaySound("alert.wav"); return(0); } // Comment(EMADiv_OpenLevel,",",EMASlope_OpenLevel,",",EMASlope_CloseLevel); Comment("Lots = ",GetSizeLot()); if (!ExistPositions()) { if (BuyCondition(EMADiv_OpenLevel,EMASlope_OpenLevel)) { double BuyPrice=NormalizeDouble(0.8*High[0]+0.2*Low[0],MarketInfo(Symbol(),MODE_DIGITS)); OpenBuy(Ask); return(0); } if (SellCondition(EMADiv_OpenLevel,EMASlope_OpenLevel)) { double SellPrice=NormalizeDouble(0.8*Low[0]+0.2*High[0],MarketInfo(Symbol(),MODE_DIGITS)); OpenSell(Bid); return(0); } } TrailingPositionsBuy(TrailingStop,EMADiv_CloseLevel,EMASlope_CloseLevel); TrailingPositionsSell(TrailingStop,EMADiv_CloseLevel,EMASlope_CloseLevel); return (0); } bool ExistPositions() { for (int i=0; iEMADiv_OpenLevel*Point && iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)>0) || (iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)>EMASlope_OpenLevel*Point && iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)>0)) && iADX(NULL,0,4,PRICE_CLOSE,MODE_MAIN,0)>50) return(True); else return(False); } bool SellCondition(int EMADiv_OpenLevel,int EMASlope_OpenLevel) { if (((iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)<-EMADiv_OpenLevel*Point && iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)<0) || (iCustom(NULL,0,"iFXAnalyser_v6",MODE_SLOPE,0)<-EMASlope_OpenLevel*Point && iCustom(NULL,0,"iFXAnalyser_v6",MODE_DIV,0)<0)) && iADX(NULL,0,4,PRICE_CLOSE,MODE_MAIN,0)>50) return(True); else return(False); } void OpenBuy(double BuyPrice) { double ldLot = GetSizeLot(); double Slippage = GetSlippage(); double ldStop = GetStopLossBuy(BuyPrice); double ldTake = GetTakeProfitBuy(BuyPrice); string lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_BUY,ldLot,BuyPrice,Slippage,ldStop,ldTake,lsComm,0,0,clOpenBuy); if (UseSound) PlaySound(NameFileSound); } void OpenSell(double SellPrice) { double ldLot = GetSizeLot(); double Slippage = GetSlippage(); double ldStop = GetStopLossSell(SellPrice); double ldTake = GetTakeProfitSell(SellPrice); string lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_SELL,ldLot,SellPrice,Slippage,ldStop,ldTake,lsComm,0,0,clOpenSell); if (UseSound) PlaySound(NameFileSound); } void TrailingPositionsBuy(int TrailingStop,int EMADiv_CloseLevel,int EMASlope_CloseLevel) { for (int i=0; iTrailingStop*Point && OrderOpenPrice()>OrderStopLoss()) ModifyStopLoss(OrderOpenPrice(),clModiBuy); if (Bid-OrderOpenPrice()>TrailingStop*Point) if (OrderStopLoss()TrailingStop*Point && OrderOpenPrice()TrailingStop*Point) if (OrderStopLoss()>Ask+TrailingStop*Point || OrderStopLoss()==0) ModifyStopLoss(Ask+TrailingStop*Point,clModiBuy); if (Ask-OrderTakeProfit()EMADiv_CloseLevel*Point) return(True); else return(False); } void CloseAllTrades() { for (int i=0; i0) { int lsteqty = FileReadNumber(handle); FileClose(handle); } else lsteqty = 0; if (lsteqty==0) { handle = FileOpen(LogFileName(),FILE_CSV|FILE_WRITE,";"); FileWrite(handle,AccountEquity()); FileClose(handle); } else if (AccountEquity()-lsteqty>=PipsGoal*GetSizeLot()) return(True); else return(False); } bool LossCheck() { int handle = FileOpen(LogFileName(),FILE_CSV|FILE_READ,";"); if (handle>0) { int lsteqty = FileReadNumber(handle); FileClose(handle); } else lsteqty = 0; if (lsteqty-AccountEquity()>=PipsLoss*GetSizeLot()) return(True); else return(False); } string LogFileName() { string stryear = DoubleToStr(Year(),0); string strmonth = DoubleToStr(Month(),0); if (StringLen(strmonth)<2) strmonth = "0"+strmonth; string strday = DoubleToStr(Day(),0); if (StringLen(strday)<2) strday = "0"+strday; return(stryear+strmonth+strday+".log"); } string GetCommentForOrder() { return(Name_Expert); } double GetSizeLot() { if (IsTesting() || IsDemo()) return(1); else if (Lots > 0) return(Lots); else return(NormalizeDouble(AccountFreeMargin()/StopLoss*RiskLevel,1)); } double GetSlippage() { return((Ask-Bid)/Point); } double GetStopLossBuy(double BuyPrice) { if (StopLoss==0) return(0); else return(BuyPrice-StopLoss*Point); } double GetStopLossSell(double SellPrice) { if (StopLoss==0) return(0); else return(SellPrice+StopLoss*Point); } double GetTakeProfitBuy(double BuyPrice) { if (TakeProfit==0) return(0); else return(BuyPrice+TakeProfit*Point); } double GetTakeProfitSell(double SellPrice) { if (TakeProfit==0) return(0); else return(SellPrice-TakeProfit*Point); } ´Ó­7Ó½vß^9ó}z