Learn Algo Trading with Python | Codes | Youtube Series

Morning @Tradehull_Imran Sir,

Sir I am getting below
for Dhan_codebase usage.py from 1st live Algo folder

'dhanhq' object has no attribute 'NSE_FNO'
Traceback (most recent call last):
  File "c:\Users\Subhajit Panja\Documents\Algorithim_HQ\1st live Algo\Dhan_Tradehull.py", line 248, in get_intraday_data
    script_exchange = {"NSE":self.Dhan.NSE, "NFO":self.Dhan.NSE_FNO, "BFO":self.Dhan.BSE_FNO, "CUR": self.Dhan.CUR, "BSE":self.Dhan.BSE, "MCX":self.Dhan.MCX}
AttributeError: 'dhanhq' object has no attribute 'NSE_FNO'
JKCEMENT
'dhanhq' object has no attribute 'NSE_FNO'
Traceback (most recent call last):
  File "c:\Users\Subhajit Panja\Documents\Algorithim_HQ\1st live Algo\Dhan_Tradehull.py", line 248, in get_intraday_data
    script_exchange = {"NSE":self.Dhan.NSE, "NFO":self.Dhan.NSE_FNO, "BFO":self.Dhan.BSE_FNO, "CUR": self.Dhan.CUR, "BSE":self.Dhan.BSE, "MCX":self.Dhan.MCX}
AttributeError: 'dhanhq' object has no attribute 'NSE_FNO'
ASHOKLEY
'dhanhq' object has no attribute 'NSE_FNO'
Traceback (most recent call last):
  File "c:\Users\Subhajit Panja\Documents\Algorithim_HQ\1st live Algo\Dhan_Tradehull.py", line 248, in get_intraday_data
    script_exchange = {"NSE":self.Dhan.NSE, "NFO":self.Dhan.NSE_FNO, "BFO":self.Dhan.BSE_FNO, "CUR": self.Dhan.CUR, "BSE":self.Dhan.BSE, "MCX":self.Dhan.MCX}
AttributeError: 'dhanhq' object has no attribute 'NSE_FNO'
SBICARD
'dhanhq' object has no attribute 'NSE_FNO'
Traceback (most recent call last):
  File "c:\Users\Subhajit Panja\Documents\Algorithim_HQ\1st live Algo\Dhan_Tradehull.py", line 248, in get_intraday_data
    script_exchange = {"NSE":self.Dhan.NSE, "NFO":self.Dhan.NSE_FNO, "BFO":self.Dhan.BSE_FNO, "CUR": self.Dhan.CUR, "BSE":self.Dhan.BSE, "MCX":self.Dhan.MCX}
AttributeError: 'dhanhq' object has no attribute 'NSE_FNO'

Dhan_codebase usage.py

import pdb
from Dhan_Tradehull import Tradehull
import pandas as pd
import talib

client_code = "1100670612"
token_id = ""
tsl = Tradehull(client_code,token_id)


available_balance = tsl.get_balance()
leveraged_margin  = available_balance*5
max_trades = 3
per_trade_margin = (leveraged_margin/max_trades)


watchlist = ['MOTHERSON', 'OFSS', 'MANAPPURAM', 'BSOFT', 'CHAMBLFERT', 'DIXON', 'NATIONALUM', 'DLF', 'IDEA', 'ADANIPORTS', 'SAIL', 'HINDCOPPER', 'INDIGO', 'RECLTD', 'PNB', 'HINDALCO', 'RBLBANK', 'GNFC', 'ALKEM', 'CONCOR', 'PFC', 'GODREJPROP', 'MARUTI', 'ADANIENT', 'ONGC', 'CANBK', 'OBEROIRLTY', 'BANDHANBNK', 'SBIN', 'HINDPETRO', 'CANFINHOME', 'TATAMOTORS', 'LALPATHLAB', 'MCX', 'TATACHEM', 'BHARTIARTL', 'INDIAMART', 'LUPIN', 'INDUSTOWER', 'VEDL', 'SHRIRAMFIN', 'POLYCAB', 'WIPRO', 'UBL', 'SRF', 'BHARATFORG', 'GRASIM', 'IEX', 'BATAINDIA', 'AARTIIND', 'TATASTEEL', 'UPL', 'HDFCBANK', 'LTF', 'TVSMOTOR', 'GMRINFRA', 'IOC', 'ABCAPITAL', 'ACC', 'IDFCFIRSTB', 'ABFRL', 'ZYDUSLIFE', 'GLENMARK', 'TATAPOWER', 'PEL', 'IDFC', 'LAURUSLABS', 'BANKBARODA', 'KOTAKBANK', 'CUB', 'GAIL', 'DABUR', 'TECHM', 'CHOLAFIN', 'BEL', 'SYNGENE', 'FEDERALBNK', 'NAVINFLUOR', 'AXISBANK', 'LT', 'ICICIGI', 'EXIDEIND', 'TATACOMM', 'RELIANCE', 'ICICIPRULI', 'IPCALAB', 'AUBANK', 'INDIACEM', 'GRANULES', 'HDFCAMC', 'COFORGE', 'LICHSGFIN', 'BAJAJFINSV', 'INFY', 'BRITANNIA', 'M&MFIN', 'BAJFINANCE', 'PIIND', 'DEEPAKNTR', 'SHREECEM', 'INDUSINDBK', 'DRREDDY', 'TCS', 'BPCL', 'PETRONET', 'NAUKRI', 'JSWSTEEL', 'MUTHOOTFIN', 'CUMMINSIND', 'CROMPTON', 'M&M', 'GODREJCP', 'IGL', 'BAJAJ-AUTO', 'HEROMOTOCO', 'AMBUJACEM', 'BIOCON', 'ULTRACEMCO', 'VOLTAS', 'BALRAMCHIN', 'SUNPHARMA', 'ASIANPAINT', 'COALINDIA', 'SUNTV', 'EICHERMOT', 'ESCORTS', 'HAL', 'ASTRAL', 'NMDC', 'ICICIBANK', 'TORNTPHARM', 'JUBLFOOD', 'METROPOLIS', 'RAMCOCEM', 'INDHOTEL', 'HINDUNILVR', 'TRENT', 'TITAN', 'JKCEMENT', 'ASHOKLEY', 'SBICARD', 'BERGEPAINT', 'JINDALSTEL', 'MFSL', 'BHEL', 'NESTLEIND', 'HDFCLIFE', 'COROMANDEL', 'DIVISLAB', 'ITC', 'TATACONSUM', 'APOLLOTYRE', 'AUROPHARMA', 'HCLTECH', 'LTTS', 'BALKRISIND', 'DALBHARAT', 'APOLLOHOSP', 'ABBOTINDIA', 'ATUL', 'UNITDSPR', 'PVRINOX', 'SIEMENS', 'SBILIFE', 'IRCTC', 'GUJGASLTD', 'BOSCHLTD', 'NTPC', 'POWERGRID', 'MARICO', 'HAVELLS', 'MPHASIS', 'COLPAL', 'CIPLA', 'MGL', 'ABB', 'PIDILITIND', 'MRF', 'LTIM', 'PAGEIND', 'PERSISTENT']

traded_wathclist = []



while True:
	for stock_name in watchlist:
		print(stock_name)

		chart = tsl.get_intraday_data(stock_name, 'NSE', 1)
		if chart is None:
			continue

		chart['rsi'] = talib.RSI(chart['close'], timeperiod=14) #pandas

		bc   = chart.iloc[-2] #pandas  breakout candle
		ic   = chart.iloc[-3] #pandas  inside candle
		ba_c = chart.iloc[-4] #pandas  base candle

		uptrend = bc['rsi'] > 50
		downtrend = bc['rsi'] < 49
		inside_candle_formed = (ba_c['high'] > ic['high']) and (ba_c['low'] < ic['low'])


		upper_side_breakout = bc['high'] > ba_c['high']
		down_side_breakout  = bc['low']  < ba_c['low']

		no_repeat_order = stock_name not in traded_wathclist
		max_order_limit = len(traded_wathclist) <= max_trades


		if uptrend and inside_candle_formed and upper_side_breakout and no_repeat_order and max_order_limit:
			print(stock_name, "is in uptrend, Buy this script")
			# qty =  int(per_trade_margin/bc['close'])
			# buy_entry_orderid = tsl.order_placement(stock_name,'NSE', 1, 0, 0, 'MARKET', 'BUY', 'MIS')
			# traded_wathclist.append(stock_name)



		# if downtrend and inside_candle_formed and down_side_breakout and no_repeat_order and max_order_limit:
		# 	print(stock_name, "is in downtrend SELL this script")
			qty = int(per_trade_margin/bc['close'])
			sell_entry_orderid = tsl.order_placement(stock_name,'NSE', 1, 0, 0, 'MARKET', 'SELL', 'MIS')
			traded_wathclist.append(stock_name)


