Welcome to the Traders Laboratory Forums.
Coding Forum Collaborate, receive help, or discuss coding related issues.

Reply
Old 10-28-2009, 12:11 AM   #1

Join Date: Nov 2008
Location: Kialla
Posts: 55
Ignore this user

Thanks: 16
Thanked 1 Time in 1 Post

Reset or Clear Each New Bar

I have created some code that displays some calculations on the current bar and need to clear this information and start the calculation over on each new bar.

I have tried this:
if LastBarOnChart and BarStatus( 1 ) = 2 then

but nothing displays using this statement.
Here is the code that I want to reset each bar....
Code:
Ltxt = text_new(date,time,close," ");
		text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff));
		text_SetString(Ltxt,"     "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun));
		text_SetColor(Ltxt,Locolor);
Any suggestions appreciated.
PeterBrazel is offline  
Reply With Quote
Old 10-28-2009, 12:24 AM   #2

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,474 Times in 912 Posts

Re: Reset or Clear Each New Bar

try this:

Code:
if currentbar = 1 then Ltxt = text_new(date,time,close," ");

text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff));
text_SetString(Ltxt,"     "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun));
text_SetColor(Ltxt,Locolor);


;-)
__________________



Only an idiot would reply to a stupid post
Tams is offline  
Reply With Quote
Old 10-28-2009, 01:38 AM   #3

Join Date: Nov 2008
Location: Kialla
Posts: 55
Ignore this user

Thanks: 16
Thanked 1 Time in 1 Post

Re: Reset or Clear Each New Bar

Thanks Tams.

But this does not seem to work. When I add this nothing plots at all.

Perhaps I will provide a little more of my code

Code:
   	//-- Intra-bar (Minute) Chart Timer -------------------------
if 		BarType = 1 
	then begin
		// Grab Computer Time at End-of-Bar and calc end-time
	if 	BarStatus(1) = 2 then
		dtEndTime = ComputerDateTime + dtBarTime;		
		
		// Calc Time Left and Display
if 		dtEndTime <> 0 
	then begin
		// Calc Time Left & Pct. Left
		dtTimeLeft = dtEndTime - ComputerDateTime;
		BarLeftPct = (dtTimeLeft / dtBarTime) * 100;
		// Format the text
	if 	DispMode = cDispPct 
	then  
		TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad
	else if 
		DispMode = cDispRaw 
	then
		TxtStr = FormatTime("m:ss", dtTimeLeft)+" "{+Pad};
end 
	else 
		TxtStr = "Syncing..."+Pad;

		// Display Text
		text_setstring(TxtID," < "+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt);
		//// Entry Text	

		
		Htxt = text_new(date,time,close," ");
		text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff));
		text_SetString(Htxt,"     "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun));
		text_SetColor(Htxt,hicolor);
		
		Ltxt = text_new(date,time,close," ");
		text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff));
		text_SetString(Ltxt,"     "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun));
		text_SetColor(Ltxt,Locolor);
PeterBrazel is offline  
Reply With Quote
Old 10-28-2009, 09:02 AM   #4

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,474 Times in 912 Posts

Re: Reset or Clear Each New Bar

Quote:
Originally Posted by PeterBrazel »
Thanks Tams.

But this does not seem to work. When I add this nothing plots at all.

Perhaps I will provide a little more of my code ...


Peter:

remove all occurrences of these codes from your indicator: (all TEXT_NEW)

Code:
Htxt = text_new(date,time,close," ");
Ltxt = text_new(date,time,close," ");
and add this to the beginning of the your indicator. (right after the variables)

Code:
if currentbar = 1 then 
begin
    Htxt = text_new(date,time,close," ");
    Ltxt = text_new(date,time,close," ");
end;


the idea is this:

at bar #1, you draw a text object to the chart.

bar #1 is somewhere to the left of your chart... but you really don't care where that is.
you only draw that once, because currentbar = 1 only happens one time.

subsequently when your conditions are triggered,
your code reloactes the text object to a new location,
and your code reassigns a new value to the text object...

when a new condition is triggered again,
your code reloactes the text object to a new location... yet again !!!
and your code reassigns a new value to the text object...... yet again !!!


how come you do not see repeated text objects on your chart?
because you have only drew it once.... at bar #1.


enjoy !
__________________



Only an idiot would reply to a stupid post

Last edited by Tams; 10-28-2009 at 09:18 AM.
Tams is offline  
Reply With Quote
Old 10-28-2009, 10:15 AM   #5

