//+------------------------------------------------------------------+ //| Equity Manager for Martingale Lover v2 | //+------------------------------------------------------------------+ #property copyright "Copyright(c)2008 latimeria" /* This utility EA close all positions & pending orders when Equity exceeds Equity Target & Equity Stop Target. version 2: Trailing Equity Function is added. */ extern string About = "<<< Equity Manager for Martingale Lover >>>"; extern bool EnableFunction = false; extern bool UseTrailing = false; extern bool EmergencyStop = false; extern string InitialEquityExp = "<<< Initial Equity >>>"; extern double InitialEquity = 10000; extern bool UsePercentManagement = false; extern string PercentageExp = "<<< Manage by Percentage >>>"; extern double Equity_Target = 15; extern double Equity_Stop_Target = 10; extern double Trailing_Start = 5; extern double Trailing_Width = 2; extern string MoneyExp = "<<< Manage by Money >>>"; extern double Equity_Target_by_Money = 1500; extern double Equity_Stop_Target_by_Money = 1000; extern double Trailing_Start_by_Money = 500; extern double Trailing_Width_by_Money = 200; extern string AboutMisc = "<<< Miscellaneous >>>"; extern bool Alert_On = false; extern int slippage = 5; double CurrentEquity; double EQTARGET; double EQSTOPTARGET; double HighestEquity; double TrailStartEquity; double TrailWidth; int DQ_ADJUST [] = { 0 , 1 , 10 , 100 , 1 , 10 , 100 }; string DOW[] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; string NAME = "Equity Manager for Martingale Lover v2"; //+------------------------------------------------------------------+ //| init | //+------------------------------------------------------------------+ int init() { // Reset Equity CurrentEquity = InitialEquity; // Set Highest Equity HighestEquity = CurrentEquity; // Set Trailing by Money TrailStartEquity = CurrentEquity + Trailing_Start_by_Money; TrailWidth = MathAbs(Trailing_Width_by_Money); // Set Trailing by Percentage if(UsePercentManagement) { TrailStartEquity = CurrentEquity + CurrentEquity * (Trailing_Start/100); TrailWidth = MathAbs(CurrentEquity * (Trailing_Width/100)); } // Set Target by Money EQTARGET = CurrentEquity + Equity_Target_by_Money; EQSTOPTARGET = CurrentEquity - Equity_Stop_Target_by_Money; // Set Target by Percentage if(UsePercentManagement) { EQTARGET = CurrentEquity + CurrentEquity * (Equity_Target/100); EQSTOPTARGET = CurrentEquity - CurrentEquity * (Equity_Stop_Target/100); } return(0); } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ int start() { ShowStatus(); if(EmergencyStop) { Initialize(); return(0); } // Refresh Highest Equity if(AccountEquity() > HighestEquity) HighestEquity = AccountEquity(); if(EnableFunction) { // Trailing Equity if(UseTrailing && HighestEquity > TrailStartEquity) TrailingEquity(); // Exit if(AccountEquity() > EQTARGET || AccountEquity() < EQSTOPTARGET) Initialize(); } return(0); } //+------------------------------------------------------------------+ //| Initialize (delete all existing orders) | //+------------------------------------------------------------------+ void Initialize() { int i,j,Type,SLIP; bool selected, success; for(j=0; j<3; j++) { // Delete All Orders & Positions for(i=0; i 0.07) LotDigits = 1; // Settings string ENABLED = "Equity Manager = On"; if(!EnableFunction) ENABLED = "Equity Manager = Off"; string Emargency = "Emergency Stop = Off"; if(EmergencyStop) Emargency = "Emergency Stop = On"; string EQTrail = "Trailing Equity = On"; if(!UseTrailing) EQTrail = "Trailing Equity = Off"; // Target Mode string TAGET_MODE = "Management Mode = Money"; if(UsePercentManagement) TAGET_MODE = "Management Mode = Percentage"; // Current Equity string CurEquity = "Initial Equity = "+DoubleToStr(CurrentEquity,2); // Momentary Highest Equity string MomHigh_Percent = DoubleToStr( ((HighestEquity - CurrentEquity)/CurrentEquity)*100 , 2)+"%"; string MomentaryHighest = "Max Equity= "+DoubleToStr(HighestEquity,2)+" ("+MomHigh_Percent+")"; // Equity Target string EQ_T; if(UsePercentManagement && Equity_Target>0) EQ_T = "Equity Target = "+DoubleToStr(EQTARGET,2)+" (+"+DoubleToStr(Equity_Target,2)+"%)"; if(UsePercentManagement && Equity_Target<0) EQ_T = "Equity Target = "+DoubleToStr(EQTARGET,2)+" ("+DoubleToStr(Equity_Target,2)+"%)"; if(!UsePercentManagement && Equity_Target_by_Money>0) EQ_T = "Equity Target = "+DoubleToStr(EQTARGET,2)+" (+"+DoubleToStr(Equity_Target_by_Money,2)+")"; if(!UsePercentManagement && Equity_Target_by_Money<0) EQ_T = "Equity Target = "+DoubleToStr(EQTARGET,2)+" ("+DoubleToStr(Equity_Target_by_Money,2)+")"; // Equity Stop Target string EQ_STOPT; if(UsePercentManagement && Equity_Stop_Target>0) EQ_STOPT = "Equity Stop = "+DoubleToStr(EQSTOPTARGET,2)+" (-"+DoubleToStr(Equity_Stop_Target,2)+"%)"; if(UsePercentManagement && Equity_Stop_Target<0) EQ_STOPT = "Equity Stop = "+DoubleToStr(EQSTOPTARGET,2)+" (+"+DoubleToStr(-Equity_Stop_Target,2)+"%)"; if(!UsePercentManagement && Equity_Stop_Target_by_Money>0) EQ_STOPT = "Equity Stop = "+DoubleToStr(EQSTOPTARGET,2)+" (-"+DoubleToStr(Equity_Stop_Target_by_Money,2)+")"; if(!UsePercentManagement && Equity_Stop_Target_by_Money<0) EQ_STOPT = "Equity Stop = "+DoubleToStr(EQSTOPTARGET,2)+" (+"+DoubleToStr(-Equity_Stop_Target_by_Money,2)+")"; // If Trail has started double Locked_PL; if(UseTrailing && HighestEquity > TrailStartEquity) { double ModdedStopTarget = HighestEquity - TrailWidth; if(UsePercentManagement) { Locked_PL = ((ModdedStopTarget - CurrentEquity)/CurrentEquity)*100; if(Locked_PL>0) EQ_STOPT = "Equity Stop = "+DoubleToStr(ModdedStopTarget,2)+" (+"+DoubleToStr(Locked_PL,2)+"%)"; if(Locked_PL<0) EQ_STOPT = "Equity Stop = "+DoubleToStr(ModdedStopTarget,2)+" ("+DoubleToStr(Locked_PL,2)+"%)"; } if(!UsePercentManagement) { Locked_PL = ModdedStopTarget - CurrentEquity; if(Locked_PL>0) EQ_STOPT = "Equity Stop = "+DoubleToStr(ModdedStopTarget,2)+" (+"+DoubleToStr(Locked_PL,2)+")"; if(Locked_PL<0) EQ_STOPT = "Equity Stop = "+DoubleToStr(ModdedStopTarget,2)+" ("+DoubleToStr(Locked_PL,2)+")"; } } // TrailStartTaget string TrailStartTarget; TrailStartTarget = "Trail Start = "+DoubleToStr(TrailStartEquity,2); if(UsePercentManagement && Trailing_Start>0) TrailStartTarget = "Trail Start = "+DoubleToStr(TrailStartEquity,2)+" (+"+DoubleToStr(Trailing_Start,2)+"%)"; if(UsePercentManagement && Trailing_Start<0) TrailStartTarget = "Trail Start = "+DoubleToStr(TrailStartEquity,2)+" ("+DoubleToStr(Trailing_Start,2)+"%)"; // if(!UsePercentManagement && Trailing_Start_by_Money>0) TrailStartTarget = "Trail Start = "+DoubleToStr(TrailStartEquity,2)+" (+"+DoubleToStr(Trailing_Start_by_Money,2)+")"; // if(!UsePercentManagement && Trailing_Start_by_Money<0) TrailStartTarget = "Trail Start = "+DoubleToStr(TrailStartEquity,2)+" ("+DoubleToStr(Trailing_Start_by_Money,2)+")"; string TRAIL_PER = ""; if(UsePercentManagement) TRAIL_PER = " ("+DoubleToStr(MathAbs(Trailing_Width),2)+"%)"; string Trail_Width = "Trail Width = "+DoubleToStr(MathAbs(TrailWidth),2)+TRAIL_PER; // Floating Equity string FloatingEquity = "Floating Equity = "+DoubleToStr(AccountEquity(),2)+" "+AccountCurrency(); // Floating P/L double CurrentPL = AccountEquity()-CurrentEquity; string CurPL = DoubleToStr(CurrentPL,2); string CurPercent = DoubleToStr((CurrentPL / CurrentEquity) * 100,2); PlusMinus = ""; if(CurrentPL>0) PlusMinus = "+"; string FloatingPL = "Floating P/L = "+PlusMinus+CurPL + " ("+PlusMinus+CurPercent+"%)"; string DayofWeek = DOW [ DayOfWeek() ]; string MONTH = Month(); if(Month()<10) MONTH = "0"+MONTH; string DAY = Day(); if(Day()<10) DAY = "0"+DAY; string HOUR = Hour(); if(Hour()<10) HOUR = "0"+HOUR; string MIN = Minute(); if(Minute()<10) MIN = "0"+MIN; string CurrentTime = Year()+"/"+MONTH+"/"+DAY+"/"+DayofWeek+"/"+HOUR+":"+MIN; Comment(DAAAAASH,"\n",NAME,"\n", DAAAAASH,"\n",ENABLED,"\n",EQTrail,"\n",Emargency,"\n",TAGET_MODE,"\n", DAAAAASH,"\n",CurEquity,"\n",EQ_T,"\n",EQ_STOPT,"\n", DAAAAASH,"\n",MomentaryHighest,"\n",TrailStartTarget,"\n",Trail_Width,"\n", DAAAAASH,"\n",FloatingEquity,"\n",FloatingPL,"\n",CurrentTime); }