//+------------------------------------------------------------------+ //| PriceAlert.mq4 | //| Copyright © 2009-2011, www.earnforex.com | //| Issues sound alerts when price reaches certain levels. | //| modded by Mn ------------------------ | //+------------------------------------------------------------------+ #property copyright "EarnForex.com" #property link "http://www.earnforex.com" #property indicator_chart_window extern double SoundWhenPriceGoesAbove = 0; extern double SoundWhenPriceGoesBelow = 0; extern double SoundWhenPriceIsExactly = 0; extern bool SendEmail=false; //If true e-mail is sent to the e-mail address set in your MT4. E-mail SMTP Server settings should also be configured in your MT4 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { if(SoundWhenPriceIsExactly>0) { ObjectCreate("SoundWhenPriceIsExactly",OBJ_HLINE,0,Time[0],SoundWhenPriceIsExactly); ObjectSet("SoundWhenPriceIsExactly",OBJPROP_STYLE,STYLE_SOLID); ObjectSet("SoundWhenPriceIsExactly",OBJPROP_COLOR,Yellow); ObjectSet("SoundWhenPriceIsExactly",OBJPROP_WIDTH,1); } if(SoundWhenPriceGoesAbove>0) { ObjectCreate("SoundWhenPriceGoesAbove",OBJ_HLINE,0,Time[0],SoundWhenPriceGoesAbove); ObjectSet("SoundWhenPriceGoesAbove",OBJPROP_STYLE,STYLE_SOLID); ObjectSet("SoundWhenPriceGoesAbove",OBJPROP_COLOR,Green); ObjectSet("SoundWhenPriceGoesAbove",OBJPROP_WIDTH,1); } if(SoundWhenPriceGoesBelow>0) { ObjectCreate("SoundWhenPriceGoesBelow",OBJ_HLINE,0,Time[0],SoundWhenPriceGoesBelow); ObjectSet("SoundWhenPriceGoesBelow",OBJPROP_STYLE,STYLE_SOLID); ObjectSet("SoundWhenPriceGoesBelow",OBJPROP_COLOR,Red); ObjectSet("SoundWhenPriceGoesBelow",OBJPROP_WIDTH,1); } return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectDelete("SoundWhenPriceIsExactly"); ObjectDelete("SoundWhenPriceGoesAbove"); ObjectDelete("SoundWhenPriceGoesBelow"); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { // added by Mn ----------------------------------------------------------- if(ObjectGet("SoundWhenPriceGoesAbove",1)!=SoundWhenPriceGoesAbove) SoundWhenPriceGoesAbove=ObjectGet("SoundWhenPriceGoesAbove",1); if(ObjectGet("SoundWhenPriceGoesBelow",1)!=SoundWhenPriceGoesBelow) SoundWhenPriceGoesBelow=ObjectGet("SoundWhenPriceGoesBelow",1); if(ObjectGet("SoundWhenPriceIsExactly",1)!=SoundWhenPriceIsExactly) SoundWhenPriceIsExactly=ObjectGet("SoundWhenPriceIsExactly",1); // added by Mn ----------------------------------------------------------- if((Ask>SoundWhenPriceGoesAbove) && (SoundWhenPriceGoesAbove>0)) { Alert("Price above the alert level."); PlaySound("alert.wav"); SendMail("Price for "+Symbol()+" above the alert level "+Ask,"Price for "+Symbol()+" reached "+Ask+" level, which is above your alert level of "+SoundWhenPriceGoesAbove); ObjectDelete("SoundWhenPriceGoesAbove"); SoundWhenPriceGoesAbove=0; } if((Bid0)) { Alert("Price below the alert level."); PlaySound("alert.wav"); SendMail("Price for "+Symbol()+" below the alert level "+Bid,"Price for "+Symbol()+" reached "+Bid+" level, which is below your alert level of "+SoundWhenPriceGoesBelow); ObjectDelete("SoundWhenPriceGoesBelow"); SoundWhenPriceGoesBelow=0; } if((Bid==SoundWhenPriceIsExactly) || (Ask==SoundWhenPriceIsExactly)) { Alert("Price is exactly at the alert level."); PlaySound("alert.wav"); SendMail("Price for "+Symbol()+" exactly at the alert level "+Ask,"Price for "+Symbol()+" reached "+Ask+"/"+Bid+" level, which is exactly your alert level of "+SoundWhenPriceIsExactly); ObjectDelete("SoundWhenPriceIsExactly"); SoundWhenPriceIsExactly=0; } return(0); } //+------------------------------------------------------------------+