Join Date: Nov 2008
Location: Kialla
Posts: 55
Ignore this user

Thanks: 16
Thanked 1 Time in 1 Post

Re: Reset or Clear Each New Bar

Tams,

You are a gentleman. When I followed your instructions nothing plotted at all. I believe I understand conceptually what you are saying.

Here is the complete code thus far.
Code:
{=====================================================================
	NAME:  	BarCountdownTimer
	
	TYPE:	Indicator
	AUTHOR:	Bill Conley (AKA Kahuna) - Timer Counter
			Peter Brazel - Risk, Bossilator and other features. 
	OUTPUT:
			This countdown timer works on Intrabar, Tick or Volume charts. 
			It displays the Time, Ticks or Volume remaining in a bar as text
		 	to the right of the last bar and a user defined portion of the 
			way up the chart (VertTextPct input).  It provides an option to 
			display remaining bar as a percent of the bar interval size. It 
			changes color from Normal Color (NormColor input) to Alert Color 
			(AlertColor input) when the bar reaches the Alert level 
			percent (AlertPct input).  A TS alert is also triggered which
			the trader can chose to enable via the TS Alerts tab.  This 
			alerts the trader as the bar is ending.
	INPUTS:
			VertTextPct - Percent of chart window height at which to display timer (Default: 80)
			NormColor - Color for normal (non-alert) text display (Default: yellow)
			AlertColor - Color for alert text display (Default: red)
			AlertPct - Alert when this percentage of the bar remains (Default: 10),
			DispMode - Display mode option: 1=Percentage, 2=Time/Ticks/Volume (Default: 2)

	COMMENTS:
			For use with intrabar, tick and share bar charts only. For Volume
		 	(Sharebar) charts, make sure Volume is set to "Trade Vol" and for
		 	Tick charts set volume to "Tick Count" for proper operation 
		 	of indicator. 

	RELEASE NOTES:
			V. 1.0 10/08/09	Initial Version

== Inputs & Variables =================================================}

inputs:		RiskDisplaySettings(""),
			EntryBar(1), 			//Risk Calc Entry Bar 1=1 bar back
			Dec(4),	
			Mult(10000), 			//Multiplier to convert ticks to $
			RiskOffset(1), 			// E.G. 1 Tick above the high to enter long
			TextOff(1),
			TruncateTxt(2), 		//Numbers to display for swings. Default=3 e.g. 1.3456 will display 456
			LETxt("LE :"),
			SETxt("SE :"),
			HiColor(Cyan),
			LoColor(Magenta),
			CounterSettings(""),
			VertTextPct(80{0-100}),
			RightOffset(1),
			NormColor(yellow),
			AlertColor(red),
			AlertPct(10{0-100}),
			DispMode(2 {1=Pct,2=Time/Ticks/Vol})
			;
	
vars:		TickSize( MinMove / PriceScale ), 
				{		IntrabarPersist Bar_Number( 0 ),
					IntrabarPersist Bar_Ticks ( 0 ),}
			HiE(0),
			LoE(0),
			Risk(0),
			TxtOff(0),
			TextID(0),
			txt(""),
			ATxt(""),
			Htxt(-1),
			LTxt(-1),
			R1T(-1),
			TicksLeft(0),
			color(0),
			TTrun(0),
			EB(0),

			{Timer}
			{ Text Object Vars }
			TxtStr(""),		// Text String  
			AlertStr(""),	// Alert Text String  
			TxtID(text_new(date,time,close, " ")),		// Text Object Reference
			{ Time/Ticks/Vol Vars }
			dtEndTime(0),	// EndTime for Bar
			dtTimeLeft(0),	// Time Left in Bar
			dtBarTime(0),	// Total Time in Bar
			BarLeftPct(0),	// Percent of Bar Remaining
			BarLeftAmt(0),	// Bar Remaining in Ticks/Vol
			{ Constants }
			cDispPct(1),	// Option to display Percentages
			cDispRaw(2),	// Option to display Time/Tick/Vol Values
			cMinDayInv(1/1440),	// One Min portion of day
			Pad("         ")	// Pad to right of text display
			;
// Other Calcs
			TTrun=TruncateTxt;
			HiE=High[EB]+(RiskOffset*TickSize);
			LoE=Low[EB]-(RiskOffset*TickSize);
			TxtOff=(TextOff*TickSize);
			Risk=(HiE-LoE)*Mult; {HL*Mult;}
			
			EB = EntryBar;

