ind_RSICCIDiv_v1





//+------------------------------------------------------------------+
//|                                             ind_RSICCIDiv_v1.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Integer"
#property link      "for-good-letters@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Red

#property indicator_width1 2
#property indicator_width2 2

 
//---- input parameters
extern   int   RSIPeriod=14;           // ïåðèîä RSI.
extern   int   RSIPrice=0;             // öåíà RSI: 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted.
extern   int   RSILowerLevel=60;       // íèæíèé óðîâåíü RSI, âåðõíèé óðîâåíü îïðåäåëÿåòñÿ êàê 100-RSILowerLevel. Ïîëîæåíèå RSI íèæå íèæíåãî óðîâíÿ ñ÷èòàåòñÿ ìåäâåæüèì òðåíäîì, âûøå âåðõíåãî óðîâíÿ - áû÷üèì. 
         int   RSIUpperLevel;
extern   int   RSILowerLevel_2=30;     // íèæíèé óðîâåíü RSI èñïîëüçóåìûé äëÿ îïðåäåëåíèÿ ïîñëåäíåé çîíû ïåðåêóïëåííîñòè/ïåðåïðîäàííîñòè. Âåðõíèé óðîâåíü îïðåäåëÿåòñÿ êàê 100-RSILowerLevel_2.
         int   RSIUpperLevel_2; 
extern   bool  CheckLastRSIZone=true;  // ïðîâåðÿòü ïîñëåäíþþ çîíó ïåðåêóïëåííîñòè/ïåðåïðîäàííîñòè RSI.
extern   bool  ReverseRSIZone=false;   // ïåðåâîðà÷èâàíèå ïîñëåäíåé çîíû ïåðêóïëåííîñòè/ïåðåïðîäàííîñòè RSI.
extern   int   CCIPeriod=14;           // ïåðèîä CCI
extern   int   CCIPrice=5;             // öåíà CCI: 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted.
extern   int   CCILevel=200;           // âåðõíèé óðîâåíü CCI. Íèæíèé óðîâåíòü ðàâåí - CCILevel.

/*
   Ñòðåëêè ðèñóþòñÿ â ñëåäóþùåì ñëó÷àå:
   
      BUY: 
            RSI âûøå âåðõíåãî óðîâíÿ (îïðåäåëÿåìîãî ïî RSILowerLevel). Ñ íàñòðîéêàìè ïî óìîë÷àíèþ - âûøå 40.
            CCI íèæå íèæíåãî óðîâíÿ. Ñ íà÷òðîéêàìè ïî óìîë÷àíèþ - íèæå -200
            
            Åñëè âêëþ÷åíî CheckLastRSIZone, òî ïðîâåðÿåòñÿ ïîñëåäíÿÿ çîíà ïåðêóïëåííîñòè/ïåðåïðîäàííîñòè RSI ïî óðîâíþ (RSILowerLevel_2).
            Åñëè ReverseRSIZone=false, äëÿ ïîÿâëåíèÿ ñòðåëêè íåîáõîäèìî, ÷òîáû ïîñëåäíÿÿ çîíà áûëà âûøå âåðõíåãî óðîâíÿ, ñ íàñòðîéêàìè ïî óìîë÷àíèþ - âûøå 70.
            Åñëè ReverseRSIZone=true, ïîñëåäíèì çíà÷åíèåì ðñè äîëæíî áûòü çíà÷åíèå íèæå íèæíåãî óðîâíÿ, ñ íàñòðîéêàìè ïî óìîë÷àíèþ - íèæå 30.
            
            
            
*/

//---- buffers
double Buy[];
double Sell[];
double LastRSIZone[];
int Sign=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,241);
   SetIndexBuffer(0,Buy);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,242);
   SetIndexBuffer(1,Sell);
   SetIndexBuffer(2,LastRSIZone);  
   
   SetIndexLabel(0,"Buy");
   SetIndexLabel(1,"Sell");    
   
   
   RSIUpperLevel=100-RSILowerLevel;
   RSIUpperLevel_2=100-RSILowerLevel_2;   
   if(ReverseRSIZone)Sign=-1;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit=Bars-IndicatorCounted();
   
      for(int i=limit-1;i>=0;i--){
         LastRSIZone[i]=LastRSIZone[i+1];
         
         double cci=iCCI(NULL,0,CCIPeriod,CCIPrice,i);
         double rsi=iRSI(NULL,0,RSIPeriod,RSIPrice,i);
         
            if(rsi>RSIUpperLevel_2){
               LastRSIZone[i]=1;
            }
            if(rsi<RSILowerLevel_2){
               LastRSIZone[i]=-1;            
            }            
         
            
            if(rsi>RSIUpperLevel){
               if(cci<-CCILevel){
                  if(LastRSIZone[i]==Sign || !CheckLastRSIZone)
                  Buy[i]=Low[i]-Point*5;
               }
            }
            if(rsi<RSILowerLevel){
               if(cci>CCILevel){
                  if(LastRSIZone[i]==-Sign || !CheckLastRSIZone)
                  Sell[i]=High[i]+Point*5;
               }
            }         
      }
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:

Commodity channel index
Relative strength index


Custom Indicators Used:

Order Management characteristics:

Other Features: