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

Reply
Old 08-27-2009, 11:23 PM   #1

Join Date: Dec 2008
Location: on the slopes
Posts: 83
Ignore this user

Thanks: 40
Thanked 36 Times in 23 Posts



Color Code MA for Range Bar Indicator

I'm stuck on what I thought would be a simple coding task for Uli's range bar expansion indicator.

My goal was to color code the two moving averages EMA34 and LSMA red and magenta respectively when slope is down; green and blue when slope is up. Full original code is posted below.

My attempt to color code EMA34 by it's slope (shown next) failed:

original plot line (17 lines from the end):

if plotEMA34 then plot1[1](EMA34[value1],"LBEMA34")


my failed code attempt (just turns MA green):

if plotema34 and
EMA34[value1] > EMA34[value1-1]then
plot1[1](EMA34[value1],"LBEMA34",Green)
else if
plotema34 and
EMA34[value1] < EMA34[value1-1]then
plot1[1](EMA34[value1],"LBEMA34",red);

I believe the problem has to do with the fact that this is built within an array.
Any savy coders able to lend some ideas?

Thanks in advance!,
snowbird

-------------------------------------------------
//Range Expansion Bars by Uli Schmuli

inputs: BarRange(3.75),
PlotRangeBars(true),
PlotExpansionBars(true),
PlotExpansionPotential(tr ue),
BullBarColor(green),
BearBarColor(red),
RBThickness(3),
PlotEMA34(true),
PlotLSMA(true);

var:RangeHigh(0),
RangeLow(0),
RangeOpen(open),
RangeClose(0),
RBcolor(green),
LBLow(0),
LBHigh(0),
LBOpen(0),
LBClose(0),
offset(0),
LBxAvg(0),
SmoothingFactor(2/35),
LSMAtemp(0);

Array: EMA34[100](0),
RBHigh[100](close),
RBLow[100](close),
RBOpen[100](Close),
RBClose[100](close),
LSMA[100](close);

if barnumber = 1 then //1st bar initialization

begin

if range < BarRange then
begin
RangeHigh = high;
RangeLow = Low;
end;

if range > BarRange then
begin
RangeHigh = High;
RangeLow = Low;
end;

LSMA[1] = close;
EMA34[1] = close;
RBclose[1] = close;
LSMA[1] = close;
LBopen = open;

end else //all other bars

Begin
if date <> date[1] then //new day, begin new bar & close out prior bar

begin
LBHigh = RangeHigh;
LBlow = RangeLow;
LBOpen = RangeOpen;
LBclose = iff(close<RBclose[1],RangeLow,RangeHigh);
For Value1 = 100 downto 2
begin

EMA34[value1] = EMA34[value1-1];
RBHigh[value1] = RBHigh[Value1-1];
RBLow[value1] = RBLow[Value1-1];
RBOpen[value1] = RBOpen[Value1-1];
RBClose[value1] = RBClose[value1-1];
LSMA[value1] = LSMA[value1-1];
end;

RBHigh[1] = LBHigh;
RBLow[1] = LBLow;
RBOpen[1] = LBOpen;
RBClose[1] = LBClose;

EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]);
value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp);
LSMA[1] = LSMAtemp;
RangeOpen = Open;
RangeHigh = High;
RangeLow = low;
RangeClose = close;
offset = 1;
end;

if offset[1] = 1 and date = date[1] then offset = 0;
if low >= rangelow and high <= rangehigh then //Bar totally in barrange
begin


end;

if high > Rangehigh and low >= rangelow then //new high value
begin


rangehigh = high;

If high - rangelow > barrange then //New Higher bar detected
begin
LBlow = RangeLow;
LBHigh = RangeLow + BarRange;
LBOpen = RangeOpen;
LBclose = LBHigh;
For Value1 = 100 downto 2
begin

EMA34[value1] = EMA34[value1-1];
RBHigh[value1] = RBHigh[Value1-1];
RBLow[value1] = RBLow[Value1-1];
RBOpen[value1] = RBOpen[Value1-1];
RBClose[value1] = RBClose[value1-1];
LSMA[value1] = LSMA[value1-1];
end;

RBHigh[1] = LBHigh;
RBLow[1] = LBLow;
RBOpen[1] = LBOpen;
RBClose[1] = LBClose;
EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]);
value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp);
LSMA[1] = LSMAtemp;

rangeopen = Rangelow + barrange;
rangeLow = Rangelow + barrange;
RangeClose = rangeopen;
offset = 1;
end;
end;

if low < RangeLow and high <= rangehigh then//new low value
begin
Rangelow = low;

