RSI-TC_NEW_Alert2





/*

*********************************************************************
          
                 RSI with Trend Catcher signal
                      
                              
                          by Matsu
              based on codes from various sources
                  
*********************************************************************
// added sound feb/17/2009 - itemsdepot@hotmail.com
*/


#property indicator_separate_window
#property indicator_buffers 5

#property indicator_color1 Silver
#property indicator_color2 Gray
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Gold

#property indicator_level1 60
#property indicator_level2 50
#property indicator_level3 40

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 1


int       BBPrd=20;
double    BBDev=2.0;
int       SBPrd=13;
int       SBATRPrd=21;
double    SBFactor=2;
int       SBShift=1;
extern int  RSIPeriod=21;
extern int  BullLevel=50;
extern int  BearLevel=50;
extern bool RSiTCMessageBoxOn=True;
extern bool RSiTCSoundAlertOn=True;
extern int  RSiTCAlarmDelay=20;
extern bool  RSiTCFilter=True;
extern int  RSiTCFontsize=10;


double RSI[];
double DnRSI[];
double Sell[];
double Buy[];
double Squeeze[];

string RSiTCShortName;
string RSiTCLabel1;
double RSiTCTime;


//-------------------------------------------------------
//-------- Init
//--------
//-------------------------------------------------------

int init() 
{

   IndicatorBuffers(5);
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,RSI);
   
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DnRSI);
   
   SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID);  
   SetIndexArrow(2,159);
   SetIndexBuffer(2,Buy);
   
   SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID);   
   SetIndexArrow(3,159);
   SetIndexBuffer(3,Sell);
   
   SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID); 
   SetIndexArrow(4,159);
   SetIndexBuffer(4,Squeeze);
      

   
   RSiTCTime=TimeLocal();
   RSiTCShortName="RSiTrendCatcher";
   
   IndicatorShortName(RSiTCShortName);
   IndicatorDigits(2);   
   
   
   RSiTCLabel1="-";
   
   return(0);
   
}


//-------------------------------------------------------
//-------- De-Init
//--------
//-------------------------------------------------------


int deinit() 
{


   ObjectDelete(RSiTCLabel1);
   return(0);
   
}



//-------------------------------------------------------
//-------- 
//--------
//-------------------------------------------------------

