Ten Stochs Wave EA (string)_cross RSI 2[1].6





//+------------------------------------------------------------------+
//|                                           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