Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
angel-one
GitHub Repository: angel-one/smartapi-python
Path: blob/main/README.md
404 views

SMARTAPI-PYTHON

SMARTAPI-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..

Installation

Use the package manager pip to install smartapi-python.

pip install -r requirements_dev.txt # for downloading the other required packages

Download the following packages

pip install pyotp pip install logzero pip install websocket-client

For Downloading pycryptodome package

pip uninstall pycrypto pip install pycryptodome

Usage

# package import statement from SmartApi import SmartConnect #or from SmartApi.smartConnect import SmartConnect import pyotp from logzero import logger api_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() except Exception as e: logger.error("Invalid Token: The provided token is not valid.") raise e correlation_id = "abcde" data = smartApi.generateSession(username, pwd, totp) if data['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 feedtoken feedToken = smartApi.getfeedToken() # fetch User Profile res = smartApi.getProfile(refreshToken) smartApi.generateToken(refreshToken) res=res['data']['exchanges'] #place order try: 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 ID orderid = smartApi.placeOrder(orderparams) logger.info(f"PlaceOrder : {orderid}") # Method 2: Place an order and return the full response response = smartApi.placeOrderFullResponse(orderparams) logger.info(f"PlaceOrder : {response}") except Exception as e: logger.exception(f"Order placement failed: {e}") #gtt rule creation try: 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}") except Exception as e: logger.exception(f"GTT Rule creation failed: {e}") #gtt rule list try: status=["FORALL"] #should be a list page=1 count=10 lists=smartApi.gttLists(status,page,count) except Exception as e: logger.exception(f"GTT Rule List failed: {e}") #Historic api try: historicParam={ "exchange": "NSE", "symboltoken": "3045", "interval": "ONE_MINUTE", "fromdate": "2021-02-08 09:00", "todate": "2021-02-08 09:16" } smartApi.getCandleData(historicParam) except Exception as e: logger.exception(f"Historic Api failed: {e}") #logout try: logout=smartApi.terminateSession('Your Client Id') logger.info("Logout Successfull") except Exception as e: logger.exception(f"Logout failed: {e}") ``` ## Getting started with SmartAPI Websocket's ####### Websocket V2 sample code ####### from SmartApi.smartWebSocketV2 import SmartWebSocketV2 from logzero import logger AUTH_TOKEN = "authToken" API_KEY = "api_key" CLIENT_CODE = "client code" FEED_TOKEN = "feedToken" correlation_id = "abc123" action = 1 mode = 1 token_list = [ { "exchangeType": 1, "tokens": ["26009"] } ] token_list1 = [ { "action": 0, "exchangeType": 1, "tokens": ["26009"] } ] sws = SmartWebSocketV2(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN) def on_data(wsapp, message): logger.info("Ticks: {}".format(message)) # close_connection() def on_open(wsapp): logger.info("on open") sws.subscribe(correlation_id, mode, token_list) # sws.unsubscribe(correlation_id, mode, token_list1) def on_error(wsapp, error): logger.error(error) def on_close(wsapp): logger.info("Close") def close_connection(): sws.close_connection() # Assign the callbacks. sws.on_open = on_open sws.on_data = on_data sws.on_error = on_error sws.on_close = on_close sws.connect() ####### Websocket V2 sample code ENDS Here ####### ########################### SmartWebSocket OrderUpdate Sample Code Start Here ########################### from SmartApi.smartWebSocketOrderUpdate import SmartWebSocketOrderUpdate client = SmartWebSocketOrderUpdate(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN) client.connect() ########################### SmartWebSocket OrderUpdate Sample Code End Here ###########################

##Change-log ##1.4.5

  • Upgraded TLS Version

##1.4.7

  • Added Error log file

##1.4.8

  • Intgrated EDIS, Brokerage Calculator, Option Greek, TopGainersLosers, PutRatio API