ft_ema_bands_rsi_

Author: Copyright 2015, fortrader.org
Price Data Components
Series array that contains close prices for each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt Closes Orders by itself
Indicators Used
Moving average indicatorRelative strength index
0 Views
0 Downloads
0 Favorites
ft_ema_bands_rsi_
//+------------------------------------------------------------------+
//|                                            FT_EMA_Bands_RSI.mq4 |
//|                                    Copyright 2015, fortrader.org |
//|                                            https://fortrader.org |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, fortrader.org"
#property link      "https://fortrader.org"
#property version   "1.00"
#property strict
#property link "http://fortrader.org/forex-strategy/trend-strategy/trendovaya-torgovaya-strategiya-emas-bands-with-rsi-filter.html"
string ea_name="FT_EMA_Bands_RSI";
int magic_n=22012016;

int ema1_start,ema2_start;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

double rsi_trend;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

   if(EMA(EMA1_Period)> EMA(EMA2_Period) && ChPos(OP_SELL)==0) {  ema1_start = 1;}
   if(EMA(EMA1_Period) < EMA(EMA2_Period) && ChPos(OP_BUY)==0) {  ema2_start = 1;}

//rsi filter
   if(RSI(PeriodRSI)>70){rsi_trend=1;}
   if(RSI(PeriodRSI)<30){rsi_trend=-1;}

   if(ema2_start==1 && EMA(EMA1_Period)>EMA(EMA2_Period) // ïåðåñå÷åíèå ñðåäíèõ
      && MWE(6) > 0                                      // macd ôèëüòð âûøå 0
      && (rsi_trend ==1 && RSI(PeriodRSI)>40)            // control rsi trend filter
      && ChPos(OP_BUY)==0)
     {OpenPos(OP_BUY);ema2_start=0;rsi_trend=0;}

   if(ema1_start==1 && EMA(EMA1_Period)<EMA(EMA2_Period) // ïåðåñå÷åíèå ñðåäíèõ
      && MWE(6)<0                                        // macd ôèëüòð íèæå 0
      &&(rsi_trend ==-1 && RSI(PeriodRSI)<60)            // control rsi trend filter
      && ChPos(OP_SELL)==0)
     {OpenPos(OP_SELL);ema1_start=0;}

   ClosePos();
//   Print(+" RSIFilter1 "+RSIFilter(0)+" RSIFilter2 "+RSIFilter(1));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MaximumMinimum(int type,int barsearch)
  {
   int x=0,stop=0;double minmax;

   if(type==0)
     {
      while(stop==0)
        {
         minmax=Low[iLowest(NULL,0,MODE_LOW,barsearch,x)];
         if(minmax>Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)])
           {
            minmax=Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)];
            x=x+barsearch;
           }
         else {stop=1;return(minmax);}
        }//while(stop
     }//if(type

   if(type==1)
     {
      while(stop==0)
        {
         minmax=High[iHighest(NULL,0,MODE_HIGH,barsearch,x)];
         if(minmax<High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)])
           {
            minmax=High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)];
            x=x+barsearch;
           }
         else{stop=1;return(minmax);}
        }// while(sto
     }//if(type
   return(0);
  }
