smSuperTRIX_PV_v2

Author: � 2009.08.05, SwingMan
smSuperTRIX_PV_v2
Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt sends emails
0 Views
0 Downloads
0 Favorites
smSuperTRIX_PV_v2
//+------------------------------------------------------------------+
//|                                           smSuper TRIX_PV_v2.mq4 |
//|                                           © 2009.08.05, SwingMan |
//|                                                                  | 
//+------------------------------------------------------------------+ 
#property copyright "© 2009.08.05, SwingMan"
#property link      ""
//  Source:
//+------------------------------------------------------------------+
//|                                                         TRIX.mq4 |
//|                                                          by Raff | 
//+------------------------------------------------------------------+ 
//#property copyright "Copyright © 2006, raff1410@o2.pl"

/* 2009.07.12 - choice of moving averages
              - choice of prices (close, log(close) )    
   2009.07.16 - Peeks & Valeys
   2009.08.05 - Trigger MA of histograms
*/
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 7
#property  indicator_color1 Gray        // line
#property  indicator_color2 SeaGreen   // histogram
#property  indicator_color3 Maroon
#property  indicator_color4 DeepSkyBlue
#property  indicator_color5 Red
#property  indicator_color6 Red
#property  indicator_color7 Red

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

#property  indicator_style1 STYLE_SOLID
#property  indicator_style2 STYLE_SOLID
#property  indicator_style3 STYLE_SOLID

#property  indicator_level1 0

//---- indicator parameters
//-------------------------------------------------------------------
extern int  TRIX_Period       = 3;
//extern bool DefaultAvg_SMMA_SMMA_EMA = true;
//extern string p1 = "_____TRIX_studies____";
extern string _____Averages_____ = "0=SMA, 1=EMA, 2=SMMA, 3=LWMA";
extern int Mode_Average_1 = 1;
extern int Mode_Average_2 = 1;
extern int Mode_Average_3 = 1;
extern string _____Input_Price_____ = "0=C,4=Median,5=Typical,6=Weighted";
extern int Input_Price = 0;
//extern string _____Mode_Price_____ = "0=Price,1=ln(Price)";
//extern int Mode_Price = 0;
//extern string _____Mode_TRIX_____ = "0=RateOfChange,1=Divided";
//extern int Mode_TRIX = 1;

extern string p2 = "_____Signals_____";
extern bool Draw_Signals      = true;
extern bool Alert_Signals     = false;
extern bool EMail_Signals     = false;
extern int  CountBars         = 500;
extern int Period_SmoothHistograms = 55;
extern double Factor_TriggerLine = 0.5;
//-------------------------------------------------------------------
int  Signal_Period     = 0;
double Scale = 1000.0;

//---- indicator buffers
double      ind_buffer1a[];
double      ind_buffer2a[];
double      ind_buffer3[];
double      ind_buffer4[];
double      ind_buffer5[];
double      ind_buffer6up[], ind_buffer6upPV[];
double      ind_buffer6dn[], ind_buffer6dnPV[];
double      ind_buffer7[];
double SignalUP[], SignalDN[];
double HistogramLineUP[], HistogramLineDN[], absHistogramBuffer[], avgHistogramBuffer[];

//---- variables
bool TurnedUp = false;
bool TurnedDown = false;  
int ModeAvg1, ModeAvg2, ModeAvg3;
int inputPrice;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   ArraySetAsSeries(ind_buffer1a,true);
   ArraySetAsSeries(ind_buffer2a,true);
   ArraySetAsSeries(ind_buffer3,true);
   ArraySetAsSeries(ind_buffer4,true);
   ArraySetAsSeries(ind_buffer7,true);   
   ArraySetAsSeries(ind_buffer6upPV,true);
   ArraySetAsSeries(ind_buffer6dnPV,true);   
   ArraySetAsSeries(absHistogramBuffer, true);
   ArraySetAsSeries(avgHistogramBuffer, true);
   
