The official Java client for communicating with Smart API Connect API.
Smart API is a set of REST-like APIs that expose many capabilities required to build a complete investment and trading platform. Execute orders in real time, manage user portfolio, stream live market data (WebSockets), and more, with the simple HTTP API collection.
- [Smart API - HTTP API documentation] (https://smartapi.angelbroking.com/docs)
- Java library documentation
-
Download SmartAPI jar file and include it in your build path.
-
Include com.angelbroking.smartapi into build path from maven. Use version 1.0.0
// Initialize Samart API using clientcode and password.
SmartConnect smartConnect = new SmartConnect();
// Provide your api key here
smartConnect.setApiKey("<api_key>");
// Set session expiry callback.
smartConnect.setSessionExpiryHook(new SessionExpiryHook() {
@Override
public void sessionExpired() {
System.out.println("session expired");
}
});
User user = smartConnect.generateSession(<clientId>, <password>);
System.out.println(user.toString());
smartConnect.setAccessToken(user.getAccessToken());
smartConnect.setUserId(user.getUserId());
// token re-generate
TokenSet tokenSet = smartConnect.renewAccessToken(user.getAccessToken(),
user.getRefreshToken());
smartConnect.setAccessToken(tokenSet.getAccessToken());
/** Place order. */
public void placeOrder(SmartConnect smartConnect) throws SmartAPIException, IOException {
OrderParams orderParams = new OrderParams();
orderParams.variety = "NORMAL";
orderParams.quantity = 1;
orderParams.symboltoken = "3045";
orderParams.exchange = Constants.EXCHANGE_NSE;
orderParams.ordertype = Constants.ORDER_TYPE_LIMIT;
orderParams.tradingsymbol = "SBIN-EQ";
orderParams.producttype = Constants.PRODUCT_INTRADAY;
orderParams.duration = Constants.VALIDITY_DAY;
orderParams.transactiontype = Constants.TRANSACTION_TYPE_BUY;
orderParams.price = 122.2;
orderParams.squareoff = "0";
orderParams.stoploss = "0";
Order order = smartConnect.placeOrder(orderParams, Constants.VARIETY_REGULAR);
}
/** Modify order. */
public void modifyOrder(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Order modify request will return order model which will contain only
OrderParams orderParams = new OrderParams();
orderParams.quantity = 1;
orderParams.ordertype = Constants.ORDER_TYPE_LIMIT;
orderParams.tradingsymbol = "ASHOKLEY";
orderParams.symboltoken = "3045";
orderParams.producttype = Constants.PRODUCT_DELIVERY;
orderParams.exchange = Constants.EXCHANGE_NSE;
orderParams.duration = Constants.VALIDITY_DAY;
orderParams.price = 122.2;
String orderId = "201216000755110";
Order order = smartConnect.modifyOrder(orderId, orderParams, Constants.VARIETY_REGULAR);
}
/** Cancel an order */
public void cancelOrder(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Order modify request will return order model which will contain only
// order_id.
// Cancel order will return order model which will only have orderId.
Order order = smartConnect.cancelOrder("201009000000015", Constants.VARIETY_REGULAR);
}
/** Get order details */
public void getOrder(SmartConnect smartConnect) throws SmartAPIException, IOException {
List<Order> orders = smartConnect.getOrderHistory(smartConnect.getUserId());
for (int i = 0; i < orders.size(); i++) {
System.out.println(orders.get(i).orderId + " " + orders.get(i).status);
}
}
/**
* Get last price for multiple instruments at once. USers can either pass
* exchange with tradingsymbol or instrument token only. For example {NSE:NIFTY
* 50, BSE:SENSEX} or {256265, 265}
*/
public void getLTP(SmartConnect smartConnect) throws SmartAPIException, IOException {
String exchange = "NSE";
String tradingSymbol = "SBIN-EQ";
String symboltoken = "3045";
JSONObject ltpData = smartConnect.getLTP(exchange, tradingSymbol, symboltoken);
}
/** Get tradebook */
public void getTrades(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Returns tradebook.
List<Trade> trades = smartConnect.getTrades();
for (int i = 0; i < trades.size(); i++) {
System.out.println(trades.get(i).tradingSymbol + " " + trades.size());
}
}
/** Get RMS */
public void getRMS(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Returns RMS.
JSONObject response = smartConnect.getRMS();
}
/** Get Holdings */
public void getHolding(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Returns Holding.
JSONObject response = smartConnect.getHolding();
}
/** Get Position */
public void getPosition(SmartConnect smartConnect) throws SmartAPIException, IOException {
// Returns Position.
JSONObject response = smartConnect.getPosition();
}
/** convert Position */
public void convertPosition(SmartConnect smartConnect) throws SmartAPIException, IOException {
JSONObject requestObejct = new JSONObject();
requestObejct.put("exchange", "NSE");
requestObejct.put("oldproducttype", "DELIVERY");
requestObejct.put("newproducttype", "MARGIN");
requestObejct.put("tradingsymbol", "SBIN-EQ");
requestObejct.put("transactiontype", "BUY");
requestObejct.put("quantity", 1);
requestObejct.put("type", "DAY");
JSONObject response = smartConnect.getPosition();
}
/** Create Gtt Rule*/
public void createRule(SmartConnect smartConnect)throws SmartAPIException,IOException{
GttParams gttParams= new GttParams();
gttParams.tradingsymbol="SBIN-EQ";
gttParams.symboltoken="3045";
gttParams.exchange="NSE";
gttParams.producttype="MARGIN";
gttParams.transactiontype="BUY";
gttParams.price= 100000.01;
gttParams.qty=10;
gttParams.disclosedqty=10;
gttParams.triggerprice=20000.1;
gttParams.timeperiod=300;
Gtt gtt = smartConnect.gttCreateRule(gttParams);
}
/** Modify Gtt Rule */
public void modifyRule(SmartConnect smartConnect)throws SmartAPIException,IOException{
GttParams gttParams= new GttParams();
gttParams.tradingsymbol="SBIN-EQ";
gttParams.symboltoken="3045";
gttParams.exchange="NSE";
gttParams.producttype="MARGIN";
gttParams.transactiontype="BUY";
gttParams.price= 100000.1;
gttParams.qty=10;
gttParams.disclosedqty=10;
gttParams.triggerprice=20000.1;
gttParams.timeperiod=300;
Integer id= 1000051;
Gtt gtt = smartConnect.gttModifyRule(id,gttParams);
}
/** Cancel Gtt Rule */
public void cancelRule(SmartConnect smartConnect)throws SmartAPIException, IOException{
Integer id=1000051;
String symboltoken="3045";
String exchange="NSE";
Gtt gtt = smartConnect.gttCancelRule(id,symboltoken,exchange);
}
/** Gtt Rule Details */
public void ruleDetails(SmartConnect smartConnect)throws SmartAPIException, IOException{
Integer id=1000051;
JSONObject gtt = smartConnect.gttRuleDetails(id);
}
/** Gtt Rule Lists */
public void ruleList(SmartConnect smartConnect)throws SmartAPIException, IOException{
List<String> status=new ArrayList<String>(){{
add("NEW");
add("CANCELLED");
add("ACTIVE");
add("SENTTOEXCHANGE");
add("FORALL");
}};
Integer page=1;
Integer count=10;
JSONArray gtt = smartConnect.gttRuleList(status,page,count);
}
/** Logout user. */
public void logout(SmartConnect smartConnect) throws SmartAPIException, IOException {
/** Logout user and kill session. */
JSONObject jsonObject = smartConnect.logout();
}
For more details, take a look at Examples.java in sample directory.
// SmartAPITicker
String clientId = "<clientID>";
// feedToken - User user = smartConnect.generateSession(<clientId>, <password>);
String feedToken = user.getFeedToken();
String strWatchListScript = "nse_cm|2885&nse_cm|1594&nse_cm|11536";
String task = "mw";
public void tickerUsage(String clientId, String feedToken, String strWatchListScript, String task)
throws SmartAPIException {
SmartAPITicker tickerProvider = new SmartAPITicker(clientId, feedToken);
tickerProvider.setOnConnectedListener(new OnConnect() {
@Override
public void onConnected() {
tickerProvider.subscribe(strWatchListScript, task);
}
});
tickerProvider.setOnDisconnectedListener(new OnDisconnect() {
@Override
public void onDisconnected() {
System.out.println("onDisconnected");
}
});
/** Set error listener to listen to errors. */
tickerProvider.setOnErrorListener(new OnError() {
@Override
public void onError(Exception exception) {
System.out.println("onError: " + exception.getMessage());
}
@Override
public void onError(SmartAPIException smartAPIException) {
System.out.println("onError: " + smartAPIException.getMessage());
}
@Override
public void onError(String error) {
System.out.println("onError: " + error);
}
});
tickerProvider.setOnTickerArrivalListener(new OnTicks() {
@Override
public void onTicks(JSONArray ticks) {
System.out.println("ticker data: " + ticks.toString());
}
});
/**
* connects to Smart API ticker server for getting live quotes
*/
tickerProvider.connect();
/**
* You can check, if websocket connection is open or not using the following
* method.
*/
boolean isConnected = tickerProvider.isConnectionOpen();
System.out.println(isConnected);
// After using SmartAPI ticker, close websocket connection.
// tickerProvider.disconnect();
}For more details, take a look at Examples.java in sample directory.