Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
angel-one
GitHub Repository: angel-one/smartapi-python
Path: blob/main/test/api_test.py
410 views
1
from logzero import logger
2
from SmartApi.smartConnect import SmartConnect
3
import pyotp
4
5
api_key = 'Your Api Key'
6
username = 'Your client code'
7
pwd = 'Your pin'
8
smartApi = SmartConnect(api_key)
9
10
try:
11
token = "Your QR value"
12
totp = pyotp.TOTP(token).now()
13
except Exception as e:
14
logger.error("Invalid Token: The provided token is not valid.")
15
raise e
16
17
correlation_id = "abcde"
18
data = smartApi.generateSession(username, pwd, totp)
19
if data['status'] == False:
20
logger.error(data)
21
else:
22
# logger.info(f"data: {data}")
23
authToken = data['data']['jwtToken']
24
refreshToken = data['data']['refreshToken']
25
feedToken = smartApi.getfeedToken()
26
# logger.info(f"Feed-Token :{feedToken}")
27
res = smartApi.getProfile(refreshToken)
28
# logger.info(f"Get Profile: {res}")
29
smartApi.generateToken(refreshToken)
30
res=res['data']['exchanges']
31
32
orderparams = {
33
"variety": "NORMAL",
34
"tradingsymbol": "SBIN-EQ",
35
"symboltoken": "3045",
36
"transactiontype": "BUY",
37
"exchange": "NSE",
38
"ordertype": "LIMIT",
39
"producttype": "INTRADAY",
40
"duration": "DAY",
41
"price": "19500",
42
"squareoff": "0",
43
"stoploss": "0",
44
"quantity": "1"
45
}
46
# Method 1: Place an order and return the order ID
47
orderid = smartApi.placeOrder(orderparams)
48
logger.info(f"PlaceOrder : {orderid}")
49
# Method 2: Place an order and return the full response
50
response = smartApi.placeOrderFullResponse(orderparams)
51
logger.info(f"PlaceOrder : {response}")
52
53
modifyparams = {
54
"variety": "NORMAL",
55
"orderid": orderid,
56
"ordertype": "LIMIT",
57
"producttype": "INTRADAY",
58
"duration": "DAY",
59
"price": "19500",
60
"quantity": "1",
61
"tradingsymbol": "SBIN-EQ",
62
"symboltoken": "3045",
63
"exchange": "NSE"
64
}
65
smartApi.modifyOrder(modifyparams)
66
logger.info(f"Modify Orders : {modifyparams}")
67
68
smartApi.cancelOrder(orderid, "NORMAL")
69
70
orderbook=smartApi.orderBook()
71
logger.info(f"Order Book: {orderbook}")
72
73
tradebook=smartApi.tradeBook()
74
logger.info(f"Trade Book : {tradebook}")
75
76
rmslimit=smartApi.rmsLimit()
77
logger.info(f"RMS Limit : {rmslimit}")
78
79
pos=smartApi.position()
80
logger.info(f"Position : {pos}")
81
82
holdings=smartApi.holding()
83
logger.info(f"Holdings : {holdings}")
84
85
allholdings=smartApi.allholding()
86
logger.info(f"AllHoldings : {allholdings}")
87
88
exchange = "NSE"
89
tradingsymbol = "SBIN-EQ"
90
symboltoken = 3045
91
ltp=smartApi.ltpData("NSE", "SBIN-EQ", "3045")
92
logger.info(f"Ltp Data : {ltp}")
93
94
mode="FULL"
95
exchangeTokens= {
96
"NSE": [
97
"3045"
98
]
99
}
100
marketData=smartApi.getMarketData(mode, exchangeTokens)
101
logger.info(f"Market Data : {marketData}")
102
103
exchange = "BSE"
104
searchscrip = "Titan"
105
searchScripData = smartApi.searchScrip(exchange, searchscrip)
106
logger.info(f"Search Scrip Data : {searchScripData}")
107
108
params = {
109
"exchange": "NSE",
110
"oldproducttype": "DELIVERY",
111
"newproducttype": "MARGIN",
112
"tradingsymbol": "SBIN-EQ",
113
"transactiontype": "BUY",
114
"quantity": 1,
115
"type": "DAY"
116
117
}
118
119
convertposition=smartApi.convertPosition(params)
120
121
gttCreateParams = {
122
"tradingsymbol": "SBIN-EQ",
123
"symboltoken": "3045",
124
"exchange": "NSE",
125
"producttype": "MARGIN",
126
"transactiontype": "BUY",
127
"price": 100000,
128
"qty": 10,
129
"disclosedqty": 10,
130
"triggerprice": 200000,
131
"timeperiod": 365
132
}
133
rule_id = smartApi.gttCreateRule(gttCreateParams)
134
logger.info(f"Gtt Rule: {rule_id}")
135
136
gttModifyParams = {
137
"id": rule_id,
138
"symboltoken": "3045",
139
"exchange": "NSE",
140
"price": 19500,
141
"quantity": 10,
142
"triggerprice": 200000,
143
"disclosedqty": 10,
144
"timeperiod": 365
145
}
146
modified_id = smartApi.gttModifyRule(gttModifyParams)
147
logger.info(f"Gtt Modified Rule: {modified_id}")
148
149
cancelParams = {
150
"id": rule_id,
151
"symboltoken": "3045",
152
"exchange": "NSE"
153
}
154
155
cancelled_id = smartApi.gttCancelRule(cancelParams)
156
logger.info(f"gtt Cancel Rule: {cancelled_id}")
157
158
gttdetails=smartApi.gttDetails(rule_id)
159
logger.info(f"GTT Details: {gttdetails}")
160
161
smartApi.gttLists('List of status', '<page>', '<count>')
162
163
candleParams={
164
"exchange": "NSE",
165
"symboltoken": "3045",
166
"interval": "ONE_MINUTE",
167
"fromdate": "2021-02-10 09:15",
168
"todate": "2021-02-10 09:16"
169
}
170
candledetails=smartApi.getCandleData(candleParams)
171
logger.info(f"Historical Data: {candledetails}")
172
173
qParam ="your uniqueorderid"
174
data = smartApi.individual_order_details(qParam)
175
logger.info(f"Individual_order_details: {data}")
176
177
params = {
178
"positions": [{
179
"exchange": "NSE",
180
"qty": 50,
181
"price": 0,
182
"productType": "DELIVERY",
183
"token": "12740",
184
"tradeType": "BUY"
185
}]
186
}
187
margin_api_result=smartApi.getMarginApi(params)
188
logger.info(f"margin_api_result: {margin_api_result}")
189
190
terminate=smartApi.terminateSession('Your client code')
191
logger.info(f"Connection Close: {terminate}")
192
193
# # Websocket Programming
194
195
from SmartApi.smartWebSocketV2 import SmartWebSocketV2
196
197
AUTH_TOKEN = authToken
198
API_KEY = api_key
199
CLIENT_CODE = username
200
FEED_TOKEN = feedToken
201
# correlation_id = "abc123"
202
action = 1
203
mode = 1
204
205
token_list = [
206
{
207
"exchangeType": 1,
208
"tokens": ["26009","1594"]
209
}
210
]
211
token_list1 = [
212
{
213
"action": 0,
214
"exchangeType": 1,
215
"tokens": ["26009"]
216
}
217
]
218
219
#retry_strategy=0 for simple retry mechanism
220
sws = SmartWebSocketV2(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN,max_retry_attempt=2, retry_strategy=0, retry_delay=10, retry_duration=30)
221
222
#retry_strategy=1 for exponential retry mechanism
223
# 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)
224
225
def on_data(wsapp, message):
226
logger.info("Ticks: {}".format(message))
227
close_connection()
228
229
def on_control_message(wsapp, message):
230
logger.info(f"Control Message: {message}")
231
232
def on_open(wsapp):
233
logger.info("on open")
234
some_error_condition = False
235
if some_error_condition:
236
error_message = "Simulated error"
237
if hasattr(wsapp, 'on_error'):
238
wsapp.on_error("Custom Error Type", error_message)
239
else:
240
sws.subscribe(correlation_id, mode, token_list)
241
# sws.unsubscribe(correlation_id, mode, token_list1)
242
243
def on_error(wsapp, error):
244
logger.error(error)
245
246
def on_close(wsapp):
247
logger.info("Close")
248
249
def close_connection():
250
sws.close_connection()
251
252
253
# Assign the callbacks.
254
sws.on_open = on_open
255
sws.on_data = on_data
256
sws.on_error = on_error
257
sws.on_close = on_close
258
sws.on_control_message = on_control_message
259
260
sws.connect()
261
262
263
########################### SmartWebSocket OrderUpdate Sample Code Start Here ###########################
264
from SmartApi.smartWebSocketOrderUpdate import SmartWebSocketOrderUpdate
265
client = SmartWebSocketOrderUpdate(AUTH_TOKEN, API_KEY, CLIENT_CODE, FEED_TOKEN)
266
client.connect()
267
########################### SmartWebSocket OrderUpdate Sample Code End Here ###########################
268
269