Renko AFL Code

Hi ,

can some one provide AFL code for Renko chart / Super Renko AFL Code for amibroker. as the codes available in internet are not matching with price and time, there is bug in the code.

As per the above query you can check the below AFL code for the Renko charts


//------------------------------------------------------------------------------
//
//  Plot renko chart. Error in plotting will occur if the box and/or reversal
//  values are too small causing the number of renko bars exceeding the
//  underlying stock normal price bars
//
//------------------------------------------------------------------------------

// Renko  Chart
// Graham Kavanagh  13 Aug 2004 ver C
// Custom Indicator, date axis does not apply

SetBarsRequired(10000,10000);

// Brick size is dependant on what you want, if too small will not produce a chart due to insufficient x-axis bars
//Brick = LastValue( ATR(100) );
//Brick = LastValue( Max(0.02*C, 0.05) );
Brick = Param( "Brick Size", 0.1, 0.01, 1.00, 0.01 );
reverse = 2;

// Convert the closing price to rising and falling rounded bricks
CF = ceil(C/Brick);
CR = floor(C/Brick);

// initialize first element
j = 0;
RKC[j] = CF[0];
RKO[j] = CF[0] + 1;

down[j] = 1;  // By default the first bar is a down bar.
up[j] = 0;

// Loop to produce the Renko values in number of bricks

for( i=1; i<BarCount-1; i++ )
{
if( CF[i] <= RKC[j] - 1 && down[j] ) // Continue down
	{
		num = RKC[j] - CF[i];
		for( x=1; x<=num; x++ )
		{
			j++;
			up[j] = 0;
			down[j] = 1;
			RKC[j] = RKC[j-1] - 1;
			RKO[j] = RKC[j] + 1;
		}
	}
	else
	{
		if( CR[i] >= RKC[j] + Reverse && down[j] )  // Change down to up
		{
			num = CR[i] - RKC[j];
			j++;
			up[j] = 1;
			down[j] = 0;
			RKC[j] = RKC[j-1] + 2;
			RKO[j] = RKC[j] - 1;			
			for( x=2; x<=num; x++ )
			{
				j++;
				up[j] = 1;
				down[j] = 0;
				RKC[j] = RKC[j-1] + 1;
				RKO[j] = RKC[j] - 1;
			}
		}
		else
		{
			if( CR[i] >= RKC[j] + 1 && up[j] ) // Continue Up
			{
				num = CR[i] - RKC[j];
				for( x=1; x<=num; x++ )
				{
					j++;
					Up[j] = 1;
					Down[j] = 0;
					RKC[j] = RKC[j-1] + 1;
					RKO[j] = RKC[j] - 1;
				}
		 	}
		 	else
		 	{
			 	if( CF[i] <= RKC[j] - Reverse && up[j] )  // Change up to down
			 	{
				 	num = RKC[j] - CF[i];
				 	j++;
					Up[j] = 0;
				 	Down[j] = 1;
				 	RKC[j] = RKC[j-1] - 2;
				 	RKO[j] = RKC[j] + 1;
				 	for( x=2; x<=num; x++ )
				 	{
					 	j++;
					 	up[j] = 0;
				 		down[j] = 1;
				 	 	RKC[j] = RKC[j-1] - 1;
				 	 	RKO[j] = RKC[j] + 1;
					}
				}
			}
		}
	}
}

// move the chart to right end of chart space, ie last brick on last bar position
delta =  BarCount-1 - j;

RKC = Ref( RKC, -delta );
RKO = Ref( RKO, -delta );

Up = Ref( Up, -delta );
Down = Ref( Down, -delta );

/*
rC = RKC * Brick;// + (Up-down)*Brick/2;
rO = RC - (Up-down)*Brick;
rH = Max(rC,rO);
rL = Min(rC,rO);
*/

C = RKC * Brick;// + (Up-down)*Brick/2;
O = C - (Up-down)*Brick;
H = Max(C,O);
L = Min(C,O);

Plot( C, "", colorGrey50,styleCandle); 
// plot chart
//plotOHLC( rO, rH, rL, rC, "Renko Price " , colorBlack, styleCandle);
GraphXSpace=5;

Title = Name() + " - {{INTERVAL}} {{DATE}} - Renko Chart : Last Value = " + RKC * Brick + ", Brick Size = " + Brick;

hi

I tried this renko chart afl in my amibroker but its not working can u help me on this .please

can you share your error screenshot

try below amibroker afl for renkos

function FillRun( dir, num, changedir )
{
    global i, j, modified, dt, RKC, RKO, RKD, RKH, RKL;

    for( x = 1; x <= num AND j < BarCount - 1; x++ )
    {
        j++;
        extra = ( changedir AND x == 1 ) * dir;
        RKC[ j ] = RKC[ j - 1 ] + dir + extra;
        RKO[ j ] = RKC[ j - 1 ] + IIf( modified, 0, extra );
        RKD[ j ] = dt[ i ];
        RKH[ j ] = High[ i - 1 ];
        RKL[ j ] = Low[ i - 1 ];
    }
}
SetBarsRequired( sbrAll, sbrAll );
Brick = Param( "Brick Size", 0.001, 0.0001, 1.00, 0.001 );
reverse = 2;
intra = ParamToggle( "Intraday", "No|Yes", 0 );
modified = ParamToggle( "Modified", "No|Yes", 0 );
// Convert the closing price to rising and falling rounded bricks
CF = ceil( C / Brick );
CR = floor( C / Brick );
// initialize first element
j = 0;
RKC[j] = CF[0];
RKO[j] = CF[0] + 1;
RKD = 0;
RKH = 0;
RKL = 0;
dt = IIf( intra, floor( TimeNum() / 100 ), DateNum() );
dir = -1; // 1 is up, -1 is down

