fyers-web-sdk-v3 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,540 @@
1
+ # The Fyers API Javascript client - v3
1
2
 
3
+ The official Javascript node client for communicating with the [Fyers API](https://myapi.fyers.in)
4
+
5
+ ## Documentation
6
+
7
+ - [Javascript client documentation](https://myapi.fyers.in/docsv3)
8
+
9
+ ## Requirements
10
+
11
+ - NodeJS v12.0.0+
12
+
13
+ ## Installation
14
+
15
+ Install via [npm](...)
16
+
17
+ npm install fyers-api-v3@latest
18
+
19
+ ## Breaking changes - v3
20
+
21
+ `v3` is a **breaking** major release with multiple internal modification to improve user experience.<br>
22
+
23
+ Below are the breaking changes:
24
+
25
+ - websocket output format have changed completely
26
+
27
+ ## Getting started with API
28
+
29
+ ```javascript
30
+ var fyersModel= require("fyers-api-v3").fyersModel
31
+
32
+ var fyers= new fyersModel({"path":"path where you want to save logs","enableLogging":true})
33
+
34
+ fyers.setAppId("xxxxx-xxx")
35
+
36
+ fyers.setRedirectUrl("Redirect URL here")
37
+
38
+ var URL=fyers.generateAuthCode()
39
+
40
+ //use url to generate auth code
41
+ console.log(URL)
42
+
43
+ var authcode="authcode generated above"
44
+
45
+ fyers.generate_access_token({"client_id":"APPID","secret_key":"secret","auth_code":authcode}).then((response)=>{
46
+ if(response.s=='ok'){
47
+ fyers.setAccessToken(response.access_token)
48
+ }else{
49
+ console.log("error generating access token",response)
50
+ }
51
+ })
52
+
53
+ fyers.get_profile().then((response)=>{
54
+ console.log(response)
55
+ }).catch((err)=>{
56
+ console.log(err)
57
+ })
58
+
59
+ fyers.getQuotes(["NSE:SBIN-EQ","NSE:TCS-EQ"]).then((response)=>{
60
+ console.log(response)
61
+ }).catch((err)=>{
62
+ console.log(err)
63
+ })
64
+
65
+ fyers.getMarketDepth({"symbol":["NSE:SBIN-EQ","NSE:TCS-EQ"],"ohlcv_flag":1}).then((response)=>{
66
+ console.log(response)
67
+ }).catch((err)=>{
68
+ console.log(err)
69
+ })
70
+ ```
71
+
72
+ ## API promises
73
+
74
+ All API calls returns a promise which you can use to call methods like `.then(...)` and `.catch(...)`.
75
+
76
+ ```javascript
77
+ FyersApiCall
78
+ .then(function (v) {
79
+ // On success
80
+ })
81
+ .catch(function (e) {
82
+ // On rejected
83
+ });
84
+ ```
85
+
86
+ ## Getting started order WebSocket
87
+
88
+ ```javascript
89
+ var fyersOrderSocket= require("fyers-api-v3").fyersOrderSocket
90
+
91
+ var skt=new fyersOrderSocket("Acesstoken in format APPID:Accesstoken",
92
+ "path to where you want to save logs",
93
+ true/*flag to enable disable logging*/)
94
+
95
+ skt.on("error",function (errmsg) {
96
+ console.log(errmsg)
97
+ })
98
+
99
+ skt.on('others',function (msg) {
100
+ console.log(msg)
101
+ })
102
+
103
+ skt.on('connect',function () {
104
+ skt.subscribe([skt.orderUpdates,skt.tradeUpdates,skt.positionUpdates,
105
+ skt.edis,skt.pricealerts])
106
+ console.log(skt.isConnected())
107
+ })
108
+
109
+ skt.on('close',function () {
110
+ console.log('closed')
111
+ })
112
+
113
+ skt.on('orders',function (msg) {
114
+ console.log("orders",msg)
115
+ skt.close()
116
+ })
117
+
118
+ skt.on('trades',function (msg) {
119
+ console.log('trades',msg)
120
+ })
121
+
122
+ skt.on('positions',function (msg) {
123
+ console.log('positions',msg)
124
+ })
125
+
126
+ skt.connect()
127
+ ```
128
+
129
+ ## Getting started data WebSocket
130
+
131
+ ```javascript
132
+ let DataSocket = require("fyers-api-v3").fyersDataSocket;
133
+
134
+ var skt= DataSocket.getInstance("Accesstoken in format APPID:AccessToken",
135
+ "path where to save logs",true/*flag to enable disable logging*/)
136
+
137
+ skt.on("connect",function(){
138
+ skt.subscribe(['NSE:IDEA-EQ',"NSE:SBIN-EQ"])
139
+ //subscribing for market depth data if need of market depth comes as a diffrent tick
140
+ skt.subscribe(['NSE:IDEA-EQ',"NSE:SBIN-EQ"],true)
141
+ //to start lite mode to get fewer data like ltp change
142
+ skt.mode(skt.LiteMode)
143
+ //to revert back to full mode
144
+ // skt.mode(skt.FullMode)
145
+ })
146
+
147
+ skt.on("message",function(message){
148
+ console.log({"TEST":message})
149
+ })
150
+
151
+ skt.on("error",function(message){
152
+ console.log("erroris",message)
153
+ })
154
+
155
+ skt.on("close",function(){
156
+ console.log("socket closed")
157
+ })
158
+ skt.connect()
159
+ ```
160
+
161
+ ## Auto re-connect WebSocket client
162
+
163
+ Optionally you can enable client side auto re-connection to automatically reconnect if the connection is dropped.
164
+
165
+ All you need to do is enable auto re-connection. For example
166
+
167
+ ```javascript
168
+ // Enable auto reconnect mechanism with retry count as passed with max allowed upto 50.
169
+ skt.autoReconnect(6);
170
+ ```
171
+
172
+ ## Price Alerts
173
+
174
+ This includes following APIs: `createPriceAlert`, `getPriceAlert`, `modifyPriceAlert`, `deletePriceAlert`, `togglePriceAlert`
175
+
176
+ ### Create Price Alert
177
+
178
+ ```javascript
179
+ var data = {
180
+ "agent": "fyers-api",
181
+ "alert-type": 1,
182
+ "name": "gold alert",
183
+ "symbol": "NSE:GOLDBEES-EQ",
184
+ "comparisonType": "LTP",
185
+ "condition": "GT",
186
+ "value": "9888",
187
+ "notes": " iji"
188
+ }
189
+
190
+ fyers.createPriceAlert(data).then((response) => {
191
+ console.log(response)
192
+ }).catch((error) => {
193
+ console.log(error)
194
+ })
195
+ ```
196
+
197
+ ### Get Price Alerts
198
+
199
+ ```javascript
200
+ // Get all active alerts
201
+ fyers.getPriceAlert().then((response) => {
202
+ console.log(response)
203
+ }).catch((error) => {
204
+ console.log(error)
205
+ })
206
+
207
+ // Get archived alerts
208
+ var data = {"archive": "1"}
209
+ fyers.getPriceAlert(data).then((response) => {
210
+ console.log(response)
211
+ }).catch((error) => {
212
+ console.log(error)
213
+ })
214
+ ```
215
+
216
+ ### Update Price Alert
217
+
218
+ ```javascript
219
+ var data = {
220
+ "alertId": "6249977",
221
+ "agent": "fyers-api",
222
+ "alert-type": 1,
223
+ "name": "goldy bees",
224
+ "symbol": "NSE:GOLDBEES-EQ",
225
+ "comparisonType": "OPEN",
226
+ "condition": "GT",
227
+ "value": "10000.00676766767676676667"
228
+ }
229
+
230
+ fyers.modifyPriceAlert(data).then((response) => {
231
+ console.log(response)
232
+ }).catch((error) => {
233
+ console.log(error)
234
+ })
235
+ ```
236
+
237
+ ### Delete Price Alert
238
+
239
+ ```javascript
240
+ var data = {"alertId": "6131416", "agent": "fyers-api"}
241
+
242
+ fyers.deletePriceAlert(data).then((response) => {
243
+ console.log(response)
244
+ }).catch((error) => {
245
+ console.log(error)
246
+ })
247
+ ```
248
+
249
+ ### Toggle Price Alert (Enable/Disable)
250
+
251
+ ```javascript
252
+ var data = {"alertId": "3870991"}
253
+
254
+ fyers.togglePriceAlert(data).then((response) => {
255
+ console.log(response)
256
+ }).catch((error) => {
257
+ console.log(error)
258
+ })
259
+ ```
260
+
261
+ ## Smart Orders
262
+
263
+ This includes following APIs: `createSmartOrderStep`, `createSmartOrderLimit`, `createSmartOrderTrail`, `createSmartOrderSIP`, `modifySmartOrder`, `cancelSmartOrder`, `pauseSmartOrder`, `resumeSmartOrder`, `getSmartOrderBookWithFilter`
264
+
265
+ Smart orders support different flow types: step, limit, trail, sip
266
+
267
+ ### Create Smart Order - Step
268
+
269
+ ```javascript
270
+ var data = {
271
+ "symbol": "NSE:SBIN-EQ",
272
+ "qty": 10,
273
+ "type": 1,
274
+ "side": 1,
275
+ "productType": "INTRADAY",
276
+ "limitPrice": 600.00,
277
+ "stopPrice": 0,
278
+ "validity": "DAY",
279
+ "disclosedQty": 0,
280
+ "offlineOrder": false
281
+ }
282
+
283
+ fyers.createSmartOrderStep(data).then((response) => {
284
+ console.log(response)
285
+ }).catch((error) => {
286
+ console.log(error)
287
+ })
288
+ ```
289
+
290
+ ### Create Smart Order - Limit
291
+
292
+ ```javascript
293
+ var data = {
294
+ "symbol": "NSE:SBIN-EQ",
295
+ "qty": 10,
296
+ "type": 1,
297
+ "side": 1,
298
+ "productType": "INTRADAY",
299
+ "limitPrice": 600.00,
300
+ "stopPrice": 0,
301
+ "validity": "DAY",
302
+ "disclosedQty": 0,
303
+ "offlineOrder": false
304
+ }
305
+
306
+ fyers.createSmartOrderLimit(data).then((response) => {
307
+ console.log(response)
308
+ }).catch((error) => {
309
+ console.log(error)
310
+ })
311
+ ```
312
+
313
+ ### Create Smart Order - Trail
314
+
315
+ ```javascript
316
+ var data = {
317
+ "symbol": "NSE:SBIN-EQ",
318
+ "qty": 10,
319
+ "type": 1,
320
+ "side": 1,
321
+ "productType": "INTRADAY",
322
+ "limitPrice": 600.00,
323
+ "stopPrice": 0,
324
+ "validity": "DAY",
325
+ "disclosedQty": 0,
326
+ "offlineOrder": false
327
+ }
328
+
329
+ fyers.createSmartOrderTrail(data).then((response) => {
330
+ console.log(response)
331
+ }).catch((error) => {
332
+ console.log(error)
333
+ })
334
+ ```
335
+
336
+ ### Create Smart Order - SIP
337
+
338
+ ```javascript
339
+ var data = {
340
+ "symbol": "NSE:SBIN-EQ",
341
+ "qty": 10,
342
+ "type": 1,
343
+ "side": 1,
344
+ "productType": "CNC",
345
+ "limitPrice": 600.00,
346
+ "stopPrice": 0,
347
+ "validity": "DAY",
348
+ "disclosedQty": 0,
349
+ "offlineOrder": false
350
+ }
351
+
352
+ fyers.createSmartOrderSIP(data).then((response) => {
353
+ console.log(response)
354
+ }).catch((error) => {
355
+ console.log(error)
356
+ })
357
+ ```
358
+
359
+ ### Modify Smart Order
360
+
361
+ ```javascript
362
+ var data = {
363
+ "flowId": "123456789",
364
+ "limitPrice": 610.00,
365
+ "qty": 15
366
+ }
367
+
368
+ fyers.modifySmartOrder(data).then((response) => {
369
+ console.log(response)
370
+ }).catch((error) => {
371
+ console.log(error)
372
+ })
373
+ ```
374
+
375
+ ### Cancel Smart Order
376
+
377
+ ```javascript
378
+ var data = {"flowId": "123456789"}
379
+
380
+ fyers.cancelSmartOrder(data).then((response) => {
381
+ console.log(response)
382
+ }).catch((error) => {
383
+ console.log(error)
384
+ })
385
+ ```
386
+
387
+ ### Pause Smart Order
388
+
389
+ ```javascript
390
+ var data = {"flowId": "123456789"}
391
+
392
+ fyers.pauseSmartOrder(data).then((response) => {
393
+ console.log(response)
394
+ }).catch((error) => {
395
+ console.log(error)
396
+ })
397
+ ```
398
+
399
+ ### Resume Smart Order
400
+
401
+ ```javascript
402
+ var data = {"flowId": "123456789"}
403
+
404
+ fyers.resumeSmartOrder(data).then((response) => {
405
+ console.log(response)
406
+ }).catch((error) => {
407
+ console.log(error)
408
+ })
409
+ ```
410
+
411
+ ### Get Smart Order Book with Filter
412
+
413
+ ```javascript
414
+ // Get all smart orders
415
+ fyers.getSmartOrderBookWithFilter().then((response) => {
416
+ console.log(response)
417
+ }).catch((error) => {
418
+ console.log(error)
419
+ })
420
+
421
+ // Get filtered smart orders
422
+ // Filter by side (1 for Buy, -1 for Sell)
423
+ var data = {"side": [1]}
424
+ fyers.getSmartOrderBookWithFilter(data).then((response) => {
425
+ console.log(response)
426
+ }).catch((error) => {
427
+ console.log(error)
428
+ })
429
+
430
+ // Filter by multiple parameters
431
+ var data = {
432
+ "exchange": ["NSE"],
433
+ "side": [1, -1],
434
+ "flowtype": [1, 2],
435
+ "product": ["CNC", "INTRADAY"],
436
+ "messageType": [1, 2],
437
+ "search": "SBIN",
438
+ "sort_by": "CreatedTime",
439
+ "ord_by": 1,
440
+ "page_no": 1,
441
+ "page_size": 15
442
+ }
443
+
444
+ fyers.getSmartOrderBookWithFilter(data).then((response) => {
445
+ console.log(response)
446
+ }).catch((error) => {
447
+ console.log(error)
448
+ })
449
+ ```
450
+
451
+ ## Smart Exit Triggers
452
+
453
+ This includes following APIs: `createSmartExitTrigger`, `getSmartExitTrigger`, `updateSmartExitTrigger`, `activateDeactivateSmartExitTrigger`
454
+
455
+ ### Create Smart Exit Trigger
456
+
457
+ ```javascript
458
+ // Type 1: Only Alert (notification only, no auto-exit)
459
+ var data = {
460
+ "name": "Alert Only Strategy",
461
+ "type": 1,
462
+ "profitRate": 5000,
463
+ "lossRate": -2000
464
+ }
465
+
466
+ fyers.createSmartExitTrigger(data).then((response) => {
467
+ console.log(response)
468
+ }).catch((error) => {
469
+ console.log(error)
470
+ })
471
+
472
+ // Type 2: Exit with Alert (notification + immediate exit)
473
+ var data = {
474
+ "name": "Auto Exit Strategy",
475
+ "type": 2,
476
+ "profitRate": 5000,
477
+ "lossRate": -2000
478
+ }
479
+
480
+ fyers.createSmartExitTrigger(data).then((response) => {
481
+ console.log(response)
482
+ }).catch((error) => {
483
+ console.log(error)
484
+ })
485
+
486
+ // Type 3: Exit with Alert + Wait for Recovery (notification + delayed exit)
487
+ var data = {
488
+ "name": "Recovery Exit Strategy",
489
+ "type": 3,
490
+ "profitRate": 10000,
491
+ "lossRate": -3000,
492
+ "waitTime": 5
493
+ }
494
+
495
+ fyers.createSmartExitTrigger(data).then((response) => {
496
+ console.log(response)
497
+ }).catch((error) => {
498
+ console.log(error)
499
+ })
500
+ ```
501
+
502
+ ### Get Smart Exit Triggers
503
+
504
+ ```javascript
505
+ // Get all smart exit triggers
506
+ fyers.getSmartExitTrigger().then((response) => {
507
+ console.log(response)
508
+ }).catch((error) => {
509
+ console.log(error)
510
+ })
511
+ ```
512
+
513
+ ### Update Smart Exit Trigger
514
+
515
+ ```javascript
516
+ var data = {
517
+ "flowId": "123456789",
518
+ "triggerPrice": 610.00,
519
+ "stopLoss": 600.00,
520
+ "takeProfit": 630.00
521
+ }
522
+
523
+ fyers.updateSmartExitTrigger(data).then((response) => {
524
+ console.log(response)
525
+ }).catch((error) => {
526
+ console.log(error)
527
+ })
528
+ ```
529
+
530
+ ### Activate Smart Exit Trigger
531
+
532
+ ```javascript
533
+ var data = {"flowId": "123456789"}
534
+
535
+ fyers.activateDeactivateSmartExitTrigger(data).then((response) => {
536
+ console.log(response)
537
+ }).catch((error) => {
538
+ console.log(error)
539
+ })
540
+ ```