//+------------------------------------------------------------------+ //| CrazyCrab | //| Copyright © 2007, Farhad Farshad | //| http://www.fxperz.com //| ***** PLEASE NOTE ***** //| This EA best works on EURUSD 1M TimeFrame. //| Please feel free to ask any question. My e-mail is: info@fxperz.com //| Enjoy a better automatic investment:) with at least 70% a month. //| If you get money from this EA please donate some to poor people of your country. //+-----------------------------------------------------------------+ #property copyright "Copyright © 2007, Farhad Farshad" #property link "http://www.fxperz.com" #include extern bool HighRisk =false; //Select whether you want High Risk Trade or Low Risk extern bool LowRisk =true; extern double maxLoss = 3; // Maximum Loss that you can bear in percent extern double maxYield ; // a number between 0 to 100 (not more than 10 is recommended) extern double lTakeProfit = 50; // recomended no more than 20 extern double sTakeProfit = 50; // recomended no more than 20 extern double takeProfit = 50; // recomended no more than 20 extern double pr = 25; //take profit in sideway markets. extern double stopLoss = 0; // extern double sStopLoss = 100; extern double lStopLoss = 100; extern int magicEA = 134; // Magic EA identifier. Allows for several co-existing EA with different input values extern double lTrailingStop = 3; // trail stop in points extern double sTrailingStop = 3; // trail stop in points extern int Slippage = 3; extern double Lots ;// you can change the lot but be aware of margin. Its better to trade with 1/4 of your capital. 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 string nameEA = "CrazyCrab";// To "easy read" which EA place an specific order and remember me forever :) extern double vVolume; //pivots extern bool Alerts = false; extern int GMTshift = 0; extern int LabelShift = 20; extern int LineShift = 40; extern bool Pivot = true; extern color PivotColor = Yellow; extern color PivotFontColor = White; extern int PivotFontSize = 12; extern int PivotWidth = 1; extern int PipDistance = 20; extern bool Cams = true; extern color CamFontColor = White; extern int CamFontSize = 10; extern bool Fibs = true; extern color FibColor = Sienna; extern color FibFontColor = White; extern int FibFontSize = 8; extern bool StandardPivots = true; extern color StandardFontColor = White; extern int StandardFontSize = 8; extern color SupportColor = White; extern color ResistanceColor = FireBrick; extern bool MidPivots = true; extern color MidPivotColor = White; extern int MidFontSize = 8; datetime LabelShiftTime, LineShiftTime; double P, H3, H4, H5; double L3, L4, L5; double LastHigh,LastLow,x; double day_high; double day_low; double yesterday_open; double today_open; double cur_day; double prev_day; bool firstL3=true; bool firstH3=true; double D1=0.091667; double D2=0.183333; double D3=0.2750; double D4=0.55; // Fib variables double yesterday_high=0; double yesterday_low=0; double yesterday_close=0; double r3=0; double r2=0; double r1=0; double p=0; double s1=0; double s2=0; double s3=0; double R; double macdHistCurrent, macdHistPrevious, macdSignalCurrent, macdSignalPrevious, highCurrent, lowCurrent; double stochHistCurrent, stochHistPrevious, stochSignalCurrent, stochSignalPrevious, PpreviousfaMA3; double sarCurrent, sarPrevious, momCurrent, momPrevious, highCurrentH1, lowCurrentH1, faClose2; double maLongCurrent, maShortCurrent, maLongPrevious, maShortPrevious, faRSICurrent, deMark, faMA3; double realTP, realSL, faMiddle, faHighest, faLowest, closeCurrent,faCloseM5, closeCurrentD, closePreviousD; int cnt, ticket; bool isBuying = false, isSelling = false, isBuyClosing = false, isSellClosing = false; double initialDeposit, PpreviousfaClose0, PpreviousfaMA1, faClose0, faMA1, PpreviousfaClose2; //First of All Specify your initial Deposit. /*void init() { initialDeposit = AccountBalance(); } */ void deinit() { if (Fibs) {ObjectDelete("FibR1 Label"); ObjectDelete("FibR1 Line"); ObjectDelete("FibR2 Label"); ObjectDelete("FibR2 Line"); ObjectDelete("FibR3 Label"); ObjectDelete("FibR3 Line"); ObjectDelete("FibS1 Label"); ObjectDelete("FibS1 Line"); ObjectDelete("FibS2 Label"); ObjectDelete("FibS2 Line"); ObjectDelete("FibS3 Label"); ObjectDelete("FibS3 Line"); } if (Pivot) { ObjectDelete("P Label"); ObjectDelete("P Line"); } if (Cams) { ObjectDelete("H5 Label"); ObjectDelete("H5 Line"); ObjectDelete("H4 Label"); ObjectDelete("H4 Line"); ObjectDelete("H3 Label"); ObjectDelete("H3 Line"); ObjectDelete("L3 Label"); ObjectDelete("L3 Line"); ObjectDelete("L4 Label"); ObjectDelete("L4 Line"); ObjectDelete("L5 Label"); ObjectDelete("L5 Line"); } //---- if (StandardPivots) { ObjectDelete("R1 Label"); ObjectDelete("R1 Line"); ObjectDelete("R2 Label"); ObjectDelete("R2 Line"); ObjectDelete("R3 Label"); ObjectDelete("R3 Line"); ObjectDelete("S1 Label"); ObjectDelete("S1 Line"); ObjectDelete("S2 Label"); ObjectDelete("S2 Line"); ObjectDelete("S3 Label"); ObjectDelete("S3 Line"); } if (MidPivots) { ObjectDelete("M5 Label"); ObjectDelete("M5 Line"); ObjectDelete("M4 Label"); ObjectDelete("M4 Line"); ObjectDelete("M3 Label"); ObjectDelete("M3 Line"); ObjectDelete("M2 Label"); ObjectDelete("M2 Line"); ObjectDelete("M1 Label"); ObjectDelete("M1 Line"); ObjectDelete("M0 Label"); ObjectDelete("M0 Line"); } return(0); } int DoAlerts() { double DifAboveL3,PipsLimit; double DifBelowH3; DifBelowH3 = H3 - Close[0]; DifAboveL3 = Close[0] - L3; PipsLimit = PipDistance*Point; if (DifBelowH3 > PipsLimit) firstH3 = true; if (DifBelowH3 <= PipsLimit && DifBelowH3 > 0) { if (firstH3) { Alert("Below Cam H3 Line by ",DifBelowH3, " for ", Symbol(),"-",Period()); PlaySound("alert.wav"); firstH3=false; } } if (DifAboveL3 > PipsLimit) firstL3 = true; if (DifAboveL3 <= PipsLimit && DifAboveL3 > 0) { if (firstL3) { Alert("Above Cam L3 Line by ",DifAboveL3," for ", Symbol(),"-",Period()); Sleep(2000); PlaySound("timeout.wav"); firstL3=false; } } Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { string expire_date = "2007.05.10 00:00"; //<-- hard coded datetime datetime e_d = StrToTime(expire_date); if (TimeCurrent() >= e_d) { Alert ("The CrazyCrab has been expired!"); return(0); } initialDeposit=AccountBalance(); if (HighRisk){ Lots=MathRound(AccountBalance()/1000); maxYield=4; } if (LowRisk){ Lots=MathRound(AccountBalance()/5000); maxYield=1; } double lDistance = PpreviousfaClose0 - PpreviousfaMA1; double lpreDistance = faClose0 - faMA1; double lsubDistance = lDistance - lpreDistance; if ( lsubDistance < 0 ){ CloseBuyPositions(); return(0); } double sDistance = PpreviousfaMA3 - PpreviousfaClose2; double spreDistance = faMA3 - faClose2; double ssubDistance = sDistance - spreDistance; if ( ssubDistance < 0 ){ CloseSellPositions(); return(0); } if ((AccountEquity()>(initialDeposit+((maxYield/100)*initialDeposit))) //|| (AccountEquity()<(initialDeposit-((maxLoss/100)*initialDeposit))) ){ CloseBuyPositions(); CloseSellPositions(); return(0); } int counted_bars=IndicatorCounted(); //---- TODO: add your code here double Q=0,S=0,R=0,M2=0,M3=0,S1=0,R1=0,M1=0,M4=0,S2=0,R2=0,M0=0,M5=0,S3=0,R3=0,nQ=0,nD=0,D=0; int cnt=720; //---- exit if period is greater than daily charts if(Period() > 1440) { Print("Error - Chart period is greater than 1 day."); return(-1); // then exit } //---- Get new daily prices & calculate pivots day_high=0; day_low=0; yesterday_open=0; today_open=0; cur_day=0; prev_day=0; while (cnt!= 0) { if (TimeDayOfWeek(Time[cnt]) == 0) { cur_day = prev_day; } else { cur_day = TimeDay(Time[cnt]- (GMTshift*3600)); } if (prev_day != cur_day) { yesterday_close = Close[cnt+1]; today_open = Open[cnt]; yesterday_high = day_high; yesterday_low = day_low; day_high = High[cnt]; day_low = Low[cnt]; prev_day = cur_day; } if (High[cnt]>day_high) { day_high = High[cnt]; } if (Low[cnt] 5) { nQ = Q; } else { nQ = Q*10000; } if (D > 5) { nD = D; } else { nD = D*10000; } if (StringSubstr(Symbol(),3,3)=="JPY") { nQ=nQ/100; nD=nD/100; } Comment("High= ",yesterday_high," Previous Days Range= ",nQ,"\nLow= ",yesterday_low, " Current Days Range= ",nD,"\nClose= ",yesterday_close, "\nCrazyCrab Expires on:",expire_date, "\nNow your initial deposit is ",initialDeposit,"$ and when CrazyCrab gains ",(maxYield*initialDeposit)/100, "$ it will close all positions and continue.", "\n USE CRAZYCRAB ONLY ON EURUSD 1M TIMEFRAME", "\n TO TRY AND BUY OTHER CRABS SEE MY SITE.", "\n", "\n", "\n If you get money from this EA please donate some to poor people of your country.", "\n", "\n", "\nCopyright 2007 Farhad Farshad http://fxperz.com"); LabelShiftTime = Time[LabelShift]; LineShiftTime = Time[LineShift]; //---- Set line labels on chart window if (Pivot) { if(ObjectFind("P label") != 0) { ObjectCreate("P label", OBJ_TEXT, 0, LabelShiftTime, P); ObjectSetText("P label", "Pivot", PivotFontSize, "Arial", PivotFontColor); } else { ObjectMove("P label", 0, LabelShiftTime, P); } //--- Draw Pivot lines on chart if(ObjectFind("P line") != 0) { ObjectCreate("P line", OBJ_HLINE, 0, LineShiftTime, P); ObjectSet("P line", OBJPROP_STYLE, STYLE_DASH); ObjectSet("P line", OBJPROP_COLOR, PivotColor); } else { ObjectMove("P line", 0, LineShiftTime, P); } } if (StandardPivots) { if(ObjectFind("R1 label") != 0) { ObjectCreate("R1 label", OBJ_TEXT, 0, LabelShiftTime, R1); ObjectSetText("R1 label", " R1", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("R1 label", 0, LabelShiftTime, R1); } if(ObjectFind("R2 label") != 0) { ObjectCreate("R2 label", OBJ_TEXT, 0, LabelShiftTime, R2); ObjectSetText("R2 label", " R2", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("R2 label", 0, LabelShiftTime, R2); } if(ObjectFind("R3 label") != 0) { ObjectCreate("R3 label", OBJ_TEXT, 0, LabelShiftTime, R3); ObjectSetText("R3 label", " R3", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("R3 label", 0, LabelShiftTime, R3); } if(ObjectFind("S1 label") != 0) { ObjectCreate("S1 label", OBJ_TEXT, 0, LabelShiftTime, S1); ObjectSetText("S1 label", "S1", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("S1 label", 0, LabelShiftTime, S1); } if(ObjectFind("S2 label") != 0) { ObjectCreate("S2 label", OBJ_TEXT, 0, LabelShiftTime, S2); ObjectSetText("S2 label", "S2", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("S2 label", 0, LabelShiftTime, S2); } if(ObjectFind("S3 label") != 0) { ObjectCreate("S3 label", OBJ_TEXT, 0, LabelShiftTime, S3); ObjectSetText("S3 label", "S3", StandardFontSize, "Arial", StandardFontColor); } else { ObjectMove("S3 label", 0, LabelShiftTime, S3); } //--- Draw Pivot lines on chart if(ObjectFind("S1 line") != 0) { ObjectCreate("S1 line", OBJ_HLINE, 0, LineShiftTime, S1); ObjectSet("S1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S1 line", OBJPROP_COLOR, SupportColor); } else { ObjectMove("S1 line", 0, LineShiftTime, S1); } if(ObjectFind("S2 line") != 0) { ObjectCreate("S2 line", OBJ_HLINE, 0, LineShiftTime, S2); ObjectSet("S2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S2 line", OBJPROP_COLOR, SupportColor); } else { ObjectMove("S2 line", 0, LineShiftTime, S2); } if(ObjectFind("S3 line") != 0) { ObjectCreate("S3 line", OBJ_HLINE, 0, LineShiftTime, S3); ObjectSet("S3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("S3 line", OBJPROP_COLOR, SupportColor); } else { ObjectMove("S3 line", 0, LineShiftTime, S3); } if(ObjectFind("R1 line") != 0) { ObjectCreate("R1 line", OBJ_HLINE, 0, LineShiftTime, R1); ObjectSet("R1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R1 line", OBJPROP_COLOR, ResistanceColor); } else { ObjectMove("R1 line", 0, LineShiftTime, R1); } if(ObjectFind("R2 line") != 0) { ObjectCreate("R2 line", OBJ_HLINE, 0, LineShiftTime, R2); ObjectSet("R2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R2 line", OBJPROP_COLOR, ResistanceColor); } else { ObjectMove("R2 line", 0, LineShiftTime, R2); } if(ObjectFind("R3 line") != 0) { ObjectCreate("R3 line", OBJ_HLINE, 0, LineShiftTime, R3); ObjectSet("R3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("R3 line", OBJPROP_COLOR, ResistanceColor); } else { ObjectMove("R3 line", 0, LineShiftTime, R3); } } if (MidPivots) { if(ObjectFind("M5 label") != 0) { ObjectCreate("M5 label", OBJ_TEXT, 0, LabelShiftTime, M5); ObjectSetText("M5 label", " M5", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M5 label", 0, LabelShiftTime, M5); } if(ObjectFind("M4 label") != 0) { ObjectCreate("M4 label", OBJ_TEXT, 0, LabelShiftTime, M4); ObjectSetText("M4 label", " M4", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M4 label", 0, LabelShiftTime, M4); } if(ObjectFind("M3 label") != 0) { ObjectCreate("M3 label", OBJ_TEXT, 0, LabelShiftTime, M3); ObjectSetText("M3 label", " M3", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M3 label", 0, LabelShiftTime, M3); } if(ObjectFind("M2 label") != 0) { ObjectCreate("M2 label", OBJ_TEXT, 0, LabelShiftTime, M2); ObjectSetText("M2 label", " M2", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M2 label", 0, LabelShiftTime, M2); } if(ObjectFind("M1 label") != 0) { ObjectCreate("M1 label", OBJ_TEXT, 0, LabelShiftTime, M1); ObjectSetText("M1 label", " M1", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M1 label", 0, LabelShiftTime, M1); } if(ObjectFind("M0 label") != 0) { ObjectCreate("M0 label", OBJ_TEXT, 0, LabelShiftTime, M0); ObjectSetText("M0 label", " M0", MidFontSize, "Arial", MidPivotColor); } else { ObjectMove("M0 label", 0, LabelShiftTime, M0); } if(ObjectFind("M5 line") != 0) { ObjectCreate("M5 line", OBJ_HLINE, 0, LineShiftTime, M5); ObjectSet("M5 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M5 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M5 line", 0, LineShiftTime, M5); } if(ObjectFind("M4 line") != 0) { ObjectCreate("M4 line", OBJ_HLINE, 0, LineShiftTime, M4); ObjectSet("M4 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M4 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M4 line", 0, LineShiftTime, M4); } if(ObjectFind("M3 line") != 0) { ObjectCreate("M3 line", OBJ_HLINE, 0, LineShiftTime, M3); ObjectSet("M3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M3 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M3 line", 0, LineShiftTime, M3); } if(ObjectFind("M2 line") != 0) { ObjectCreate("M2 line", OBJ_HLINE, 0, LineShiftTime, M2); ObjectSet("M2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M2 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M2 line", 0, LineShiftTime, M2); } if(ObjectFind("M1 line") != 0) { ObjectCreate("M1 line", OBJ_HLINE, 0, LineShiftTime, M1); ObjectSet("M1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M1 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M1 line", 0, LineShiftTime, M1); } if(ObjectFind("M0 line") != 0) { ObjectCreate("M0 line", OBJ_HLINE, 0, LineShiftTime, M0); ObjectSet("M0 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("M0 line", OBJPROP_COLOR, MidPivotColor); } else { ObjectMove("M0 line", 0, LineShiftTime, M0); } } if (Fibs) { if(ObjectFind("FibR1 label") != 0) { ObjectCreate("FibR1 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibR1 label", "Fib R1", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibR1 label", 0, LabelShiftTime, r1); } if(ObjectFind("FibR2 label") != 0) { ObjectCreate("FibR2 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibR2 label", "Fib R2", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibR2 label", 0, LabelShiftTime, r2); } if(ObjectFind("FibR3 label") != 0) { ObjectCreate("FibR3 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibR3 label", "Fib R3", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibR3 label", 0, LabelShiftTime, r3); } if(ObjectFind("FibS1 label") != 0) { ObjectCreate("FibS1 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibS1 label", "Fib S1", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibS1 label", 0, LabelShiftTime, s1); } if(ObjectFind("FibS2 label") != 0) { ObjectCreate("FibS2 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibS2 label", "Fib S2", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibS2 label", 0, LabelShiftTime, s2); } if(ObjectFind("FibS3 label") != 0) { ObjectCreate("FibS3 label", OBJ_TEXT, 0, LabelShiftTime, 0); ObjectSetText("FibS3 label", "Fib S3", FibFontSize, "Arial", FibFontColor); } else { ObjectMove("FibS3 label", 0, LabelShiftTime, s3); } //---- Set lines on chart window if(ObjectFind("FibS1 line") != 0) { ObjectCreate("FibS1 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibS1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibS1 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibS1 line", 0, LineShiftTime, s1); } if(ObjectFind("FibS2 line") != 0) { ObjectCreate("FibS2 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibS2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibS2 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibS2 line", 0, LineShiftTime, s2); } if(ObjectFind("FibS3 line") != 0) { ObjectCreate("FibS3 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibS3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibS3 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibS3 line", 0, LineShiftTime, s3); } if(ObjectFind("FibR1 line") != 0) { ObjectCreate("FibR1 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibR1 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibR1 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibR1 line", 0, LineShiftTime, r1); } if(ObjectFind("FibR2 line") != 0) { ObjectCreate("FibR2 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibR2 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibR2 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibR2 line", 0, LineShiftTime, r2); } if(ObjectFind("FibR3 line") != 0) { ObjectCreate("FibR3 line", OBJ_HLINE, 0, LineShiftTime, 0); ObjectSet("FibR3 line", OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectSet("FibR3 line", OBJPROP_COLOR, FibColor); } else { ObjectMove("FibR3 line", 0, LineShiftTime, r3); } } if (Cams) { // --- THE CAMARILLA --- if(ObjectFind("H5 label") != 0) { ObjectCreate("H5 label", OBJ_TEXT, 0, LabelShiftTime, H5); ObjectSetText("H5 label", " H5 LB TARGET", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("H5 label", 0, LabelShiftTime, H5); } if(ObjectFind("H4 label") != 0) { ObjectCreate("H4 label", OBJ_TEXT, 0, LabelShiftTime, H4); ObjectSetText("H4 label", " H4 LONG BREAKOUT", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("H4 label", 0, LabelShiftTime, H4); } if(ObjectFind("H3 label") != 0) { ObjectCreate("H3 label", OBJ_TEXT, 0, LabelShiftTime, H3); ObjectSetText("H3 label", " H3 SHORT", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("H3 label", 0, LabelShiftTime, H3); } if(ObjectFind("L3 label") != 0) { ObjectCreate("L3 label", OBJ_TEXT, 0, LabelShiftTime, L3); ObjectSetText("L3 label", " L3 LONG", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("L3 label", 0, LabelShiftTime, L3); } if(ObjectFind("L4 label") != 0) { ObjectCreate("L4 label", OBJ_TEXT, 0, LabelShiftTime, L4); ObjectSetText("L4 label", " L4 SHORT BREAKOUT", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("L4 label", 0, LabelShiftTime, L4); } if(ObjectFind("L5 label") != 0) { ObjectCreate("L5 label", OBJ_TEXT, 0, LabelShiftTime, L5); ObjectSetText("L5 label", " L5 SB TARGET", CamFontSize, "Arial", CamFontColor); } else { ObjectMove("L5 label", 0, LabelShiftTime, L5); } //---- Draw Camarilla lines on Chart if(ObjectFind("H5 line") != 0) { ObjectCreate("H5 line", OBJ_HLINE, 0, LineShiftTime, H5); ObjectSet("H5 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("H5 line", OBJPROP_COLOR, SpringGreen); ObjectSet("H5 line", OBJPROP_WIDTH, 1); } else { ObjectMove("H5 line", 0, LineShiftTime, H5); } if(ObjectFind("H4 line") != 0) { ObjectCreate("H4 line", OBJ_HLINE, 0, LineShiftTime, H4); ObjectSet("H4 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("H4 line", OBJPROP_COLOR, SpringGreen); ObjectSet("H4 line", OBJPROP_WIDTH, 1); } else { ObjectMove("H4 line", 0, LineShiftTime, H4); } if(ObjectFind("H3 line") != 0) { ObjectCreate("H3 line", OBJ_HLINE, 0, LineShiftTime, H3); ObjectSet("H3 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("H3 line", OBJPROP_COLOR, SpringGreen); ObjectSet("H3 line", OBJPROP_WIDTH, 2); } else { ObjectMove("H3 line", 0, LineShiftTime, H3); } if(ObjectFind("L3 line") != 0) { ObjectCreate("L3 line", OBJ_HLINE, 0, LineShiftTime, L3); ObjectSet("L3 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("L3 line", OBJPROP_COLOR, Red); ObjectSet("L3 line", OBJPROP_WIDTH, 2); } else { ObjectMove("L3 line", 0, LineShiftTime, L3); } if(ObjectFind("L4 line") != 0) { ObjectCreate("L4 line", OBJ_HLINE, 0, LineShiftTime, L4); ObjectSet("L4 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("L4 line", OBJPROP_COLOR, Red); ObjectSet("L4 line", OBJPROP_WIDTH, 1); } else { ObjectMove("L4 line", 0, LineShiftTime, L4); } if(ObjectFind("L5 line") != 0) { ObjectCreate("L5 line", OBJ_HLINE, 0, LineShiftTime, L5); ObjectSet("L5 line", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("L5 line", OBJPROP_COLOR, Red); ObjectSet("L5 line", OBJPROP_WIDTH, 1); } else { ObjectMove("L5 line", 0, LineShiftTime, L5); } } //---- done // Now check for Alert if (Alerts){ DoAlerts(); //---- return(0); } // Check for invalid bars and takeprofit if(Bars < 200) { Print("Not enough bars for this strategy - ", nameEA); return(0); } calculateIndicators(); // Calculate indicators' value //Check for TakeProfit Conditions if(lTakeProfit<1){ Print("TakeProfit less than 1 on this EA with Magic -", magicEA ); return(0); } if(sTakeProfit<1){ Print("TakeProfit less than 1 on this EA with Magic -", magicEA); return(0); } //Introducing new expressions double faClose0 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,1); double previousfaClose0 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,2); double PpreviousfaClose0 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,0); double faMA1 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,1); double previousfaMA1 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,2); double PpreviousfaMA1 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,0); double faCloseM1 = iClose(NULL,PERIOD_M1,0); double deMark = iDeMarker(NULL,PERIOD_M1,14,0); double previousdeMark = iDeMarker(NULL,PERIOD_M1,14,1); double faClose2 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,1); double previousfaClose2 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,2); double PpreviousfaClose2 = iMA(NULL,PERIOD_M1,34,0,MODE_LWMA,PRICE_TYPICAL,0); double faMA3 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,1); double previousfaMA3 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,2); double PpreviousfaMA3 = iMA(NULL,PERIOD_M1,89,0,MODE_LWMA,PRICE_TYPICAL,0); double stochHistCurrent = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN,0); double sarCurrent = iSAR(NULL,PERIOD_M5,0.009,0.2,0); // Parabolic Sar Current double sarPrevious = iSAR(NULL,PERIOD_M5,0.009,0.2,1); //Parabolic Sar Previous double vVolume = iVolume(NULL,0,0); // Current Volume 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; //... double maS1 = iMA(NULL,PERIOD_M1,1,0,MODE_LWMA,PRICE_CLOSE,0); double maShort1 = iMA(NULL,PERIOD_M1,1,0,MODE_LWMA,PRICE_CLOSE,1); double premaShort1 = iMA(NULL,PERIOD_M1,1,0,MODE_LWMA,PRICE_CLOSE,2); double maL1 = iMA(NULL,PERIOD_M1,3,0,MODE_LWMA,PRICE_CLOSE,0); double maLong1 = iMA(NULL,PERIOD_M1,3,0,MODE_LWMA,PRICE_CLOSE,1); double premaLong1 = iMA(NULL,PERIOD_M1,3,0,MODE_LWMA,PRICE_CLOSE,2); double M1High = iHigh(NULL,PERIOD_M1,1); double preM1High = iHigh(NULL,PERIOD_M1,2); double M1Low = iLow(NULL,PERIOD_M1,1); double preM1Low = iLow(NULL,PERIOD_M1,2); double pPlus = p+5*Point; double pMinus = p-5*Point; double H5Plus = H5+5*Point; double H5Minus = H5-5*Point; double H4Plus = H4+5*Point; double H4Minus = H4-5*Point; double H3Plus = H3+5*Point; double H3Minus = H3-5*Point; double L3Plus = L3+5*Point; double L3Minus = L3-5*Point; double L4Plus = L4+5*Point; double L4Minus = L4-5*Point; double L5Plus = L5+5*Point; double L5Minus = L5-5*Point; double RPlus = R+5*Point; double RMinus = R-5*Point; double PPlus = P+5*Point; double PMinus = P-5*Point; double r1Plus = r1+5*Point; double r1Minus = r1-5*Point; double r2Plus = r2+5*Point; double r2Minus = r2-5*Point; double r3Plus = r3+5*Point; double r3Minus = r3-5*Point; double s1Plus = s1+5*Point; double s1Minus = s1-5*Point; double s2Plus = s2+5*Point; double s2Minus = s2-5*Point; double s3Plus = s3+5*Point; double s3Minus = s3-5*Point; double R1Plus = R1+5*Point; double R1Minus = R1-5*Point; double R2Plus = R2+5*Point; double R2Minus = R2-5*Point; double R3Plus = R3+5*Point; double R3Minus = R3-5*Point; double S1Plus = S1+5*Point; double S1Minus = S1-5*Point; double S2Plus = S2+5*Point; double S2Minus = S2-5*Point; double S3Plus = S3+5*Point; double S3Minus = S3-5*Point; double M0Plus = M0+5*Point; double M0Minus = M0-5*Point; double M1Plus = M1+5*Point; double M1Minus = M1-5*Point; double M2Plus = M2+5*Point; double M2Minus = M2-5*Point; double M3Plus = M3+5*Point; double M3Minus = M3-5*Point; double M4Plus = M4+5*Point; double M4Minus = M4-5*Point; double M5Plus = M5+5*Point; double M5Minus = M5-5*Point; if((OrdersTotal()>0)){ return(0); } //Buy Condition if (!(takePositions())){ if (((faClose0>faMA1) && (previousfaClose0maLong1) && (premaShort1preM1High) && (High[0]>High[1]) && (Volume[0]>((Volume[1]+Volume[2]+Volume[3]+Volume[4]+Volume[5])/5)) && ((PpreviousfaClose0>faClose0)) && ((PpreviousfaClose0-faClose0)>(faClose0-faMA1)) //&& ((faClose0-faMA1)>(previousfaClose0-previousfaMA1)) && (deMark<0.80) //&& (deMark>previousdeMark) && (momCurrent<100.0500) && (stochHistPrevious<80) && (R1Minus > Ask || Ask > R1Plus) && (R2Minus > Ask || Ask > r2Plus) && (R3Minus > Ask || Ask > R3Plus) && (S1Minus > Ask || Ask > S1Plus) && (S2Minus > Ask || Ask > S2Plus) && (S3Minus > Ask || Ask > S3Plus) ){ OpenBuy(); return(0); } //Sell Condition if (((faClose2previousfaMA3)) // && ((maShort1premaLong1)) && (M1Low((Volume[1]+Volume[2]+Volume[3]+Volume[4]+Volume[5])/5)) && ((faClose2-PpreviousfaClose2)>(faMA3-faClose2)) //&& ((faMA3-faClose2)>(previousfaMA3-previousfaClose2)) && (deMark>0.20) //&& (deMark99.9600) && (stochHistPrevious>20) && (R1Minus > Bid || Bid > R1Plus) && (R2Minus > Bid || Bid > r2Plus) && (R3Minus > Bid || Bid > R3Plus) && (S1Minus > Bid || Bid > S1Plus) && (S2Minus > Bid || Bid > S2Plus) && (S3Minus > Bid || Bid > S3Plus) ){ OpenSell(); return(0); } } //Trailing Expressions TrailingPositionsBuy(lTrailingStop); TrailingPositionsSell(sTrailingStop); return (0); } //Number Positions bool takePositions() { for (int i=0; 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; datetime lExpire = 10000; ldLot = GetSizeLot(); ldStop = GetStopLossBuy(); 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; datetime sExpire = 10000; ldLot = GetSizeLot(); ldStop = GetStopLossSell(); 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() { if ((maLongCurrentcloseCurrentD)) return(Bid-sTakeProfit*Point); else return (Bid-(sTakeProfit)*Point);} double GetStopLossBuy() { if ((maLongCurrentcloseCurrentD)) return(Bid + sStopLoss*Point); else return(Bid + (sStopLoss)*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); stochHistPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0); stochSignalCurrent = iStochastic(NULL,PERIOD_H4,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,PERIOD_M5,0.009,0.2,0); // Parabolic Sar Current sarPrevious = iSAR(NULL,PERIOD_M5,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 highCurrentH1 = iHigh(NULL,PERIOD_H1,0); lowCurrentH1 = iLow(NULL,PERIOD_H1,0); closeCurrent = iClose(NULL,PERIOD_H4,0); //Close Price Current for H4 TimeFrame closeCurrentD = iClose(NULL,PERIOD_H1,0); //Close Price Current for D1 TimeFrame closePreviousD = iClose(NULL,PERIOD_H1,1); //Close Price Previous for D1 TimeFrame maLongCurrent = iMA(NULL,PERIOD_H1,89,1,MODE_SMMA,PRICE_TYPICAL,0); //Current Long Term Moving Average maLongPrevious = iMA(NULL,PERIOD_H1,89,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,PERIOD_H1,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