{== Timer Initialization ===================================================}
		
once begin
		// Check for valid chart
	if 	BarType <> 0 and BarType <> 1 then
		RaiseRuntimeError(
			"Countdown Timer is only supported on Intrabar, Tick or Volume Charts");
		// Check for valid input values
	if 	DispMode <> 1 and DispMode <> 2 then
		RaiseRuntimeError("The DispMode input must be set to 1 or 2");
	if 	VertTextPct > 100 or VertTextPct < 0 then
		RaiseRuntimeError("The VertTextPct input must be set between 0 and 100");
	if 	AlertPct > 100 or AlertPct < 0 then
		RaiseRuntimeError("The AlertPct input must be set between 0 and 100");
		// Chart Specific Init
	if 	BarType = 1 then begin 		// Intrabar Chart 
 		dtBarTime = cMinDayInv * BarInterval;
	if 	DispMode = cDispRaw then
		AlertStr = GetSymbolName+" bar has "+NumToStr(BarInterval*60*(AlertPct/100),0)+" seconds remaining"
	else
		AlertStr = GetSymbolName+" bar has "+NumToStr(AlertPct,0)+"% remaining";
end
	else if 	BarType = 0 then begin	// Tick/Vol Chart
	if 			DispMode = cDispRaw then
				AlertStr = GetSymbolName+" bar has "+NumToStr(BarInterval*(AlertPct/100),0)+" ticks/vol remaining"
	else
				AlertStr = GetSymbolName+" bar has "+NumToStr(AlertPct,0)+"% remaining";
end;
end;

{== Timer Calculations ====================================================}
		
	if _LastBarOnChart then begin // Only display in real-time
		
		// Set Text Location from right of chart
		//Value2 = Text_FloatLocation(TxtID, VertTextPct);
		Value2=Text_SetLocation(TxtID, Date, CalcTime(Time,RightOffset), Close);
		{TextID = Text_New(Date, Time, Close, " ");
		Text_SetLocation(TextID, Date, CalcTime(Time,RightOffset), Close);
		text_SetString(TextID," < "+NumToStr(value1,0)+"  R : "+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt);
		text_SetColor(TextID,color);}

		//Value2=Text_SetLocation(TextID, Date, CalcTime(Time,RightOffset), Close);
    	//-- Intra-bar (Minute) Chart Timer -------------------------
if 		BarType = 1 
	then begin
		// Grab Computer Time at End-of-Bar and calc end-time
	if 	BarStatus(1) = 2 then
		dtEndTime = ComputerDateTime + dtBarTime;		
		
		// Calc Time Left and Display
if 		dtEndTime <> 0 
	then begin
		// Calc Time Left & Pct. Left
		dtTimeLeft = dtEndTime - ComputerDateTime;
		BarLeftPct = (dtTimeLeft / dtBarTime) * 100;
		// Format the text
	if 	DispMode = cDispPct 
	then  
		TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad
	else if 
		DispMode = cDispRaw 
	then
		TxtStr = FormatTime("m:ss", dtTimeLeft)+" "{+Pad};
end 
	else 
		TxtStr = "Syncing..."+Pad;

		// Display Text
		text_setstring(TxtID," < "+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt);
		//// Entry Text	

if currentbar = 1 then 
begin
    Htxt = text_new(date,time,close," ");
    Ltxt = text_new(date,time,close," ");
end;

		text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff));
		text_SetString(Htxt,"     "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun));
		text_SetColor(Htxt,hicolor);
		
		{Ltxt = text_new(date,time,close," ");}
		text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff));
		text_SetString(Ltxt,"     "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun));
		text_SetColor(Ltxt,Locolor);

		///////
		// Trigger Alert / Use Alert Color
	if 	dtEndTime <> 0 and 
		BarLeftPct < AlertPct 
	then begin 
		text_SetColor(TxtID, AlertColor);
		Alert(AlertStr);
end
	else
		text_SetColor(TxtID, NormColor);
end
		//-- Tick/Volume Chart Timer -------------------------------
	else 
