//+------------------------------------------------------------------+ //| Ten Stochs Wave EA.mq4 | //| Copyright © 2008, TradingSytemForex | //| http://www.tradingsystemforex.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, TradingSytemForex" #property link "http://www.tradingsystemforex.com" #define OrSt "Ten Stochs Wave EA" extern string STO="---------------- Stochs"; extern double First_Stoch_KP=4; extern double Stoch_PERIOD=2; extern double Stoch_Slowing=2; extern double Hig_l=80; extern double Lo_l =20; extern string RSI_Settings = "---------- RSI Filter Settings"; extern bool UseRSIforOpen =true; extern int RSIPeriod = 14, RSIPrice = 1; extern int RSIBuySig = 55, RSISellSig = 45; extern string STL="---------------- Level"; extern bool UseHighLevelforClose=true; //extern bool UseDownLevelforClose=true; //extern double DownLevel_close_buy=79; // < High_l extern double HighLevel_close_buy=98; // max //extern double DownLevel_close_sell=21; // > Low_l extern double HighLevel_close_sell=3; // mini extern string SFC="---------------- Stoch for close"; extern bool UseSFCwithClose=true; extern int KPeriodclose=8; extern int DPeriodclose=3; extern int Slowingclose=3; extern int MAStoch=0; //0-simple;1-exponential;2-smoothed;3-linear weight extern int PriceStoch=0; //1-close/close ; 0-low/High extern bool UseDistance=false; extern double Distance=5; extern string timeframe="5-5min,15-15min,30-30min,60-1h,240-4h,"; extern double Timeframe=5; // 5-5min,15-15min,30-30min,60-1h,240-4h, extern bool closestochonthesametimeframe=true; // extern string LM="---------------- Lot Management"; extern double Lots=0.1; extern bool MM=false; //money management extern double Risk=10; //risk in percentage extern string TSTB="---------------- TP SL TS BE"; bool RealSL_Enabled=false; int RealSL=5; //stop loss under 15 pîps bool RealTP_Enabled=false; int RealTP=10; //take profit under 10 pîps extern int SL=0; //stop loss extern int TP=0; //take profit extern int TS=0; //trailing stop extern int TS_Step=1; //trailing stop step extern int BE=0; //breakeven extern string EXT="---------------- Extras"; extern bool Reverse=false; bool Add_Positions=false; //positions cumulated int MaxOrders=100; //maximum number of orders extern int Magic=0; extern string Safety="Equity Baskett"; extern bool UseMargincut = true; extern double Margincutoff = 50; // Expert will stop trading if equity level decreases to that level. extern bool Usetarget = true; extern bool Usebasket = true; extern double TargetEquity =1000000; //value of win extern double BasketLoss =10000; //value of loses extern int MaxTradePerBar=1; datetime Time0;int TradePerBar=0;int BarCount=-1; int init(){Time0=Time[0];return(0);} int deinit(){return(0);} int Slip=3;static int TL=0;double MML=0; // expert start function int start(){int j=0,limit=1; double BV=0,SV=0; double STOM1,STOM2,STOM3,STOM4,STOM5,STOM6,STOM7,STOM8,STOM9,STOM10,czas,High_l,Low_l; int x; if(CntO(OP_BUY,Magic)>0) TL=1;if(CntO(OP_SELL,Magic)>0) TL=-1;for(int i=1;i<=limit;i++){ //string stopbuy="false",stopsell="false"; //stopcrossbuy="false",stopcrosssell="false",stopdownbuy="false",stopdownsell="false",stophighbuy="false",stophighsell="false"; STOM1=iStochastic(NULL,0,First_Stoch_KP,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM2=iStochastic(NULL,0,First_Stoch_KP+1,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM3=iStochastic(NULL,0,First_Stoch_KP+2,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM4=iStochastic(NULL,0,First_Stoch_KP+3,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM5=iStochastic(NULL,0,First_Stoch_KP+4,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM6=iStochastic(NULL,0,First_Stoch_KP+5,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM7=iStochastic(NULL,0,First_Stoch_KP+6,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM8=iStochastic(NULL,0,First_Stoch_KP+7,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM9=iStochastic(NULL,0,First_Stoch_KP+8,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); STOM10=iStochastic(NULL,0,First_Stoch_KP+9,Stoch_PERIOD,Stoch_Slowing,MODE_SMA,0,MODE_MAIN,i); {if(UseSFCwithClose && closestochonthesametimeframe==true) {if(Timeframe==5){czas=PERIOD_M5;x=300000;}if(Timeframe==15){czas=PERIOD_M15;x=900000;}if(Timeframe==30){czas=PERIOD_M30;x=1800000;}if(Timeframe==60){czas=PERIOD_H1;x=3600000;}if(Timeframe==240){czas=PERIOD_H4;x=14400000;}} else{if(Timeframe==5){czas=PERIOD_M1;x=300000;}if(Timeframe==15){czas=PERIOD_M5;x=900000;}if(Timeframe==30){czas=PERIOD_M15;x=1800000;}if(Timeframe==60){czas=PERIOD_M30;x=3600000;}if(Timeframe==240){czas=PERIOD_H1;x=14400000;}}} double RSI = iRSI(NULL,0,RSIPeriod,RSIPrice,0); string RSIFIB="false";string RSIFIS="false"; if(UseRSIforOpen==true){if(RSI>RSIBuySig)RSIFIB="true";if(RSI<RSISellSig)RSIFIS="true";} if(UseRSIforOpen==false){RSIFIB="true";RSIFIS="true";} double SCA=iStochastic(NULL,czas,KPeriodclose,DPeriodclose,Slowingclose,MAStoch,PriceStoch,MODE_MAIN,0); double SCB=iStochastic(NULL,czas,KPeriodclose,DPeriodclose,Slowingclose,MAStoch,PriceStoch,MODE_SIGNAL,0); double SC1=iStochastic(NULL,czas,KPeriodclose,DPeriodclose,Slowingclose,MAStoch,PriceStoch,MODE_MAIN,i); double SC2=iStochastic(NULL,czas,KPeriodclose,DPeriodclose,Slowingclose,MAStoch,PriceStoch,MODE_SIGNAL,i); //if(UseSFCwithClose&&SCA<SCB&&SC1>SC2&&(UseDistance==false||(UseDistance&&(SCB-SCA)>=Distance*Point))){stopcrossbuy="true";} //if(UseSFCwithClose&&SCA>SCB&&SC2>SC1&&(UseDistance==false||(UseDistance&&(SCA-SCB)>=Distance*Point))){stopcrosssell="true";} //if(UseDownLevelforClose&&SCA<DownLevel_close_buy){stopdownbuy="true";} //if(UseDownLevelforClose&&SCA>DownLevel_close_sell){stopdownsell="true";} //if(UseHighLevelforClose&&SCA>HighLevel_close_buy){stophighbuy="true";} //if(UseHighLevelforClose&&SCA<HighLevel_close_sell){stophighsell="true";} if(UseSFCwithClose&&SCA<SCB&&SC1>SC2&&SCA>Hig_l&&STOM1>Hig_l && STOM2>Hig_l && STOM3>Hig_l && STOM4>Hig_l && STOM5>Hig_l && STOM6>Hig_l && STOM7>Hig_l && STOM8>Hig_l && STOM9>Hig_l && STOM10>Hig_l){High_l=100;}else {High_l=Hig_l ;} if(SCA>SCB&&SC2>SC1&&UseSFCwithClose&&SCA<Lo_l&&STOM1<Lo_l && STOM2<Lo_l && STOM3<Lo_l && STOM4<Lo_l && STOM5<Lo_l && STOM6<Lo_l && STOM7<Lo_l && STOM8<Lo_l && STOM9<Lo_l && STOM10<Lo_l){Low_l=0;} else{ Low_l=Lo_l;} if( RSIFIS=="true" && STOM1<Low_l && STOM2<Low_l && STOM3<Low_l && STOM4<Low_l && STOM5<Low_l && STOM6<Low_l && STOM7<Low_l && STOM8<Low_l && STOM9<Low_l && STOM10<Low_l&&TradePerBar<=MaxTradePerBar){if(Reverse) {BV=1;PlaySound("alert.wav");} else {SV=1;PlaySound("alert.wav");} break;} if( RSIFIB=="true" && STOM1>High_l && STOM2>High_l && STOM3>High_l && STOM4>High_l && STOM5>High_l && STOM6>High_l && STOM7>High_l && STOM8>High_l && STOM9>High_l && STOM10>High_l&&TradePerBar<=MaxTradePerBar){if(Reverse) {SV=1;PlaySound("alert.wav");} else {BV=1;PlaySound("alert.wav");} break;}} // expert money management if(MM){if(Risk<0.1 || Risk>100) {Comment("Invalid Risk Value."); return(0);} else {MML=MathFloor((AccountFreeMargin() *AccountLeverage()*Risk*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT )))*MarketInfo(Symbol(),MODE_MINLOT );}} if(MM==false){MML=Lots;} // expert init positions int cnt=0,OP=0,OS=0,OB=0,CS=0,CB=0,CLoseBuy=0,CLoseSel=0,CLHLCB=0,CLHLCS=0; OP=0;for(cnt=0; cnt<OrdersTotal();cnt++) {OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if((OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)) OP=OP+1;} if(OP>=1){OS=0; OB=0;}OB=0;OS=0;CB=0;CS=0; // expert conditions to open position if(SV>0&&TradePerBar<=MaxTradePerBar){OS=1;OB=0;}if(BV>0&&TradePerBar<=MaxTradePerBar){OB=1;OS=0;} // safety if((UseMargincut&&AccountFreeMargin()< Margincutoff) ||(Usetarget&&AccountEquity()>=TargetEquity) || (Usebasket&&AccountEquity()<=(AccountBalance()-BasketLoss) )) { Comment( "\nSTOP TRADING....", "\nAccountEquity = ", AccountEquity(), "\nTarget Balance or Target Loss or FreeMargin hit !!!!!"); closeall(); return(0); } // expert conditions to close position //{if(UseSFCwithClose ) // {if(Timeframe==5)x=300000;if(Timeframe==15)x=900000;if(Timeframe==30)x=1800000;if(Timeframe==60)x=3600000;}} if(SCA<SCB&&SC1>SC2&&(UseDistance==false||(UseDistance&&(SCB-SCA)>=Distance*Point))){CLoseBuy=1;} if(SCA>SCB&&SC2>SC1&&(UseDistance==false||(UseDistance&&(SCA-SCB)>=Distance*Point))){CLoseSel=1;}//} // if(SCA<DownLevel_close_buy){CLDLCB=1;} // if(SCA>DownLevel_close_sell){CLDLCS=1;} if(SCA>HighLevel_close_buy){CLHLCB=1;} if(SCA<HighLevel_close_sell){CLHLCS=1;} if((SV>0) ||(UseSFCwithClose&&CLoseBuy==1)|| (CLHLCB==1&&UseHighLevelforClose)|| (RealSL_Enabled && (OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled && (Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;} if((BV>0) ||(UseSFCwithClose&&CLoseSel==1)|| (CLHLCS==1&&UseHighLevelforClose)|| (RealSL_Enabled && (Ask-OrderOpenPrice())/Point>=RealSL)||(RealTP_Enabled && (OrderOpenPrice()-Bid)/Point>=RealTP)){CS=1;} for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)){if (CB==1){OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Red);Sleep(x); return(0);}} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)){ if(CS==1){OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);Sleep(x);return(0);}}} if(BarCount!=Bars){TradePerBar=0;BarCount = Bars;} double SLI=0,TPI=0;int TK=0; // expert open position value if((AddP() && Add_Positions && OP<=MaxOrders) || (OP==0 && !Add_Positions)) { if(OS==0&&OB==0){Comment("no order opened");} if(OS==1){if (TP==0) TPI=0; else TPI=Bid-TP*Point;if (SL==0) SLI=0; else SLI=Bid+SL*Point;if(Time0!=Time[0]){TK=OrderSend(Symbol(),OP_SELL,MML,Bid,Slip,SLI,TPI,OrSt,Magic,0,Red);OS=0;Comment("sell order opened","\n","magic number : ",Magic);Time0=Time[0];if(TK>0)TradePerBar++;return(0);}} if(OB==1){if (TP==0) TPI=0; else TPI=Ask+TP*Point;if(SL==0) SLI=0; else SLI=Ask-SL*Point;if(Time0!=Time[0]){TK=OrderSend(Symbol(),OP_BUY,MML,Ask,Slip,SLI,TPI,OrSt,Magic,0,Lime);OB=0;Comment("buy order opened","\n","magic number : ",Magic); Time0=Time[0];if(TK>0)TradePerBar++;return(0);}}} for(j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS, MODE_TRADES)){if (OrderSymbol()==Symbol() && ((OrderMagicNumber()==Magic) || Magic==0)) {TrP();}}}return(0);} // expert number of orders int CntO(int Type,int Magic){int _CntO;_CntO=0; for(int j=0;j<OrdersTotal();j++){OrderSelect(j, SELECT_BY_POS, MODE_TRADES);if(OrderSymbol()==Symbol()) {if((OrderType()==Type && (OrderMagicNumber()==Magic) || Magic==0)) _CntO++;}}return(_CntO);} // expert trailing stop void TrP(){double pb,pa,pp;pp=MarketInfo(OrderSymbol(),MODE_POINT);if (OrderType()==OP_BUY){pb=MarketInfo(OrderSymbol(),MODE_BID); //expert breakeven if(BE>0){if((pb-OrderOpenPrice())>BE*pp){if((OrderStopLoss()-OrderOpenPrice())<0){ModSL(OrderOpenPrice()+0*pp);}}} if(TS>0){if((pb-OrderOpenPrice())>TS*pp){if(OrderStopLoss()<pb-(TS+TS_Step-1)*pp){ModSL(pb-TS*pp);return;}}}} if(OrderType()==OP_SELL){pa=MarketInfo(OrderSymbol(),MODE_ASK);if(BE>0){if((OrderOpenPrice()-pa)>BE*pp){if((OrderOpenPrice()-OrderStopLoss())<0){ModSL(OrderOpenPrice()-0*pp);}}} if (TS>0){if (OrderOpenPrice()-pa>TS*pp){if (OrderStopLoss()>pa+(TS+TS_Step-1)*pp || OrderStopLoss()==0){ModSL(pa+TS*pp);return;}}}}} //expert stoploss void ModSL(double ldSL){bool fm;fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);} //expert add positions function bool AddP(){int _num=0; int _ot=0; for (int j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol() && OrderType()<3 && ((OrderMagicNumber()==Magic) || Magic==0)) { _num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();}} if(_num==0) return(true);if(_num>0 && ((Time[0]-_ot))>0) return(true);else return(false);} // void closeall() { for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderCloseTime()==0) { if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } }}
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Stochastic oscillator
Relative strength index
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts