Hi cmillion
Brooky here,
Thanks for this free code but I found a few areas that did not work for me.
They were primarily
a) An alert issues every tick the price is not crossing but above or below respective lines. That a lot of alerts.
b) I prefer to leave the line where it is before moving to see if is retested, so moving it to a new position is not practical just to stop the alert sounding.
c) The message displayed for Support or Resistance was the same.
I was writing something similar for another indicator I am making so I thought I might attach the following code as an enhancement (IMHO)
to this one. All credits to you.
The modified code now was modified to
a) Alert only once per bar ( by that wonderful bit of code by codersguru )
b) Alert only on the crossing of the Support and Resistance
c) Be appropriately descriptive in the comments.
d) Allow comments to be turned on or off.
e) Allow the trend line to stay in place to check for retests without constant alerts.
Once again thank you.
Code below.
Cheers Brooky
//| Copyright © 2010, Vladimir Hlystov | //| http://cmillion.narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, Vladimir Hlystov" #property link "http://cmillion.narod.ru" #property indicator_chart_window extern string Instructions_1 = " Draw 2 Trendlines "; extern string Instructions_2 = " Name 1) Support "; extern string Instructions_3 = " Name 2) Resistance "; extern bool see_comment = true; //+------------------------------------------------------------------+ //--Modified by Brooky at WWW.Brooky-Indicators.com int deinit() { Comment(""); return( 0 ); } //int start() //{ //--Brooky Added Code int start() { int limit; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- the last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- main loop for(int i=0; i<limit; i++) { //----------------+ datetime sigtime = iTime(NULL,0,i); int sighr = TimeHour(sigtime); int sigmin = TimeMinute(sigtime); int sigday = TimeDay(sigtime); int sigmth = TimeMonth(sigtime); int sigyr = TimeYear(sigtime); string tdisplay = sigday+"/"+sigmth+"/"+sigyr+": "+sighr+":"+sigmin; string tf = "Tf:"+Period(); if(Period()==1)tf = "M1"; if(Period()==5)tf = "M5"; if(Period()==15)tf = "M15"; if(Period()==30)tf = "M30"; if(Period()==60)tf = "H1"; if(Period()==240)tf = "H4"; if(Period()==1440)tf = "Daily"; if(Period()==10080)tf = "Weekly"; if(Period()==43200)tf = "Monthly"; string symtdisplay = "( "+Symbol()+" )"+tf+"( "+tdisplay+" )"; double Support,Resistance; string txt; if (ObjectFind("Support")==-1) txt="No line <Support>\n"; else { Support = ObjectGetValueByShift("Support", 0); //if (Bid<Support) //--Brooky Added Code if(iHigh(NULL,0,i)>Support && iLow(NULL,0,i)<Support) { //--Brooky Added Code int alertname = 1; string mymessage1 = symtdisplay+" Price Crossing the support line "; AlertOnce (mymessage1,alertname); txt=StringConcatenate(txt,"( Price bar on the support line ) \n"); //-----+ //Alert("Price below the support line "); if (Bid<Support)txt=StringConcatenate(txt," Price below the support line \n") ; } else txt=StringConcatenate(txt," Distance to the line of support ",DoubleToStr((Bid-Support)/Point,0),"\n"); } if (ObjectFind("Resistance")==-1) txt=StringConcatenate(txt,"No line <Resistance>\n"); else { Resistance = ObjectGetValueByShift("Resistance", 0); //if (Ask>Resistance) //--Brooky Added Code if(iHigh(NULL,0,i)>Resistance && iLow(NULL,0,i)<Resistance) { //--Brooky Added Code int alertname2 = 2; string mymessage2 = symtdisplay+" Price Crossing the Resistance line "; AlertOnce (mymessage2,alertname2); txt=StringConcatenate(txt,"( Price bar on the Resistance line )\n"); //-----+ //Alert("Price above the Resistanceance line"); if (Ask>Resistance) txt=StringConcatenate(txt," Price above the Resistance line"); } else txt=StringConcatenate(txt," Distance to the line of Resistance ",DoubleToStr((Resistance-Ask)/Point,0)); } if(see_comment)Comment(txt); return(0); } } //---- done return(0); //} //+------------------------------------------------------------------+ bool AlertOnce(string alert_msg, int ref) { int barcheck = Bars; static int LastAlert_1 = 0; static int LastAlert_2 = 0; switch(ref) { case 1: if( LastAlert_1 == 0 || LastAlert_1 < barcheck ) { Alert(alert_msg); LastAlert_1 = barcheck; return (1); } break; case 2: if( LastAlert_2 == 0 || LastAlert_2 < barcheck ) { Alert(alert_msg); LastAlert_2 = barcheck; return (1); } break; } }
Hi cmillion
Brooky here,
Thanks for this free code but I found a few areas that did not work for me.
/////
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
AlertLine:
Author: Vladimir Khlystov