//---- indicator buffers mapping
   IndicatorDigits(4);

   SetIndexBuffer(0,ind_buffer5); SetIndexStyle(0,DRAW_LINE); SetIndexLabel(0,NULL);
   SetIndexBuffer(1,ind_buffer6up); SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(2,ind_buffer6dn); SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(3,SignalUP); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,233); SetIndexLabel(3,NULL);
   SetIndexBuffer(4,SignalDN); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,234); SetIndexLabel(4,NULL);
   
   SetIndexBuffer(5,HistogramLineUP); SetIndexStyle(5,DRAW_LINE); SetIndexLabel(5,NULL);
   SetIndexBuffer(6,HistogramLineDN); SetIndexStyle(6,DRAW_LINE); SetIndexLabel(6,NULL);
  
//---- parameters
   //-- default
   ModeAvg1 = MODE_SMMA;
   ModeAvg2 = MODE_SMMA;
   ModeAvg3 = MODE_EMA;
   inputPrice = PRICE_CLOSE;
   
   //-- TRIX studies
   string sPrice, sAvg1, sAvg2, sAvg3;
   //moving averages
//   if (DefaultAvg_SMMA_SMMA_EMA == false) {
      switch (Mode_Average_1) {
         case 0: ModeAvg1 = MODE_SMA;  sAvg1 = "S"; break;
         case 1: ModeAvg1 = MODE_EMA;  sAvg1 = "E"; break;
         case 2: ModeAvg1 = MODE_SMMA; sAvg1 = "M"; break;
         case 3: ModeAvg1 = MODE_LWMA; sAvg1 = "W"; break;
      }
      switch (Mode_Average_2) {
         case 0: ModeAvg2 = MODE_SMA;  sAvg2 = "S"; break;
         case 1: ModeAvg2 = MODE_EMA;  sAvg2 = "E"; break;
         case 2: ModeAvg2 = MODE_SMMA; sAvg2 = "M"; break;
         case 3: ModeAvg2 = MODE_LWMA; sAvg2 = "W"; break;
      }
      switch (Mode_Average_3) {
         case 0: ModeAvg3 = MODE_SMA;  sAvg3 = "S"; break;
         case 1: ModeAvg3 = MODE_EMA;  sAvg3 = "E"; break;
         case 2: ModeAvg3 = MODE_SMMA; sAvg3 = "M"; break;
         case 3: ModeAvg3 = MODE_LWMA; sAvg3 = "W"; break;
      }
      //-- prices
      switch(Input_Price) {
         case 0: inputPrice = PRICE_CLOSE;    sPrice = "C"; break;
         case 4: inputPrice = PRICE_MEDIAN;   sPrice = "M"; break;
         case 5: inputPrice = PRICE_TYPICAL;  sPrice = "T"; break;
         case 6: inputPrice = PRICE_WEIGHTED; sPrice = "W"; break;
      }
      /*//-- mode prices
      switch(Mode_Price) {
         case 0: modePrice = inputPrice; break;
         case 1: modePrice = MathLog(inputPrice); break;
      }*/
//   }   
  
//---- name for DataWindow and indicator subwindow label
   //IndicatorShortName("SwingMan SuperTRIX_v1 ("+TRIX_Period+", "+Signal_Period+")");
   //string sParameters = ", "+ModeAvg1+","+ModeAvg2+","+ModeAvg3+", "+sPrice;
   string sParameters = ", "+sAvg1+","+sAvg2+","+sAvg3+", "+sPrice;
   IndicatorShortName("SwingMan UltraSuperTRIX_PV_v2 ("+TRIX_Period+sParameters+")");
   SetIndexLabel(1,"TRIX up");
   SetIndexLabel(2,"TRIX dn");