although Dhan_websocket.py working fine

@Tradehull_Imran Sir Please help

Hi @Pavan_B_S

The issue here is, laptop is not able to recognize the python path

  1. Press Win + R, type cmd, and press Enter.
    In the Command Prompt, type, and send me output screenshot
    python --version
  1. Also the main problem I think is, the box (Add Python 3.8 to path) was not checked.

if it was not checked,
then uninstall python from control panel, and redo the installation.
Also Let me know if it works after it.

1 Like

Hi @arbind04
Let me know if its working.

Hi @dinild
use below code to manage the issue

from Dhan_Tradehull import Tradehull
import pdb
import pandas as pd
import talib
import xlwings as xw
import time

client_code = ''
token_id = ''
tsl = Tradehull(client_code,token_id)

watchlist = ['HDFCBANK','TCS','JKCEMENT','MPHASIS','POWERGRID','TATAMOTORS','RECLTD','NAVINFLUOR','HINDUNILVR','POLYCAB','DRREDDY','SBILIFE','ESCORTS','HINDALCO','APOLLOTYRE','MARUTI','BOSCHLTD','PEL','HCLTECH','INDUSINDBK','RELIANCE','PNB','ICICIPRULI','MFSL','BIOCON','ITC','HAVELLS','ULTRACEMCO','LTIM','ONGC','BAJFINANCE','KOTAKBANK','ASIANPAINT','BRITANNIA','SBIN','TATACONSUM','DIXON','BERGEPAINT','MOTHERSON','EXIDEIND','NESTLEIND','RAMCOCEM','COLPAL','DALBHARAT','COFORGE','SUNPHARMA','AUROPHARMA','TITAN','INFY','DABUR','IDFCFIRSTB','ASTRAL','GODREJCP','LTF','ATUL','MRF','INDHOTEL','SBICARD','GUJGASLTD','INDIGO','ASHOKLEY','DIVISLAB','SHREECEM','AMBUJACEM','BANKBARODA','ALKEM','CHOLAFIN','GNFC','COALINDIA','WIPRO','BEL','MARICO','BATAINDIA','IGL','TATASTEEL','SHRIRAMFIN','SYNGENE','LUPIN','IRCTC','NAUKRI','BANDHANBNK','SAIL','PFC','BALRAMCHIN','ADANIENT','ABCAPITAL','ACC','INDUSTOWER','CUMMINSIND','GRANULES','MCX','JSWSTEEL','IOC','CANBK','TECHM','ZYDUSLIFE','PVRINOX','CROMPTON','ADANIPORTS','HINDPETRO','ABB','ABBOTINDIA','NTPC','GLENMARK','EICHERMOT','BPCL','BHARATFORG','APOLLOHOSP','BHARTIARTL','PERSISTENT','GAIL','HAL','HEROMOTOCO','TORNTPHARM','AXISBANK','CIPLA','PAGEIND','DLF','INDIAMART','CHAMBLFERT','OFSS','TATACOMM','UPL','NATIONALUM','METROPOLIS','LAURUSLABS','CUB','PIDILITIND','GODREJPROP','TATAPOWER','HDFCLIFE','AUBANK','TATACHEM','DEEPAKNTR','GMRINFRA','VEDL','CONCOR','LT','PIIND','JUBLFOOD','SUNTV','AARTIIND','ICICIBANK','COROMANDEL','ABFRL','RBLBANK','VOLTAS','IEX','HDFCAMC','UNITDSPR','JINDALSTEL','CANFINHOME','BAJA'-AUTO”,'GRASIM','BHEL','ICICIGI','SRF','MUTHOOTFIN','BSOFT','LICHSGFIN','TRENT','PETRONET','NMDC','IPCALAB','BAJAJFINSV','MGL','SIEMENS','LTTS','UBL','LALPATHLAB','BALKRISIND','IDEA','OBEROIRLTY','FEDERALBNK','TVSMOTOR','MANAPPURAM','HINDCOPPER']

