VininI_HMA_Sound&Alert_en





//+------------------------------------------------------------------+ 
//| HMA.mq4 
//| Copyright © 2006 WizardSerg <wizardserg@mail.ru>, ?? ??????? ForexMagazine #104 
//| wizardserg@mail.ru 
//| Revised by IgorAD,igorad2003@yahoo.co.uk | 
//| Personalized by iGoR AKA FXiGoR for the Trend Slope Trading method (T_S_T)
//| Link: 
//| contact: thefuturemaster@hotmail.com 
//+------------------------------------------------------------------+
#property copyright "MT4 release WizardSerg <wizardserg@mail.ru>, ?? ??????? ForexMagazine #104" 
#property link "wizardserg@mail.ru" 

// "Modify 2008, Victor Nicolev"
// link "vinin.ucoz.ru"
// Óáðàë âñå ÿâíûå îøèáêè, òåïåðü èíäèêòîð ìîæíî èñïîëüçîâàòü â ñîâåòíèêå
// Ïðè èñïîëüçîâàíèè â îñâåòíèêå îáðàùàòüñÿ ê íóëåâîìó áóôôåðó
// Óáðàíà ïåðåðèñîâêà

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=16; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;

extern bool bPlaySound=true;           // Âêëþ÷åíèå çâóêà ïðè ñìåíå öâåòà
extern bool bAllert=true;           // Âêëþ÷åíèå çâóêà ïðè ñìåíå öâåòà
extern string SoundName="alert.wav";   // Çâóêîâîé ôàéë
extern int CheckBar=1;  
//---- buffers 


double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 
double alertTag,alert1Tag;
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; 
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   if (bPlaySound && alertTag!=Time[0]) {
      if ((Uptrend[CheckBar+1]==EMPTY_VALUE && Uptrend[CheckBar]!=EMPTY_VALUE  ) 
         || (Dntrend[CheckBar+1]==EMPTY_VALUE && Dntrend[CheckBar]!=EMPTY_VALUE)) PlaySound(SoundName);
             alertTag=Time[0];
   }
   if (bAllert && alert1Tag!=Time[0]) {
      string mes="";
      if (Uptrend[CheckBar+1]==EMPTY_VALUE && Uptrend[CheckBar]!=EMPTY_VALUE)  mes="HMATrendChange, UP";
      if (Dntrend[CheckBar+1]==EMPTY_VALUE && Dntrend[CheckBar]!=EMPTY_VALUE)  mes="HMATrendChange, DN";
      if (mes!="") Alert(mes);   alert1Tag=Time[0];
   }

   return(0); 
} 
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Implements a curve of type DRAW_LINE

Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features:

It plays sound alerts
It issuies visual alerts to the screen