if rangehigh - low > barrange then //New lower bar detected
begin
LBHigh = RangeHigh;
LBlow = RangeHigh - barrange;
LBOpen = RangeOpen;
LBclose = LBlow;
For Value1 = 100 downto 2
begin

EMA34[value1] = EMA34[value1-1];
RBHigh[value1] = RBHigh[Value1-1];
RBLow[value1] = RBLow[Value1-1];
RBOpen[value1] = RBOpen[Value1-1];
RBClose[value1] = RBClose[value1-1];
LSMA[value1] = LSMA[value1-1];
end;
RBHigh[1] = LBHigh;
RBLow[1] = LBLow;
RBOpen[1] = LBOpen;
RBClose[1] = LBClose;

EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]);
value1 = LinRegArray(RBClose,25, 0, value2, value3,value4, LSMAtemp);
LSMA[1] = LSMAtemp;

RangeOpen = LBclose;
RangeHigh = LBclose;
RangeLow = low;
RangeClose = close;
offset = 1;
end;
end;

if high > RangeHigh and Low < RangeLow and rangehigh - rangelow > barrange then//engulfing bar
begin
RangeLow = low;
RangeHigh = high;
end;
end;



begin

if offset = 1 then //new bar begun
begin

if RBclose[1] < RBclose[2] then RBcolor = BearBarColor else RBcolor = BullBarColor;
plot15[1](RBHigh[value1],"RBHighL",RBColor,defaul t,RBthickness);
plot16[1](RBLow[value1],"RBLowL",RBcolor,default ,RBthickness);
plot17[1](RBopen[value1],"RBopenL",RBcolor,defaul t,RBthickness);
Plot18[1](RBClose[value1],"RBcloseL",RBColor,defau lt,RBthickness);
if plotEMA34 then plot1[1](EMA34[value1],"LBEMA34")
if plotLSMA then plot5[1](LSMA[Value1],"LSMA");
end;

if close < LBclose then RBcolor = darkred else RBcolor = darkgreen;

if PlotExpansionBars then
begin
plot20(rangehigh,"chigh", RBColor,default,1);
plot21(rangelow,"clow",RB color,default,1);
plot22(rangeopen,"copen", RBcolor,default,1);
Plot23(Close,"cclose",RBC olor,default,1);
end;

if PlotExpansionPotential then
begin
Plot24(rangehigh-barrange,"PotLow");
Plot25(RangeLow+barrange, "PotHigh");
end;

end;
snowbird is offline  
Reply With Quote
Old 08-27-2009, 11:33 PM   #2

Tams's Avatar

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

Thanks: 2,027
Thanked 1,402 Times in 862 Posts



Re: Color Code MA for Range Bar Indicator

you are making it way too complicated.

try this:

Code:
if plotema34 then
begin
	plot1[1]( EMA34[value1], "LBEMA34");

	if EMA34[value1] > EMA34[value1-1] then
	SetPlotColor( 1, green )
	else
	SetPlotColor( 1, red );
end;


ps. I don't understand why you use plot1[1].
Tams is offline  
Reply With Quote
Old 08-28-2009, 12:30 AM   #3

Join Date: Dec 2008
Location: on the slopes
Posts: 83
Ignore this user

Thanks: 40
Thanked 36 Times in 23 Posts



Re: Color Code MA for Range Bar Indicator

Wow... quick response TAM's!!

