//+------------------------------------------------------------------+
//|                                           Harami MA RSI MACD.ex4 |
//|                      Copyright © 2016, Forex-Index-Intraday, Ger |
//|                             http://www.forex-index-intraday.com/ |
//+------------------------------------------------------------------+
#property strict
#property copyright "Copyright © 2016, Forex-Index-Intraday, Ger"
#property link      "http://www.forex-index-intraday.com/"
#property version   "16.04"
#property description "simple Harami -MA -RSI -MACD indicator;"
#property description "signal after close;"
#property description "alert;"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Red
#property indicator_width2 1
extern int barsToProcess=5000; //Bars to process
extern string line0______________________________________="---------------------------------------------------------------"; //----------------------------------------------------------------
extern bool Alert_On=false; //Alert On
extern string line1______________________________________="---------------------------------------------------------------"; //----------------------------------------------------------------
extern bool MA_filter=false; //MA filter
extern bool RSI_filter=false; //RSI filter
extern bool MACD_filter=false; // MACD filter
extern bool One_Candle_before=false; //One Candle before
extern string line2______________________________________="---------------------------------------------------------------"; //----------------------------------------------------------------
extern int Trend_MA=12; //Trend MA
input int MA_shift=0; //MA Shift
input ENUM_MA_METHOD MA_Mode=MODE_EMA; //MA Mode
input ENUM_APPLIED_PRICE MA_price=PRICE_HIGH; //MA Price
extern string line3______________________________________="---------------------------------------------------------------"; //----------------------------------------------------------------
extern int RSI_Period=5; //RSI Period
extern int RSI_upper_level=70; //RSI upper level
extern int RSI_lower_level=30; //RSI lower level
extern string line4______________________________________="---------------------------------------------------------------"; //----------------------------------------------------------------
extern int MACD_fast_EMA=12; //MACD fast EMA
extern int MACD_slow_EMA=26; //MACD slow EMA
extern int MACD_SMA=9; //MACD SMA
extern string End_____________________________="________________________________";
double One_Candle_before_a;
double One_Candle_before_b;
double One_Candle_before_c;
double One_Candle_before_d;
double MA_filter_a;
double MA_filter_b;
double MA_filter_c;
double MA_filter_d;
double RSI_filter_a;
double RSI_filter_b;
double RSI_filter_c;
double RSI_filter_d;
double MACD_filter_a;
double MACD_filter_b;
double MACD_filter_c;
double MACD_filter_d;
double movesUp[];
double movesDown[];
string TimeFrameStr;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetTimeFrameStr()
  {
   switch(Period())
     {
      case 1 : TimeFrameStr="M1"; break;
      case 5 : TimeFrameStr="M5"; break;
      case 15 : TimeFrameStr="M15"; break;
      case 30 : TimeFrameStr="M30"; break;
      case 60 : TimeFrameStr="H1"; break;
      case 240 : TimeFrameStr="H4"; break;
      case 1440 : TimeFrameStr="D1"; break;
      case 10080 : TimeFrameStr="W1"; break;
      case 43200 : TimeFrameStr="MN"; break;
      default : TimeFrameStr=(string)Period();
     }
   return (TimeFrameStr);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
     {
      SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,233);
      SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,234);
     }
   SetIndexBuffer(0,movesUp);
   SetIndexBuffer(1,movesDown);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar;
   datetime curbar=Time[0];
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return (true);
     }
   else
     {
      return(false);
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int limit,i;
   double Range;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(limit>barsToProcess) limit=barsToProcess;
   for(i=0; i<=limit; i++)
     {
      Range=(iATR(NULL,NULL,40,i+1));
      if(MA_filter==true)
        {
         MA_filter_a=(((iClose(NULL,0,i+1))>=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,i+1)))
                     || ((iOpen(NULL,0,i+1))>=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,i+1))));
         MA_filter_b=(((iClose(NULL,0,1))>=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,1)))
                     || ((iOpen(NULL,0,1))>=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,1))));
         MA_filter_c=(((iClose(NULL,0,i+1))<=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,i+1)))
                     || ((iOpen(NULL,0,i+1))<=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,i+1))));
         MA_filter_d=(((iClose(NULL,0,1))<=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,1)))
                     || ((iOpen(NULL,0,1))<=(iMA(NULL,0,Trend_MA,MA_shift,MA_Mode,MA_price,1))));
        }
      if(MA_filter==false)
        {
         MA_filter_a=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         MA_filter_b=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
         MA_filter_c=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         MA_filter_d=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
        }
      if(RSI_filter==true)
        {
         RSI_filter_a=((iRSI(NULL, 0, RSI_Period, 0, i+1)) < RSI_lower_level);
         RSI_filter_b=((iRSI(NULL, 0, RSI_Period, 0, 1)) < RSI_lower_level);
         RSI_filter_c=((iRSI(NULL, 0, RSI_Period, 0, i+1)) > RSI_upper_level);
         RSI_filter_d=((iRSI(NULL, 0, RSI_Period, 0, 1)) > RSI_upper_level);
        }
      if(RSI_filter==false)
        {
         RSI_filter_a=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         RSI_filter_b=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
         RSI_filter_c=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         RSI_filter_d=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
        }
      if(MACD_filter==true)
        {
         MACD_filter_a=((iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,i+1))>
                        (iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,i+2)));
         MACD_filter_b=((iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,1))>
                        (iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,2)));
         MACD_filter_c=((iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,i+1))<
                        (iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,i+2)));
         MACD_filter_d=((iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,1))<
                        (iMACD(NULL,0,MACD_fast_EMA,MACD_slow_EMA,MACD_SMA,0,0,2)));
        }
      if(MACD_filter==false)
        {
         MACD_filter_a=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         MACD_filter_b=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
         MACD_filter_c=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         MACD_filter_d=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
        }
      if(One_Candle_before==true)
        {
         One_Candle_before_a=((iClose(NULL, 0, i+3)) < (iOpen(NULL, 0, i+3)));
         One_Candle_before_b=((iClose(NULL, 0, 3)) < (iOpen(NULL, 0, 3)));
         One_Candle_before_c=((iOpen(NULL, 0, i+3)) < (iClose(NULL, 0, i+3)));
         One_Candle_before_d=((iOpen(NULL, 0, 3)) < (iClose(NULL, 0, 3)));
        }
      if(One_Candle_before==false)
        {
         One_Candle_before_a=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         One_Candle_before_b=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
         One_Candle_before_c=((iLow(NULL, 0, i+1)) > (iLow(NULL, 0, i+2)));
         One_Candle_before_d=((iLow(NULL, 0, 1)) > (iLow(NULL, 0, 2)));
        }
        {
         if(((iLow(NULL,0,i+1))>(iLow(NULL,0,i+2))
            && ((iHigh(NULL,0,i+1))<(iHigh(NULL,0,i+2)))
            && ((iClose(NULL,0,i+2))<(iOpen(NULL,0,i+2)))
            && ((iClose(NULL,0,i+1))>(iOpen(NULL,0,i+1)))
            && MA_filter_a
            && RSI_filter_a
            && MACD_filter_a
            && One_Candle_before_a
            ))
           {
            movesUp[i+1]=Low[i+1]-Range*0.3;
           }
         if(((iLow(NULL,0,1))>(iLow(NULL,0,2))
            && ((iHigh(NULL,0,1))<(iHigh(NULL,0,2)))
            && ((iClose(NULL,0,2))<(iOpen(NULL,0,2)))
            && ((iClose(NULL,0,1))>(iOpen(NULL,0,1)))
            && MA_filter_b
            && RSI_filter_b
            && MACD_filter_b
            && One_Candle_before_b
            ))
           {
            if(NewBar())
              {
               if(Alert_On==true)
                 {
                  Alert(Symbol()+"  "+GetTimeFrameStr()+"  "+"Arrow =>  up, "+" Harami");
                 }
              }
           }
         if(((iLow(NULL,0,i+1))>(iLow(NULL,0,i+2))
            && ((iHigh(NULL,0,i+1))<(iHigh(NULL,0,i+2)))
            && ((iOpen(NULL,0,i+2))<(iClose(NULL,0,i+2)))
            && ((iOpen(NULL,0,i+1))>(iClose(NULL,0,i+1)))
            && MA_filter_c
            && RSI_filter_c
            && MACD_filter_c
            && One_Candle_before_c
            ))
           {
            movesDown[i+1]=High[i+1]+Range*0.3;
           }
         if(((iLow(NULL,0,1))>(iLow(NULL,0,2))
            && ((iHigh(NULL,0,1))<(iHigh(NULL,0,2)))
            && ((iOpen(NULL,0,2))<(iClose(NULL,0,2)))
            && ((iOpen(NULL,0,1))>(iClose(NULL,0,1)))
            && MA_filter_d
            && RSI_filter_d
            && MACD_filter_d
            && One_Candle_before_d
            ))
           {
            if(NewBar())
              {
               if(Alert_On==true)
                 {
                  Alert(Symbol()+"  "+GetTimeFrameStr()+"  "+"Arrow =>  down, "+" Harami");
                 }
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
             
            
            
            
Comments