input string a; //EMA Settings:
input int EMA1_Period = 5;
input int EMA2_Period = 21;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double EMA(int period)
  {
   double ema=iMA(
                  Symbol(),    // èìÿ ñèìâîëà 
                  0       ,    // òàéìôðåéì 
                  period,      // ïåðèîä 
                  0,           // ñäâèã ñðåäíåé 
                  MODE_EMA,    // ìåòîä óñðåäíåíèÿ 
                  PRICE_CLOSE, // òèï öåíû 
                  1            // ñäâèã 
                  );

   return ema;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double RSI(int period)
  {
   double ema=iRSI(
                   Symbol(),    // èìÿ ñèìâîëà 
                   0       ,    // òàéìôðåéì 
                   period,      // ïåðèîä 
                   PRICE_CLOSE, // òèï öåíû 
                   1            // ñäâèã 
                   );

   return ema;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string b; //MACD Settings:
extern int FastEMA=10;
extern int SlowEMA=20;
extern int SignalEMA=1;
extern int MAofSignalPer=7;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MWE(int mode)
  {
   double wme=iCustom(
                      Symbol(),                                 // èìÿ ñèìâîëà 
                      0,                                        // òàéìôðåéì 
                      "Macd-with-EMA",                          // ïàïêà/èìÿ_ïîëüçîâàòåëüñêîãî èíäèêàòîðà 
                      FastEMA,SlowEMA,SignalEMA,MAofSignalPer,// ñïèñîê âõîäíûõ ïàðàìåòðîâ èíäèêàòîðà 
                      mode,// èñòî÷íèê äàííûõ 
                      0                                         // ñäâèã 
                      );

   return wme;
  }

input string c; //RSI Settings:
extern int PeriodRSI=14;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double RSIFilter(int mode)
  {
   double wme=iCustom(
                      Symbol(),                                 // èìÿ ñèìâîëà 
                      0,                                        // òàéìôðåéì 
                      "RSIFilter_v1",// ïàïêà/èìÿ_ïîëüçîâàòåëüñêîãî èíäèêàòîðà 
                      PeriodRSI,// ñïèñîê âõîäíûõ ïàðàìåòðîâ èíäèêàòîðà 
                      mode,// èñòî÷íèê äàííûõ 
                      0                                         // ñäâèã 
                      );

   return wme;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos(int cmd)
  {
   int ticket;double sl,tp;
   switch(cmd)
     {
      case OP_BUY:
         sl=MaximumMinimum(0,10);
         tp=TakeProfit(sl,OP_BUY);
         ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,sl,tp,ea_name,magic_n,0,clrGreen);
         break;

      case OP_SELL:
         sl=MaximumMinimum(1,10);
         tp=TakeProfit(sl,OP_SELL);
         ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,sl,tp,ea_name,magic_n,0,clrYellow);
         break;

     }
  };
//--- Close Type 
enum CloseType
  {
   Cl1=0,     // SL*2 
   CL2=1,     // EMACross 
   Cl3=2      // FunCross
  };
//--- input parameters 
input string d; //TakeProfit Settings:
input CloseType TpType=Cl1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double TakeProfit(double sl,int cmd)
  {

   double tp=0;
   switch(TpType)
     {
      case 0:
         if(cmd==OP_BUY)
         tp=Close[0]+MathAbs(Ask-sl)*2;
         if(cmd==OP_SELL)
            tp=Close[0]-MathAbs(Ask-sl)*2;
     }

   return tp;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double ChPos(int cmd)
  {

   int count=0,i,accTotal=OrdersTotal();

   for(i=0;i<accTotal;i++)
     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderType()==OP_BUY  && cmd==OP_BUY)(count++);
         if(OrderType()==OP_SELL && cmd==OP_SELL)(count++);

        }

     }
   return count;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {

   int ticket=0,i,accTotal=OrdersTotal();

   for(i=0;i<accTotal;i++)
     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderType()==OP_BUY && TpType==1 && EMA(EMA1_Period)<EMA(EMA2_Period)){ticket=OrderClose(OrderTicket(),OrderLots(),Bid,10,clrAqua);}
         if(OrderType()==OP_BUY && TpType==2 && Close[1]<EMA(EMA1_Period)){ticket=OrderClose(OrderTicket(),OrderLots(),Bid,10,clrAqua);}

         if(OrderType()==OP_SELL && TpType==1 && EMA(EMA1_Period)>EMA(EMA2_Period)){ticket=OrderClose(OrderTicket(),OrderLots(),Ask,10,clrAqua);}
         if(OrderType()==OP_SELL && TpType==2 && Close[1]>EMA(EMA1_Period)){ticket=OrderClose(OrderTicket(),OrderLots(),Ask,10,clrAqua);}
        }
     }
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---