//+------------------------------------------------------------------+ //| easyLMA.mq4 | //| code by Newdigital | //| http://www.forex-tsd.com | //| using Gordago software | //| http://www.gordago.com | //| | //| 08.02.2006 easyLMA by idea of Easy fx | //| (see the thread http://www.forex-tsd.com/members/easy-fx.html | //| M30 timeframe | //| GBPUSD | //+------------------------------------------------------------------+ #property copyright "newdigital" #property link "http://www.forex-tsd.com" extern int MAGIC = 363278; extern string PARAMETERS_TRADE = "PARAMETERS TRADE"; extern int Slippage = 4; extern double lStopLoss = 60; extern double sStopLoss = 60; extern double lTakeProfit = 100; extern double sTakeProfit = 100; extern double lTrailingStop = 50; extern double sTrailingStop = 50; extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT"; extern color clOpenBuy = Blue; extern color clCloseBuy = Aqua; extern color clOpenSell = Red; extern color clCloseSell = Violet; extern color clModiBuy = Blue; extern color clModiSell = Red; extern string Name_Expert = "easyLMA"; extern bool UseSound = False; extern string NameFileSound = "alert.wav"; extern bool UseHourTrade = False; extern int FromHourTrade = 8; extern int ToHourTrade = 19; extern string MONEY_MANAGEMENT = "LWC:0 fixed lot;1 % deposit;2-ratio fractional;3-fraction fixed"; #include <b-Lots.mqh> extern string PARAMETERS_INDICATOR_ONE = "Moving Average"; extern int MAsmallMode = 1; //0=sma, 1=ema, 2=smma, 3=lwma extern double MAsmall = 55; extern double MAbig = 200; extern int MAbigMode = 1; //0=sma, 1=ema, 2=smma, 3=lwma extern string PARAMETERS_INDICATOR_TWO = "Stochastic"; extern int KPeriod=14; extern int DPeriod=5; extern int Slowing=5; extern string PARAMETERS_INDICATOR_THREE = "Parabolic SAR"; extern double Step=0.008; extern double Maximum=0.05; extern string PARAMETERS_INDICATOR_FOUR = "Parabolic SAR"; extern double Step2=0.02; extern double Maximum2=0.2; extern string PARAMETERS_INDICATOR_FIVE = "I_XO_A_H"; extern int BoxSize=34; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start(){ if (UseHourTrade){ if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) { Comment("Time for trade has not come else!"); return(0); } } if(Bars<100){ Print("bars less than 100"); return(0); } if(lStopLoss<10){ Print("StopLoss less than 10"); return(0); } if(lTakeProfit<10){ Print("TakeProfit less than 10"); return(0); } if(sStopLoss<10){ Print("StopLoss less than 10"); return(0); } if(sTakeProfit<10){ Print("TakeProfit less than 10"); return(0); } double diMA0=iMA(NULL,0,MAsmall,0,MAsmallMode,PRICE_CLOSE,0); double diMA1=iMA(NULL,0,MAbig,0,MAbigMode,PRICE_CLOSE,0); double diMA2=iMA(NULL,0,MAsmall,0,MAsmallMode,PRICE_CLOSE,1); double diMA3=iMA(NULL,0,MAbig,0,MAbigMode,PRICE_CLOSE,1); double diStochastic4=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MODE_EMA,PRICE_CLOSE,MODE_MAIN,0); double diStochastic5=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MODE_EMA,PRICE_CLOSE,MODE_SIGNAL,0); double diSAR6=iSAR(NULL,0,Step,Maximum,1); double diSAR7=iSAR(NULL,0,Step,Maximum,0); double diSAR8=iSAR(NULL,0,Step2,Maximum2,1); double diSAR9=iSAR(NULL,0,Step2,Maximum2,0); double diIXO10=iCustom(NULL,0,"I_XO_A_H",BoxSize,0,0); double diMA11=iMA(NULL,0,MAsmall,0,MAsmallMode,PRICE_CLOSE,0); double diMA12=iMA(NULL,0,MAbig,0,MAbigMode,PRICE_CLOSE,0); double diMA13=iMA(NULL,0,MAsmall,0,MAsmallMode,PRICE_CLOSE,1); double diMA14=iMA(NULL,0,MAbig,0,MAbigMode,PRICE_CLOSE,1); double diStochastic15=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MODE_EMA,PRICE_CLOSE,MODE_MAIN,0); double diStochastic16=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MODE_EMA,PRICE_CLOSE,MODE_SIGNAL,0); double diSAR17=iSAR(NULL,0,Step,Maximum,1); double diSAR18=iSAR(NULL,0,Step,Maximum,0); double diSAR19=iSAR(NULL,0,Step2,Maximum2,1); double diSAR20=iSAR(NULL,0,Step2,Maximum2,0); double diIXO21=iCustom(NULL,0,"I_XO_A_H",BoxSize,1,0); double d22=(0); if(AccountFreeMargin()<(1000*Lots)){ Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (!ExistPositions()){ if ((diMA0>=diMA1 && diMA2<diMA3 && diStochastic4>diStochastic5 && diSAR6<diSAR7 && diSAR8<diSAR9 && diIXO10 > d22)){ OpenBuy(); return(0); } if ((diMA11<=diMA12 && diMA13>diMA14 && diStochastic15<diStochastic16 && diSAR17>diSAR18 && diSAR19>diSAR20 && diIXO21< d22)){ OpenSell(); return(0); } } TrailingPositionsBuy(lTrailingStop); TrailingPositionsSell(sTrailingStop); return (0); } bool ExistPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { return(True); } } } return(false); } void TrailingPositionsBuy(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { if (Bid-OrderOpenPrice()>trailingStop*Point) { if (OrderStopLoss()<Bid-trailingStop*Point) ModifyStopLoss(Bid-trailingStop*Point); } } } } } } void TrailingPositionsSell(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_SELL) { if (OrderOpenPrice()-Ask>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); if (fm && UseSound) PlaySound(NameFileSound); } void OpenBuy() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossBuy(); ldTake = GetTakeProfitBuy(); lsComm = GetCommentForOrder(); Lots=GetSizeLot(); OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); if (UseSound) PlaySound(NameFileSound); } void OpenSell() { double ldLot, ldStop, ldTake; string lsComm; ldLot = GetSizeLot(); ldStop = GetStopLossSell(); ldTake = GetTakeProfitSell(); lsComm = GetCommentForOrder(); Lots=GetSizeLot(); OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); if (UseSound) PlaySound(NameFileSound); } string GetCommentForOrder() { return(Name_Expert); } double GetStopLossBuy() { return (Bid-lStopLoss*Point);} double GetStopLossSell() { return(Ask+sStopLoss*Point); } double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); } double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Moving average indicator
Stochastic oscillator
Parabolic Stop and Reverse system
Custom Indicators Used:
I_XO_A_H
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached
Other Features:
It plays sound alerts