//---- initialization done
   return(0);
}
//+------------------------------------------------------------------+
//| TRIX                                                             |
//+------------------------------------------------------------------+
int start()
{
   if (TRIX_Period==Signal_Period) return(0);

   ArrayResize(ind_buffer1a,Bars);
   ArrayResize(ind_buffer2a,Bars);
   ArrayResize(ind_buffer3,Bars);
   ArrayResize(ind_buffer4,Bars);
   ArrayResize(ind_buffer7,Bars);
   ArrayResize(ind_buffer6upPV,Bars);
   ArrayResize(ind_buffer6dnPV,Bars);
   
   ArrayResize(absHistogramBuffer,Bars);
   ArrayResize(avgHistogramBuffer,Bars);
      
   int i, limit=CountBars;
   if (limit>Bars) limit=Bars-1;

//---- trix    
   //-- calculation
   for(i=0; i<limit; i++) ind_buffer1a[i]=iMA(Symbol(),Period(),TRIX_Period,0,ModeAvg1,inputPrice,i);
   for(i=0; i<limit; i++) ind_buffer2a[i]=iMAOnArray(ind_buffer1a,0,TRIX_Period,0,ModeAvg2,i);
   for(i=0; i<limit; i++) ind_buffer7[i]=iMAOnArray(ind_buffer2a,0,TRIX_Period,0,ModeAvg3,i);
   //-- TRIX
   for(i=0; i<limit-1; i++) {
      //-- Rate of change
      if (ind_buffer7[i+1] != 0)
            ind_buffer1a[i] = Scale * (ind_buffer7[i]-ind_buffer7[i+1]) / ind_buffer7[i+1];
   }
   
   for(i=0; i<limit-1; i++) ind_buffer2a[i]=iMAOnArray(ind_buffer1a,0,Signal_Period,0,MODE_EMA,i);

   for(i=limit-1; i>=0; i--) {
      double diff = ind_buffer1a[i]-ind_buffer2a[i];
      ind_buffer5[i]=diff; // line
      double diff2 = ind_buffer5[i] - ind_buffer5[i+1];
      //-- histogram
      if (diff2 >= 0) {
         ind_buffer6up[i]=diff;
         ind_buffer6dn[i]=EMPTY_VALUE;
      }
      else {
         ind_buffer6up[i]  =EMPTY_VALUE;
         ind_buffer6dn[i]=diff;
      }

      //-- signals cross 0 line
      if (diff >= 0) {
         ind_buffer6upPV[i]=diff;
         ind_buffer6dnPV[i]=EMPTY_VALUE;
      }
      else {
         ind_buffer6upPV[i]  =EMPTY_VALUE;
         ind_buffer6dnPV[i]=diff;
      }
      //--Difference for StdDev
      absHistogramBuffer[i] = MathAbs(diff);
   }
   //---- average differences
   for(i=0; i<limit-1; i++)  {
      avgHistogramBuffer[i] = iMAOnArray(absHistogramBuffer,0,Period_SmoothHistograms,0,MODE_SMA,i);
      HistogramLineUP[i]   = avgHistogramBuffer[i] * Factor_TriggerLine;
      HistogramLineDN[i] = -avgHistogramBuffer[i] * Factor_TriggerLine;
   } 
   

//---- Signals
   i=limit-1;
   while(i>=0)
   {
      //-- draw signals
      if (Draw_Signals == true) {
         int shift = 0;         
         SignalUP[i+shift] = EMPTY_VALUE;
         SignalDN[i+shift] = EMPTY_VALUE;
         //-- long
         bool bSignalUP = (ind_buffer6upPV[i+shift] > 0 && ind_buffer6upPV[i+shift] != EMPTY_VALUE && ind_buffer6dnPV[i+1+shift] < 0);      
         //-- short
         bool bSignalDN = (ind_buffer6dnPV[i+shift] < 0 && ind_buffer6upPV[i+1+shift] != EMPTY_VALUE && ind_buffer6upPV[i+1+shift] > 0);
         if (bSignalUP == true) {
            SignalUP[i+shift] = 0;
            SignalDN[i+shift] = EMPTY_VALUE;
         }
         if (bSignalDN == true) {
            SignalUP[i+shift] = EMPTY_VALUE;
            SignalDN[i+shift] = 0;
         }
         
         //-- repainting ?
         shift = 1;
         SignalUP[i+shift] = EMPTY_VALUE;
         SignalDN[i+shift] = EMPTY_VALUE;
         //-- long
         bSignalUP = (ind_buffer6upPV[i+shift] > 0 && ind_buffer6upPV[i+shift] != EMPTY_VALUE && ind_buffer6dnPV[i+1+shift] < 0);      
         //-- short
         bSignalDN = (ind_buffer6dnPV[i+shift] < 0 && ind_buffer6upPV[i+1+shift] != EMPTY_VALUE && ind_buffer6upPV[i+1+shift] > 0);
         if (bSignalUP == true) {
            SignalUP[i+shift] = 0;
            SignalDN[i+shift] = EMPTY_VALUE;
         }
         if (bSignalDN == true) {
            SignalUP[i+shift] = EMPTY_VALUE;
            SignalDN[i+shift] = 0;
         }
      }
      
      //=============================================================
      //-- alerts new
      string st;
      string sPeriod = Get_sPeriod(Period());
      if (i == 0) 
      {
         if (Alert_Signals==true || EMail_Signals == true) {
            if (ind_buffer5[i] >= 0) bool bTurnUP = (ind_buffer5[i] >= 0 && ind_buffer5[i+1] < 0); else
            if (ind_buffer5[i] < 0)  bool bTurnDN = (ind_buffer5[i] < 0 && ind_buffer5[i+1] >= 0);
            
            if (bTurnUP == true) {
               if (TurnedUp == false)  {
                  st = "Trix BUY:  "+Symbol()+"-"+sPeriod+"  at  "+ DoubleToStr(Close[0],Digits)+"  "+ TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
                  if (Alert_Signals == true) Alert(st);            
                  if (EMail_Signals == true) SendMail("Trix alert",st);
                  TurnedUp   = true;
                  TurnedDown = false;
               }
            } 
            else
            if (bTurnDN == true) {
               if (TurnedDown == false) {  
                  st = "Trix SELL:  "+Symbol()+"-"+sPeriod+"  at  "+ DoubleToStr(Close[0],Digits) +"  "+ TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
                  if (Alert_Signals == true) Alert(st);            
                  if (EMail_Signals == true) SendMail("Trix alert",st);
                  TurnedUp   = false;
                  TurnedDown = true;
               }
            } 
         }
      }
      
      /* //-- alerts  (original conditions) 
      if (Alert_Signals==true || EMail_Signals == true) {
         if (ind_buffer2a[i]<ind_buffer1a[i] && ind_buffer2a[i+1]>=ind_buffer1a[i+1]) ind_buffer3[i]=ind_buffer2a[i]-0.0001;
         if (ind_buffer2a[i]>ind_buffer1a[i] && ind_buffer2a[i+1]<=ind_buffer1a[i+1]) ind_buffer4[i]=ind_buffer2a[i]+0.0001;
     
         if (ind_buffer3[0]==ind_buffer2a[0]-0.0001 && TurnedUp==false)  {  
            st = "Trix BUY:  "+Symbol()+"-"+sPeriod+"  at  "+ DoubleToStr(Close[0],Digits)+"  "+ TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
            if (Alert_Signals == true) Alert(st);            
            if (EMail_Signals == true) SendMail("TRIX alert",st);              
            TurnedDown = false;
            TurnedUp   = true;
         } 
         if (ind_buffer4[0]==ind_buffer2a[0]+0.0001 && TurnedDown==false) {  
            st = "Trix SELL:  "+Symbol()+"-"+sPeriod+"  at  "+ DoubleToStr(Close[0],Digits)+"  "+ TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
            if (Alert_Signals == true) Alert(st);            
            if (EMail_Signals == true) SendMail("TRIX alert",st);              
            TurnedDown = true;
            TurnedUp   = false;
         } 
      }
      */
   i--;
   }
//---- done
   return(0);
}


//+------------------------------------------------------------------+
//    Get sPeriod
//+------------------------------------------------------------------+
string Get_sPeriod(int timeframe)
{
   if (timeframe == PERIOD_M1) return("M1");
   if (timeframe == PERIOD_M5) return("M5");
   if (timeframe == PERIOD_M15) return("M15");
   if (timeframe == PERIOD_M30) return("M30");
   if (timeframe == PERIOD_H1) return("H1");
   if (timeframe == PERIOD_H4) return("H4");
   if (timeframe == PERIOD_D1) return("D1");
   if (timeframe == PERIOD_W1) return("W1");
   if (timeframe == PERIOD_MN1) return("MN1");
}

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