int start() 
{

   int counted_bars=IndicatorCounted();
   int shift,limit,ob,os;
   double BBMA, SBMA, TopBBand, BotBBand, TopBBandPrev, BotBBandPrev, TopSBand, BotSBand;
   bool dn = false;
   double BuyNow, BuyPrevious, SellNow, SellPrevious;
   static datetime prevtime = 0;
   double RSiTCFinishTime=TimeLocal();
   bool   RSiTCSpeak=False;
   //indicator_level1 = RSiTCSellLevel;
   //indicator_level3 = RSiTCBuyLevel;
   
      
   if (counted_bars<0) return(-1);
   if (counted_bars>0) counted_bars--;
   limit=Bars-31;
   if(counted_bars>=31) limit=Bars-counted_bars-1;

   for (shift=limit;shift>=0;shift--)   
   {
            
      RSI[shift]=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,shift);
      ob = indicator_level1;
      os = indicator_level3;

      // ========= Two-tone RSI
      
      if (dn==true)
      {
         if (RSI[shift]>BullLevel) //-------------
         {
            dn=false;
            DnRSI[shift]=EMPTY_VALUE;
         }
         else
         {
            dn=true;
            DnRSI[shift]=RSI[shift];
         }

      }
      else
      {
         if (RSI[shift]<BearLevel) 
         {
            dn=true;
            DnRSI[shift]=RSI[shift];
         }
         else
         {
            dn=false;
            DnRSI[shift]=EMPTY_VALUE;
         }
           
      }
      
      // ========= Two-tone RSI Ends
      
      // ========= Squeeze Signals
      
      BBMA     = iMA(NULL,0,BBPrd,0,MODE_SMA,PRICE_CLOSE,shift);
      SBMA     = iMA(NULL,0,SBPrd,0,MODE_EMA,PRICE_CLOSE,shift+SBShift);
      TopBBand = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_UPPER,shift);
	   BotBBand = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_LOWER,shift);
      TopSBand = SBMA + (SBFactor * iATR(NULL,0,SBATRPrd,shift+SBShift));
      BotSBand = SBMA - (SBFactor * iATR(NULL,0,SBATRPrd,shift+SBShift));
      TopBBandPrev = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_UPPER,shift+1);
	   BotBBandPrev = iBands(NULL,0,BBPrd,BBDev,0,PRICE_CLOSE,MODE_LOWER,shift+1);
      
      if (TopBBand<TopSBand && BotBBand>BotSBand) Squeeze[shift]=50;
      
      // ========= Squeeze Signals Ends
      
      
      // ========= BB Breakout Signals
      
      //if(Squeeze[shift+2]==50 && RSI[shift]>50 && BotBBand<BotSBand) 
      if((Squeeze[shift+2]==50 || Squeeze[shift+1]==50) && RSI[shift]>50 && BotBBand<BotSBand) 
      {
         Buy[shift]=ob;
         Sell[shift]=EMPTY_VALUE;
      } 
      else 
      //if(Squeeze[shift+2]==50 && RSI[shift]<50 && TopBBand>TopSBand) 
      if((Squeeze[shift+2]==50 || Squeeze[shift+1]==50) && RSI[shift]<50 && TopBBand>TopSBand) 
      {
         Buy[shift]=EMPTY_VALUE;
         Sell[shift]=os;
      }
      else
      if(Buy[shift+1]==ob && BotBBand<BotBBandPrev && RSI[shift]>50)
      {
         Buy[shift]=ob;
         Sell[shift]=EMPTY_VALUE;
      } 
      else
      if(Sell[shift+1]==os && TopBBand>TopBBandPrev && RSI[shift]<50)
      {
         Buy[shift]=EMPTY_VALUE;
         Sell[shift]=os;
      }
      else
      {
         Buy[shift]=EMPTY_VALUE;
         Sell[shift]=EMPTY_VALUE;
      }
      
      // ========= BB Breakout Signals Ends
      

      
   }
   
   //Print("RSi___________"+RSI[0]);
         
   ObjectDelete(RSiTCLabel1);      
   //------------------------------------------------
     if(!ObjectCreate(RSiTCLabel1, OBJ_LABEL,WindowFind(RSiTCShortName), 0, 0))
       {
        Print("Error: - Code #",GetLastError());
       return(0);
       }else{
                           ObjectSetText(RSiTCLabel1,"RSi: "+RSI[0] ,RSiTCFontsize, "Tahoma");
              if (RSI[0]>ob) ObjectSet(RSiTCLabel1, OBJPROP_COLOR, Lime);
              if (RSI[0]>os) ObjectSet(RSiTCLabel1, OBJPROP_COLOR, Silver);
              if (RSI[0]<os) ObjectSet(RSiTCLabel1, OBJPROP_COLOR, Red);
              
              
                 ObjectSet(RSiTCLabel1, OBJPROP_XDISTANCE, (RSI[0]*10) );
                 ObjectSet(RSiTCLabel1, OBJPROP_YDISTANCE, 0);
	           // ObjectSet(RSiTCLabel1, OBJPROP_BACK, Green); 
                
              
       }      

   //---------------------------------------------------
   //Print("  Rsi :"+RSI[0]);
   //Print("DnRsi :"+DnRSI[0]);
   //Print("  Buy :"+Buy[0]);
   //Print(" Sell :"+Sell[0]);
   //Print("  Sqz :"+Squeeze[0]);

   
   //----------------------------------------------------
   RSiTCSpeak=False;
   RSiTCFinishTime=TimeLocal(); 
                                                   
   if ((RSiTCFinishTime - RSiTCTime) >= RSiTCAlarmDelay )    // && pos==0)
      {       
          RSiTCFinishTime=TimeLocal();
          RSiTCTime=TimeLocal();
          RSiTCSpeak=True;      
       }     
   
   
   
   // ======= Alert =========

   if(RSiTCSpeak==True)
   {
  
      BuyNow = Buy[1];
      BuyPrevious = Buy[2];
      SellNow = Sell[1];
      SellPrevious = Sell[2];
   

      
      
      if (RSiTCFilter==True)
      {


          if((BuyNow ==ob) && (BuyPrevious ==EMPTY_VALUE))
          {
             //Alert(Symbol(), " M", Period(), " Buy Alert");
             if (RSiTCSoundAlertOn==True) PlaySound("news.wav");//support.wav
             if (RSiTCMessageBoxOn==True) Alert(Symbol(), " M", Period(), " Sell Alert");
         
          }
          else   
          if((SellNow ==os) && (SellPrevious ==EMPTY_VALUE))
          {
             //Alert(Symbol(), " M", Period(), " Sell Alert");
             if (RSiTCSoundAlertOn==True) PlaySound("ok.wav");//resistance.wav
             if (RSiTCMessageBoxOn==True) Alert(Symbol(), " M", Period(), " Buy Alert");
         
          }


      }
      
      
   
      if (RSiTCFilter==False)
      {


          if(BuyNow ==ob)
          {
             //Alert(Symbol(), " M", Period(), " Buy Alert");
             if (RSiTCSoundAlertOn==True) PlaySound("support.wav");
             if (RSiTCMessageBoxOn==True) Alert(Symbol(), " M", Period(), " Sell Alert");
         
          }
          else   
          if(SellNow ==os)
          {
             //Alert(Symbol(), " M", Period(), " Sell Alert");
             if (RSiTCSoundAlertOn==True) PlaySound("resistance.wav");
             if (RSiTCMessageBoxOn==True) Alert(Symbol(), " M", Period(), " Buy Alert");
         
          }


      }      
 
 
 
 
      
         
      //IndicatorShortName("RSI("+RSIPeriod+") (Alert on)");

   }

   // ======= Alert Ends =========
   
   
   


   
   return(0);
   
}







Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_LINE

Implements a curve of type DRAW_ARROW

Indicators Used:

Relative strength index
Moving average indicator
Bollinger bands indicator
Indicator of the average true range


Custom Indicators Used:

Order Management characteristics:

Other Features:

It plays sound alerts
It issuies visual alerts to the screen