Click Image To Enlarge. Please Rate And Comment.
procedure constructChart_proc(nBar)
{
global lBeginTime;
global lEndTime;
global lBeginNoTime;
global lEndNoTime;
global j;
lBeginTime[ 0 ] = C[ 0 ];
lEndTime[ 0 ] = C[ 0 ];
lBeginNoTime[ 0 ] = C[ 0 ];
lEndNoTime[ 0 ] = C[ 0 ];
lastHigh = C[ 0 ];
lastLow = C[ 0 ];
numUp = 0;
numDn = 0;
j = 0;
for ( i = 1; i < BarCount; i++ )
{
// 1) trend change up
if ( C[ i ] > lastHigh AND numDn >= nBar AND numUp == 0)
{
numDn = 0;
numUp = numUp + 1;
j = j + 1;
lBeginTime[ i ] = lBeginTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lBeginNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
lastLow = lEndNoTime[ j - 1 ];
lastHigh = C[ i ];
}
// 2) trend up continuation after downbar
else if ( C[ i ] > lastHigh AND numDn > 0 AND numDn < nBar AND numUp == 0)
{
numDn = 0;
numUp = numUp + 1;
j = j + 1;
lBeginTime[ i ] = lBeginTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lBeginNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
lastLow = lEndNoTime[ j - 1 ];
lastHigh = C[ i ];
}
// 3) trend up continuation
else if ( C[ i ] > lastHigh AND numDn == 0 )
{
numDn = 0;
numUp = numUp + 1;
j = j + 1;
lBeginTime[ i ] = lEndTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lEndNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
if (numUp >= nbar)
{
lastLow = lEndNoTime[ j - nBar ];
}
else if (numUp < nBar)
{
lastLow = lastLow;
}
lastHigh = C[ i ];
}
// 1) trend change down
else if ( C[ i ] < lastLow AND numUp >= nBar AND numDn == 0)
{
numUp = 0;
numDn = numDn + 1;
j = j + 1;
lBeginTime[ i ] = lBeginTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lBeginNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
lastLow = C[ i ];
lastHigh = lEndNoTime[ j - 1 ];
}
// 2) trend down continuation after upbar
else if ( C[ i ] < lastLow AND numUp > 0 AND numUp < nBar AND numDn == 0)
{
numUp = 0;
numDn = numDn + 1;
j = j + 1;
lBeginTime[ i ] = lBeginTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lBeginNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
lastLow = C[ i ];
lastHigh = lEndNoTime[ j - 1 ];
}
// 3) trend down continuation
else if ( C[ i ] < lastLow AND numUp == 0 )
{
numUp = 0;
numDn = numDn + 1;
j = j + 1;
lBeginTime[ i ] = lEndTime[ i - 1];
lEndTime[ i ] = C[ i ];
lBeginNoTime[ j ] = lEndNoTime[ j - 1];
lEndNoTime[ j ] = C[ i ];
if (numDn >= nbar)
{
lastHigh = lEndNoTime[ j - nBar ];
}
else if (numDn < nBar)
{
lastHigh = lastHigh;
}
lastLow = C[ i ];
}
// no break
else if ( C[ i ] >= lastLow AND C[ i ] <= lastHigh )
{
lBeginTime[ i ] = lBeginTime[ i - 1];
lEndTime[ i ] = lEndTime[ i - 1 ];
}
}
}
// code by E.M.Pottasch, 11/7/2010, N line Break Charts
// After Steve Nison's book: Beyond Candlesticks, Chapter 6: three line break charts
// Option 1: turn time axis on/off, Option 2: N-line break instead of 3-line break
SetBarsRequired( sbrAll, sbrAll );
nBar = Param( "nBar", 3, 2, 10, 1 );
constructChart_proc(nBar);
Title = Name() +
" | " + EncodeColor( colorYellow ) + nbar + EncodeColor( colorWhite ) + " Line Break";
chartType = ParamToggle("Show Time Axis","show|hide",0);
if (chartType)
{
GraphXSpace = 5;
SetChartOptions( 0, chartShowDates );
Plot(C, "\nTLB", colorWhite, styleBar);
C = lEndTime;
O = lBeginTime;
H = IIf( C > O, C, O );
L = IIf( C > O, O, C );
Plot(C,"", colorWhite, styleCandle);
}
else
{
delta = BarCount - 1 - j;
lBeginNoTime = Ref(lBeginNoTime,-delta);
lEndNoTime = Ref(lEndNoTime,-delta);
C = lEndNoTime;
O = lBeginNoTime;
H = IIf( C > O, C, O );
L = IIf( C > O, O, C );
Plot(C,"\nTLB", colorWhite, styleCandle);
}