while True:

print ('\n' 'Wating for Next Run')

for stoke_name in watchlist:

	chart = tsl.get_intraday_data(stoke_name, 'NSE',1)

	if chart is None:
		continue

	try:
		lcc = chart.iloc[-2]					 														# last complete candele
		b_out=chart.iloc[-2]																			# Barkeout cabdle
		ic=chart.iloc[-3]																				# inside candle
		ba_c=chart.iloc[-4]																				# Base Candle
	except Exception as e:
		continue

	inside_candle_formed = (ba_c['high']>ic['high'] and ba_c['low']<ic['low'])
	upside_brake_out= (b_out['close']>ba_c['high'])
	downside_brake_out= (b_out['close']<ba_c['low'])

	if inside_candle_formed & upside_brake_out:
		print(stoke_name, "is in uptrend")

	if inside_candle_formed & downside_brake_out:
		print(stoke_name, "is in downtrend")

print ('\n' 'Scan Completed')
time.sleep(10)  # Short delay before reconnecting
1 Like

Hi @Subhajitpanja
This is because in the dhanhq version 2.0.0, the attributes are changed

Do run code with 1.3.3

On CMD 
pip uninstall dhanhq
pip install dhanhq==1.3.3
pip show dhanhq

and the run the program again

2 Likes

Ok sir I will try

Hi @Great_Islam
Both the issues reported seems to be installation issue

Do these steps

  1. Press Windows + R, type cmd, and hit Enter.
  2. Type the following command and press Enter:
    python --version
  1. Type the following command and press Enter:
   pip list

and send the screenshot

Example:

Hi @Tradehull_Imran Yes, its working fine in live market. But I am not able to get correct intraday data for Nifty index.

print(“Nifty intraday_hist_data”)
intraday_hist_data = tsl.get_intraday_data(‘NIFTY’,‘NSE’,15)
print(intraday_hist_data)

This is not giving me correct data, I get below only 1 line even whatever time in live market I run it.
Nifty intraday_hist_data
start_Time open high low close volume
0 2024-10-28 12:00:00 7465.1 7467.2 7465.1 7467.2 97.0

sir only RSI indicator work by using your all codes

but when I replace RSI to GMMA then shows error ?
sir plz explain why and how to solve it?

data is come but maximum time not come

Hi @Tradehull_Imran ,

How to use EMA 5, 9 and 15 instead of RSI?
could you please guide or share some documents where we can learn to similar things.

also i have shared all code on google drive. please check and guide.

Hi @ujjwal_mh
Yes this issue has been recognized, we are checking it as of now
The solution will be shared in upcoming codebase Dhan_Tradehull_v2

Hi @Md_Naquibuddin

Share the code and error screenshot

Hi @satntosh_kumar
Yes, this issue is being checked.

Hi @Khandu_Kshirsagar

Use TA-Lib for applying indicators

thanks :+1:

when i want GMMA indicator then this error come

@Tradehull_Imran

Hi Imran, could you look into my query.

Hi @Jyothi_Chilukoti

Yes whenever we try to call LTP, the strike price will be added to WebSocket automatically,

1 Like

Hi @Md_Naquibuddin

GMMA indicator is not available in Ta-lib,

since GMMA is simply many ema combined together, you can make the GMMA by using multiple EMA which can be created using Ta-lib.

    chart['ema'] = talib.EMA(chart['close'], timeperiod=30)