Package: smartapi-python
SMARTAPI-PYTHONSMARTAPI-PYTHON is a Python library for interacting with Angel's Trading platform  ,that is a set of REST-like HTTP APIs that expose many capabilities required to build stock market investment and trading platforms. It lets you execute orders in real time..InstallationUse the package managerpipto install smartapi-python.pipinstall-rrequirements_dev.txt# for downloading the other required packagesUsage# package import statementfromSmartApiimportSmartConnect#or from SmartApi.smartConnect import SmartConnectimportpyotpfromlogzeroimportloggerapi_key='Your Api Key'username='Your client code'pwd='Your pin'smartApi=SmartConnect(api_key)try:token="Your QR value"totp=pyotp.TOTP(token).now()exceptExceptionase:logger.error("Invalid Token: The provided token is not valid.")raiseecorrelation_id="abcde"data=smartApi.generateSession(username,pwd,totp)ifdata['status']==False:logger.error(data)else:# login api call# logger.info(f"You Credentials: {data}")authToken=data['data']['jwtToken']refreshToken=data['data']['refreshToken']# fetch the feedtokenfeedToken=smartApi.getfeedToken()# fetch User Profileres=smartApi.getProfile(refreshToken)smartApi.generateToken(refreshToken)res=res['data']['exchanges']#place ordertry:orderparams={"variety":"NORMAL","tradingsymbol":"SBIN-EQ","symboltoken":"3045","transactiontype":"BUY","exchange":"NSE","ordertype":"LIMIT","producttype":"INTRADAY","duration":"DAY","price":"19500","squareoff":"0","stoploss":"0","quantity":"1"}# Method 1: Place an order and return the order IDorderid=smartApi.placeOrder(orderparams)logger.info(f"PlaceOrder :{orderid}")# Method 2: Place an order and return the full responseresponse=smartApi.placeOrderFullResponse(orderparams)logger.info(f"PlaceOrder :{response}")exceptExceptionase:logger.exception(f"Order placement failed:{e}")#gtt rule creationtry:gttCreateParams={"tradingsymbol":"SBIN-EQ","symboltoken":"3045","exchange":"NSE","producttype":"MARGIN","transactiontype":"BUY","price":100000,"qty":10,"disclosedqty":10,"triggerprice":200000,"timeperiod":365}rule_id=smartApi.gttCreateRule(gttCreateParams)logger.info(f"The GTT rule id is:{rule_id}")exceptExceptionase:logger.exception(f"GTT Rule creation failed:{e}")#gtt rule listtry:status=["FORALL"]#should be a listpage=1count=10lists=smartApi.gttLists(status,page,count)exceptExceptionase:logger.exception(f"GTT Rule List failed:{e}")#Historic apitry:historicParam={"exchange":"NSE","symboltoken":"3045","interval":"ONE_MINUTE","fromdate":"2021-02-08 09:00","todate":"2021-02-08 09:16"}smartApi.getCandleData(historicParam)exceptExceptionase:logger.exception(f"Historic Api failed:{e}")#logouttry:logout=smartApi.terminateSession('Your Client Id')logger.info("Logout Successfull")exceptExceptionase:logger.exception(f"Logout failed:{e}")```## Getting started with SmartAPI Websocket's```python####### Websocket V2 sample code #######fromSmartApi.smartWebSocketV2importSmartWebSocketV2fromlogzeroimportloggerAUTH_TOKEN="Your Auth_Token"API_KEY="Your Api_Key"CLIENT_CODE="Your Client Code"FEED_TOKEN="Your Feed_Token"correlation_id="abc123"action=1mode=1token_list=[{"exchangeType":1,"tokens":["26009"]}]#retry_strategy=0 for simple retry mechanismsws=SmartWebSocketV2(AUTH_TOKEN,API_KEY,CLIENT_CODE,FEED_TOKEN,max_retry_attempt=2,retry_strategy=0,retry_delay=10,retry_duration=30)#retry_strategy=1 for exponential retry mechanism# sws = SmartWebSocketV2(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN,max_retry_attempt=3, retry_strategy=1, retry_delay=10,retry_multiplier=2, retry_duration=30)defon_data(wsapp,message):logger.info("Ticks:{}".format(message))# close_connection()defon_control_message(wsapp,message):logger.info(f"Control Message:{message}")defon_open(wsapp):logger.info("on open")some_error_condition=Falseifsome_error_condition:error_message="Simulated error"ifhasattr(wsapp,'on_error'):wsapp.on_error("Custom Error Type",error_message)else:sws.subscribe(correlation_id,mode,token_list)# sws.unsubscribe(correlation_id, mode, token_list1)defon_error(wsapp,error):logger.error(error)defon_close(wsapp):logger.info("Close")defclose_connection():sws.close_connection()# Assign the callbacks.sws.on_open=on_opensws.on_data=on_datasws.on_error=on_errorsws.on_close=on_closesws.on_control_message=on_control_messagesws.connect()####### Websocket V2 sample code ENDS Here ################################## SmartWebSocket OrderUpdate Sample Code Start Here ###########################fromSmartApi.smartWebSocketOrderUpdateimportSmartWebSocketOrderUpdateclient=SmartWebSocketOrderUpdate(AUTH_TOKEN,API_KEY,CLIENT_CODE,FEED_TOKEN)client.connect()########################### SmartWebSocket OrderUpdate Sample Code End Here ###########################