How to fix alert on every tick?

Back to topics list To post a new topic, please log in or register
avatar
3
loscsaba86 2015.12.09 02:43
 

Hi Guys!

I have an ADX-cross indicator. I added alert, when DI+ and DI- crossed each other, but the alert comes on every tick, which is very annoying.

I just inserted 2 rows: Alert ("Cross UP") and Alert ("Cross DOWN") - else everything is left original.

 How could I fix this problem? Thank you for your help in advance!!!

 Have a nice day! 

Here is the code too:

 

//+------------------------------------------------------------------+
//|                                                   ADXcrosses.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int ADXcrosses = 14;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//----
double b4plusdi, b4minusdi, nowplusdi, nowminusdi;
int    nShift;   
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
    SetIndexStyle(0, DRAW_ARROW, 0, 1);
    SetIndexArrow(0, 233);
    SetIndexBuffer(0, ExtMapBuffer1);
//----
    SetIndexStyle(1, DRAW_ARROW, 0, 1);
    SetIndexArrow(1, 234);
    SetIndexBuffer(1, ExtMapBuffer2);
//---- name for DataWindow and indicator subwindow label
    IndicatorShortName("ADXcrosses");
    SetIndexLabel(0, "ADXcrUp");
    SetIndexLabel(1, "ADXcrDn"); 
//----
    switch(Period())
      {
        case     1: nShift = 1;   break;    
        case     5: nShift = 3;   break; 
        case    15: nShift = 5;   break; 
        case    30: nShift = 10;  break; 
        case    60: nShift = 15;  break; 
        case   240: nShift = 20;  break; 
        case  1440: nShift = 80;  break; 
        case 10080: nShift = 100; break; 
        case 43200: nShift = 200; break;               
      }
//----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int limit;
    int counted_bars = IndicatorCounted();
//---- check for possible errors
    if(counted_bars < 0) 
        return(-1);
//---- last counted bar will be recounted
    if(counted_bars > 0) 
        counted_bars--;
    limit = Bars - counted_bars;
//----
    for(int i = 0; i < limit; i++)
      {
        b4plusdi = iADX(NULL, 0, ADXcrosses, PRICE_CLOSE, MODE_PLUSDI, i + 1);
        nowplusdi = iADX(NULL, 0, ADXcrosses, PRICE_CLOSE, MODE_PLUSDI, i);
        b4minusdi = iADX(NULL, 0, ADXcrosses, PRICE_CLOSE, MODE_MINUSDI, i + 1);
        nowminusdi = iADX(NULL, 0, ADXcrosses, PRICE_CLOSE, MODE_MINUSDI, i);  
        //----
        if(b4plusdi < b4minusdi && nowplusdi > nowminusdi)
            ExtMapBuffer1[i] = Low[i] - nShift*Point;
            Alert ("Cross UP");
            
        //----
        if(b4plusdi > b4minusdi && nowplusdi < nowminusdi)
            ExtMapBuffer2[i] = High[i] + nShift*Point;
            Alert ("Cross DOWN");
            
      }
//----
    return(0);
  }
//+------------------------------------------------------------------+
avatar
Moderator
3418
GumRai 2015.12.09 03:50 #
 
        static datetime AlertTime=Time[1];
        if(b4plusdi < b4minusdi && nowplusdi > nowminusdi)
           {
            ExtMapBuffer1[i] = Low[i] - nShift*Point;
            if(Time[i]>AlertTime)
              {
              Alert ("Cross UP");
              AlertTime=Time[i]
              }
           }

Not tested or compiled.

It should give you some pointers 

avatar
3
loscsaba86 2015.12.09 04:20 #
 
GumRai:

Not tested or compiled.

It should give you some pointers 

Dear GumRai!

 Thank you very much, it semms to work fine!

 Best regards,

Csaba 

Back to topics list  

To add comments, please log in or register