I was definatly making it too hard (can you tell I'm NOT a coder)

but unfortunately the code simplification still does not work (I believe it has to do either with how often Uli samples the Array, or his smoothing algorithm in line #69

EMA34[1] = EMA34[2] + SmoothingFactor * (RBclose[1] - EMA34[2]);

Don't know if this will port to MT... but that's what it might take to figure this one out... I posted a chart that shows the MA color changes in the indicator with your code... never does go red... but we do get patches of green!

I do not know why Uli uses plot1[1]... but figured it had something to do with his array setup and calculations. If you eliminate the [1] then the MA just plots green (up and down!)

snowbird
Attached Thumbnails
Color Code MA for Range Bar Indicator-rangebarma.jpg  
snowbird is offline  
Reply With Quote
Old 08-28-2009, 12:37 AM   #4

Tams's Avatar

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

Thanks: 2,027
Thanked 1,402 Times in 862 Posts



Re: Color Code MA for Range Bar Indicator

maybe your array is not serial...

try this:
the var ema.34 should isolate the sequence.


Code:
var:
ema.34(0);

ema.34 = EMA34[value1];

if plotema34 then
begin
	plot1[1]( EMA.34, "LBEMA34");

	if EMA.34 > EMA.34[1] then
	SetPlotColor( 1, green )
	else
	SetPlotColor( 1, red );
end;
Tams is offline  
Reply With Quote
Old 08-28-2009, 12:39 AM   #5

Tams's Avatar

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

Thanks: 2,027
Thanked 1,402 Times in 862 Posts



Re: Color Code MA for Range Bar Indicator

Quote:
Originally Posted by snowbird »
...I do not know why Uli uses plot1[1]... but figured it had something to do with his array setup and calculations. If you eliminate the [1] then the MA just plots green (up and down!)

snowbird

plot[1] ... plots the previous bar.

i.e. it goes back one bar to plot the color/value.

I don't know if he is changing the color/value of the previous bar? or simply skipping the plot on the current bar.




.

Last edited by Tams; 08-28-2009 at 01:29 AM.
Tams is offline  
Reply With Quote
Old 08-28-2009, 11:53 PM   #6

Join Date: Dec 2007
Location: Yorkville
Posts: 44
Ignore this user

Thanks: 22
Thanked 42 Times in 18 Posts



Re: Color Code MA for Range Bar Indicator

The reason plot[1] is used for the range bar is because when using tick data input, you don't know if a bar is closed until the range has been exceeded on the next bar. So, if a range has been filled, then the proper place to plot the bar is one bar back.

You do realize that range bars are now one of the chart types that can be selected, yes? In other words, range bars are now part of the Tradestation platform. I wrote this code as a workaround until they released a version that included range bars.

While is may seem that with the native range bars in Tradestation that this code is now obsolete, it does have a useful purpose. If you are running a strategy using a range bar chart, you cannot use intrabar order generation. The code I provided allows you to take action within the current bar, effectively allowing you to generate orders & other actions "intrabar."

Also, I would like to draw your attention to an error in the code. A new bar generated by this code creates a range bar that has the same open value as the prior bar close. This is not correct. The open should be 1 tick above/below the prior bar close and the bar range calculated from there.

Uli
Uli Schmuli is offline  
Reply With Quote
The Following User Says Thank You to Uli Schmuli For This Useful Post:
Tams (08-29-2009)
Old 08-29-2009, 03:50 AM   #7

Join Date: Dec 2008
Location: on the slopes
Posts: 83
Ignore this user

Thanks: 40
Thanked 36 Times in 23 Posts



Re: Color Code MA for Range Bar Indicator

Thanks Uli,

I'm actually using the range "Expansion" bars which are not available in tradestation.

You will probably laugh when you hear how I am using them... My major issue is patience and discipline (I tend to jump the gun too early and overtrade).
I've been using the range expansion bars in three ways to help:

1. Don't trade the chop (blue rectangle on chart, where you get an up/down/up sequence of expanded bars

2. Wait for a "signal" range expansion bar (each of the 3 green bars in a range downtrend on this chart are what I use as "signal" bars , and then I wait for a break below the low of the previous bar in this case to enter (3 yellow arrow trend re-entries on the chart)

3. But my favorites are the breakouts from consolidations. These are where significant time elapses between range expansion bars (green and red rectangles in the chart). I try and set the expansion factor at ~2x the ATR (been thinking about possible changes to the code to make this automatic!

I was also wondering what criteria you use for color coding bars between range expansion bars?

... and as you can see... I still have not completely figured out color coding of the EMA (issue is due to the smoothing algorithm I believe).

TAMS has been a great help as I now have portions that turn both red and green... its the parts in-between I'm missing!

Thanks again,

snowbird
Attached Thumbnails
Color Code MA for Range Bar Indicator-uli_range.jpg  
snowbird is offline  
Reply With Quote
Old 09-03-2009, 10:55 PM   #8

Join Date: Apr 2009
Location: newyork
Posts: 6
Ignore this user

Thanks: 0
Thanked 0 Times in 0 Posts



Re: Color Code MA for Range Bar Indicator

can someone post codes to plot point on an indicator i.e. CCI (2nd paragraph plotted with 133 tick as data1) to show Open of Range Expansion Bar.I am using MC.
hrshukla is offline  
Reply With Quote

Reply

Tags
color, plot

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Similar Threads
Thread Thread Starter Forum Replies Last Post
Ninjatrader: Access Color of Another Indicator taotree Coding Forum 0 07-25-2009 11:46 PM
Triangle Pattern Indicator Code Not Working clbradley Coding Forum 16 04-27-2009 09:36 PM
IB Range Indicator for CQG Soultrader Trading Indicators 0 12-09-2008 03:47 AM
SPY Opening Range Volume Vs Days Range darthtrader Technical Analysis 3 04-17-2008 11:54 AM
Opening 15m Range Indicator rwalkerx Trading Indicators 1 03-01-2007 08:09 PM

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