Documentation for TrueData Nodejs
- Websocket APIs – Live data
- REST APIs – Historical data
Installation
Install via npm
npm install truedata-nodejs
Getting started
const { rtConnect, rtDisconnect, rtSubscribe, rtUnsubscribe, rtFeed, historical, formatTime, isSocketConnected } = require('truedata-nodejs')
const user = 'your username'
const pwd = 'your password'
const port = 8082
const symbols = ['NIFTY-I', 'BANKNIFTY-I', 'CRUDEOIL-I']; // symbols in array format
Sample code for live data feed
rtConnect(user, pwd, symbols, port, bidask = 1, heartbeat = 1, replay = 0);
rtFeed.on('touchline', touchlineHandler); // Receives Touchline Data
rtFeed.on('tick', tickHandler); // Receives Tick data
rtFeed.on('bidask', bidaskHandler); // Receives Bid Ask Data if enabled
rtFeed.on('bar', barHandler); // Receives 1min and 5min bar data
rtFeed.on('marketstatus', marketStatusHandler); // Receives marketstatus messages
rtFeed.on('heartbeat', heartbeatHandler); // Receives heartbeat message and time
function touchlineHandler(touchline){
console.log(touchline)
}
function tickHandler(tick){
console.log(tick)
}
function bidaskHandler(bidask){
console.log(bidask)
}
function barHandler(bar){
console.log(bar)
}
function marketStatusHandler(status) {
console.log(status);
}
function heartbeatHandler(heartbeat) {
console.log(heartbeat);
}
Default values and available values
| Default values | Available values
| -------------- | ----------------
| bidask = 1 | 0, 1 // 1 = bidask active, 0 = bidask inactive
| heartbeat = 1 | 0, 1 // 1 = print heartbeat message, 0 = don't print heartbeat message
| replay = 0 | 0, 1 // 1 = Feed replay, 0 = Normal feed ( default - If parameter not entered then replay = 0 )
Check websocket connection status
isSocketConnected() // Check if socket is connected or not. Returns Boolean value
Check market status
getMarketStatus() // Return the current market status
Subscribe and Unsubscribe symbols dynamically
rtSubscribe( newSymbols ) // Dynamically subscribe to new symbols // newSymbols is array of symbol
rtUnsubscribe( oldSymbols ) // Dynamically unsubscribe from currently subscribed symbols // oldSymbols is array of symbol
Disconnect live data feed
rtDisconnect() // Disconnect live data feed and close socket connection
Auto re-connect Websocket
The library will check for internet connection and once steady will try to re-connect the Websocket.
Historical REST API
historical.auth(user, pwd); // For authentication.
from = formatTime(2021, 3, 2, 9, 15) // (year, month, date, hour, minute) // hour in 24 hour format
to = formatTime(2021, 3, 5, 9, 15) // (year, month, date, hour, minute) // hour in 24 hour format
All available API calls
All API calls returns a promise. You can use .then(...)
and .catch(...)
OR async
and await
method
- historical.getTickData (symbol, from, to, bidask = 1, response = 'json', getSymbolId = 0) // Max upto last 5 days of tick data
- historical.getBarData (symbol, from, to, interval = '1min', response = 'json', getSymbolId = 0)
- historical.getLastNTicks (symbol, nticks = 2000, bidask = 1, response = 'json', getSymbolId = 0) // Max upto last 5 days of tick data
- historical.getLastNBars (symbol, nbars = 200, interval = '1min', response = 'json', getSymbolId = 0) // interval = '1min' OR 'EOD'
- historical.getBhavCopyStatus (segment = 'FO', response = 'json')
- historical.getBhavCopy (segment = 'FO', date, response = 'json')
- historical.getLTP (symbol, bidask = 1, response = 'json', getSymbolId = 0)
- historical.getTopGainers (topsegment = 'NSEFUT', top = 50, response = 'json')
- historical.getTopLosers (topsegment = 'NSEFUT', top = 50, response = 'json')
- historical.getTopVolumeGainers (topsegment = 'NSEFUT', top = 50, response = 'json')
- historical.getCorpAction (symbol, response = 'json')
- historical.getSymbolNameChange (response = 'json')
Exceptions in :
- historical.getTickData (symbol, from, to, bidask = 1, response = 'json')
- historical.getBarData (symbol, from, to, interval = '1min', response = 'json')
You can use “duration” instead of using “from and to” in both the above functions. If you are using “duration” then, the function will be like:
- historical.getTickData (symbol, duration = '1D' , bidask = 1, response = 'json')
- historical.getBarData (symbol, duration = '2W', interval = '1min', response = 'json')
Durations
- '5D' // D for Day
- '3W' // W for Week
- '2M' // M for Month
- '1Y' // Y for Year
Default values and available values
| Default values | Available values
| -------------- | ----------------
| response = 'json' | response : 'json', 'csv'
| bidask = 1 | bidask: 1, 0 // 1 – bidask feed active , 0 – bidask feed inactive
| interval = '1min' | interval:'1min', '2min', '3min', '5min', '10min', '15min', '30min', '60min', 'EOD'
| nticks = 2000 | nticks: Any number // Max upto last 5 days of ticks
| nbars = 200 | nbars: Any number
| getSymbolId = 0 | getSymbolId : 1, 0 // 1 - symbolId active , 0 - symbolId inactive
| segment = 'FO' | segment: 'FO', 'EQ', 'MCX'
| topsegment = 'NSEFUT' | topsegment: 'NSEFUT', 'NSEEQ', 'NSEOPT', 'CDS', 'MCX'
| top = 50 | top: Any number
*symbol in historical api is symbol name. For eg: 'NIFTY-I' or 'RELIANCE' etc.
*In historical.getBhavCopy, current date is default. Date format is 'yyyy-mm-dd'
Sample Code
getBarData for a particular symbol using from and to :
historical
.getBarData('NIFTY-I', '210302T09:00:00', '210302T15:30:00', interval = '1min', response ='json', getSymbolId = 0 )
.then((res) => console.log(res))
.catch((err) => console.log(err));
getBarData for a particular symbol using duration :
historical
.getBarData('NIFTY-I', duration = '3W', interval = '1min', response ='json', getSymbolId = 0)
.then((res) => console.log(res))
.catch((err) => console.log(err));
Sample code for Live and Historical API
const { rtConnect, rtSubscribe, rtUnsubscribe, rtFeed, historical, formatTime } = require('truedata-nodejs');
const user = 'your username';
const pwd = 'your password';
const port = 8082;
const symbols = ['NIFTY-I', 'BANKNIFTY-I', 'CRUDEOIL-I']; // symbols in array format
rtConnect(user, pwd, symbols, port, (bidask = 1), (heartbeat = 1));
rtFeed.on('touchline', touchlineHandler);
rtFeed.on('tick', tickHandler);
rtFeed.on('bidask', bidaskHandler);
rtFeed.on('bar', barHandler);
rtFeed.on('marketstatus', marketStatusHandler)
rtFeed.on('heartbeat', heartbeatHandler);
function touchlineHandler(touchline) {
console.log(touchline);
}
function tickHandler(tick) {
console.log(tick);
}
function bidaskHandler(bidask) {
console.log(bidask);
}
function barHandler(bar) {
console.log(bar);
}
function marketStatusHandler(status) {
console.log(status);
}
function heartbeatHandler(heartbeat) {
console.log(heartbeat);
}
historical.auth(user, pwd); // For authentication
from = formatTime(2021, 3, 2, 9, 15); // (year, month, date, hour, minute) // hour in 24 hour format
to = formatTime(2021, 3, 5, 9, 15); // (year, month, date, hour, minute) // hour in 24 hour format
historical
.getBarData('NIFTY-I', '210302T09:00:00', '210302T15:30:00', (interval = '1min'), (response = 'json'), (getSymbolId = 0))
.then((res) => console.log(res))
.catch((err) => console.log(err));
historical
.getBarData('RELIANCE', from, to, (interval = '1min'), (response = 'json'), (getSymbolId = 0))
.then((res) => console.log(res))
.catch((err) => console.log(err));
historical
.getBarData('NIFTY 50', (duration = '1W'), (interval = '60min'), (response = 'json'), (getSymbolId = 0))
.then((res) => console.log(res))
.catch((err) => console.log(err));
historical
.getTickData('SBIN', '1D', (bidask = 1), (response = 'csv'), (getSymbolId = 0))
.then((res) => console.log(res))
.catch((err) => console.log(err));
historical
.getLTP('L&TFH')
.then((res) => console.log(res))
.catch((err) => console.log(err));