//+------------------------------------------------------------------+ //| FarhadCrab1.mq4 | //| Copyright © 2006, Farhad Farshad | //| http://www.fxperz.com //| http://farhadfarshad.com //| This EA is optimized to work on //| GBP/JPY & GBP/USD & EUR/USD M1 TimeFrame ... if you want the optimized //| EA s for any currency pair please //| mail me at: info@farhadfarshad.com //| This is the first version of this EA. If //| you want the second edition ('FarhadCrab2.mq4') //| with considerably better performance mail me. 'FarhadMagic.mq4' and 'Farhad2.mq4' are also available from this series. //| (They are not free and they don't have trial version!) //| Enjoy a better automatic investment:) with at least 100% a month. //| If you get money from this EA please donate some to poor people of your country. //+-----------------------------------------------------------------+ #property copyright "Copyright © 2006, Farhad Farshad" #property link "http://www.fxperz.com" #include extern double lTakeProfit = 10; // recomended no more than 20 extern double sTakeProfit = 10; // recomended no more than 20 extern double takeProfit = 10; // recomended no more than 20 extern double stopLoss = 10; // do not use s/l at all. Take it easy man. I'll guarantee your profit :) extern int magicEA = 114; // Magic EA identifier. Allows for several co-existing EA with different input values extern double lTrailingStop = 8; // trail stop in points extern double sTrailingStop = 8; // trail stop in points extern color clOpenBuy = Blue; //Different colors for different positions extern color clCloseBuy = Aqua; //Different colors for different positions extern color clOpenSell = Red; //Different colors for different positions extern color clCloseSell = Violet; //Different colors for different positions extern color clModiBuy = Blue; //Different colors for different positions extern color clModiSell = Red; //Different colors for different positions extern int Slippage = 2; extern double Lots = 0.1;// you can change the lot but be aware of margin. Its better to trade with 1/4 of your capital. extern string nameEA = "FarhadCrab1.mq4";// To "easy read" which EA place an specific order and remember me forever :) extern double vVolume; double macdHistCurrent, macdHistPrevious, macdSignalCurrent, macdSignalPrevious, highCurrent, lowCurrent; double stochHistCurrent, stochHistPrevious, stochSignalCurrent, stochSignalPrevious; double sarCurrent, sarPrevious, momCurrent, momPrevious; double maLongCurrent, maShortCurrent, maLongPrevious, maShortPrevious, faRSICurrent; double realTP, realSL, faMiddle, faHighest, faLowest, closeCurrent, closeCurrentD, closePreviousD; int cnt, ticket,LastLogTime; bool isBuying = false, isSelling = false, isBuyClosing = false, isSellClosing = false; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { // *****This line is for some reason very important. you'd better settle all your account at the end of day.***** /*if (TimeHour(CurTime())==23 && MathAbs(faMiddle-faHighest)MathAbs(faMiddle-faLowest) ) { CloseSellPositions(); return(0); } */ if (IsTesting() && OrdersTotal()!=0 && LastLogTime != iTime(NULL,0,1)) { LastLogTime=iTime(NULL,0,1); /* OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit()+Point*1,0,Cyan); OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit(),0,Cyan); */ ticket=OrderSend(Symbol(),OP_BUYSTOP,1,Bid+1000*Point,5,0,0); OrderDelete(ticket); } //System Stoploss based on LongTerm Moving Average (Fibo 55 day MA) //StopLoss For Buy Positions (Optional) if ((maLongCurrent>closeCurrentD) && (maLongPreviousclosePreviousD)) { CloseSellPositions(); return(0); } // Check for invalid bars and takeprofit /*if(Bars < 200) { Print("Not enough bars for this strategy - ", nameEA); return(0); } */ /* if(isBuying && !isSelling && !isBuyClosing && !isSellClosing) { // Check for BUY entry signal if(stopLoss > 0) realSL = Ask - stopLoss * Point; if(takeProfit > 0) realTP = Ask + takeProfit * Point; ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,realSL,realTP,nameEA+" - Magic: "+magicEA+" ",magicEA,0,Red); // Buy if(ticket < 0) { Print("OrderSend (" + nameEA + ") failed with error #" + GetLastError() + " --> " + ErrorDescription(GetLastError())); } else { } } if(isSelling && !isBuying && !isBuyClosing && !isSellClosing) { // Check for SELL entry signal if(stopLoss > 0) realSL = Bid + stopLoss * Point; if(takeProfit > 0) realTP = Bid - takeProfit * Point; ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,realSL,realTP,nameEA+" - Magic: "+magicEA+" ",magicEA,0,Red); // Sell if(ticket < 0) { Print("OrderSend (" + nameEA + ") failed with error #" + GetLastError() + " --> " + ErrorDescription(GetLastError())); } else { } } return(0); */ calculateIndicators(); // Calculate indicators' value //Check for TakeProfit Conditions if(lTakeProfit<10){ Print("TakeProfit less than 10 on this EA with Magic -", magicEA ); return(0); } if(sTakeProfit<10){ Print("TakeProfit less than 10 on this EA with Magic -", magicEA); return(0); } //Introducing new expressions double faClose0 = iLow(NULL,0,0); double faMA1 = iMA(NULL,0,9,0,MODE_EMA,PRICE_TYPICAL,0); double faMA2 = iMAOnArray(faMA1,0,9,0,MODE_EMA,0); double faMA4 = iMAOnArray(faMA2,0,9,0,MODE_EMA,0); double faClose2 = iHigh(NULL,0,0); double faMA3 = iMA(NULL,0,9,0,MODE_SMA,PRICE_OPEN,0); double stochHistCurrent = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0); double sarCurrent = iSAR(NULL,0,0.002,0.2,0); // Parabolic Sar Current double sarPrevious = iSAR(NULL,0,0.002,0.2,1); //Parabolic Sar Previous double vVolume = iVolume(NULL,0,0); // Current Volume double faMAvVolume = iMAOnArray(vVolume,0,9,0,MODE_SMA,0); //Simple Moving Average double faHighest = Highest(NULL,PERIOD_H4,MODE_HIGH,30,0); // Highest High in an interval of time double faLowest = Lowest(NULL,PERIOD_H4,MODE_LOW,30,0); //Lowest Low in an interval of time double faMiddle = (faHighest+faLowest)/2; //... //Check Margin Requirement if(AccountFreeMargin()<(1000*Lots)){ Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //Buy Condition if (!takeBuyPositions()){ //if ((faClose0>faMA1 && faBandWidthfaMA1)){ OpenBuy(); //if (OrdersTotal()==1 && (faClose2faMA1)) {OpenBuy();} //if (OrdersTotal()==2 && (faClose0>faMA1)) {OpenBuy();} //if (OrdersTotal()==3 && (faClose0>faMA1)) {OpenBuy();} return(0); } //Close Buy Condition /* if ((faClose2300) && (sarCurrent600) && (sarCurrent900) && (sarCurrent1200) && (sarCurrent1500) && (sarCurrent1800) && (sarCurrent2100) && (sarCurrent2400) && (sarCurrent2700) && (sarCurrent3000) && (sarCurrent3300) && (sarCurrent3600) && (sarCurrent3900) && (sarCurrent4200) && (sarCurrent4500) && (sarCurrent4800) && (sarCurrent5100) && (sarCurrent5400) && (sarCurrent5700) && (sarCurrentcloseCurrent) { if ((CurTime()-OrderOpenTime()>300) && (sarCurrent>highCurrent)) {j=1;} if ((CurTime()-OrderOpenTime()>600) && (sarCurrent>highCurrent)) {j=2;} if ((CurTime()-OrderOpenTime()>900) && (sarCurrent>highCurrent)) {j=3;} if ((CurTime()-OrderOpenTime()>1200) && (sarCurrent>highCurrent)) {j=4;} if ((CurTime()-OrderOpenTime()>1500) && (sarCurrent>highCurrent)) {j=5;} if ((CurTime()-OrderOpenTime()>1800) && (sarCurrent>highCurrent)) {j=6;} if ((CurTime()-OrderOpenTime()>2100) && (sarCurrent>highCurrent)) {j=7;} if ((CurTime()-OrderOpenTime()>2400) && (sarCurrent>highCurrent)) {j=8;} if ((CurTime()-OrderOpenTime()>2700) && (sarCurrent>highCurrent)) {j=9;} if ((CurTime()-OrderOpenTime()>3000) && (sarCurrent>highCurrent)) {j=10;} if ((CurTime()-OrderOpenTime()>3300) && (sarCurrent>highCurrent)) {j=11;} if ((CurTime()-OrderOpenTime()>3600) && (sarCurrent>highCurrent)) {j=12;} if ((CurTime()-OrderOpenTime()>3900) && (sarCurrent>highCurrent)) {j=13;} if ((CurTime()-OrderOpenTime()>4200) && (sarCurrent>highCurrent)) {j=14;} if ((CurTime()-OrderOpenTime()>4500) && (sarCurrent>highCurrent)) {j=15;} if ((CurTime()-OrderOpenTime()>4800) && (sarCurrent>highCurrent)) {j=16;} if ((CurTime()-OrderOpenTime()>5100) && (sarCurrent>highCurrent)) {j=17;} if ((CurTime()-OrderOpenTime()>5400) && (sarCurrent>highCurrent)) {j=18;} if ((CurTime()-OrderOpenTime()>5700) && (sarCurrent>highCurrent)) {j=19;} for (int i=j; itrailingStop*Point) { if (OrderStopLoss()trailingStop*Point) { if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0) ModifyStopLoss(Ask+trailingStop*Point); } } } } } } void ModifyStopLoss(double ldStopLoss) { bool fm; fm = OrderModify(OrderTicket(),OrderOpenPrice (),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); } void OpenBuy() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = 0; ldTake = GetTakeProfitBuy(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,ldStop,ldTake,nameEA,magicEA,0,clOpenBuy); } void OpenSell() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = 0; ldTake = GetTakeProfitSell(); lsComm = GetCommentForOrder(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,ldStop,ldTake,nameEA,magicEA,0,clOpenSell); } string GetCommentForOrder() { return(nameEA); } double GetSizeLot() { return(Lots); } double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); } double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); } void calculateIndicators() { // Calculate indicators' value macdHistCurrent = iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,0); macdHistPrevious = iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_MAIN,1); macdSignalCurrent = iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_SIGNAL,0); macdSignalPrevious = iMACD(NULL,0,12,26,9,PRICE_OPEN,MODE_SIGNAL,1); stochHistCurrent = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0); stochHistPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); stochSignalCurrent = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); stochSignalPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); sarCurrent = iSAR(NULL,0,0.009,0.2,0); // Parabolic Sar Current sarPrevious = iSAR(NULL,0,0.009,0.2,1); //Parabolic Sar Previous momCurrent = iMomentum(NULL,0,14,PRICE_OPEN,0); // Momentum Current momPrevious = iMomentum(NULL,0,14,PRICE_OPEN,1); // Momentum Previous highCurrent = iHigh(NULL,0,0); //High price Current lowCurrent = iLow(NULL,0,0); //Low Price Current closeCurrent = iClose(NULL,PERIOD_H4,0); //Close Price Current for H4 TimeFrame closeCurrentD = iClose(NULL,PERIOD_D1,0); //Close Price Current for D1 TimeFrame closePreviousD = iClose(NULL,PERIOD_D1,1); //Close Price Previous for D1 TimeFrame maLongCurrent = iMA(NULL,PERIOD_D1,55,1,MODE_SMMA,PRICE_TYPICAL,0); //Current Long Term Moving Average maLongPrevious = iMA(NULL,PERIOD_D1,55,1,MODE_SMMA,PRICE_TYPICAL,1); //Previous Long Term Moving Average maShortCurrent = iMA(NULL,0,2,1,MODE_SMMA,PRICE_TYPICAL,0); //Current Short Term Moving Average maShortPrevious = iMA(NULL,0,2,1,MODE_SMMA,PRICE_TYPICAL,1); //Previous Long Term Moving Average faRSICurrent = iRSI(NULL,0,14,PRICE_TYPICAL,0); //Current RSI // Check for BUY, SELL, and CLOSE signal isBuying = false; isSelling = false; isBuyClosing = false; isSellClosing = false; } void CloseBuyPositions(){ for (int i=0; i