EzeeTrading.in

Home Page

Forming Candles in python using Zerodha Websocket

Simply put below light weight code in your websocket on_ticks callback and it will do very light-weight in memory candle formation without blocking your primary thread. If you want to do any further processing like saving to database, indicators, signals generation, do that in a seperate thread.

 
			for tick in ticks:
			
				...
				...
				...

				### Credits www.EzeeTrading.in

				instrument=tick["instrument_token"]
				ltt=tick["last_trade_time"]
			
				ltt_min_1=datetime.datetime(ltt.year, ltt.month, ltt.day, ltt.hour,ltt.minute)

				# For any other timeframe. Simply change ltt_min_1 variable defination.
				# e.g.
				# ltt_min_15=datetime.datetime(ltt.year, ltt.month, ltt.day, ltt.hour,ltt.minute//15*15)

				### Forming 1 Min Candles...

				try:
						if ltt_min_1 in candles_1[instrument]:
								candles_1[instrument][ltt_min_1]["high"]=max(candles_1[instrument][ltt_min_1]["high"],tick["last_price"]) #1
								candles_1[instrument][ltt_min_1]["volume"]=max(candles_1[instrument][ltt_min_1]["volume"],tick["volume"]) #1.5 Use the max in volume instead of last.
								candles_1[instrument][ltt_min_1]["low"]=min(candles_1[instrument][ltt_min_1]["low"],tick["last_price"]) #2
								candles_1[instrument][ltt_min_1]["close"]=tick["last_price"] #3
								#candles_1[instrument][ltt_min_1]["volume"]=tick["volume"] #3.5
						else:
								candles_1[instrument][ltt_min_1]={}
								candles_1[instrument][ltt_min_1]["high"]=tick["last_price"] #4
								candles_1[instrument][ltt_min_1]["low"]=tick["last_price"] #5
								candles_1[instrument][ltt_min_1]["open"]=tick["last_price"] #6
								candles_1[instrument][ltt_min_1]["close"]=tick["last_price"] #7
								candles_1[instrument][ltt_min_1]["volume"]=tick["volume"] #3.5
				except KeyError:
						if instrument not in candles_1:
								candles_1[instrument]={}
						if ltt_min_1 not in candles_1[instrument]:
								candles_1[instrument][ltt_min_1]={}
						candles_1[instrument][ltt_min_1]["high"]=tick["last_price"] #8
						candles_1[instrument][ltt_min_1]["low"]=tick["last_price"] #9
						candles_1[instrument][ltt_min_1]["open"]=tick["last_price"] #10
						candles_1[instrument][ltt_min_1]["close"]=tick["last_price"] #11
						candles_1[instrument][ltt_min_1]["volume"]=tick["volume"] #3.5
		
		Hope above helped you..! 
		
		You can also have a look at some ready Strategies available to subscribe below. 
		
		Or visit our home page and dive deeper into Algo-trading and make your journey quicker and smoother by learning some of the treasured knowledge from us. 
		
		A small step in right direction would keep you focused for long...
		
		

Home Page