I have accomplished this by creating a static variable, and when the alert occurs I assign the iTime() of the bar causing the alert to that static variable. Then, before issuing another alert I check if the iTime() is the same as it was on the last alert and if so, then do not do another alert. If it is different, then I do the alert and put the new iTime() value into the static variable so subsequent alerts can be tested.
the bar number of a bar changes as new candles appear, but the iTime() of a bar does not change.
something like:
the bar number of a bar changes as new candles appear, but the iTime() of a bar does not change.
something like:
static datetime lastPriceAlertedBar=0; ... ... barToCheck=0; ... ... if(alertCondition==true && lastPriceAlertedBar==iTime(NULL,0,barToCheck)) { Alert("Alert"); lastPriceAlertedBar==iTime(NULL,0,barToCheck); } ... ...
Hope this helps.
Hope this helps. [/quote]
Thanks for the awesome code ChristianB.
A friend has combineing the alert with the code on his priority list.
Thanks again.
Leigh.
Thanks for the awesome code ChristianB.
A friend has combineing the alert with the code on his priority list.
Thanks again.
Leigh.
No problem. After looking at it again I think I reversed the logic on the 2nd part of the if condition, but you got the idea anyway :)
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Is it possible for Mt4 to send an alert only ONCE per 5 Minute Bar even if the same condition continues?
See the indicator below.
//+------------------------------------------------------------------+
//| Juice.mq4 |
//| Perky_z |
//| http://fxovereasy.atspace.com/index |
//+------------------------------------------------------------------+
#property copyright "perky"
#property link "http://fxovereasy.atspace.com/index"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 LimeGreen
#property indicator_color2 FireBrick
//---- indicator parameters
extern bool Alerts = true;
extern int Periyod=4;
extern double Level=0.0004;
extern bool LevelLines = true;
//---- indicator buffers
double OsMAUpBuffer[];
double OsMADownBuffer[];
double OsMABuffer[];
double MACDBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(5);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1);
SetIndexDrawBegin(0,Level);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 3 indicator buffers mapping
if(!SetIndexBuffer(0,OsMAUpBuffer) &&
!SetIndexBuffer(1,OsMADownBuffer) &&
!SetIndexBuffer(2,OsMABuffer) &&
!SetIndexBuffer(3,MACDBuffer) &&
!SetIndexBuffer(4,SignalBuffer))
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("Juice("+Periyod+","+Level+")");
SetLevelStyle(STYLE_DASH,1,Silver);
//---- initialization done
return(0);
}
int SetLevelLines()
{
if( LevelLines )
{
if (StringSubstr(Symbol(),3,3)=="JPY")
{
SetLevelValue(1,0.05);
SetLevelValue(2,0.10);
SetLevelValue(3,0.15);
SetLevelValue(4,0.20);
}
else
{
SetLevelValue(1,0.0005);
SetLevelValue(2,0.0010);
SetLevelValue(3,0.0015);
SetLevelValue(4,0.0020);
}
}
else
{
SetLevelValue(1,0.0);
SetLevelValue(2,0.0);
SetLevelValue(3,0.0);
SetLevelValue(4,0.0);
}
}
//+------------------------------------------------------------------+
//| Moving Average of Oscillator |
//+------------------------------------------------------------------+
int start()
{
//if ( Period != 15) Alert ("Juice Is Recommended for 15 Min Chart only!!");
int limit,i;
int counted_bars=IndicatorCounted();
double Juice;
bool DoAlert = true;
//---- 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;
if (StringSubstr(Symbol(),3,3)=="JPY")
{
Level=Level*100;
}
if (Level== 0.0004 && Period()==5 ) Level=0.0002;
if (Level== 0.04 && Period()==5 ) Level=0.02; // for JPY crosses
SetLevelLines();
//---- main loop
for(i=0; i<limit; i++){
OsMABuffer[i]=iStdDev (NULL,0,Periyod,MODE_EMA,0,PRICE_CLOSE,i)-(Level);
Juice = OsMABuffer[i];
if(OsMABuffer[i]>0){
OsMAUpBuffer[i]=OsMABuffer[i];
OsMADownBuffer[i]=0;
}else if(OsMABuffer[i]<0){
OsMADownBuffer[i]=OsMABuffer[i];
OsMAUpBuffer[i]=0;
}else{
OsMAUpBuffer[i]=0;
OsMADownBuffer[i]=0;
}
}
if (Alerts)
{
if (Juice > 5*Point && Period() == 5)
{
if (DoAlert)
{
Alert("Juice above 7 for ", Symbol());
PlaySound("Tick.wav");
DoAlert = false;
}
}
else
{
DoAlert = true;
}
}
//---- done
return(0);
}
//+------------------------------------------------------------------+