if 		BarType = 0 
	then begin

		// Calc Bar Remaining 
		BarLeftAmt = BarInterval - Ticks;
		BarLeftPct = (BarLeftAmt / BarInterval) * 100;
	
		// Calc Remaining value
	if 	DispMode = cDispPct then  
		TxtStr = NumToStr(BarLeftPct, 0)+"%"+Pad
	else if 
		DispMode = cDispRaw 
	then
		TxtStr = NumToStr(BarLeftAmt, 0)+" "+Pad;
		// Display Text
		
		text_setstring(TxtID," <"+ TxtStr+"R:"+NumToStr(Risk,0)+" ["+NumToStr((RiskOffset),0)+"]"+ATxt);
			
		// LS Entry Txt

if currentbar = 1 then 
begin
    Htxt = text_new(date,time,close," ");
    Ltxt = text_new(date,time,close," ");
end;


		{Htxt = text_new(date,time,close," ");}
		text_SetLocation(Htxt,date,CalcTime(time,RightOffset),Close+({2*}txtOff));
		text_SetString(Htxt,"     "+LEtxt+RightStr(NumtoStr(HiE,Dec),TTrun));
		text_SetColor(Htxt,hicolor);
		
		{Ltxt = text_new(date,time,close," ");}
		text_SetLocation(Ltxt,date,CalcTime(time,RightOffset),Close-(txtOff));
		text_SetString(Ltxt,"     "+SEtxt+RightStr(NumtoStr(LoE,Dec),TTrun));
		text_SetColor(Ltxt,Locolor);
				
		// Trigger Alert / Use Alert Color
if 		BarLeftPct < AlertPct
	then begin  
		text_SetColor(TxtID, AlertColor);
		Alert(AlertStr);
end
	else begin
		text_SetColor(TxtID, NormColor);
end;
end;
end;
PeterBrazel is offline  
Reply With Quote
Old 10-28-2009, 10:33 AM   #6

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,474 Times in 912 Posts

Re: Reset or Clear Each New Bar

Quote:
Originally Posted by PeterBrazel »
Tams,

You are a gentleman. When I followed your instructions nothing plotted at all. I believe I understand conceptually what you are saying.

Here is the complete code thus far...

try simplify your code to isolate the problem...

e.g.
change CalcTime(Time,RightOffset ) to TIME
change Close-(txtOff) to CLOSE
change text_SetString(Ltxt," "+SEtxt+RightStr(NumtoStr (LoE,Dec),TTrun));
to text_SetString(Ltxt, " THIS IS A TEST ");


ie. test the TEXT_SETLOCATION concept to make sure it works... before adding additional parameters and/or variables.
__________________



Only an idiot would reply to a stupid post
Tams is offline  
Reply With Quote
Old 10-28-2009, 10:41 AM   #7

Join Date: Nov 2008
Location: Kialla
Posts: 55
Ignore this user

Thanks: 16
Thanked 1 Time in 1 Post

Re: Reset or Clear Each New Bar

Tams,

The code that produces the text works fine except that it does not clear when a new bar begins.

Attached is a screenshot of the code plotting the first time exactly as it should.

I will review your posts tomorrow as there is some small adjustment following your logic that should provide my answer.

Thank you for your assistance.
Attached Thumbnails
Reset or Clear Each New Bar-text.png  
PeterBrazel is offline  
Reply With Quote
Old 10-28-2009, 10:50 AM   #8

Tams's Avatar

Join Date: Sep 2008
Location: Geelong
Posts: 3,779
Ignore this user

Thanks: 2,084
Thanked 1,474 Times in 912 Posts

Re: Reset or Clear Each New Bar

Quote:
Originally Posted by PeterBrazel »
Tams,

The code that produces the text works fine except that it does not clear when a new bar begins.

Attached is a screenshot of the code plotting the first time exactly as it should.

I will review your posts tomorrow as there is some small adjustment following your logic that should provide my answer.

Thank you for your assistance.

is that because you have 2 text objects going at the same time?

think... if you want Htxt to print, but not Ltxt,
where would you want to put Ltxt?
__________________



Only an idiot would reply to a stupid post
Tams is offline  
Reply With Quote

Reply

Tags
countdown, timer

Thread Tools
Display Modes Help Others By Rating This Thread
Help Others By Rating This Thread:


Similar Threads
Thread Thread Starter Forum Replies Last Post
Clear Tick Indicator Minetoo Coding Forum 9 03-11-2009 01:38 AM
A Clear Mind walterw Trading Psychology 12 03-22-2007 11:47 AM

All times are GMT -4. The time now is 02:04 PM.
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
CS to VB integration by DeskLancer
©2006-2011 Traders Laboratory, All Rights Reserved.