// Loop to produce the Renko values in number of bricks
for( i = 1; i < BarCount - 1; i++ )
{
    if( j >= BarCount )
        break; // no more room -> finish

    if( CF[i] <= RKC[j] - 1 AND dir < 0 )  // Continue down
    {
        num = RKC[j] - CF[i];
        FillRun( dir, num, False );
    }
    else
        if( CR[i] >= RKC[j] + Reverse AND dir < 0 )  // Change down to up
        {
            num = CR[i] - RKC[j];
            dir = 1;
            FillRun( dir, num, True );
        }
        else
            if( CR[i] >= RKC[j] + 1 AND dir > 0 )  // Continue Up
            {
                num = CR[i] - RKC[j];
                FillRun( dir, num, False );
            }
            else
                if( CF[i] <= RKC[j] - Reverse AND dir > 0 )  // Change up to down
                {
                    num = RKC[j] - CF[i];
                    dir = -1;
                    FillRun( dir, num, True );
                }
}

// move the chart to right end of chart space, ie last brick on last bar position
delta =  BarCount - 1 - j;
RKC = Ref( RKC, -delta );
RKO = Ref( RKO, -delta );
RKD = Ref( RKD, -delta );
RKH = Ref( RKH, -delta );
RKL = Ref( RKL, -delta );
C = RKC * Brick;
O = RKO * Brick;
H = IIf( modified, RKH, Max( C, O ) );
L = IIf( modified, RKL, Min( C, O ) );
Plot( C, "", IIf( C > O, colorGreen, colorRed ), styleCandle );
m1 = MA( ( C + H + L ) / 3, 8 );
m2 = MA( C, 8 );
Plot( m1, "SMA Typ", colorBlue );
Plot( m2, "SMA Renko", colorOrange );
Cover = Cross( m2, m1 );
Sell = Cross( m1, m2 );
Short = Sell AND C < O;
Buy = Cover AND C > O;
PlotShapes( shapeUpArrow * Buy, colorGreen, 0, m1 );
PlotShapes( shapeDownArrow * Sell, colorRed, 0, m1 );
PlotShapes( shapeHollowUpArrow * Cover, colorGreen, 0, m1, -25 );
PlotShapes( shapeHollowDownArrow * Short, colorRed, 0, m1, -25 );
color = IIf( Flip( Buy, Sell ), ColorRGB( 220, 255, 220 ),IIf( Flip( Short, Cover ), ColorRGB( 255, 220, 220 ), colorWhite ) );
Plot( 1, "", color, styleArea | styleOwnScale, 0, 1, 0, -1 );
xnum = floor( RKD / 1000 );
XChange = IIf( xnum != Ref( xnum, -1 ), 1, Null );
Plot( XChange, "", colorGrey50, styleHistogram | styleOwnScale, 0, 1 );
// Draw renko-date axis
MonthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
fvb = FirstVisibleValue( BarIndex() );
lvb = LastVisibleValue( BarIndex() );

for( i = fvb; i < lvb; i++ )
{
    if( XChange[ i ] )
    {
        if( intra )
            datetext = StrFormat( "%02gh", floor( RKD[ i ] / 100 ) );
        else
            if( ( xnum[ i ] % 100 ) == 1 )
                datetext = StrFormat( "%04.0f", 1900 + ( xnum[ i ] / 100 ) );
            else
                datetext = StrExtract( MonthNames, ( xnum[ i ] % 100 ) - 1 );

       // PlotText( datetext  , i, LowestVisibleValue( Low ), colorGrey50, colorWhite, -20 );
    }
}

Title = Name() + StrFormat( " - 20%06.0f", RKD % 1000000 ) + " - Renko Chart : Last Value = " + RKC * Brick + " H: " + RKH + " L: " + RKL + ", Brick Size = " + Brick;
GraphXSpace = 5;

Can u give me your phone number I tried that now it’s plotting but I have some doubts in that can u help me in this. I won’t disturb u need to clarify that’s why

hi
this the end result …
the priceis not updating
the renko brick size cannot be changed like in zerodha chart and indicator value of super trend also cannot change i knw is distubirng but if u could help that will become very useful

right click on the chart go to change parameters and can change the brick size, and check on live if its ticking, it should work,

i can able to change brick size for above, right click and select parameter, refer below screenshots

I tried it works but the price it shows is different than the actual price for commodity.
Is there way to show the actual price

Renko candle form based on price action of brick size

Hi… I’m getting this error while executing the above code.

This is because reverse is a built in function.
Simply change reverse =2 to reversal = 2 on line 19.
Do the same in lines 47 and 60 and this will get rid of the error.