Accelerator oscillator colour change alert

 

I want to pick up the colour change from green to red and vice versa on the Accelerator Oscillator and send an alert.

I don't see any change of colour in the code. What variables would I use to confirm the colour change?


//+------------------------------------------------------------------+
//|                                                 sAccelerator.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
//---- indicator buffers
double ExtBuffer0[];
double ExtBuffer1[];
double ExtBuffer2[];
double ExtBuffer3[];
double ExtBuffer4[];
// Íîìåð áàðà, ïî êîòîðîìó áóäåò èñêàòüñÿ ñèãíàë
#define SIGNAL_BAR 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(5);
//---- drawing settings
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_HISTOGRAM);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   IndicatorDigits(Digits + 2);
   SetIndexDrawBegin(0, 38);
   SetIndexDrawBegin(1, 38);
   SetIndexDrawBegin(2, 38);
//---- 4 indicator buffers mapping
   SetIndexBuffer(0, ExtBuffer0);
   SetIndexBuffer(1, ExtBuffer1);
   SetIndexBuffer(2, ExtBuffer2);
   SetIndexBuffer(3, ExtBuffer3);
   SetIndexBuffer(4, ExtBuffer4);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("sAC");
   SetIndexLabel(1, NULL);
   SetIndexLabel(2, NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Accelerator/Decelerator Oscillator                               |
//+------------------------------------------------------------------+
int start()
  {
   int    limit;
   int    counted_bars = IndicatorCounted();
   double prev, current;
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i = 0; i < limit; i++)
       ExtBuffer3[i] = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_MEDIAN, i) - 
                       iMA(NULL, 0, 34, 0, MODE_SMA, PRICE_MEDIAN, i);
//---- signal line counted in the 2-nd additional buffer
   for(i = 0; i < limit; i++)
       ExtBuffer4[i] = iMAOnArray(ExtBuffer3, Bars, 5, 0, MODE_SMA, i);
//---- dispatch values between 2 buffers
   bool up = true;
   for(i = limit - 1; i >= 0; i--)
     {
       current = ExtBuffer3[i] - ExtBuffer4[i];
       prev = ExtBuffer3[i+1] - ExtBuffer4[i+1];
       if(current > prev) 
           up = true;
       if(current < prev) 
           up = false;
       if(!up)
         {
           ExtBuffer2[i] = current;
           ExtBuffer1[i] = 0.0;
         }
       else
         {
           ExtBuffer1[i] = current;
           ExtBuffer2[i] = 0.0;
         }
       ExtBuffer0[i] = current;
     }
//---- done
//---- Ñòàòè÷åñêèå ïåðåìåííûå, â êîòîðûõ õðàíÿòñÿ
//---- âðåìÿ ïîñëåäíåãî áàðà è íàïðàâëåíèå ïîñëåäíåãî ñèãíàëà
	  static int PrevSignal = 0, PrevTime = 0;
//---- Åñëè áàðîì äëÿ àíàëèçà âûáðàí íå 0-é, íàì íåò ñìûñëà ïðîâåðÿòü ñèãíàë
//---- íåñêîëüêî ðàç. Åñëè íå íà÷àëñÿ íîâûé áàð, âûõîäèì.
	  if(SIGNAL_BAR > 0 && Time[0] <= PrevTime ) 
	      return(0);
//---- Îòìå÷àåì, ÷òî ýòîò áàð ïðîâåðåí
	  PrevTime = Time[0];
//---- Åñëè ïðåäûäóùèé ñèãíàë áûë ÑÅËË èëè ýòî ïåðâûé çàïóñê (PrevSignal=0)
	  if(PrevSignal <= 0)
	    {
		     if(ExtBuffer0[SIGNAL_BAR] - ExtBuffer0[SIGNAL_BAR+1] > 0 &&
				      ExtBuffer0[SIGNAL_BAR+2] - ExtBuffer0[SIGNAL_BAR+1] > 0 )
		       {
			        PrevSignal = 1;
			        Alert("sAC (", Symbol(), ", ", Period(), ")  -  BUY!!!");
		       }
	    }
	  if(PrevSignal >= 0)
	    {
		     if(ExtBuffer0[SIGNAL_BAR+1] - ExtBuffer0[SIGNAL_BAR] > 0 &&
				      ExtBuffer0[SIGNAL_BAR+1] - ExtBuffer0[SIGNAL_BAR+2] > 0)
		       {
			        PrevSignal = -1;
			        Alert("sAC (", Symbol(), ", ", Period(), ")  -  SELL!!!");
		       }
	    }
   return(0);
  }
//+------------------------------------------------------------------+
 
SanMiguel:

I want to pick up the colour change from green to red and vice versa on the Accelerator Oscillator and send an alert.

I don't see any change of colour in the code. What variables would I use to confirm the colour change?


I programmed this before, below is the code you would need to have in your EA. Analyze the alerts, and when the AC is green, i believe ACcolorGreen has an integer value, and ACcolorRed is null. When AC is red, ACcolorGreen should be null, and ACcolorRed should be some integer value. Experiment with this, and you can program an alert based on the color change by using current values and previous values.


double ACcolorGreen=iCustom(NULL,0,"Accelerator",1,0);
double ACcolorRed=iCustom(NULL,0,"Accelerator",2,0);
Alert(ACcolorGreen);Alert(ACcolorRed);


Regards,

c0d3

 

Great one!! thanks for sharing..

can you add arrows and email alert? also can you add option to turn off the sound and pop-up?

ciao

Alex

Reason: