Skip to main content

Command Palette

Search for a command to run...

Constructing Renko Charts Using Python

Updated
6 min readView as Markdown
Constructing Renko Charts Using Python

Renko originated from the Japanese word Renga, which means brick. Renko Charts are built using price movements, unlike other charts, which use price and standardized time intervals. When price moves a certain amount, new brick gets formed, and each block is positioned at a 45-degree angle (up or down) to the last brick.

Let's look at both the candlestick and Renko chart for Apple stock. (Feel free to play with the charts)

Renko Chart for APPLE Stock

Candlestick Chart for APPLE Stock

As you can notice, Chart 1 (Renko) is much cleaner than Chart 2 (Candlestick), and that is precisely the beauty of Renko Charts. They reduce the noise and gives us a clear indication of the trend.

Now, let's talk about the different methods to plot Renko charts, and later we will discuss its python implementation and the pros and cons of using this charting type.

Disclaimer: Article for educational purposes only; no trading advice is being given or intended.

Possible Implementations

Method 1: Using Fixed Price Bricks

For example, let's take a stock whose price is $500 we fix the price change for the bricks to be $10. That is when the price is $510 - Renko chart will paint green brick. Similarly, when the price hits $490. The Renko chart will paint red brick.

Method 2: Using percentage change for painting bricks.

Example:- When the stock price increase by 1%, the Renko chart paints a green brick. When the stock price increase by 1%, the Renko chart paints a red brick.

TIP:- For various investment horizons, it's good to adjust the percentage accordingly. An ideal approach to use is:

  • 0.25% - 0.5% - For Short Term Investment

  • 1% - 1% - For Medium Term Investment

  • 3% - 5% - For Long Term Investment

Method 3: Using Average True Range(ATR)

ATR is the most common method used for Renko charts in the industry as it's dynamic.

ATR is a measure of Volatility that fluctuates with time. The fluctuating ATR value will be used as the box size in the Renko charts.

For this article, I have used the ATR Technique to plot Renko Charts.

Python Implementation

Step 1: Installing the necessary packages and libraries

pip install yfinance # for getting OHLCV data
pip install mplfinance # for plotting Renko charts

Step2: Importing necessary libraries

import datetime as dt
import yfinance as yf
import pandas as pd
import mplfinance as fplt

Step3: Getting OHLCV data

start_date = dt.datetime.today()- dt.timedelta(1825) # getting data of around 5 years.
end_date = dt.datetime.today()
ticker_name = "TCS.NS"
ohlcv = yf.download(ticker_name, start_date, end_date)

We are downloading five years worth of data from Yahoo Finance using the yfinance library. Once downloaded, the ohlcv dataframe should look like the below.

image.png

Step4: Defining Average True Range function(ATR)

The Average True Range is specified with the below formula, in short, it is calculated by calculating three ranges

  • High Price (for that day) - Low Price (for that day)

  • High Price (for that day) - Adjusted Close (for the previous day)

  • Low Price (for that day) - Adjusted Close (for the previous day)

MAX of all the three above is our True Range, we calculate this True Range for a number of days and then use the Average of this True Range as Average True Range (ATR)

image.png

Source: Investopedia

I hope that makes sense; if not, please feel free to clarify in the comments below.

# Function to calculate average true range
def ATR(DF, n):
  df = DF.copy() # making copy of the original dataframe
  df['H-L'] = abs(df['High'] - df['Low']) 
  df['H-PC'] = abs(df['High'] - df['Adj Close'].shift(1))# high -previous close
  df['L-PC'] = abs(df['Low'] - df['Adj Close'].shift(1)) #low - previous close
  df['TR'] = df[['H-L','H-PC','L-PC']].max(axis =1, skipna = False) # True range
  df['ATR'] = df['TR'].rolling(n).mean() # average –true range
  df = df.drop(['H-L','H-PC','L-PC'], axis =1) # dropping the unneccesary columns
  df.dropna(inplace = True) # droping null items
  return df

Step 5: Calling ATR function

We call the ATR function with n=50, which means that we are going to use the average true range for the last 50 days.

print(ATR(ohlcv, 50))

image.png

As you can see in the above example of TCS.NS the ATR has decreased from 126.5 to 51.84 Rupees on a 50-day rolling basis. So ideally, if we capture the latest ATR of the stock and consider that in our Renko chart, that would be more useful.

bricks = round(ATR(ohlcv,50)["ATR"][-1],0) #capturing the latest ATR
#rounding off the result to an integer.
print(bricks)

image.png

Step 6: Plotting Renko Chart

The most straightforward piece, thanks to the mplfinance library.

fplt.plot(ohlcv,type='renko',renko_params=dict(brick_size=bricks, atr_length=14),
          style='yahoo',figsize =(18,7),
          title = "RENKO CHART WITH ATR{0}".format('ticker_name'))

WhatsApp Image 2021-07-25 at 10.46.12 AM.jpeg

Great, so now you know how to calculate the ATR and plot Renko Charts using Python; you can now automate this metric, monitor some stocks, and deploy your trading robot.

Trading Idea: Go Long on 3rd brick for three consecutive green bricks and go short on 3rd brick for every three consecutive red bricks.

image.png

Just for our reader's benefit, I had like to highlight not all is good with Renko charts; there are pros and cons to each and everything, and using just one indicator to do trading is not good enough for the modern world. Given that, here are a couple of pros and cons for you to consider.

Pros

  • Reduces all sorts of market noise.

  • Suggests clear levels of market support and resistance levels.

  • Works great for Price-Action type strategies because Renko charts only carry price elements; time is not considered.

Cons

  • The Renko bricks might not form a new brick every trading day if they are within a price range of the defined brick size, confusing traders.

  • The charts will miss price movement information if we choose a larger brick size (a larger range). What happens within this range is not shown in these charts.

Solution: Choosing brick size according to Average True Range(ATR)

  • It is challenging to decide on an optimum setting to define the size of Renko bricks; there is no industry standard.

For a better understanding of code, complete code is available on Google Colab.

That's it. I hope you like the content. Constructive criticism is appreciated.

Feel free to reach out to me on Linkedin. If you have any suggestions about the blog, you can use the Feedback widget on the right hand of your screen, and if you wish to Contact Us, you can fill in the form here.

P.S We hope to connect with you via LinkedIn or any social media platform to discuss ideas and feel free to subscribe to the newsletter at the top of this article. You could also buy me a book to show some appreciation if you liked this article. 😇

💡
Please note we haven't made any new posts since Nov 2021 on this blog, you are free to subscribe to the mailing list, however, you will be auto-added to the new blog's (thealtinvestor.in) mailing list as well.
S
Siva1y ago

Can you give code on how to plot fixed price bricks.

A

I know this post is a couple years old but I'm trying to create my own Renko charts (in .NET) and I find one of the challenges is not knowing which came first the high before the low or vice versa. This would make your charts look vary as you could have green, red, green where low happens before the high or green, green, red if vice versa where high happens before the low. How did you account for this?

S

while calculating Brick size you have used n=50. While plotting RENKO you have to use ATR=50 only no? why you have used ATR=14?

R

Do you have any article where you are using this renko bricks to trade in Live market? Plotting a graph with old data is meaningless unless you are using it for visual backtest. It will be more interesting to know how renko can be used for real trading say using a websocket data and avoiding repainting of bricks. Renko is highly susceptible to repainting.

Y

Hi Rahul Raut, I am sorry to see that we are not meeting your expectations; we will cover the topics you have mentioned but not soon, this blog is everyone new to trading with python, our article series is building a base at the moment, once we think that the reading audience is more mature, we will show live trading as well. Appreciate your patience while we build the base for our community, as it's not an easy thing to do.

More from this blog

P

Python For Traders

32 posts

A place for traders to learn more on how to use Python to do Algorithmic Trading and a place for programmers to learn more about financial markets. Use Contact Us above to reach out to the team :)