From 6ce97058aaa1fbf441805448daddb476b3568834 Mon Sep 17 00:00:00 2001 From: Vishnu S Date: Sat, 28 Mar 2020 15:08:23 +0530 Subject: [PATCH 001/103] Added new MF endpoints, fixed order delete http method from PUT to DELETE --- connect.go | 22 +++++++++-------- mutualfunds.go | 64 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 65 insertions(+), 21 deletions(-) diff --git a/connect.go b/connect.go index 007d5b8..313e91e 100644 --- a/connect.go +++ b/connect.go @@ -102,16 +102,18 @@ const ( URIConvertPosition string = "/portfolio/positions" // MF endpoints - URIGetMFOrders string = "/mf/orders" - URIGetMFOrderInfo string = "/mf/orders/%s" // "/mf/orders/{order_id}" - URIPlaceMFOrder string = "/mf/orders" - URICancelMFOrder string = "/mf/orders/%s" // "/mf/orders/{order_id}" - URIGetMFSIPs string = "/mf/sips" - URIGetMFSIPInfo string = "/mf/sips/%s" // "/mf/sips/{sip_id}" - URIPlaceMFSIP string = "/mf/sips" - URIModifyMFSIP string = "/mf/sips/%s" // "/mf/sips/{sip_id}" - URICancelMFSIP string = "/mf/sips/%s" // "/mf/sips/{sip_id}" - URIGetMFHoldings string = "/mf/holdings" + URIGetMFOrders string = "/mf/orders" + URIGetMFOrderInfo string = "/mf/orders/%s" // "/mf/orders/{order_id}" + URIPlaceMFOrder string = "/mf/orders" + URICancelMFOrder string = "/mf/orders/%s" // "/mf/orders/{order_id}" + URIGetMFSIPs string = "/mf/sips" + URIGetMFSIPInfo string = "/mf/sips/%s" // "/mf/sips/{sip_id}" + URIPlaceMFSIP string = "/mf/sips" + URIModifyMFSIP string = "/mf/sips/%s" // "/mf/sips/{sip_id}" + URICancelMFSIP string = "/mf/sips/%s" // "/mf/sips/{sip_id}" + URIGetMFHoldings string = "/mf/holdings" + URIGetMFHoldingInfo string = "/mf/holdings/%s" // "/mf/holdings/{isin}" + URIGetAllotedISINs string = "/mf/allotments" URIGetInstruments string = "/instruments" URIGetMFInstruments string = "/mf/instruments" diff --git a/mutualfunds.go b/mutualfunds.go index 4cf46c3..cfbfe9d 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -20,6 +20,21 @@ type MFHolding struct { Quantity float64 `json:"quantity"` } +// MFTrade represents a individual trades of a mutualfund holding. +type MFTrade struct { + Fund string `json:"fund"` + Tradingsymbol string `json:"tradingsymbol"` + AveragePrice float64 `json:"average_price"` + Variety string `json:"variety"` + ExchangeTimestamp Time `json:"exchange_timestamp"` + Amount float64 `json:"amount"` + Folio string `json:"folio"` + Quantity float64 `json:"quantity"` +} + +// MFHoldingBreakdown represents a list of mutualfund holdings. +type MFHoldingBreakdown []MFTrade + // MFHoldings represents a list of mutualfund holdings. type MFHoldings []MFHolding @@ -48,7 +63,10 @@ type MFOrder struct { } // MFOrders represents a list of mutualfund orders. -type MFOrders []Order +type MFOrders []MFOrder + +// MFAllottedISINs represents a list of all ISINs in which atleast one allotment is present. +type MFAllottedISINs []string // MFSIP represents a individual mutualfund SIP response. type MFSIP struct { @@ -58,15 +76,18 @@ type MFSIP struct { DividendType string `json:"dividend_type"` TransactionType string `json:"transaction_type"` - Status string `json:"status"` - Created Time `json:"created"` - Frequency string `json:"frequency"` - InstalmentAmount float64 `json:"instalment_amount"` - Instalments int `json:"instalments"` - LastInstalment Time `json:"last_instalment"` - PendingInstalments int `json:"pending_instalments"` - InstalmentDay int `json:"instalment_day"` - Tag string `json:"tag"` + Status string `json:"status"` + SipType string `json:"sip_type"` + Created Time `json:"created"` + Frequency string `json:"frequency"` + InstalmentAmount float64 `json:"instalment_amount"` + Instalments int `json:"instalments"` + LastInstalment Time `json:"last_instalment"` + PendingInstalments int `json:"pending_instalments"` + InstalmentDay int `json:"instalment_day"` + CompletedInstalments int `json:"completed_instalments"` + NextInstalment string `json:"next_instalment"` + Tag string `json:"tag"` } // MFSIPs represents a list of mutualfund SIPs. @@ -194,13 +215,34 @@ func (c *Client) CancelMFSIP(sipID string) (MFSIPResponse, error) { sipResponse MFSIPResponse ) - err := c.doEnvelope(http.MethodPut, fmt.Sprintf(URICancelMFSIP, sipID), nil, nil, &sipResponse) + err := c.doEnvelope(http.MethodDelete, fmt.Sprintf(URICancelMFSIP, sipID), nil, nil, &sipResponse) return sipResponse, err } +// CancelMFOrder cancels an mutualfund SIP. +func (c *Client) CancelMFOrder(orderID string) (MFOrderResponse, error) { + var orderResponse MFOrderResponse + err := c.doEnvelope(http.MethodDelete, fmt.Sprintf(URICancelMFOrder, orderID), nil, nil, &orderResponse) + return orderResponse, err +} + // GetMFHoldings gets list of user mutualfund holdings. func (c *Client) GetMFHoldings() (MFHoldings, error) { var holdings MFHoldings err := c.doEnvelope(http.MethodGet, URIGetMFHoldings, nil, nil, &holdings) return holdings, err } + +// GetMFHoldingInfo get individual Holding info. +func (c *Client) GetMFHoldingInfo(isin string) (MFHoldingBreakdown, error) { + var holdingBreakdown MFHoldingBreakdown + err := c.doEnvelope(http.MethodGet, fmt.Sprintf(URIGetMFHoldingInfo, isin), nil, nil, &holdingBreakdown) + return holdingBreakdown, err +} + +// GetMFAllottedISINs gets list of user mutualfund holdings. +func (c *Client) GetMFAllottedISINs() (MFAllottedISINs, error) { + var isins MFAllottedISINs + err := c.doEnvelope(http.MethodGet, URIGetAllotedISINs, nil, nil, &isins) + return isins, err +} From 1596d8a5720b08f65a94d18dd335ebaa02cd0e8b Mon Sep 17 00:00:00 2001 From: Vishnu S Date: Sat, 28 Mar 2020 15:18:43 +0530 Subject: [PATCH 002/103] Typo correction in comments --- go.mod | 2 ++ mutualfunds.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 581bc3d..a262f37 100644 --- a/go.mod +++ b/go.mod @@ -6,3 +6,5 @@ require ( github.com/gorilla/websocket v1.4.0 gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 ) + +go 1.13 diff --git a/mutualfunds.go b/mutualfunds.go index cfbfe9d..2432569 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -219,7 +219,7 @@ func (c *Client) CancelMFSIP(sipID string) (MFSIPResponse, error) { return sipResponse, err } -// CancelMFOrder cancels an mutualfund SIP. +// CancelMFOrder cancels an mutualfund order. func (c *Client) CancelMFOrder(orderID string) (MFOrderResponse, error) { var orderResponse MFOrderResponse err := c.doEnvelope(http.MethodDelete, fmt.Sprintf(URICancelMFOrder, orderID), nil, nil, &orderResponse) From 48260e97f209f13112c0dbd16eaa079ae4ca6fe4 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 30 Mar 2020 19:16:28 +0530 Subject: [PATCH 003/103] fix: test failiure for cancel mf sip --- connect_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/connect_test.go b/connect_test.go index fc43ed3..505bee2 100644 --- a/connect_test.go +++ b/connect_test.go @@ -151,6 +151,7 @@ var MockResponders = [][]string{ // DELETE endpoints []string{http.MethodDelete, URICancelOrder, "order_response.json"}, + []string{http.MethodDelete, URICancelMFSIP, "mf_order_response.json"}, []string{http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, } From eba0269f71bc3b23b2b849505de60d26acc20ca9 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 31 Jul 2020 22:57:54 +0530 Subject: [PATCH 004/103] chore: support for go modules --- README.md | 13 ++++++++----- examples/connect/advanced/connect.go | 2 +- examples/connect/basic/connect.go | 2 +- examples/connect/gtt/connect.go | 2 +- examples/ticker/ticker.go | 4 ++-- go.mod | 6 +++--- ticker/ticker.go | 2 +- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b18e74f..fadf3e9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,10 @@ The official Go client for communicating with the Kite Connect API. -Kite Connect 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. +Kite Connect 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. Zerodha Technology (c) 2018. Licensed under the MIT License. @@ -14,7 +17,7 @@ Zerodha Technology (c) 2018. Licensed under the MIT License. ## Installation ``` -go get github.com/zerodhatech/gokiteconnect +go get github.com/zerodhatech/gokiteconnect/v3 ``` ## API usage @@ -25,7 +28,7 @@ package main import ( "fmt" - "github.com/zerodhatech/gokiteconnect" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" ) const ( @@ -71,8 +74,8 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodhatech/gokiteconnect" - "github.com/zerodhatech/gokiteconnect/ticker" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + "github.com/zerodhatech/gokiteconnect/v3/ticker" ) var ( diff --git a/examples/connect/advanced/connect.go b/examples/connect/advanced/connect.go index 181f301..4f201ee 100644 --- a/examples/connect/advanced/connect.go +++ b/examples/connect/advanced/connect.go @@ -6,7 +6,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodhatech/gokiteconnect" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" ) const ( diff --git a/examples/connect/basic/connect.go b/examples/connect/basic/connect.go index f319e04..80498e2 100644 --- a/examples/connect/basic/connect.go +++ b/examples/connect/basic/connect.go @@ -3,7 +3,7 @@ package main import ( "fmt" - kiteconnect "github.com/zerodhatech/gokiteconnect" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" ) const ( diff --git a/examples/connect/gtt/connect.go b/examples/connect/gtt/connect.go index 36fa1e3..b842b7e 100644 --- a/examples/connect/gtt/connect.go +++ b/examples/connect/gtt/connect.go @@ -5,7 +5,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodhatech/gokiteconnect" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" ) const ( diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index 7834234..bbd1cf4 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -4,8 +4,8 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodhatech/gokiteconnect" - kiteticker "github.com/zerodhatech/gokiteconnect/ticker" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteticker "github.com/zerodhatech/gokiteconnect/v3/ticker" ) const ( diff --git a/go.mod b/go.mod index 3583a44..ff62564 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,6 @@ -module github.com/zerodhatech/gokiteconnect +module github.com/zerodhatech/gokiteconnect/v3 + +go 1.14 require ( github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 @@ -6,5 +8,3 @@ require ( github.com/gorilla/websocket v1.4.0 gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 ) - -go 1.13 diff --git a/ticker/ticker.go b/ticker/ticker.go index ef2e44a..3ce5177 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -11,7 +11,7 @@ import ( "time" "github.com/gorilla/websocket" - "github.com/zerodhatech/gokiteconnect" + kiteconnect "github.com/zerodhatech/gokiteconnect/v3" ) // OHLC represents OHLC packets. From 1e9c272a77cfcadd92d79c9384dccd3743141d88 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 21 Aug 2020 17:21:42 +0530 Subject: [PATCH 005/103] feat: Add trigger_price and GetMFOrdersByDate --- mutualfunds.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mutualfunds.go b/mutualfunds.go index 2432569..e8ac055 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -87,6 +87,7 @@ type MFSIP struct { InstalmentDay int `json:"instalment_day"` CompletedInstalments int `json:"completed_instalments"` NextInstalment string `json:"next_instalment"` + TriggerPrice float64 `json:"trigger_price"` Tag string `json:"tag"` } @@ -121,6 +122,7 @@ type MFSIPParams struct { Frequency string `json:"frequency" url:"frequency"` InstalmentDay int `json:"instalment_day" url:"instalment_day,omitempty"` InitialAmount float64 `json:"initial_amount" url:"initial_amount,omitempty"` + TriggerPrice float64 `json:"trigger_price" url:"trigger_price,omitempty"` Tag string `json:"tag" url:"tag,omitempty"` } @@ -147,6 +149,20 @@ func (c *Client) GetMFOrderInfo(OrderID string) (MFOrder, error) { return orderInfo, err } +// GetMFOrdersByDate gets list of mutualfund orders for a custom date range. +func (c *Client) GetMFOrdersByDate(fromDate, toDate string) (MFOrders, error) { + var ( + orders MFOrders + ) + params := make(url.Values) + // from and to dates from request + params.Add("from", fromDate) + params.Add("to", toDate) + + err := c.doEnvelope(http.MethodGet, URIGetMFOrders, params, nil, &orders) + return orders, err +} + // PlaceMFOrder places an mutualfund order. func (c *Client) PlaceMFOrder(orderParams MFOrderParams) (MFOrderResponse, error) { var ( From a7af8646788de5d3db7b33ce393b3373ae5ae251 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 9 Nov 2020 15:08:52 +0530 Subject: [PATCH 006/103] feat: add order-margins API This commit adds the order margins API. A few internal refactors are made to the .Do function to allow using json content type. --- connect.go | 18 ++++++++ connect_test.go | 1 + http.go | 38 +++++++++++------ margins.go | 68 +++++++++++++++++++++++++++++++ margins_test.go | 32 +++++++++++++++ mock_responses/order_margins.json | 22 ++++++++++ 6 files changed, 166 insertions(+), 13 deletions(-) create mode 100644 margins.go create mode 100644 margins_test.go create mode 100644 mock_responses/order_margins.json diff --git a/connect.go b/connect.go index ca67453..4d81255 100644 --- a/connect.go +++ b/connect.go @@ -101,6 +101,8 @@ const ( URIGetHoldings string = "/portfolio/holdings" URIConvertPosition string = "/portfolio/positions" + URIOrderMargins string = "/margins/orders" + // MF endpoints URIGetMFOrders string = "/mf/orders" URIGetMFOrderInfo string = "/mf/orders/%s" // "/mf/orders/{order_id}" @@ -222,3 +224,19 @@ func (c *Client) do(method, uri string, params url.Values, headers http.Header) return c.httpClient.Do(method, c.baseURI+uri, params, headers) } + +func (c *Client) doRaw(method, uri string, reqBody []byte, headers http.Header) (HTTPResponse, error) { + if headers == nil { + headers = map[string][]string{} + } + + headers.Add("X-Kite-Version", kiteHeaderVersion) + headers.Add("User-Agent", name+"/"+version) + + if c.apiKey != "" && c.accessToken != "" { + authHeader := fmt.Sprintf("token %s:%s", c.apiKey, c.accessToken) + headers.Add("Authorization", authHeader) + } + + return c.httpClient.DoRaw(method, c.baseURI+uri, reqBody, headers) +} diff --git a/connect_test.go b/connect_test.go index 505bee2..389e8f2 100644 --- a/connect_test.go +++ b/connect_test.go @@ -148,6 +148,7 @@ var MockResponders = [][]string{ []string{http.MethodPost, URIPlaceMFOrder, "order_response.json"}, []string{http.MethodPost, URIPlaceMFSIP, "mf_order_response.json"}, []string{http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, + []string{http.MethodPost, URIOrderMargins, "order_margins.json"}, // DELETE endpoints []string{http.MethodDelete, URICancelOrder, "order_response.json"}, diff --git a/http.go b/http.go index 6b67c10..ed2d9f5 100644 --- a/http.go +++ b/http.go @@ -5,6 +5,7 @@ package kiteconnect */ import ( + "bytes" "encoding/json" "io" "io/ioutil" @@ -12,13 +13,13 @@ import ( "net/http" "net/url" "os" - "strings" "time" ) // HTTPClient represents an HTTP client. type HTTPClient interface { Do(method, rURL string, params url.Values, headers http.Header) (HTTPResponse, error) + DoRaw(method, rURL string, reqBody []byte, headers http.Header) (HTTPResponse, error) DoEnvelope(method, url string, params url.Values, headers http.Header, obj interface{}) error DoJSON(method, url string, params url.Values, headers http.Header, obj interface{}) (HTTPResponse, error) GetClient() *httpClient @@ -72,24 +73,28 @@ func NewHTTPClient(h *http.Client, hLog *log.Logger, debug bool) HTTPClient { } } -// Do executes an HTTP request and returns the response. func (h *httpClient) Do(method, rURL string, params url.Values, headers http.Header) (HTTPResponse, error) { - var ( - resp = HTTPResponse{} - postParams io.Reader - err error - ) - if params == nil { params = url.Values{} } + return h.DoRaw(method, rURL, []byte(params.Encode()), headers) +} + +// Do executes an HTTP request and returns the response. +func (h *httpClient) DoRaw(method, rURL string, reqBody []byte, headers http.Header) (HTTPResponse, error) { + var ( + resp = HTTPResponse{} + err error + postBody io.Reader + ) + // Encode POST / PUT params. if method == http.MethodPost || method == http.MethodPut { - postParams = strings.NewReader(params.Encode()) + postBody = bytes.NewReader(reqBody) } - req, err := http.NewRequest(method, rURL, postParams) + req, err := http.NewRequest(method, rURL, postBody) if err != nil { h.hLog.Printf("Request preparation failed: %v", err) return resp, NewError(NetworkError, "Request preparation failed.", nil) @@ -108,7 +113,7 @@ func (h *httpClient) Do(method, rURL string, params url.Values, headers http.Hea // If the request method is GET or DELETE, add the params as QueryString. if method == http.MethodGet || method == http.MethodDelete { - req.URL.RawQuery = params.Encode() + req.URL.RawQuery = string(reqBody) } r, err := h.client.Do(req) @@ -141,11 +146,19 @@ func (h *httpClient) DoEnvelope(method, url string, params url.Values, headers h return err } + err = readEnvelope(resp, obj) + if err != nil { + h.hLog.Printf("Error parsing JSON response: %v", err) + } + + return err +} + +func readEnvelope(resp HTTPResponse, obj interface{}) error { // Successful request, but error envelope. if resp.Response.StatusCode >= http.StatusBadRequest { var e errorEnvelope if err := json.Unmarshal(resp.Body, &e); err != nil { - h.hLog.Printf("Error parsing JSON response: %v", err) return NewError(DataError, "Error parsing response.", nil) } @@ -157,7 +170,6 @@ func (h *httpClient) DoEnvelope(method, url string, params url.Values, headers h envl.Data = obj if err := json.Unmarshal(resp.Body, &envl); err != nil { - h.hLog.Printf("Error parsing JSON response: %v | %s", err, resp.Body) return NewError(DataError, "Error parsing response.", nil) } diff --git a/margins.go b/margins.go new file mode 100644 index 0000000..10b972c --- /dev/null +++ b/margins.go @@ -0,0 +1,68 @@ +package kiteconnect + +import ( + "encoding/json" + "net/http" +) + +// OrderMarginParam represents a position in the Margin Calculator API +type OrderMarginParam struct { + Exchange string `json:"exchange"` + Tradingsymbol string `json:"tradingsymbol"` + TransactionType string `json:"transaction_type"` + Variety string `json:"variety"` + Product string `json:"product"` + OrderType string `json:"order_type"` + Quantity float64 `json:"quantity"` + Price float64 `json:"price,omitempty"` + TriggerPrice float64 `json:"trigger_price,omitempty"` +} + +// PNL represents the PNL +type PNL struct { + Realised float64 `json:"realised"` + Unrealised float64 `json:"unrealised"` +} + +// OrdersMargins represents response from the Margin Calculator API. +type OrderMargins struct { + Type string `json:"type"` + TradingSymbol string `json:"tradingsymbol"` + Exchange string `json:"exchange"` + + SPAN float64 `json:"span"` + Exposure float64 `json:"exposure"` + OptionPremium float64 `json:"option_premium"` + Additional float64 `json:"additional"` + BO float64 `json:"bo"` + Cash float64 `json:"cash"` + VAR float64 `json:"var"` + PNL PNL `json:"pnl"` + Total float64 `json:"total"` +} + +type orderMarginRequest struct { + Data []OrderMarginParam `json:"data"` +} + +func (c *Client) GetOrderMargins(orderParams []OrderMarginParam) ([]OrderMargins, error) { + body, err := json.Marshal(orderParams) + if err != nil { + return []OrderMargins{}, err + } + + var headers http.Header = map[string][]string{} + headers.Add("Content-Type", "application/json") + + resp, err := c.doRaw(http.MethodPost, URIOrderMargins, body, headers) + if err != nil { + return []OrderMargins{}, err + } + + var out []OrderMargins + if err := readEnvelope(resp, &out); err != nil { + return []OrderMargins{}, err + } + + return out, nil +} diff --git a/margins_test.go b/margins_test.go new file mode 100644 index 0000000..3efef7b --- /dev/null +++ b/margins_test.go @@ -0,0 +1,32 @@ +package kiteconnect + +import "testing" + +func (ts *TestSuite) TestGetOrderMargins(t *testing.T) { + t.Parallel() + + params := OrderMarginParam{ + Exchange: "NSE", + Tradingsymbol: "INFY", + TransactionType: "BUY", + Variety: "regular", + Product: "CNC", + OrderType: "MARKET", + Quantity: 1, + Price: 0, + TriggerPrice: 0, + } + + orderResponse, err := ts.KiteConnect.GetOrderMargins([]OrderMarginParam{params}) + if err != nil { + t.Errorf("Error while getting order margins: %v", err) + } + + if len(orderResponse)!= 1 { + t.Errorf("Incorrect response, expected len(orderResponse) to be 0, got: %v", len(orderResponse)) + } + + if orderResponse[0].Total != 961.45 { + t.Errorf("Incorrect total, expected 961.45, got: %v", orderResponse[0].Total) + } +} diff --git a/mock_responses/order_margins.json b/mock_responses/order_margins.json new file mode 100644 index 0000000..b4526d7 --- /dev/null +++ b/mock_responses/order_margins.json @@ -0,0 +1,22 @@ +{ + "status": "success", + "data": [ + { + "type": "equity", + "tradingsymbol": "INFY", + "exchange": "NSE", + "span": 0, + "exposure": 0, + "option_premium": 0, + "additional": 0, + "bo": 0, + "cash": 0, + "var": 961.45, + "pnl": { + "realised": 0, + "unrealised": 0 + }, + "total": 961.45 + } + ] +} From dfd60286bd91699e58aa8a2db3d4bb636b74d07c Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sat, 21 Nov 2020 23:11:18 +0530 Subject: [PATCH 007/103] Add DeepSource config --- .deepsource.toml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 0000000..b4c95d8 --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,8 @@ +version = 1 + +[[analyzers]] +name = "go" +enabled = true + + [analyzers.meta] + import_paths = ["github.com/de-sh/gokiteconnect"] \ No newline at end of file From d2819223640e4f9df82ad4ccfcd1d74f1bad3664 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sat, 21 Nov 2020 23:13:46 +0530 Subject: [PATCH 008/103] Remove unnecessary guard around delete --- ticker/ticker.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ticker/ticker.go b/ticker/ticker.go index 3ce5177..4a3cf9a 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -517,9 +517,7 @@ func (t *Ticker) Unsubscribe(tokens []uint32) error { // Remove tokens from current subscriptions for _, ts := range tokens { - if _, ok := t.subscribedTokens[ts]; ok { - delete(t.subscribedTokens, ts) - } + delete(t.subscribedTokens, ts) } return t.Conn.WriteMessage(websocket.TextMessage, out) From a93d7a26baf8c75868bb8810fd14f36ed5268a70 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sat, 21 Nov 2020 23:16:12 +0530 Subject: [PATCH 009/103] Replace time.Now().Sub() with time.Since() --- ticker/ticker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticker/ticker.go b/ticker/ticker.go index 4a3cf9a..3602763 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -426,7 +426,7 @@ func (t *Ticker) checkConnection(wg *sync.WaitGroup) { // If last ping time is greater then timeout interval then close the // existing connection and reconnect - if time.Now().Sub(t.lastPingTime) > dataTimeoutInterval { + if time.Since(t.lastPingTime) > dataTimeoutInterval { // Close the current connection without waiting for close frame if t.Conn != nil { t.Conn.Close() From 4734fdd0f543be282f5f38300dc3cb6d792a10b4 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sat, 21 Nov 2020 23:20:44 +0530 Subject: [PATCH 010/103] Remove unused orderMarginRequest type --- margins.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/margins.go b/margins.go index 10b972c..9c328e3 100644 --- a/margins.go +++ b/margins.go @@ -41,10 +41,6 @@ type OrderMargins struct { Total float64 `json:"total"` } -type orderMarginRequest struct { - Data []OrderMarginParam `json:"data"` -} - func (c *Client) GetOrderMargins(orderParams []OrderMarginParam) ([]OrderMargins, error) { body, err := json.Marshal(orderParams) if err != nil { From 3b8e6daeafa4d4e829b9b2976ed4acd0f727901b Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sat, 21 Nov 2020 23:24:07 +0530 Subject: [PATCH 011/103] replace len(s)==0 with s=='' --- utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.go b/utils.go index 1b5da5c..456e2f6 100644 --- a/utils.go +++ b/utils.go @@ -18,7 +18,7 @@ func (t *Time) UnmarshalJSON(b []byte) (err error) { var pTime time.Time s := strings.TrimSpace(strings.Trim(string(b), "\"")) - if len(s) == 0 || s == "null" { + if s == "" || s == "null" { t.Time = pTime return nil } From 58557c1ee226fa95178ba95bf0c1bec71454dd32 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Sun, 22 Nov 2020 23:18:48 +0530 Subject: [PATCH 012/103] refactor to using else if without unnecessary nesting --- errors_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/errors_test.go b/errors_test.go index 5d67e18..4a28ba8 100644 --- a/errors_test.go +++ b/errors_test.go @@ -178,10 +178,8 @@ func TestNewError(t *testing.T) { e := NewError(tt.args.etype, "Test Error", nil) if err, ok := e.(Error); !ok { t.Errorf("NewError() does not implement Error error = %v", e) - } else { - if err.Code != tt.want { - t.Errorf("NewError() error = %v, wantErr %v", err.Code, tt.want) - } + } else if err.Code != tt.want { + t.Errorf("NewError() error = %v, wantErr %v", err.Code, tt.want) } }) } From 019db6fe8bf4bd5f8c6ac682e9c4163ee8a0afe3 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Wed, 9 Dec 2020 18:11:36 +0530 Subject: [PATCH 013/103] Reconfigure DeepSource config --- .deepsource.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.deepsource.toml b/.deepsource.toml index b4c95d8..c1594f3 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -1,8 +1,11 @@ version = 1 +exclude_patterns = ["examples/**"] +test_patterns = ["*_test.go"] + [[analyzers]] name = "go" enabled = true [analyzers.meta] - import_paths = ["github.com/de-sh/gokiteconnect"] \ No newline at end of file + import_paths = ["github.com/zerodha/gokiteconnect"] From c3f745f4c0b61ae4fc93296a0e86cb6dbc6351c4 Mon Sep 17 00:00:00 2001 From: Devdutt Shenoi Date: Fri, 11 Dec 2020 14:05:21 +0530 Subject: [PATCH 014/103] Remove DeepSource config --- .deepsource.toml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml deleted file mode 100644 index c1594f3..0000000 --- a/.deepsource.toml +++ /dev/null @@ -1,11 +0,0 @@ -version = 1 - -exclude_patterns = ["examples/**"] -test_patterns = ["*_test.go"] - -[[analyzers]] -name = "go" -enabled = true - - [analyzers.meta] - import_paths = ["github.com/zerodha/gokiteconnect"] From 3db847c1eb97aeec06020053f0f6f200628f17da Mon Sep 17 00:00:00 2001 From: bhumitattarde <61645613+bhumitattarde@users.noreply.github.com> Date: Mon, 8 Feb 2021 20:59:34 +0530 Subject: [PATCH 015/103] Updated mock response (#31) * Updated mock response Updated MF SIP info mock response to reflect correct JSON field name. * Fixed MF SIPS mock response --- mock_responses/mf_sip_info.json | 2 +- mock_responses/mf_sips.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mock_responses/mf_sip_info.json b/mock_responses/mf_sip_info.json index 196e5c6..cdfbaf6 100644 --- a/mock_responses/mf_sip_info.json +++ b/mock_responses/mf_sip_info.json @@ -13,7 +13,7 @@ "instalments": -1, "last_instalment": "2017-07-05 07:33:32", "pending_instalments": -1, - "instalment_date": 5, + "instalment_day": 5, "tag": "" } } diff --git a/mock_responses/mf_sips.json b/mock_responses/mf_sips.json index 3f9ec95..8a4ea20 100644 --- a/mock_responses/mf_sips.json +++ b/mock_responses/mf_sips.json @@ -13,7 +13,7 @@ "instalments": -1, "last_instalment": "2017-07-05 07:33:32", "pending_instalments": -1, - "instalment_date": 5, + "instalment_day": 5, "tag": "" }] } From f59cdd9eb378ed6bbecaa3691ca876f7dcc62fbb Mon Sep 17 00:00:00 2001 From: Varun Batra Date: Mon, 8 Feb 2021 21:02:11 +0530 Subject: [PATCH 016/103] Add OI support to Historical Data (#29) * Add OI support in Historical Data This adds OI support in historical data: https://kite.trade/docs/connect/v3/historical/#oi-data Unfortunately, it is incompatible with previous versions - I am updating test as well. * Update market_test.go * Change oI to OI --- market.go | 20 +++++++++++++++++++- market_test.go | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/market.go b/market.go index e4f513d..248320a 100644 --- a/market.go +++ b/market.go @@ -77,6 +77,7 @@ type HistoricalData struct { Low float64 `json:"Low"` Close float64 `json:"close"` Volume int `json:"volume"` + OI int `json:"oi"` } type historicalDataReceived struct { @@ -87,6 +88,7 @@ type historicalDataParams struct { FromDate string `url:"from"` ToDate string `url:"to"` Continuous int `url:"continuous"` + OI int `url:"oi"` InstrumentToken int `url:"instrument_token"` Interval string `url:"interval"` } @@ -208,6 +210,7 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD low float64 close float64 volume int + OI int ok bool ) @@ -238,6 +241,15 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD } volume = int(v) + // Did we get OI? + if len(i) > 6 { + // Assert OI + OIT, ok := i[6].(float64) + if !ok { + return data, NewError(GeneralError, fmt.Sprintf("Error decoding response `oi`: %v", i[6]), nil) + } + OI = int(OIT) + } // Parse string to date d, err := time.Parse("2006-01-02T15:04:05-0700", ds) @@ -252,6 +264,7 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD Low: low, Close: close, Volume: volume, + OI: OI, }) } @@ -259,7 +272,7 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD } // GetHistoricalData gets list of historical data. -func (c *Client) GetHistoricalData(instrumentToken int, interval string, fromDate time.Time, toDate time.Time, continuous bool) ([]HistoricalData, error) { +func (c *Client) GetHistoricalData(instrumentToken int, interval string, fromDate time.Time, toDate time.Time, continuous bool, OI bool) ([]HistoricalData, error) { var ( err error data []HistoricalData @@ -272,11 +285,16 @@ func (c *Client) GetHistoricalData(instrumentToken int, interval string, fromDat inpParams.FromDate = fromDate.Format("2006-01-02 15:04:05") inpParams.ToDate = toDate.Format("2006-01-02 15:04:05") inpParams.Continuous = 0 + inpParams.OI = 0 if continuous { inpParams.Continuous = 1 } + if OI { + inpParams.OI = 1 + } + if params, err = query.Values(inpParams); err != nil { return data, NewError(InputError, fmt.Sprintf("Error decoding order params: %v", err), nil) } diff --git a/market_test.go b/market_test.go index 81ebac9..6d566dc 100644 --- a/market_test.go +++ b/market_test.go @@ -39,7 +39,7 @@ func (ts *TestSuite) TestGetLTP(t *testing.T) { func (ts *TestSuite) TestGetHistoricalData(t *testing.T) { t.Parallel() - marketHistorical, err := ts.KiteConnect.GetHistoricalData(123, "myinterval", time.Unix(0, 0), time.Unix(1, 0), true) + marketHistorical, err := ts.KiteConnect.GetHistoricalData(123, "myinterval", time.Unix(0, 0), time.Unix(1, 0), true, false) if err != nil { t.Errorf("Error while fetching MF orders. %v", err) } From 6c6f67004e9029a2f5b36c5008c2c46e117bc90e Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 28 May 2021 17:45:24 +0530 Subject: [PATCH 017/103] delete: mock responses --- mock_responses/gtt_delete_order.json | 1 - mock_responses/gtt_get_order.json | 64 - mock_responses/gtt_get_orders.json | 97 - mock_responses/gtt_modify_order.json | 1 - mock_responses/gtt_place_order.json | 1 - mock_responses/historical_minute.json | 24007 ------------------------ mock_responses/holdings.json | 822 - mock_responses/instruments_all.csv | 100 - mock_responses/instruments_nse.csv | 100 - mock_responses/ltp.json | 9 - mock_responses/margins.json | 47 - mock_responses/margins_equity.json | 24 - mock_responses/mf_holdings.json | 51 - mock_responses/mf_instruments.csv | 100 - mock_responses/mf_order_response.json | 7 - mock_responses/mf_orders.json | 47 - mock_responses/mf_orders_info.json | 24 - mock_responses/mf_sip_info.json | 19 - mock_responses/mf_sips.json | 19 - mock_responses/ohlc.json | 15 - mock_responses/order_info.json | 221 - mock_responses/order_margins.json | 22 - mock_responses/order_response.json | 6 - mock_responses/order_trades.json | 19 - mock_responses/orders.json | 215 - mock_responses/positions.json | 195 - mock_responses/profile.json | 31 - mock_responses/quote.json | 82 - mock_responses/trades.json | 19 - mock_responses/trigger_range.json | 15 - 30 files changed, 26380 deletions(-) delete mode 100644 mock_responses/gtt_delete_order.json delete mode 100644 mock_responses/gtt_get_order.json delete mode 100644 mock_responses/gtt_get_orders.json delete mode 100644 mock_responses/gtt_modify_order.json delete mode 100644 mock_responses/gtt_place_order.json delete mode 100644 mock_responses/historical_minute.json delete mode 100644 mock_responses/holdings.json delete mode 100644 mock_responses/instruments_all.csv delete mode 100644 mock_responses/instruments_nse.csv delete mode 100644 mock_responses/ltp.json delete mode 100644 mock_responses/margins.json delete mode 100644 mock_responses/margins_equity.json delete mode 100644 mock_responses/mf_holdings.json delete mode 100644 mock_responses/mf_instruments.csv delete mode 100644 mock_responses/mf_order_response.json delete mode 100644 mock_responses/mf_orders.json delete mode 100644 mock_responses/mf_orders_info.json delete mode 100644 mock_responses/mf_sip_info.json delete mode 100644 mock_responses/mf_sips.json delete mode 100644 mock_responses/ohlc.json delete mode 100644 mock_responses/order_info.json delete mode 100644 mock_responses/order_margins.json delete mode 100644 mock_responses/order_response.json delete mode 100644 mock_responses/order_trades.json delete mode 100644 mock_responses/orders.json delete mode 100644 mock_responses/positions.json delete mode 100644 mock_responses/profile.json delete mode 100644 mock_responses/quote.json delete mode 100644 mock_responses/trades.json delete mode 100644 mock_responses/trigger_range.json diff --git a/mock_responses/gtt_delete_order.json b/mock_responses/gtt_delete_order.json deleted file mode 100644 index b6fccbd..0000000 --- a/mock_responses/gtt_delete_order.json +++ /dev/null @@ -1 +0,0 @@ -{"status":"success","data":{"trigger_id":123}} \ No newline at end of file diff --git a/mock_responses/gtt_get_order.json b/mock_responses/gtt_get_order.json deleted file mode 100644 index aaa16b6..0000000 --- a/mock_responses/gtt_get_order.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "status": "success", - "data": { - "id": 123, - "user_id": "XX0000", - "parent_trigger": null, - "type": "two-leg", - "created_at": "2019-09-09 15:13:22", - "updated_at": "2019-09-09 15:15:08", - "expires_at": "2020-01-01 12:00:00", - "status": "triggered", - "condition": { - "exchange": "NSE", - "last_price": 102.6, - "tradingsymbol": "RAIN", - "trigger_values": [ - 102.0, - 103.7 - ], - "instrument_token": 3926273 - }, - "orders": [ - { - "exchange": "NSE", - "tradingsymbol": "RAIN", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "result": null - }, - { - "exchange": "NSE", - "tradingsymbol": "RAIN", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "result": { - "account_id": "XX0000", - "exchange": "NSE", - "tradingsymbol": "RAIN", - "validity": "DAY", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "meta": "{\"app_id\":12617,\"gtt\":105099}", - "timestamp": "2019-09-09 15:15:08", - "triggered_at": 103.7, - "order_result": { - "status": "failed", - "order_id": "", - "rejection_reason": "Your order price is lower than the current lower circuit limit of 70.65. Place an order within the daily range." - } - } - } - ], - "meta": null - } -} \ No newline at end of file diff --git a/mock_responses/gtt_get_orders.json b/mock_responses/gtt_get_orders.json deleted file mode 100644 index 6afc344..0000000 --- a/mock_responses/gtt_get_orders.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "status": "success", - "data": [ - { - "id": 112127, - "user_id": "XX0000", - "parent_trigger": null, - "type": "single", - "created_at": "2019-09-12 13:25:16", - "updated_at": "2019-09-12 13:25:16", - "expires_at": "2020-09-12 13:25:16", - "status": "active", - "condition": { - "exchange": "NSE", - "last_price": 798, - "tradingsymbol": "INFY", - "trigger_values": [ - 702 - ], - "instrument_token": 408065 - }, - "orders": [ - { - "exchange": "NSE", - "tradingsymbol": "INFY", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "BUY", - "quantity": 1, - "price": 702.5, - "result": null - } - ], - "meta": {} - }, - { - "id": 105099, - "user_id": "XX0000", - "parent_trigger": null, - "type": "two-leg", - "created_at": "2019-09-09 15:13:22", - "updated_at": "2019-09-09 15:15:08", - "expires_at": "2020-01-01 12:00:00", - "status": "triggered", - "condition": { - "exchange": "NSE", - "last_price": 102.6, - "tradingsymbol": "RAIN", - "trigger_values": [ - 102.0, - 103.7 - ], - "instrument_token": 3926273 - }, - "orders": [ - { - "tradingsymbol": "RAIN", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "result": null - }, - { - "exchange": "NSE", - "tradingsymbol": "RAIN", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "result": { - "account_id": "XX0000", - "exchange": "NSE", - "tradingsymbol": "RAIN", - "validity": "DAY", - "product": "CNC", - "order_type": "LIMIT", - "transaction_type": "SELL", - "quantity": 1, - "price": 1, - "meta": "{\"app_id\":12617,\"gtt\":105099}", - "timestamp": "2019-09-09 15:15:08", - "triggered_at": 103.7, - "order_result": { - "status": "failed", - "order_id": "", - "rejection_reason": "Your order price is lower than the current lower circuit limit of 70.65. Place an order within the daily range." - } - } - } - ], - "meta": null - } - ] -} \ No newline at end of file diff --git a/mock_responses/gtt_modify_order.json b/mock_responses/gtt_modify_order.json deleted file mode 100644 index b6fccbd..0000000 --- a/mock_responses/gtt_modify_order.json +++ /dev/null @@ -1 +0,0 @@ -{"status":"success","data":{"trigger_id":123}} \ No newline at end of file diff --git a/mock_responses/gtt_place_order.json b/mock_responses/gtt_place_order.json deleted file mode 100644 index b6fccbd..0000000 --- a/mock_responses/gtt_place_order.json +++ /dev/null @@ -1 +0,0 @@ -{"status":"success","data":{"trigger_id":123}} \ No newline at end of file diff --git a/mock_responses/historical_minute.json b/mock_responses/historical_minute.json deleted file mode 100644 index 2d627c4..0000000 --- a/mock_responses/historical_minute.json +++ /dev/null @@ -1,24007 +0,0 @@ -{ - "status": "success", - "data": { - "candles": [ - [ - "2017-12-15T09:15:00+0530", - 1704.5, - 1705, - 1699.25, - 1702.8, - 2499 - ], - [ - "2017-12-15T09:16:00+0530", - 1702, - 1702, - 1698.15, - 1698.15, - 1271 - ], - [ - "2017-12-15T09:17:00+0530", - 1698.15, - 1700.25, - 1698, - 1699.25, - 831 - ], - [ - "2017-12-15T09:18:00+0530", - 1700, - 1700, - 1698.3, - 1699, - 771 - ], - [ - "2017-12-15T09:19:00+0530", - 1699, - 1700, - 1698.1, - 1699.8, - 543 - ], - [ - "2017-12-15T09:20:00+0530", - 1699.8, - 1700, - 1696.55, - 1696.9, - 802 - ], - [ - "2017-12-15T09:21:00+0530", - 1696.8, - 1696.8, - 1694, - 1694, - 981 - ], - [ - "2017-12-15T09:22:00+0530", - 1694, - 1694.1, - 1692.4, - 1693.8, - 890 - ], - [ - "2017-12-15T09:23:00+0530", - 1693.3, - 1695, - 1693, - 1695, - 991 - ], - [ - "2017-12-15T09:24:00+0530", - 1695, - 1695.9, - 1694, - 1695, - 874 - ], - [ - "2017-12-15T09:25:00+0530", - 1695, - 1696.7, - 1694.9, - 1695.1, - 729 - ], - [ - "2017-12-15T09:26:00+0530", - 1695.1, - 1696.7, - 1695.1, - 1696.1, - 591 - ], - [ - "2017-12-15T09:27:00+0530", - 1696.1, - 1697.3, - 1696.1, - 1696.15, - 566 - ], - [ - "2017-12-15T09:28:00+0530", - 1696.15, - 1697.8, - 1696.15, - 1697.7, - 157 - ], - [ - "2017-12-15T09:29:00+0530", - 1697.8, - 1700, - 1697.1, - 1700, - 876 - ], - [ - "2017-12-15T09:30:00+0530", - 1699.95, - 1700, - 1698, - 1700, - 309 - ], - [ - "2017-12-15T09:31:00+0530", - 1700, - 1700.95, - 1699.9, - 1700, - 1830 - ], - [ - "2017-12-15T09:32:00+0530", - 1700, - 1700.3, - 1697.1, - 1697.55, - 2253 - ], - [ - "2017-12-15T09:33:00+0530", - 1697.55, - 1697.65, - 1696.65, - 1697.65, - 133 - ], - [ - "2017-12-15T09:34:00+0530", - 1697.65, - 1697.65, - 1696.35, - 1697.5, - 154 - ], - [ - "2017-12-15T09:35:00+0530", - 1697.5, - 1698.5, - 1696.8, - 1698.5, - 144 - ], - [ - "2017-12-15T09:36:00+0530", - 1698.5, - 1698.9, - 1698, - 1698, - 424 - ], - [ - "2017-12-15T09:37:00+0530", - 1698, - 1698.8, - 1698, - 1698, - 532 - ], - [ - "2017-12-15T09:38:00+0530", - 1698, - 1700.95, - 1698, - 1698.95, - 1009 - ], - [ - "2017-12-15T09:39:00+0530", - 1698.95, - 1700, - 1698.95, - 1699.6, - 205 - ], - [ - "2017-12-15T09:40:00+0530", - 1699.6, - 1700.4, - 1699.05, - 1700.25, - 901 - ], - [ - "2017-12-15T09:41:00+0530", - 1700.25, - 1702, - 1700.25, - 1701.8, - 898 - ], - [ - "2017-12-15T09:42:00+0530", - 1701.8, - 1702.9, - 1701.8, - 1702, - 1010 - ], - [ - "2017-12-15T09:43:00+0530", - 1702, - 1705, - 1702, - 1704.85, - 1914 - ], - [ - "2017-12-15T09:44:00+0530", - 1704.75, - 1706, - 1704.75, - 1705.7, - 2440 - ], - [ - "2017-12-15T09:45:00+0530", - 1705.7, - 1707.7, - 1705.5, - 1706.5, - 1764 - ], - [ - "2017-12-15T09:46:00+0530", - 1706.1, - 1707.8, - 1703.1, - 1703.8, - 3344 - ], - [ - "2017-12-15T09:47:00+0530", - 1703.8, - 1704, - 1703.25, - 1704, - 354 - ], - [ - "2017-12-15T09:48:00+0530", - 1704, - 1705.55, - 1703.85, - 1705, - 565 - ], - [ - "2017-12-15T09:49:00+0530", - 1705, - 1705, - 1703.3, - 1703.3, - 283 - ], - [ - "2017-12-15T09:50:00+0530", - 1703.3, - 1703.8, - 1703, - 1703.1, - 327 - ], - [ - "2017-12-15T09:51:00+0530", - 1703.1, - 1703.7, - 1703.1, - 1703.5, - 816 - ], - [ - "2017-12-15T09:52:00+0530", - 1703.8, - 1704, - 1703.5, - 1703.5, - 855 - ], - [ - "2017-12-15T09:53:00+0530", - 1703.8, - 1703.8, - 1700.35, - 1700.6, - 613 - ], - [ - "2017-12-15T09:54:00+0530", - 1700.6, - 1701.95, - 1699.65, - 1701.95, - 3546 - ], - [ - "2017-12-15T09:55:00+0530", - 1702, - 1702.5, - 1701.5, - 1701.5, - 400 - ], - [ - "2017-12-15T09:56:00+0530", - 1701.55, - 1702.8, - 1701.55, - 1702.8, - 1217 - ], - [ - "2017-12-15T09:57:00+0530", - 1702.9, - 1703.1, - 1702.9, - 1703.1, - 623 - ], - [ - "2017-12-15T09:58:00+0530", - 1703.1, - 1703.1, - 1701.9, - 1702.1, - 155 - ], - [ - "2017-12-15T09:59:00+0530", - 1702.1, - 1702.3, - 1701.4, - 1702.05, - 1058 - ], - [ - "2017-12-15T10:00:00+0530", - 1702.05, - 1702.65, - 1701.6, - 1701.65, - 233 - ], - [ - "2017-12-15T10:01:00+0530", - 1701.65, - 1702, - 1701.1, - 1701.35, - 391 - ], - [ - "2017-12-15T10:02:00+0530", - 1701.35, - 1701.95, - 1701.3, - 1701.3, - 494 - ], - [ - "2017-12-15T10:03:00+0530", - 1701.3, - 1701.3, - 1700.15, - 1700.4, - 397 - ], - [ - "2017-12-15T10:04:00+0530", - 1700.4, - 1701.65, - 1700.4, - 1701.35, - 75 - ], - [ - "2017-12-15T10:05:00+0530", - 1701.35, - 1701.35, - 1700.55, - 1700.55, - 77 - ], - [ - "2017-12-15T10:06:00+0530", - 1701.2, - 1701.3, - 1700, - 1700, - 529 - ], - [ - "2017-12-15T10:07:00+0530", - 1700, - 1700, - 1698.05, - 1698.3, - 1201 - ], - [ - "2017-12-15T10:08:00+0530", - 1698.3, - 1699.7, - 1698.2, - 1698.45, - 1205 - ], - [ - "2017-12-15T10:09:00+0530", - 1699, - 1699.6, - 1696.6, - 1697.9, - 375 - ], - [ - "2017-12-15T10:10:00+0530", - 1697.9, - 1697.9, - 1696, - 1696, - 818 - ], - [ - "2017-12-15T10:11:00+0530", - 1695.05, - 1695.55, - 1691.9, - 1691.9, - 5435 - ], - [ - "2017-12-15T10:12:00+0530", - 1691.9, - 1692, - 1689.1, - 1690, - 5801 - ], - [ - "2017-12-15T10:13:00+0530", - 1690, - 1694.05, - 1690, - 1694.05, - 3607 - ], - [ - "2017-12-15T10:14:00+0530", - 1694.5, - 1696.05, - 1694.5, - 1696.05, - 2043 - ], - [ - "2017-12-15T10:15:00+0530", - 1696.05, - 1696.05, - 1694.8, - 1695.3, - 428 - ], - [ - "2017-12-15T10:16:00+0530", - 1694.4, - 1694.4, - 1693.75, - 1694.1, - 1054 - ], - [ - "2017-12-15T10:17:00+0530", - 1694.1, - 1695, - 1694.1, - 1695, - 1033 - ], - [ - "2017-12-15T10:18:00+0530", - 1695, - 1695, - 1694.4, - 1694.85, - 177 - ], - [ - "2017-12-15T10:19:00+0530", - 1694.85, - 1695, - 1691, - 1691.05, - 1854 - ], - [ - "2017-12-15T10:20:00+0530", - 1691.05, - 1693.05, - 1691.05, - 1693.05, - 795 - ], - [ - "2017-12-15T10:21:00+0530", - 1693.05, - 1693.15, - 1692.95, - 1692.95, - 199 - ], - [ - "2017-12-15T10:22:00+0530", - 1692.95, - 1693.15, - 1692, - 1692.05, - 730 - ], - [ - "2017-12-15T10:23:00+0530", - 1692.05, - 1692.05, - 1691.85, - 1691.9, - 753 - ], - [ - "2017-12-15T10:24:00+0530", - 1691.9, - 1692.2, - 1690.1, - 1690.1, - 610 - ], - [ - "2017-12-15T10:25:00+0530", - 1690.1, - 1691.35, - 1690.1, - 1690.3, - 234 - ], - [ - "2017-12-15T10:26:00+0530", - 1690.3, - 1693.5, - 1690.3, - 1693.5, - 969 - ], - [ - "2017-12-15T10:27:00+0530", - 1693.5, - 1696, - 1693.5, - 1695, - 578 - ], - [ - "2017-12-15T10:28:00+0530", - 1695, - 1695, - 1693.25, - 1693.25, - 140 - ], - [ - "2017-12-15T10:29:00+0530", - 1693.25, - 1693.25, - 1690.4, - 1692.6, - 708 - ], - [ - "2017-12-15T10:30:00+0530", - 1692.2, - 1694, - 1691.1, - 1691.3, - 396 - ], - [ - "2017-12-15T10:31:00+0530", - 1691.3, - 1693.1, - 1691.3, - 1693, - 78 - ], - [ - "2017-12-15T10:32:00+0530", - 1693, - 1693, - 1692.15, - 1693, - 50 - ], - [ - "2017-12-15T10:33:00+0530", - 1693, - 1693, - 1692.55, - 1692.55, - 379 - ], - [ - "2017-12-15T10:34:00+0530", - 1692.55, - 1693, - 1692.55, - 1693, - 254 - ], - [ - "2017-12-15T10:35:00+0530", - 1693, - 1693.9, - 1693, - 1693.5, - 225 - ], - [ - "2017-12-15T10:36:00+0530", - 1693.5, - 1693.95, - 1693.25, - 1693.25, - 65 - ], - [ - "2017-12-15T10:37:00+0530", - 1693.25, - 1693.25, - 1693, - 1693.25, - 72 - ], - [ - "2017-12-15T10:38:00+0530", - 1693.25, - 1693.25, - 1693.25, - 1693.25, - 397 - ], - [ - "2017-12-15T10:39:00+0530", - 1693.25, - 1693.6, - 1693, - 1693.6, - 322 - ], - [ - "2017-12-15T10:40:00+0530", - 1693.6, - 1694, - 1693.05, - 1693.5, - 79 - ], - [ - "2017-12-15T10:41:00+0530", - 1693.5, - 1693.5, - 1692.2, - 1693, - 312 - ], - [ - "2017-12-15T10:42:00+0530", - 1693, - 1693, - 1692.95, - 1692.95, - 6 - ], - [ - "2017-12-15T10:43:00+0530", - 1692.95, - 1692.95, - 1692.55, - 1692.55, - 26 - ], - [ - "2017-12-15T10:44:00+0530", - 1692.55, - 1693, - 1692.3, - 1692.3, - 30 - ], - [ - "2017-12-15T10:45:00+0530", - 1692.3, - 1693, - 1692.3, - 1693, - 287 - ], - [ - "2017-12-15T10:46:00+0530", - 1693, - 1693, - 1692.95, - 1692.95, - 19 - ], - [ - "2017-12-15T10:47:00+0530", - 1692.95, - 1692.95, - 1692.3, - 1692.3, - 69 - ], - [ - "2017-12-15T10:48:00+0530", - 1692.3, - 1692.3, - 1690.9, - 1691, - 262 - ], - [ - "2017-12-15T10:49:00+0530", - 1691, - 1691, - 1690.9, - 1690.9, - 160 - ], - [ - "2017-12-15T10:50:00+0530", - 1691, - 1691.7, - 1690.05, - 1690.05, - 143 - ], - [ - "2017-12-15T10:51:00+0530", - 1690.05, - 1692.65, - 1690.05, - 1691, - 400 - ], - [ - "2017-12-15T10:52:00+0530", - 1691, - 1694, - 1691, - 1694, - 1451 - ], - [ - "2017-12-15T10:53:00+0530", - 1694.2, - 1696.9, - 1694.2, - 1695.85, - 1276 - ], - [ - "2017-12-15T10:54:00+0530", - 1695.85, - 1696, - 1695.2, - 1696, - 623 - ], - [ - "2017-12-15T10:55:00+0530", - 1696, - 1697.4, - 1696, - 1697, - 849 - ], - [ - "2017-12-15T10:56:00+0530", - 1697, - 1699.5, - 1697, - 1699.5, - 1021 - ], - [ - "2017-12-15T10:57:00+0530", - 1699.5, - 1699.5, - 1698.2, - 1698.2, - 649 - ], - [ - "2017-12-15T10:58:00+0530", - 1698.2, - 1699, - 1698, - 1699, - 388 - ], - [ - "2017-12-15T10:59:00+0530", - 1699, - 1699.5, - 1699, - 1699, - 549 - ], - [ - "2017-12-15T11:00:00+0530", - 1699, - 1699.2, - 1698.05, - 1698.05, - 474 - ], - [ - "2017-12-15T11:01:00+0530", - 1698.05, - 1698.05, - 1697.25, - 1697.25, - 18 - ], - [ - "2017-12-15T11:02:00+0530", - 1697.25, - 1698.75, - 1697.25, - 1698, - 72 - ], - [ - "2017-12-15T11:03:00+0530", - 1698, - 1698, - 1697.4, - 1697.45, - 74 - ], - [ - "2017-12-15T11:04:00+0530", - 1697.45, - 1697.45, - 1697.05, - 1697.45, - 253 - ], - [ - "2017-12-15T11:05:00+0530", - 1697.45, - 1698, - 1697, - 1697, - 290 - ], - [ - "2017-12-15T11:06:00+0530", - 1697, - 1697, - 1697, - 1697, - 0 - ], - [ - "2017-12-15T11:07:00+0530", - 1697, - 1698, - 1697, - 1698, - 69 - ], - [ - "2017-12-15T11:08:00+0530", - 1698, - 1698, - 1697.9, - 1698, - 66 - ], - [ - "2017-12-15T11:09:00+0530", - 1698, - 1698.5, - 1697.1, - 1697.7, - 575 - ], - [ - "2017-12-15T11:10:00+0530", - 1697.7, - 1698.5, - 1697.7, - 1698.5, - 151 - ], - [ - "2017-12-15T11:11:00+0530", - 1698.5, - 1698.7, - 1698, - 1698, - 184 - ], - [ - "2017-12-15T11:12:00+0530", - 1698.35, - 1698.35, - 1698, - 1698, - 87 - ], - [ - "2017-12-15T11:13:00+0530", - 1698, - 1698, - 1697.3, - 1697.3, - 3 - ], - [ - "2017-12-15T11:14:00+0530", - 1697.3, - 1698, - 1696.95, - 1696.95, - 573 - ], - [ - "2017-12-15T11:15:00+0530", - 1696.95, - 1697.95, - 1696.75, - 1696.85, - 40 - ], - [ - "2017-12-15T11:16:00+0530", - 1696.85, - 1696.85, - 1696.8, - 1696.8, - 25 - ], - [ - "2017-12-15T11:17:00+0530", - 1696.8, - 1696.8, - 1696, - 1696.15, - 47 - ], - [ - "2017-12-15T11:18:00+0530", - 1696.15, - 1696.85, - 1696.15, - 1696.8, - 23 - ], - [ - "2017-12-15T11:19:00+0530", - 1696.8, - 1696.8, - 1696.45, - 1696.45, - 30 - ], - [ - "2017-12-15T11:20:00+0530", - 1696.45, - 1696.45, - 1696, - 1696.15, - 214 - ], - [ - "2017-12-15T11:21:00+0530", - 1696.15, - 1696.15, - 1696, - 1696, - 130 - ], - [ - "2017-12-15T11:22:00+0530", - 1696.15, - 1696.15, - 1696, - 1696, - 117 - ], - [ - "2017-12-15T11:23:00+0530", - 1696.15, - 1699.1, - 1696, - 1698.6, - 1268 - ], - [ - "2017-12-15T11:24:00+0530", - 1698.6, - 1699.6, - 1698.6, - 1699.6, - 1545 - ], - [ - "2017-12-15T11:25:00+0530", - 1699.6, - 1699.9, - 1699.25, - 1699.9, - 532 - ], - [ - "2017-12-15T11:26:00+0530", - 1699.5, - 1699.5, - 1699.2, - 1699.2, - 276 - ], - [ - "2017-12-15T11:27:00+0530", - 1699.2, - 1699.5, - 1698.95, - 1698.95, - 427 - ], - [ - "2017-12-15T11:28:00+0530", - 1698.95, - 1698.95, - 1697.95, - 1697.95, - 91 - ], - [ - "2017-12-15T11:29:00+0530", - 1697, - 1697, - 1697, - 1697, - 46 - ], - [ - "2017-12-15T11:30:00+0530", - 1697, - 1698.4, - 1697, - 1698.4, - 1383 - ], - [ - "2017-12-15T11:31:00+0530", - 1698.4, - 1698.4, - 1697.75, - 1697.75, - 56 - ], - [ - "2017-12-15T11:32:00+0530", - 1697.75, - 1697.75, - 1697, - 1697.75, - 507 - ], - [ - "2017-12-15T11:33:00+0530", - 1697.75, - 1697.75, - 1697.45, - 1697.45, - 16 - ], - [ - "2017-12-15T11:34:00+0530", - 1697.45, - 1698.15, - 1696.9, - 1698.15, - 120 - ], - [ - "2017-12-15T11:35:00+0530", - 1698.15, - 1698.15, - 1698.15, - 1698.15, - 32 - ], - [ - "2017-12-15T11:36:00+0530", - 1698.15, - 1698.15, - 1697.45, - 1697.45, - 1 - ], - [ - "2017-12-15T11:37:00+0530", - 1697.45, - 1698, - 1695.55, - 1695.55, - 524 - ], - [ - "2017-12-15T11:38:00+0530", - 1695.55, - 1697.65, - 1695.55, - 1697.65, - 11 - ], - [ - "2017-12-15T11:39:00+0530", - 1697.65, - 1697.65, - 1696.5, - 1696.5, - 51 - ], - [ - "2017-12-15T11:40:00+0530", - 1696.5, - 1696.5, - 1696.5, - 1696.5, - 0 - ], - [ - "2017-12-15T11:41:00+0530", - 1696.5, - 1696.8, - 1696.5, - 1696.8, - 20 - ], - [ - "2017-12-15T11:42:00+0530", - 1696.8, - 1696.8, - 1696.8, - 1696.8, - 4 - ], - [ - "2017-12-15T11:43:00+0530", - 1696.8, - 1698, - 1696.8, - 1697.95, - 245 - ], - [ - "2017-12-15T11:44:00+0530", - 1697.95, - 1697.95, - 1697, - 1697.15, - 13 - ], - [ - "2017-12-15T11:45:00+0530", - 1697.15, - 1697.95, - 1697.15, - 1697.25, - 174 - ], - [ - "2017-12-15T11:46:00+0530", - 1697.25, - 1698, - 1696.7, - 1698, - 122 - ], - [ - "2017-12-15T11:47:00+0530", - 1698, - 1698, - 1698, - 1698, - 210 - ], - [ - "2017-12-15T11:48:00+0530", - 1698, - 1698, - 1697.4, - 1697.4, - 21 - ], - [ - "2017-12-15T11:49:00+0530", - 1697.4, - 1698, - 1697.4, - 1698, - 28 - ], - [ - "2017-12-15T11:50:00+0530", - 1698, - 1698.4, - 1698, - 1698, - 172 - ], - [ - "2017-12-15T11:51:00+0530", - 1698, - 1698, - 1697.8, - 1698, - 100 - ], - [ - "2017-12-15T11:52:00+0530", - 1698, - 1698, - 1698, - 1698, - 0 - ], - [ - "2017-12-15T11:53:00+0530", - 1698, - 1698, - 1697.8, - 1697.8, - 15 - ], - [ - "2017-12-15T11:54:00+0530", - 1697.8, - 1698.3, - 1696.8, - 1698.25, - 70 - ], - [ - "2017-12-15T11:55:00+0530", - 1698.25, - 1698.25, - 1695.5, - 1695.5, - 1123 - ], - [ - "2017-12-15T11:56:00+0530", - 1695.1, - 1698.2, - 1694.15, - 1698.05, - 549 - ], - [ - "2017-12-15T11:57:00+0530", - 1698.15, - 1698.3, - 1694.65, - 1695, - 475 - ], - [ - "2017-12-15T11:58:00+0530", - 1695, - 1695.5, - 1694.35, - 1695, - 145 - ], - [ - "2017-12-15T11:59:00+0530", - 1695.5, - 1695.75, - 1695, - 1695.75, - 140 - ], - [ - "2017-12-15T12:00:00+0530", - 1695.75, - 1696.7, - 1695.7, - 1696.5, - 59 - ], - [ - "2017-12-15T12:01:00+0530", - 1696.5, - 1696.95, - 1696.45, - 1696.55, - 96 - ], - [ - "2017-12-15T12:02:00+0530", - 1696.55, - 1697.15, - 1695.5, - 1696, - 235 - ], - [ - "2017-12-15T12:03:00+0530", - 1696, - 1696, - 1695.8, - 1695.8, - 319 - ], - [ - "2017-12-15T12:04:00+0530", - 1695.8, - 1695.8, - 1695.05, - 1695.65, - 36 - ], - [ - "2017-12-15T12:05:00+0530", - 1695.65, - 1695.65, - 1695.1, - 1695.1, - 4 - ], - [ - "2017-12-15T12:06:00+0530", - 1695.1, - 1695.1, - 1694.05, - 1694.35, - 241 - ], - [ - "2017-12-15T12:07:00+0530", - 1694.35, - 1694.95, - 1694.35, - 1694.7, - 388 - ], - [ - "2017-12-15T12:08:00+0530", - 1694.7, - 1695, - 1694.7, - 1694.75, - 54 - ], - [ - "2017-12-15T12:09:00+0530", - 1695.6, - 1695.6, - 1694.2, - 1694.2, - 100 - ], - [ - "2017-12-15T12:10:00+0530", - 1694.2, - 1694.2, - 1694.05, - 1694.15, - 16 - ], - [ - "2017-12-15T12:11:00+0530", - 1694.15, - 1694.2, - 1694, - 1694, - 67 - ], - [ - "2017-12-15T12:12:00+0530", - 1694, - 1694.7, - 1694, - 1694.25, - 150 - ], - [ - "2017-12-15T12:13:00+0530", - 1694.3, - 1694.7, - 1694, - 1694.1, - 20 - ], - [ - "2017-12-15T12:14:00+0530", - 1694.1, - 1694.7, - 1694.1, - 1694.7, - 104 - ], - [ - "2017-12-15T12:15:00+0530", - 1694.15, - 1694.65, - 1694.05, - 1694.05, - 35 - ], - [ - "2017-12-15T12:16:00+0530", - 1694.05, - 1694.05, - 1694.05, - 1694.05, - 0 - ], - [ - "2017-12-15T12:17:00+0530", - 1694.05, - 1694.05, - 1693.55, - 1693.55, - 200 - ], - [ - "2017-12-15T12:18:00+0530", - 1693.55, - 1694.1, - 1693.55, - 1694.1, - 139 - ], - [ - "2017-12-15T12:19:00+0530", - 1694.1, - 1694.35, - 1694.1, - 1694.35, - 4 - ], - [ - "2017-12-15T12:20:00+0530", - 1694.35, - 1694.7, - 1694.35, - 1694.35, - 112 - ], - [ - "2017-12-15T12:21:00+0530", - 1694.35, - 1694.65, - 1694.35, - 1694.65, - 74 - ], - [ - "2017-12-15T12:22:00+0530", - 1694.65, - 1694.65, - 1694.65, - 1694.65, - 7 - ], - [ - "2017-12-15T12:23:00+0530", - 1694.65, - 1694.95, - 1694.65, - 1694.7, - 117 - ], - [ - "2017-12-15T12:24:00+0530", - 1694.7, - 1695, - 1694.7, - 1695, - 6 - ], - [ - "2017-12-15T12:25:00+0530", - 1695, - 1696, - 1695, - 1695.65, - 185 - ], - [ - "2017-12-15T12:26:00+0530", - 1695.65, - 1695.65, - 1694.7, - 1694.7, - 200 - ], - [ - "2017-12-15T12:27:00+0530", - 1695.5, - 1695.5, - 1695.4, - 1695.4, - 3 - ], - [ - "2017-12-15T12:28:00+0530", - 1695.4, - 1695.75, - 1695.4, - 1695.75, - 5 - ], - [ - "2017-12-15T12:29:00+0530", - 1695.75, - 1697.05, - 1695.75, - 1697.05, - 171 - ], - [ - "2017-12-15T12:30:00+0530", - 1698, - 1700, - 1698, - 1700, - 2236 - ], - [ - "2017-12-15T12:31:00+0530", - 1700, - 1700, - 1699.5, - 1699.5, - 202 - ], - [ - "2017-12-15T12:32:00+0530", - 1699.5, - 1699.5, - 1699, - 1699, - 486 - ], - [ - "2017-12-15T12:33:00+0530", - 1699, - 1699, - 1697.9, - 1699, - 127 - ], - [ - "2017-12-15T12:34:00+0530", - 1699, - 1699, - 1698.55, - 1698.6, - 208 - ], - [ - "2017-12-15T12:35:00+0530", - 1698.6, - 1698.9, - 1698.6, - 1698.6, - 33 - ], - [ - "2017-12-15T12:36:00+0530", - 1698.6, - 1699, - 1698.6, - 1698.75, - 107 - ], - [ - "2017-12-15T12:37:00+0530", - 1698.75, - 1698.75, - 1697.55, - 1698.6, - 502 - ], - [ - "2017-12-15T12:38:00+0530", - 1698.6, - 1698.65, - 1698.6, - 1698.65, - 2 - ], - [ - "2017-12-15T12:39:00+0530", - 1698.65, - 1698.75, - 1698.65, - 1698.75, - 89 - ], - [ - "2017-12-15T12:40:00+0530", - 1698.7, - 1698.7, - 1698.7, - 1698.7, - 120 - ], - [ - "2017-12-15T12:41:00+0530", - 1698.7, - 1698.7, - 1698.3, - 1698.3, - 53 - ], - [ - "2017-12-15T12:42:00+0530", - 1698.3, - 1698.3, - 1696.8, - 1697.3, - 276 - ], - [ - "2017-12-15T12:43:00+0530", - 1697.3, - 1697.3, - 1696.95, - 1696.95, - 5 - ], - [ - "2017-12-15T12:44:00+0530", - 1696.95, - 1696.95, - 1696.95, - 1696.95, - 0 - ], - [ - "2017-12-15T12:45:00+0530", - 1696.95, - 1696.95, - 1696.7, - 1696.7, - 150 - ], - [ - "2017-12-15T12:46:00+0530", - 1696.7, - 1696.7, - 1695, - 1696.05, - 246 - ], - [ - "2017-12-15T12:47:00+0530", - 1696.05, - 1696.05, - 1695.9, - 1695.9, - 28 - ], - [ - "2017-12-15T12:48:00+0530", - 1695.9, - 1696.4, - 1695.5, - 1695.55, - 118 - ], - [ - "2017-12-15T12:49:00+0530", - 1695.55, - 1695.55, - 1695, - 1695, - 502 - ], - [ - "2017-12-15T12:50:00+0530", - 1695, - 1696.1, - 1695, - 1695.55, - 56 - ], - [ - "2017-12-15T12:51:00+0530", - 1695.55, - 1696.1, - 1695.55, - 1695.65, - 122 - ], - [ - "2017-12-15T12:52:00+0530", - 1695.65, - 1696.05, - 1695.65, - 1696.05, - 87 - ], - [ - "2017-12-15T12:53:00+0530", - 1696.05, - 1696.4, - 1696.05, - 1696.4, - 2 - ], - [ - "2017-12-15T12:54:00+0530", - 1696.4, - 1696.4, - 1696.15, - 1696.4, - 58 - ], - [ - "2017-12-15T12:55:00+0530", - 1696.3, - 1696.4, - 1694.7, - 1695.5, - 518 - ], - [ - "2017-12-15T12:56:00+0530", - 1695.5, - 1697.05, - 1695.5, - 1697, - 299 - ], - [ - "2017-12-15T12:57:00+0530", - 1697, - 1698, - 1697, - 1697.6, - 95 - ], - [ - "2017-12-15T12:58:00+0530", - 1697.6, - 1697.95, - 1697, - 1697, - 248 - ], - [ - "2017-12-15T12:59:00+0530", - 1697, - 1697.55, - 1697, - 1697.55, - 2 - ], - [ - "2017-12-15T13:00:00+0530", - 1697.8, - 1697.9, - 1697.55, - 1697.55, - 82 - ], - [ - "2017-12-15T13:01:00+0530", - 1697.55, - 1697.55, - 1696.05, - 1696.05, - 489 - ], - [ - "2017-12-15T13:02:00+0530", - 1696.05, - 1697.3, - 1695.5, - 1696.95, - 163 - ], - [ - "2017-12-15T13:03:00+0530", - 1696.95, - 1697, - 1695.95, - 1696, - 126 - ], - [ - "2017-12-15T13:04:00+0530", - 1696, - 1696, - 1694.85, - 1694.9, - 263 - ], - [ - "2017-12-15T13:05:00+0530", - 1694.9, - 1695.7, - 1694.9, - 1695.7, - 7 - ], - [ - "2017-12-15T13:06:00+0530", - 1695.7, - 1698, - 1694.15, - 1697.05, - 1335 - ], - [ - "2017-12-15T13:07:00+0530", - 1697.05, - 1697.4, - 1697.05, - 1697.2, - 60 - ], - [ - "2017-12-15T13:08:00+0530", - 1697.2, - 1697.2, - 1696.85, - 1696.85, - 19 - ], - [ - "2017-12-15T13:09:00+0530", - 1696.85, - 1697.4, - 1696.85, - 1697.4, - 87 - ], - [ - "2017-12-15T13:10:00+0530", - 1697.4, - 1697.5, - 1697.4, - 1697.5, - 251 - ], - [ - "2017-12-15T13:11:00+0530", - 1697.5, - 1697.95, - 1696.85, - 1697.95, - 116 - ], - [ - "2017-12-15T13:12:00+0530", - 1697.95, - 1697.95, - 1697.55, - 1697.6, - 114 - ], - [ - "2017-12-15T13:13:00+0530", - 1697.6, - 1697.95, - 1697.25, - 1697.25, - 65 - ], - [ - "2017-12-15T13:14:00+0530", - 1697.25, - 1697.9, - 1697.25, - 1697.9, - 14 - ], - [ - "2017-12-15T13:15:00+0530", - 1697.9, - 1697.9, - 1697.25, - 1697.25, - 109 - ], - [ - "2017-12-15T13:16:00+0530", - 1697.25, - 1697.25, - 1697.25, - 1697.25, - 0 - ], - [ - "2017-12-15T13:17:00+0530", - 1697.25, - 1697.25, - 1695.9, - 1695.9, - 92 - ], - [ - "2017-12-15T13:18:00+0530", - 1695.9, - 1695.9, - 1694, - 1694, - 252 - ], - [ - "2017-12-15T13:19:00+0530", - 1693.6, - 1693.95, - 1693.6, - 1693.75, - 115 - ], - [ - "2017-12-15T13:20:00+0530", - 1693.75, - 1694.9, - 1693.35, - 1694, - 441 - ], - [ - "2017-12-15T13:21:00+0530", - 1694, - 1694, - 1691.1, - 1691.1, - 1088 - ], - [ - "2017-12-15T13:22:00+0530", - 1691.1, - 1695.95, - 1691.1, - 1695.65, - 215 - ], - [ - "2017-12-15T13:23:00+0530", - 1695.65, - 1695.65, - 1694.85, - 1694.85, - 153 - ], - [ - "2017-12-15T13:24:00+0530", - 1694.85, - 1694.85, - 1694.85, - 1694.85, - 0 - ], - [ - "2017-12-15T13:25:00+0530", - 1694.85, - 1696, - 1694.8, - 1696, - 233 - ], - [ - "2017-12-15T13:26:00+0530", - 1696, - 1696, - 1694.5, - 1694.5, - 132 - ], - [ - "2017-12-15T13:27:00+0530", - 1694.5, - 1694.85, - 1694, - 1694.85, - 132 - ], - [ - "2017-12-15T13:28:00+0530", - 1694.85, - 1694.85, - 1694.35, - 1694.75, - 41 - ], - [ - "2017-12-15T13:29:00+0530", - 1695, - 1695, - 1694.75, - 1694.75, - 68 - ], - [ - "2017-12-15T13:30:00+0530", - 1694.75, - 1694.75, - 1692.1, - 1692.1, - 214 - ], - [ - "2017-12-15T13:31:00+0530", - 1692.1, - 1693.35, - 1692, - 1693, - 203 - ], - [ - "2017-12-15T13:32:00+0530", - 1693, - 1694.6, - 1693, - 1694.1, - 87 - ], - [ - "2017-12-15T13:33:00+0530", - 1694.1, - 1694.95, - 1693.6, - 1694.95, - 196 - ], - [ - "2017-12-15T13:34:00+0530", - 1694.95, - 1695.4, - 1693.85, - 1693.85, - 75 - ], - [ - "2017-12-15T13:35:00+0530", - 1693.85, - 1694.4, - 1693.85, - 1694.4, - 10 - ], - [ - "2017-12-15T13:36:00+0530", - 1694.4, - 1696, - 1694.4, - 1696, - 100 - ], - [ - "2017-12-15T13:37:00+0530", - 1696, - 1696, - 1695.2, - 1696, - 300 - ], - [ - "2017-12-15T13:38:00+0530", - 1696, - 1696, - 1695.5, - 1696, - 141 - ], - [ - "2017-12-15T13:39:00+0530", - 1696, - 1696, - 1694, - 1694.8, - 187 - ], - [ - "2017-12-15T13:40:00+0530", - 1694.8, - 1694.8, - 1694, - 1694.15, - 109 - ], - [ - "2017-12-15T13:41:00+0530", - 1694.15, - 1694.15, - 1694.15, - 1694.15, - 0 - ], - [ - "2017-12-15T13:42:00+0530", - 1694.15, - 1695.1, - 1694, - 1694, - 133 - ], - [ - "2017-12-15T13:43:00+0530", - 1694, - 1694, - 1693.65, - 1693.65, - 3 - ], - [ - "2017-12-15T13:44:00+0530", - 1693.65, - 1694.05, - 1693.65, - 1694.05, - 50 - ], - [ - "2017-12-15T13:45:00+0530", - 1694.05, - 1694.25, - 1694, - 1694, - 56 - ], - [ - "2017-12-15T13:46:00+0530", - 1694, - 1694.25, - 1693.95, - 1693.95, - 28 - ], - [ - "2017-12-15T13:47:00+0530", - 1694.25, - 1694.7, - 1693.6, - 1694.7, - 277 - ], - [ - "2017-12-15T13:48:00+0530", - 1694.7, - 1694.7, - 1694.7, - 1694.7, - 22 - ], - [ - "2017-12-15T13:49:00+0530", - 1694.7, - 1695.15, - 1694.7, - 1695.15, - 49 - ], - [ - "2017-12-15T13:50:00+0530", - 1694.9, - 1695.15, - 1694.9, - 1695.15, - 80 - ], - [ - "2017-12-15T13:51:00+0530", - 1695.15, - 1695.75, - 1695.15, - 1695.5, - 84 - ], - [ - "2017-12-15T13:52:00+0530", - 1695.5, - 1695.55, - 1695.5, - 1695.55, - 56 - ], - [ - "2017-12-15T13:53:00+0530", - 1695.55, - 1695.9, - 1695.55, - 1695.85, - 240 - ], - [ - "2017-12-15T13:54:00+0530", - 1695.85, - 1696.35, - 1695.6, - 1696.35, - 117 - ], - [ - "2017-12-15T13:55:00+0530", - 1696.35, - 1697.8, - 1696.35, - 1697.45, - 233 - ], - [ - "2017-12-15T13:56:00+0530", - 1697.45, - 1697.45, - 1696.65, - 1696.95, - 86 - ], - [ - "2017-12-15T13:57:00+0530", - 1696.95, - 1696.95, - 1696.55, - 1696.55, - 23 - ], - [ - "2017-12-15T13:58:00+0530", - 1696.55, - 1698, - 1696.55, - 1697.95, - 363 - ], - [ - "2017-12-15T13:59:00+0530", - 1697.95, - 1698, - 1697.05, - 1698, - 416 - ], - [ - "2017-12-15T14:00:00+0530", - 1698, - 1698.5, - 1697.3, - 1697.6, - 101 - ], - [ - "2017-12-15T14:01:00+0530", - 1697.6, - 1697.6, - 1696.85, - 1696.85, - 37 - ], - [ - "2017-12-15T14:02:00+0530", - 1696.85, - 1697.95, - 1696.65, - 1696.9, - 110 - ], - [ - "2017-12-15T14:03:00+0530", - 1696.9, - 1697.6, - 1696.65, - 1697.4, - 39 - ], - [ - "2017-12-15T14:04:00+0530", - 1697.4, - 1697.9, - 1697, - 1697.45, - 42 - ], - [ - "2017-12-15T14:05:00+0530", - 1697.45, - 1697.45, - 1695, - 1695.55, - 560 - ], - [ - "2017-12-15T14:06:00+0530", - 1695.55, - 1696.25, - 1695.55, - 1695.7, - 68 - ], - [ - "2017-12-15T14:07:00+0530", - 1695.7, - 1697, - 1695.6, - 1696.85, - 171 - ], - [ - "2017-12-15T14:08:00+0530", - 1696.85, - 1697.2, - 1696.85, - 1696.85, - 81 - ], - [ - "2017-12-15T14:09:00+0530", - 1696.85, - 1696.85, - 1696.55, - 1696.8, - 14 - ], - [ - "2017-12-15T14:10:00+0530", - 1696.8, - 1696.8, - 1696.1, - 1696.1, - 46 - ], - [ - "2017-12-15T14:11:00+0530", - 1696.1, - 1697.1, - 1696.1, - 1696.65, - 71 - ], - [ - "2017-12-15T14:12:00+0530", - 1696.65, - 1697.5, - 1695.55, - 1695.55, - 219 - ], - [ - "2017-12-15T14:13:00+0530", - 1695.55, - 1696.6, - 1695.55, - 1696.6, - 41 - ], - [ - "2017-12-15T14:14:00+0530", - 1696.6, - 1696.6, - 1695.55, - 1695.55, - 40 - ], - [ - "2017-12-15T14:15:00+0530", - 1695.55, - 1696.4, - 1695.55, - 1696.4, - 10 - ], - [ - "2017-12-15T14:16:00+0530", - 1696.9, - 1697, - 1696.9, - 1696.9, - 21 - ], - [ - "2017-12-15T14:17:00+0530", - 1696.9, - 1696.9, - 1695.7, - 1695.7, - 84 - ], - [ - "2017-12-15T14:18:00+0530", - 1695.55, - 1695.55, - 1695.55, - 1695.55, - 136 - ], - [ - "2017-12-15T14:19:00+0530", - 1695.55, - 1695.55, - 1695, - 1695, - 77 - ], - [ - "2017-12-15T14:20:00+0530", - 1695, - 1695.55, - 1695, - 1695.1, - 38 - ], - [ - "2017-12-15T14:21:00+0530", - 1695.1, - 1695.1, - 1695.1, - 1695.1, - 0 - ], - [ - "2017-12-15T14:22:00+0530", - 1695.1, - 1695.55, - 1695.1, - 1695.2, - 51 - ], - [ - "2017-12-15T14:23:00+0530", - 1695.2, - 1696.9, - 1695.2, - 1696.65, - 129 - ], - [ - "2017-12-15T14:24:00+0530", - 1696.65, - 1697, - 1695.55, - 1695.55, - 110 - ], - [ - "2017-12-15T14:25:00+0530", - 1695.55, - 1696.45, - 1695.3, - 1696.45, - 38 - ], - [ - "2017-12-15T14:26:00+0530", - 1696.45, - 1696.45, - 1695.25, - 1695.25, - 141 - ], - [ - "2017-12-15T14:27:00+0530", - 1695.85, - 1696.6, - 1695.85, - 1696.55, - 57 - ], - [ - "2017-12-15T14:28:00+0530", - 1696.55, - 1696.6, - 1695.25, - 1696.4, - 157 - ], - [ - "2017-12-15T14:29:00+0530", - 1696.1, - 1696.1, - 1696.1, - 1696.1, - 25 - ], - [ - "2017-12-15T14:30:00+0530", - 1696.1, - 1696.1, - 1695.65, - 1695.65, - 21 - ], - [ - "2017-12-15T14:31:00+0530", - 1695.65, - 1695.65, - 1695.5, - 1695.5, - 121 - ], - [ - "2017-12-15T14:32:00+0530", - 1695.5, - 1695.7, - 1695.5, - 1695.7, - 9 - ], - [ - "2017-12-15T14:33:00+0530", - 1695.7, - 1696.1, - 1695.7, - 1696.1, - 21 - ], - [ - "2017-12-15T14:34:00+0530", - 1696.1, - 1696.4, - 1696.05, - 1696.2, - 20 - ], - [ - "2017-12-15T14:35:00+0530", - 1696.2, - 1697.4, - 1696.05, - 1696.05, - 418 - ], - [ - "2017-12-15T14:36:00+0530", - 1696.05, - 1696.8, - 1696.05, - 1696.8, - 33 - ], - [ - "2017-12-15T14:37:00+0530", - 1696.8, - 1696.8, - 1696.65, - 1696.65, - 67 - ], - [ - "2017-12-15T14:38:00+0530", - 1696.65, - 1696.8, - 1696.65, - 1696.8, - 10 - ], - [ - "2017-12-15T14:39:00+0530", - 1696.8, - 1697, - 1696.8, - 1696.9, - 146 - ], - [ - "2017-12-15T14:40:00+0530", - 1696.9, - 1697, - 1696.9, - 1697, - 12 - ], - [ - "2017-12-15T14:41:00+0530", - 1697, - 1697.9, - 1697, - 1697.4, - 226 - ], - [ - "2017-12-15T14:42:00+0530", - 1697.4, - 1697.8, - 1697.4, - 1697.8, - 40 - ], - [ - "2017-12-15T14:43:00+0530", - 1697.8, - 1697.8, - 1697.55, - 1697.55, - 88 - ], - [ - "2017-12-15T14:44:00+0530", - 1697.55, - 1697.8, - 1695, - 1695, - 672 - ], - [ - "2017-12-15T14:45:00+0530", - 1695, - 1696.6, - 1695, - 1696, - 114 - ], - [ - "2017-12-15T14:46:00+0530", - 1696, - 1696, - 1695, - 1695, - 271 - ], - [ - "2017-12-15T14:47:00+0530", - 1695, - 1695, - 1694.1, - 1694.1, - 143 - ], - [ - "2017-12-15T14:48:00+0530", - 1694.1, - 1695.7, - 1693, - 1693, - 638 - ], - [ - "2017-12-15T14:49:00+0530", - 1693, - 1694.7, - 1693, - 1694.05, - 52 - ], - [ - "2017-12-15T14:50:00+0530", - 1694.05, - 1694.55, - 1693.8, - 1693.8, - 69 - ], - [ - "2017-12-15T14:51:00+0530", - 1693.8, - 1694.85, - 1693.7, - 1694.4, - 556 - ], - [ - "2017-12-15T14:52:00+0530", - 1694.4, - 1694.6, - 1693.85, - 1693.85, - 41 - ], - [ - "2017-12-15T14:53:00+0530", - 1693.85, - 1695.1, - 1693.35, - 1695.1, - 182 - ], - [ - "2017-12-15T14:54:00+0530", - 1695.1, - 1695.25, - 1694.3, - 1694.3, - 200 - ], - [ - "2017-12-15T14:55:00+0530", - 1694.3, - 1694.5, - 1693.35, - 1693.4, - 480 - ], - [ - "2017-12-15T14:56:00+0530", - 1693.35, - 1694.9, - 1693.35, - 1694.9, - 210 - ], - [ - "2017-12-15T14:57:00+0530", - 1694.9, - 1694.9, - 1693.7, - 1694.5, - 207 - ], - [ - "2017-12-15T14:58:00+0530", - 1694.5, - 1694.5, - 1693.05, - 1694, - 66 - ], - [ - "2017-12-15T14:59:00+0530", - 1695, - 1695, - 1693, - 1694.55, - 1401 - ], - [ - "2017-12-15T15:00:00+0530", - 1694.55, - 1697.35, - 1693.55, - 1697.35, - 2393 - ], - [ - "2017-12-15T15:01:00+0530", - 1697.35, - 1697.8, - 1697, - 1697, - 1620 - ], - [ - "2017-12-15T15:02:00+0530", - 1696.65, - 1697, - 1696.6, - 1697, - 1764 - ], - [ - "2017-12-15T15:03:00+0530", - 1696.95, - 1697, - 1696.8, - 1696.85, - 2016 - ], - [ - "2017-12-15T15:04:00+0530", - 1696.85, - 1697.75, - 1696.8, - 1697.7, - 1346 - ], - [ - "2017-12-15T15:05:00+0530", - 1697.7, - 1698, - 1697.6, - 1698, - 2008 - ], - [ - "2017-12-15T15:06:00+0530", - 1697.9, - 1698, - 1696.55, - 1697.75, - 2013 - ], - [ - "2017-12-15T15:07:00+0530", - 1697.5, - 1697.6, - 1694, - 1696.05, - 2588 - ], - [ - "2017-12-15T15:08:00+0530", - 1696.15, - 1696.15, - 1694.55, - 1696, - 1980 - ], - [ - "2017-12-15T15:09:00+0530", - 1695.9, - 1696, - 1695.35, - 1695.6, - 2140 - ], - [ - "2017-12-15T15:10:00+0530", - 1695.75, - 1696.15, - 1695, - 1695.9, - 2086 - ], - [ - "2017-12-15T15:11:00+0530", - 1695.5, - 1695.5, - 1694.2, - 1694.7, - 2329 - ], - [ - "2017-12-15T15:12:00+0530", - 1694.75, - 1694.75, - 1694, - 1694, - 2484 - ], - [ - "2017-12-15T15:13:00+0530", - 1693.95, - 1694.5, - 1693, - 1694.15, - 2920 - ], - [ - "2017-12-15T15:14:00+0530", - 1693.65, - 1695.75, - 1693.65, - 1695.25, - 2514 - ], - [ - "2017-12-15T15:15:00+0530", - 1694.55, - 1695.65, - 1694, - 1695.65, - 1728 - ], - [ - "2017-12-15T15:16:00+0530", - 1694.95, - 1696.1, - 1693.35, - 1695.05, - 3650 - ], - [ - "2017-12-15T15:17:00+0530", - 1695.05, - 1695.65, - 1694.05, - 1694.65, - 1736 - ], - [ - "2017-12-15T15:18:00+0530", - 1694.65, - 1695.9, - 1694.65, - 1695.7, - 1590 - ], - [ - "2017-12-15T15:19:00+0530", - 1695.7, - 1698.3, - 1695.6, - 1698.3, - 3571 - ], - [ - "2017-12-15T15:20:00+0530", - 1698, - 1698.3, - 1697.85, - 1698, - 2450 - ], - [ - "2017-12-15T15:21:00+0530", - 1697.95, - 1698.6, - 1696.95, - 1697.5, - 3352 - ], - [ - "2017-12-15T15:22:00+0530", - 1698, - 1699, - 1696.8, - 1699, - 3271 - ], - [ - "2017-12-15T15:23:00+0530", - 1699, - 1699.55, - 1696.8, - 1698.2, - 3428 - ], - [ - "2017-12-15T15:24:00+0530", - 1698.2, - 1699, - 1697.25, - 1698.65, - 2078 - ], - [ - "2017-12-15T15:25:00+0530", - 1698.8, - 1699.7, - 1697.9, - 1697.9, - 3730 - ], - [ - "2017-12-15T15:26:00+0530", - 1697.2, - 1698, - 1696.5, - 1697.75, - 1957 - ], - [ - "2017-12-15T15:27:00+0530", - 1697.75, - 1698, - 1697, - 1697, - 1770 - ], - [ - "2017-12-15T15:28:00+0530", - 1697, - 1697.95, - 1694.2, - 1694.2, - 665 - ], - [ - "2017-12-15T15:29:00+0530", - 1694.2, - 1698.75, - 1694.1, - 1695.75, - 1651 - ], - [ - "2017-12-18T09:15:00+0530", - 1684.4, - 1684.65, - 1663, - 1665.75, - 1746 - ], - [ - "2017-12-18T09:16:00+0530", - 1663.35, - 1671.65, - 1663.35, - 1664, - 1884 - ], - [ - "2017-12-18T09:17:00+0530", - 1667.35, - 1668, - 1665.35, - 1667.4, - 1364 - ], - [ - "2017-12-18T09:18:00+0530", - 1667.4, - 1671.75, - 1663.05, - 1663.15, - 3223 - ], - [ - "2017-12-18T09:19:00+0530", - 1663.15, - 1663.25, - 1655.5, - 1658.85, - 1890 - ], - [ - "2017-12-18T09:20:00+0530", - 1658.85, - 1660, - 1656, - 1659.95, - 1588 - ], - [ - "2017-12-18T09:21:00+0530", - 1659.95, - 1662.3, - 1659.75, - 1662.3, - 3036 - ], - [ - "2017-12-18T09:22:00+0530", - 1662.3, - 1662.5, - 1658.6, - 1658.6, - 413 - ], - [ - "2017-12-18T09:23:00+0530", - 1658.6, - 1661, - 1657.65, - 1661, - 1966 - ], - [ - "2017-12-18T09:24:00+0530", - 1661, - 1664.8, - 1660.7, - 1664.8, - 4355 - ], - [ - "2017-12-18T09:25:00+0530", - 1664.8, - 1667.45, - 1664.5, - 1667.15, - 2350 - ], - [ - "2017-12-18T09:26:00+0530", - 1667.15, - 1667.5, - 1666, - 1667.25, - 971 - ], - [ - "2017-12-18T09:27:00+0530", - 1667.25, - 1670, - 1667.25, - 1667.75, - 3396 - ], - [ - "2017-12-18T09:28:00+0530", - 1666.05, - 1669.35, - 1666.05, - 1668.05, - 749 - ], - [ - "2017-12-18T09:29:00+0530", - 1668.05, - 1672.9, - 1668.05, - 1672.9, - 1967 - ], - [ - "2017-12-18T09:30:00+0530", - 1672, - 1674.25, - 1672, - 1674, - 2870 - ], - [ - "2017-12-18T09:31:00+0530", - 1673.1, - 1674.55, - 1670, - 1674, - 1013 - ], - [ - "2017-12-18T09:32:00+0530", - 1674, - 1674, - 1672.1, - 1672.85, - 1566 - ], - [ - "2017-12-18T09:33:00+0530", - 1672.1, - 1675.95, - 1670, - 1675.95, - 1800 - ], - [ - "2017-12-18T09:34:00+0530", - 1675.95, - 1680.7, - 1675.95, - 1680, - 1845 - ], - [ - "2017-12-18T09:35:00+0530", - 1680, - 1681.5, - 1676.45, - 1681, - 2540 - ], - [ - "2017-12-18T09:36:00+0530", - 1681.75, - 1681.75, - 1675, - 1676.4, - 2101 - ], - [ - "2017-12-18T09:37:00+0530", - 1676.05, - 1677.85, - 1675.65, - 1676.6, - 1366 - ], - [ - "2017-12-18T09:38:00+0530", - 1676.6, - 1677.5, - 1675.4, - 1677.5, - 816 - ], - [ - "2017-12-18T09:39:00+0530", - 1677.5, - 1679, - 1677, - 1678.5, - 2054 - ], - [ - "2017-12-18T09:40:00+0530", - 1678.5, - 1680, - 1678.5, - 1679.4, - 864 - ], - [ - "2017-12-18T09:41:00+0530", - 1679.4, - 1679.4, - 1676.25, - 1678.9, - 1173 - ], - [ - "2017-12-18T09:42:00+0530", - 1678.9, - 1683.8, - 1678.9, - 1683.8, - 4558 - ], - [ - "2017-12-18T09:43:00+0530", - 1683.8, - 1688, - 1683.5, - 1686, - 3945 - ], - [ - "2017-12-18T09:44:00+0530", - 1686, - 1686, - 1682.9, - 1684, - 1117 - ], - [ - "2017-12-18T09:45:00+0530", - 1684, - 1684, - 1679.3, - 1681, - 1378 - ], - [ - "2017-12-18T09:46:00+0530", - 1681, - 1681, - 1679.9, - 1679.9, - 234 - ], - [ - "2017-12-18T09:47:00+0530", - 1679.9, - 1680, - 1676.9, - 1679.6, - 493 - ], - [ - "2017-12-18T09:48:00+0530", - 1679.6, - 1684.45, - 1676.75, - 1684.45, - 3729 - ], - [ - "2017-12-18T09:49:00+0530", - 1684.5, - 1684.5, - 1677.6, - 1680, - 563 - ], - [ - "2017-12-18T09:50:00+0530", - 1680, - 1680, - 1678.15, - 1680, - 267 - ], - [ - "2017-12-18T09:51:00+0530", - 1680, - 1681.5, - 1678.15, - 1680.85, - 939 - ], - [ - "2017-12-18T09:52:00+0530", - 1680.85, - 1684, - 1680.85, - 1684, - 1038 - ], - [ - "2017-12-18T09:53:00+0530", - 1682.5, - 1682.5, - 1681.3, - 1682.4, - 126 - ], - [ - "2017-12-18T09:54:00+0530", - 1682.4, - 1683.9, - 1682.4, - 1683.5, - 582 - ], - [ - "2017-12-18T09:55:00+0530", - 1683.5, - 1684.5, - 1683.1, - 1684.5, - 1360 - ], - [ - "2017-12-18T09:56:00+0530", - 1684.5, - 1684.5, - 1684, - 1684.3, - 733 - ], - [ - "2017-12-18T09:57:00+0530", - 1684.3, - 1686, - 1684.05, - 1686, - 1603 - ], - [ - "2017-12-18T09:58:00+0530", - 1686, - 1686, - 1685, - 1686, - 695 - ], - [ - "2017-12-18T09:59:00+0530", - 1686, - 1688, - 1686, - 1686.9, - 993 - ], - [ - "2017-12-18T10:00:00+0530", - 1686, - 1687, - 1684, - 1684.5, - 612 - ], - [ - "2017-12-18T10:01:00+0530", - 1684.5, - 1687, - 1684.2, - 1686.65, - 973 - ], - [ - "2017-12-18T10:02:00+0530", - 1686.65, - 1686.85, - 1685.3, - 1685.3, - 72 - ], - [ - "2017-12-18T10:03:00+0530", - 1685.3, - 1688, - 1684, - 1687.25, - 1088 - ], - [ - "2017-12-18T10:04:00+0530", - 1687.25, - 1687.65, - 1685.2, - 1687, - 306 - ], - [ - "2017-12-18T10:05:00+0530", - 1687, - 1688.7, - 1687, - 1688.5, - 421 - ], - [ - "2017-12-18T10:06:00+0530", - 1688, - 1692.9, - 1687.65, - 1692.05, - 2482 - ], - [ - "2017-12-18T10:07:00+0530", - 1692.05, - 1697.1, - 1692, - 1697.1, - 2956 - ], - [ - "2017-12-18T10:08:00+0530", - 1697.1, - 1697.25, - 1695.05, - 1696.15, - 1136 - ], - [ - "2017-12-18T10:09:00+0530", - 1696.15, - 1697, - 1695, - 1695.95, - 875 - ], - [ - "2017-12-18T10:10:00+0530", - 1695.95, - 1696, - 1695.1, - 1695.25, - 825 - ], - [ - "2017-12-18T10:11:00+0530", - 1695.25, - 1695.65, - 1694.3, - 1694.6, - 679 - ], - [ - "2017-12-18T10:12:00+0530", - 1695.4, - 1695.4, - 1693.1, - 1694.05, - 337 - ], - [ - "2017-12-18T10:13:00+0530", - 1694.05, - 1695, - 1694.05, - 1694.2, - 528 - ], - [ - "2017-12-18T10:14:00+0530", - 1694.2, - 1694.2, - 1687.4, - 1687.4, - 1054 - ], - [ - "2017-12-18T10:15:00+0530", - 1685.75, - 1691.45, - 1685.75, - 1688.65, - 898 - ], - [ - "2017-12-18T10:16:00+0530", - 1688.65, - 1693, - 1688.65, - 1693, - 686 - ], - [ - "2017-12-18T10:17:00+0530", - 1693, - 1693, - 1691, - 1691, - 499 - ], - [ - "2017-12-18T10:18:00+0530", - 1691, - 1692.5, - 1691, - 1692.5, - 483 - ], - [ - "2017-12-18T10:19:00+0530", - 1692.5, - 1692.6, - 1691.3, - 1692.45, - 557 - ], - [ - "2017-12-18T10:20:00+0530", - 1692.45, - 1692.45, - 1691.25, - 1692, - 218 - ], - [ - "2017-12-18T10:21:00+0530", - 1692, - 1692, - 1688, - 1691.9, - 510 - ], - [ - "2017-12-18T10:22:00+0530", - 1691.9, - 1691.9, - 1689.95, - 1690, - 155 - ], - [ - "2017-12-18T10:23:00+0530", - 1690, - 1690, - 1687.25, - 1688.9, - 422 - ], - [ - "2017-12-18T10:24:00+0530", - 1688.9, - 1689.1, - 1688, - 1688.85, - 263 - ], - [ - "2017-12-18T10:25:00+0530", - 1688.85, - 1689.95, - 1688.15, - 1688.15, - 404 - ], - [ - "2017-12-18T10:26:00+0530", - 1688.15, - 1690, - 1688, - 1688.1, - 642 - ], - [ - "2017-12-18T10:27:00+0530", - 1688.1, - 1689.4, - 1688.1, - 1689, - 167 - ], - [ - "2017-12-18T10:28:00+0530", - 1689, - 1690.7, - 1688.1, - 1688.8, - 642 - ], - [ - "2017-12-18T10:29:00+0530", - 1688.8, - 1690.55, - 1687.25, - 1689, - 339 - ], - [ - "2017-12-18T10:30:00+0530", - 1689, - 1690, - 1689, - 1689.75, - 166 - ], - [ - "2017-12-18T10:31:00+0530", - 1690, - 1692, - 1688.9, - 1688.9, - 1952 - ], - [ - "2017-12-18T10:32:00+0530", - 1688.9, - 1690, - 1688.75, - 1689, - 124 - ], - [ - "2017-12-18T10:33:00+0530", - 1689, - 1689.45, - 1688.4, - 1688.4, - 69 - ], - [ - "2017-12-18T10:34:00+0530", - 1688.4, - 1689, - 1688.35, - 1689, - 192 - ], - [ - "2017-12-18T10:35:00+0530", - 1689, - 1689, - 1687.6, - 1688.55, - 353 - ], - [ - "2017-12-18T10:36:00+0530", - 1688.55, - 1688.55, - 1687, - 1687, - 146 - ], - [ - "2017-12-18T10:37:00+0530", - 1687, - 1688.25, - 1687, - 1687, - 75 - ], - [ - "2017-12-18T10:38:00+0530", - 1687, - 1687.8, - 1687, - 1687.2, - 46 - ], - [ - "2017-12-18T10:39:00+0530", - 1687.2, - 1687.2, - 1683.35, - 1684.05, - 3164 - ], - [ - "2017-12-18T10:40:00+0530", - 1684.05, - 1684.7, - 1683, - 1684.7, - 330 - ], - [ - "2017-12-18T10:41:00+0530", - 1684.7, - 1685, - 1683.6, - 1684.8, - 400 - ], - [ - "2017-12-18T10:42:00+0530", - 1684.8, - 1685, - 1684.7, - 1685, - 237 - ], - [ - "2017-12-18T10:43:00+0530", - 1685, - 1685, - 1684.2, - 1684.2, - 1351 - ], - [ - "2017-12-18T10:44:00+0530", - 1684.2, - 1684.9, - 1684, - 1684.9, - 603 - ], - [ - "2017-12-18T10:45:00+0530", - 1684.9, - 1684.9, - 1684, - 1684.5, - 329 - ], - [ - "2017-12-18T10:46:00+0530", - 1684.5, - 1685.75, - 1684.5, - 1685.65, - 411 - ], - [ - "2017-12-18T10:47:00+0530", - 1685.65, - 1687.6, - 1685.65, - 1687.5, - 763 - ], - [ - "2017-12-18T10:48:00+0530", - 1687.5, - 1690, - 1687.5, - 1690, - 411 - ], - [ - "2017-12-18T10:49:00+0530", - 1690, - 1690, - 1689, - 1689, - 125 - ], - [ - "2017-12-18T10:50:00+0530", - 1689, - 1690, - 1689, - 1690, - 159 - ], - [ - "2017-12-18T10:51:00+0530", - 1690, - 1690.2, - 1690, - 1690.2, - 360 - ], - [ - "2017-12-18T10:52:00+0530", - 1690.2, - 1691, - 1690.2, - 1691, - 286 - ], - [ - "2017-12-18T10:53:00+0530", - 1691, - 1691, - 1690.3, - 1690.7, - 58 - ], - [ - "2017-12-18T10:54:00+0530", - 1690.7, - 1693.1, - 1690.7, - 1693.1, - 846 - ], - [ - "2017-12-18T10:55:00+0530", - 1693.1, - 1693.5, - 1691, - 1692.5, - 796 - ], - [ - "2017-12-18T10:56:00+0530", - 1692.5, - 1693, - 1692.4, - 1692.4, - 153 - ], - [ - "2017-12-18T10:57:00+0530", - 1692.4, - 1692.4, - 1690.25, - 1691, - 438 - ], - [ - "2017-12-18T10:58:00+0530", - 1691, - 1691.45, - 1689.6, - 1690.95, - 261 - ], - [ - "2017-12-18T10:59:00+0530", - 1690.95, - 1691, - 1690.95, - 1691, - 280 - ], - [ - "2017-12-18T11:00:00+0530", - 1691, - 1691.35, - 1689.95, - 1689.95, - 120 - ], - [ - "2017-12-18T11:01:00+0530", - 1689.95, - 1691, - 1689.95, - 1690, - 183 - ], - [ - "2017-12-18T11:02:00+0530", - 1690, - 1691.5, - 1690, - 1691.5, - 106 - ], - [ - "2017-12-18T11:03:00+0530", - 1691.5, - 1692.25, - 1691.4, - 1692.25, - 307 - ], - [ - "2017-12-18T11:04:00+0530", - 1692.25, - 1692.4, - 1692, - 1692.3, - 159 - ], - [ - "2017-12-18T11:05:00+0530", - 1692.3, - 1693, - 1692.1, - 1693, - 515 - ], - [ - "2017-12-18T11:06:00+0530", - 1693.3, - 1694.05, - 1693.05, - 1693.05, - 648 - ], - [ - "2017-12-18T11:07:00+0530", - 1693.05, - 1694.15, - 1693, - 1693.95, - 190 - ], - [ - "2017-12-18T11:08:00+0530", - 1693.95, - 1693.95, - 1692, - 1692, - 525 - ], - [ - "2017-12-18T11:09:00+0530", - 1692, - 1693.3, - 1691.4, - 1693.25, - 646 - ], - [ - "2017-12-18T11:10:00+0530", - 1693.25, - 1693.3, - 1692, - 1692.75, - 103 - ], - [ - "2017-12-18T11:11:00+0530", - 1692.75, - 1692.85, - 1691.4, - 1692.85, - 263 - ], - [ - "2017-12-18T11:12:00+0530", - 1692.85, - 1692.85, - 1691.4, - 1691.4, - 74 - ], - [ - "2017-12-18T11:13:00+0530", - 1691.4, - 1692.5, - 1691.4, - 1692.5, - 344 - ], - [ - "2017-12-18T11:14:00+0530", - 1692.1, - 1692.1, - 1690.1, - 1690.1, - 523 - ], - [ - "2017-12-18T11:15:00+0530", - 1690, - 1691.4, - 1689.95, - 1691.4, - 130 - ], - [ - "2017-12-18T11:16:00+0530", - 1691.4, - 1691.4, - 1690.5, - 1691, - 319 - ], - [ - "2017-12-18T11:17:00+0530", - 1691, - 1691, - 1690.45, - 1690.45, - 207 - ], - [ - "2017-12-18T11:18:00+0530", - 1690.45, - 1690.45, - 1688, - 1688, - 675 - ], - [ - "2017-12-18T11:19:00+0530", - 1688, - 1688, - 1686, - 1686.8, - 412 - ], - [ - "2017-12-18T11:20:00+0530", - 1686.8, - 1686.8, - 1686, - 1686, - 134 - ], - [ - "2017-12-18T11:21:00+0530", - 1686, - 1688.75, - 1686, - 1688.75, - 282 - ], - [ - "2017-12-18T11:22:00+0530", - 1688.75, - 1689.5, - 1686.4, - 1687.35, - 513 - ], - [ - "2017-12-18T11:23:00+0530", - 1687.35, - 1689.4, - 1687.35, - 1689.4, - 63 - ], - [ - "2017-12-18T11:24:00+0530", - 1689.4, - 1689.4, - 1688.9, - 1688.9, - 126 - ], - [ - "2017-12-18T11:25:00+0530", - 1688.9, - 1691, - 1688.9, - 1690, - 325 - ], - [ - "2017-12-18T11:26:00+0530", - 1690, - 1690.8, - 1689.85, - 1690.8, - 86 - ], - [ - "2017-12-18T11:27:00+0530", - 1690.8, - 1690.8, - 1690.5, - 1690.5, - 556 - ], - [ - "2017-12-18T11:28:00+0530", - 1690.5, - 1690.8, - 1690.45, - 1690.8, - 155 - ], - [ - "2017-12-18T11:29:00+0530", - 1691.9, - 1691.9, - 1690.65, - 1691, - 331 - ], - [ - "2017-12-18T11:30:00+0530", - 1691, - 1692, - 1691, - 1691.6, - 990 - ], - [ - "2017-12-18T11:31:00+0530", - 1691.6, - 1694.7, - 1691.6, - 1692, - 4488 - ], - [ - "2017-12-18T11:32:00+0530", - 1692, - 1693.95, - 1692, - 1692, - 12833 - ], - [ - "2017-12-18T11:33:00+0530", - 1692, - 1694, - 1692, - 1693.95, - 1146 - ], - [ - "2017-12-18T11:34:00+0530", - 1694, - 1694.75, - 1693.95, - 1694, - 642 - ], - [ - "2017-12-18T11:35:00+0530", - 1694, - 1694, - 1693.9, - 1693.9, - 285 - ], - [ - "2017-12-18T11:36:00+0530", - 1693.9, - 1693.9, - 1693.15, - 1693.15, - 105 - ], - [ - "2017-12-18T11:37:00+0530", - 1693.15, - 1694.5, - 1692.35, - 1694.5, - 160 - ], - [ - "2017-12-18T11:38:00+0530", - 1694.5, - 1694.8, - 1694.15, - 1694.8, - 924 - ], - [ - "2017-12-18T11:39:00+0530", - 1694.8, - 1694.8, - 1694, - 1694.8, - 215 - ], - [ - "2017-12-18T11:40:00+0530", - 1693.65, - 1695, - 1693.65, - 1693.8, - 517 - ], - [ - "2017-12-18T11:41:00+0530", - 1693.8, - 1693.9, - 1693.8, - 1693.9, - 10 - ], - [ - "2017-12-18T11:42:00+0530", - 1693.9, - 1694.6, - 1693.8, - 1694.45, - 128 - ], - [ - "2017-12-18T11:43:00+0530", - 1694.45, - 1694.6, - 1693.4, - 1693.4, - 61 - ], - [ - "2017-12-18T11:44:00+0530", - 1693.4, - 1693.95, - 1693.4, - 1693.95, - 112 - ], - [ - "2017-12-18T11:45:00+0530", - 1693.95, - 1693.95, - 1692, - 1693.95, - 506 - ], - [ - "2017-12-18T11:46:00+0530", - 1693.95, - 1694, - 1693.7, - 1693.8, - 22 - ], - [ - "2017-12-18T11:47:00+0530", - 1693.8, - 1693.8, - 1692.3, - 1693.7, - 142 - ], - [ - "2017-12-18T11:48:00+0530", - 1693.7, - 1693.7, - 1692.45, - 1692.45, - 3 - ], - [ - "2017-12-18T11:49:00+0530", - 1692, - 1692.45, - 1692, - 1692.45, - 291 - ], - [ - "2017-12-18T11:50:00+0530", - 1692.45, - 1693, - 1692.45, - 1693, - 115 - ], - [ - "2017-12-18T11:51:00+0530", - 1693, - 1693.2, - 1692.55, - 1693.2, - 24 - ], - [ - "2017-12-18T11:52:00+0530", - 1693.2, - 1693.2, - 1689, - 1689, - 486 - ], - [ - "2017-12-18T11:53:00+0530", - 1689, - 1691, - 1689, - 1691, - 1205 - ], - [ - "2017-12-18T11:54:00+0530", - 1691.1, - 1691.1, - 1689.6, - 1690, - 2607 - ], - [ - "2017-12-18T11:55:00+0530", - 1690, - 1691.6, - 1690, - 1691.1, - 1957 - ], - [ - "2017-12-18T11:56:00+0530", - 1691.1, - 1693, - 1691, - 1693, - 96 - ], - [ - "2017-12-18T11:57:00+0530", - 1693, - 1693, - 1692, - 1692, - 100 - ], - [ - "2017-12-18T11:58:00+0530", - 1692, - 1693, - 1691.95, - 1691.95, - 122 - ], - [ - "2017-12-18T11:59:00+0530", - 1692.85, - 1693, - 1691.9, - 1691.9, - 114 - ], - [ - "2017-12-18T12:00:00+0530", - 1691.9, - 1692.65, - 1691.05, - 1692.65, - 68 - ], - [ - "2017-12-18T12:01:00+0530", - 1692.65, - 1693, - 1692.65, - 1692.65, - 197 - ], - [ - "2017-12-18T12:02:00+0530", - 1692.65, - 1693, - 1692.65, - 1693, - 168 - ], - [ - "2017-12-18T12:03:00+0530", - 1693, - 1693.25, - 1692.65, - 1693.25, - 1468 - ], - [ - "2017-12-18T12:04:00+0530", - 1693, - 1693.8, - 1692.9, - 1692.9, - 4041 - ], - [ - "2017-12-18T12:05:00+0530", - 1692.9, - 1694.05, - 1692.9, - 1694.05, - 352 - ], - [ - "2017-12-18T12:06:00+0530", - 1694.05, - 1694.65, - 1694.05, - 1694.65, - 28 - ], - [ - "2017-12-18T12:07:00+0530", - 1694.65, - 1694.65, - 1693, - 1693, - 200284 - ], - [ - "2017-12-18T12:08:00+0530", - 1693, - 1693.65, - 1693, - 1693.65, - 69 - ], - [ - "2017-12-18T12:09:00+0530", - 1693.65, - 1694.3, - 1693.6, - 1694.3, - 263 - ], - [ - "2017-12-18T12:10:00+0530", - 1694.3, - 1695, - 1694.3, - 1695, - 769 - ], - [ - "2017-12-18T12:11:00+0530", - 1695, - 1695, - 1691.85, - 1692.8, - 5883 - ], - [ - "2017-12-18T12:12:00+0530", - 1692.8, - 1700.45, - 1692.8, - 1700, - 7803 - ], - [ - "2017-12-18T12:13:00+0530", - 1700, - 1701, - 1697.5, - 1700.85, - 2916 - ], - [ - "2017-12-18T12:14:00+0530", - 1700.85, - 1703, - 1700.8, - 1702.8, - 2738 - ], - [ - "2017-12-18T12:15:00+0530", - 1702.85, - 1705, - 1702.85, - 1704.4, - 4764 - ], - [ - "2017-12-18T12:16:00+0530", - 1704.4, - 1704.9, - 1702.7, - 1702.9, - 1318 - ], - [ - "2017-12-18T12:17:00+0530", - 1702.9, - 1704, - 1702, - 1702.7, - 492 - ], - [ - "2017-12-18T12:18:00+0530", - 1702.7, - 1702.7, - 1701.45, - 1702.6, - 297 - ], - [ - "2017-12-18T12:19:00+0530", - 1702.6, - 1702.6, - 1702, - 1702, - 231 - ], - [ - "2017-12-18T12:20:00+0530", - 1702, - 1702.5, - 1701.25, - 1702.5, - 177 - ], - [ - "2017-12-18T12:21:00+0530", - 1702.5, - 1703, - 1702.05, - 1702.5, - 542 - ], - [ - "2017-12-18T12:22:00+0530", - 1702.5, - 1702.85, - 1702.45, - 1702.45, - 140 - ], - [ - "2017-12-18T12:23:00+0530", - 1702.45, - 1704, - 1702.45, - 1702.6, - 308 - ], - [ - "2017-12-18T12:24:00+0530", - 1702.6, - 1702.95, - 1700.7, - 1701.1, - 675 - ], - [ - "2017-12-18T12:25:00+0530", - 1701, - 1701.05, - 1700.6, - 1701, - 424 - ], - [ - "2017-12-18T12:26:00+0530", - 1701, - 1701, - 1700.25, - 1700.25, - 348 - ], - [ - "2017-12-18T12:27:00+0530", - 1700.3, - 1700.95, - 1700.3, - 1700.3, - 233 - ], - [ - "2017-12-18T12:28:00+0530", - 1700.3, - 1700.3, - 1696.5, - 1696.5, - 2274 - ], - [ - "2017-12-18T12:29:00+0530", - 1696.5, - 1699.95, - 1696.5, - 1699, - 667 - ], - [ - "2017-12-18T12:30:00+0530", - 1699, - 1699.95, - 1699, - 1699, - 571 - ], - [ - "2017-12-18T12:31:00+0530", - 1699, - 1702, - 1699, - 1699.95, - 655 - ], - [ - "2017-12-18T12:32:00+0530", - 1699.95, - 1700, - 1699.95, - 1700, - 57 - ], - [ - "2017-12-18T12:33:00+0530", - 1700, - 1700.7, - 1700, - 1700.7, - 97 - ], - [ - "2017-12-18T12:34:00+0530", - 1700.7, - 1701.4, - 1700.05, - 1700.05, - 127 - ], - [ - "2017-12-18T12:35:00+0530", - 1700.05, - 1701, - 1700.05, - 1701, - 462 - ], - [ - "2017-12-18T12:36:00+0530", - 1701, - 1704, - 1701, - 1703.95, - 1953 - ], - [ - "2017-12-18T12:37:00+0530", - 1704.7, - 1708.55, - 1704.7, - 1708.15, - 9521 - ], - [ - "2017-12-18T12:38:00+0530", - 1708.15, - 1708.15, - 1703, - 1703, - 4984 - ], - [ - "2017-12-18T12:39:00+0530", - 1703, - 1703, - 1702.2, - 1702.2, - 80 - ], - [ - "2017-12-18T12:40:00+0530", - 1702.2, - 1703, - 1702, - 1702, - 273 - ], - [ - "2017-12-18T12:41:00+0530", - 1702, - 1702.9, - 1701.7, - 1702.05, - 2572 - ], - [ - "2017-12-18T12:42:00+0530", - 1702.9, - 1703, - 1702.25, - 1703, - 524 - ], - [ - "2017-12-18T12:43:00+0530", - 1703, - 1703.95, - 1703, - 1703.95, - 438 - ], - [ - "2017-12-18T12:44:00+0530", - 1703.95, - 1703.95, - 1702.6, - 1702.6, - 122 - ], - [ - "2017-12-18T12:45:00+0530", - 1702.6, - 1703.7, - 1702.6, - 1703.7, - 257 - ], - [ - "2017-12-18T12:46:00+0530", - 1703.7, - 1703.7, - 1702.55, - 1702.95, - 115 - ], - [ - "2017-12-18T12:47:00+0530", - 1702.95, - 1702.95, - 1702, - 1702.05, - 113 - ], - [ - "2017-12-18T12:48:00+0530", - 1702.05, - 1702.85, - 1702.05, - 1702.8, - 143 - ], - [ - "2017-12-18T12:49:00+0530", - 1702.8, - 1703.5, - 1702.25, - 1702.25, - 320 - ], - [ - "2017-12-18T12:50:00+0530", - 1702.25, - 1703, - 1701, - 1701.85, - 1362 - ], - [ - "2017-12-18T12:51:00+0530", - 1701.85, - 1702, - 1701, - 1701, - 357 - ], - [ - "2017-12-18T12:52:00+0530", - 1702, - 1702, - 1701, - 1701, - 361 - ], - [ - "2017-12-18T12:53:00+0530", - 1701, - 1701.95, - 1700.9, - 1701, - 377 - ], - [ - "2017-12-18T12:54:00+0530", - 1701, - 1702.55, - 1701, - 1701.5, - 222 - ], - [ - "2017-12-18T12:55:00+0530", - 1701, - 1701.5, - 1701, - 1701.5, - 179 - ], - [ - "2017-12-18T12:56:00+0530", - 1701.5, - 1701.55, - 1700.75, - 1700.75, - 88 - ], - [ - "2017-12-18T12:57:00+0530", - 1700.75, - 1700.75, - 1700.3, - 1700.45, - 16 - ], - [ - "2017-12-18T12:58:00+0530", - 1701.6, - 1701.6, - 1700.25, - 1700.25, - 199 - ], - [ - "2017-12-18T12:59:00+0530", - 1700.25, - 1701.05, - 1700.25, - 1701.05, - 303 - ], - [ - "2017-12-18T13:00:00+0530", - 1701.05, - 1701.05, - 1699.75, - 1699.8, - 490 - ], - [ - "2017-12-18T13:01:00+0530", - 1698, - 1699.15, - 1697.3, - 1699.15, - 300 - ], - [ - "2017-12-18T13:02:00+0530", - 1699.15, - 1699.15, - 1695.1, - 1696, - 1529 - ], - [ - "2017-12-18T13:03:00+0530", - 1696, - 1696.1, - 1695.1, - 1695.1, - 221 - ], - [ - "2017-12-18T13:04:00+0530", - 1695.1, - 1696.4, - 1694.95, - 1695.15, - 1099 - ], - [ - "2017-12-18T13:05:00+0530", - 1695.35, - 1696.35, - 1695.2, - 1695.2, - 689 - ], - [ - "2017-12-18T13:06:00+0530", - 1695.2, - 1695.2, - 1693, - 1693, - 461 - ], - [ - "2017-12-18T13:07:00+0530", - 1693, - 1695.8, - 1693, - 1695.8, - 315 - ], - [ - "2017-12-18T13:08:00+0530", - 1695.8, - 1695.8, - 1694.55, - 1694.55, - 275 - ], - [ - "2017-12-18T13:09:00+0530", - 1694.55, - 1696.55, - 1694, - 1696.55, - 110 - ], - [ - "2017-12-18T13:10:00+0530", - 1696.55, - 1696.55, - 1692, - 1692.45, - 858 - ], - [ - "2017-12-18T13:11:00+0530", - 1692.45, - 1694, - 1692.45, - 1693.55, - 344 - ], - [ - "2017-12-18T13:12:00+0530", - 1695.25, - 1695.6, - 1694.25, - 1694.25, - 356 - ], - [ - "2017-12-18T13:13:00+0530", - 1694.25, - 1695, - 1694.25, - 1695, - 130 - ], - [ - "2017-12-18T13:14:00+0530", - 1695, - 1695.6, - 1694.7, - 1695.6, - 600 - ], - [ - "2017-12-18T13:15:00+0530", - 1695.6, - 1696.5, - 1695.6, - 1696, - 518 - ], - [ - "2017-12-18T13:16:00+0530", - 1696, - 1696, - 1695.2, - 1696, - 223 - ], - [ - "2017-12-18T13:17:00+0530", - 1696, - 1696, - 1695.2, - 1696, - 113 - ], - [ - "2017-12-18T13:18:00+0530", - 1696, - 1696, - 1695, - 1695.05, - 334 - ], - [ - "2017-12-18T13:19:00+0530", - 1695.05, - 1696.3, - 1694.05, - 1694.15, - 314 - ], - [ - "2017-12-18T13:20:00+0530", - 1694.15, - 1694.15, - 1692, - 1692, - 1505 - ], - [ - "2017-12-18T13:21:00+0530", - 1692, - 1693.4, - 1691.65, - 1692.9, - 404 - ], - [ - "2017-12-18T13:22:00+0530", - 1692.9, - 1695.9, - 1692.9, - 1695.85, - 481 - ], - [ - "2017-12-18T13:23:00+0530", - 1695.85, - 1697.25, - 1695.85, - 1696, - 576 - ], - [ - "2017-12-18T13:24:00+0530", - 1696, - 1697.2, - 1695.9, - 1695.9, - 196 - ], - [ - "2017-12-18T13:25:00+0530", - 1695.9, - 1696.4, - 1695.9, - 1695.9, - 30 - ], - [ - "2017-12-18T13:26:00+0530", - 1695.9, - 1695.9, - 1695, - 1695, - 100 - ], - [ - "2017-12-18T13:27:00+0530", - 1695, - 1695, - 1693.9, - 1694.3, - 465 - ], - [ - "2017-12-18T13:28:00+0530", - 1694.3, - 1694.35, - 1693.4, - 1693.5, - 454 - ], - [ - "2017-12-18T13:29:00+0530", - 1693.5, - 1693.5, - 1693.3, - 1693.3, - 90 - ], - [ - "2017-12-18T13:30:00+0530", - 1693.3, - 1694.2, - 1693.3, - 1694.2, - 49 - ], - [ - "2017-12-18T13:31:00+0530", - 1694.2, - 1696.6, - 1694.2, - 1696.6, - 915 - ], - [ - "2017-12-18T13:32:00+0530", - 1696.6, - 1696.8, - 1695.25, - 1695.25, - 377 - ], - [ - "2017-12-18T13:33:00+0530", - 1695.25, - 1696.95, - 1695.25, - 1696.95, - 7 - ], - [ - "2017-12-18T13:34:00+0530", - 1696.95, - 1698, - 1695.15, - 1698, - 362 - ], - [ - "2017-12-18T13:35:00+0530", - 1698, - 1699, - 1696.75, - 1697.95, - 326 - ], - [ - "2017-12-18T13:36:00+0530", - 1697.95, - 1697.95, - 1695.15, - 1696.05, - 553 - ], - [ - "2017-12-18T13:37:00+0530", - 1696.05, - 1697.95, - 1695.9, - 1696.35, - 159 - ], - [ - "2017-12-18T13:38:00+0530", - 1696.35, - 1697.35, - 1696.05, - 1697.35, - 101 - ], - [ - "2017-12-18T13:39:00+0530", - 1697.35, - 1697.35, - 1697.05, - 1697.35, - 89 - ], - [ - "2017-12-18T13:40:00+0530", - 1697.05, - 1697.05, - 1697.05, - 1697.05, - 50 - ], - [ - "2017-12-18T13:41:00+0530", - 1697.05, - 1697.35, - 1697.05, - 1697.35, - 27 - ], - [ - "2017-12-18T13:42:00+0530", - 1697.4, - 1697.4, - 1697.05, - 1697.4, - 30 - ], - [ - "2017-12-18T13:43:00+0530", - 1697.75, - 1697.75, - 1697.05, - 1697.15, - 265 - ], - [ - "2017-12-18T13:44:00+0530", - 1697.15, - 1697.95, - 1697.15, - 1697.2, - 20 - ], - [ - "2017-12-18T13:45:00+0530", - 1697.2, - 1699.6, - 1697.2, - 1698.85, - 680 - ], - [ - "2017-12-18T13:46:00+0530", - 1698.85, - 1698.85, - 1698.8, - 1698.8, - 48 - ], - [ - "2017-12-18T13:47:00+0530", - 1698.8, - 1698.8, - 1698.7, - 1698.7, - 42 - ], - [ - "2017-12-18T13:48:00+0530", - 1698.65, - 1698.75, - 1698, - 1698, - 259 - ], - [ - "2017-12-18T13:49:00+0530", - 1698, - 1698.75, - 1698, - 1698.45, - 12 - ], - [ - "2017-12-18T13:50:00+0530", - 1698.45, - 1698.75, - 1697.9, - 1697.9, - 8 - ], - [ - "2017-12-18T13:51:00+0530", - 1697.9, - 1698.6, - 1697.9, - 1698.6, - 6 - ], - [ - "2017-12-18T13:52:00+0530", - 1699, - 1699, - 1698.1, - 1698.1, - 76 - ], - [ - "2017-12-18T13:53:00+0530", - 1698.1, - 1698.3, - 1698.05, - 1698.3, - 224 - ], - [ - "2017-12-18T13:54:00+0530", - 1698.3, - 1698.95, - 1698.3, - 1698.4, - 39 - ], - [ - "2017-12-18T13:55:00+0530", - 1698.4, - 1698.6, - 1698.4, - 1698.6, - 96 - ], - [ - "2017-12-18T13:56:00+0530", - 1698.6, - 1698.9, - 1698.05, - 1698.05, - 1014 - ], - [ - "2017-12-18T13:57:00+0530", - 1698.05, - 1698.05, - 1697.75, - 1697.75, - 22 - ], - [ - "2017-12-18T13:58:00+0530", - 1697.75, - 1697.75, - 1697.4, - 1697.4, - 20 - ], - [ - "2017-12-18T13:59:00+0530", - 1697.4, - 1698.3, - 1697.4, - 1698.3, - 576 - ], - [ - "2017-12-18T14:00:00+0530", - 1698.9, - 1699, - 1698.25, - 1698.25, - 171 - ], - [ - "2017-12-18T14:01:00+0530", - 1698.25, - 1698.95, - 1698.25, - 1698.95, - 10 - ], - [ - "2017-12-18T14:02:00+0530", - 1698.3, - 1698.95, - 1698.3, - 1698.95, - 15 - ], - [ - "2017-12-18T14:03:00+0530", - 1698.95, - 1698.95, - 1698.25, - 1698.25, - 55 - ], - [ - "2017-12-18T14:04:00+0530", - 1698.25, - 1698.85, - 1698.25, - 1698.6, - 111 - ], - [ - "2017-12-18T14:05:00+0530", - 1698.6, - 1698.6, - 1698, - 1698.55, - 522 - ], - [ - "2017-12-18T14:06:00+0530", - 1698.55, - 1699, - 1698.55, - 1698.9, - 153 - ], - [ - "2017-12-18T14:07:00+0530", - 1698.9, - 1699.9, - 1698.4, - 1698.4, - 453 - ], - [ - "2017-12-18T14:08:00+0530", - 1698.4, - 1699.95, - 1698.4, - 1698.9, - 59 - ], - [ - "2017-12-18T14:09:00+0530", - 1698.05, - 1698.9, - 1697.95, - 1698.9, - 105 - ], - [ - "2017-12-18T14:10:00+0530", - 1698.9, - 1699.8, - 1698.9, - 1699.8, - 10 - ], - [ - "2017-12-18T14:11:00+0530", - 1699.8, - 1699.8, - 1697.95, - 1697.95, - 259 - ], - [ - "2017-12-18T14:12:00+0530", - 1697.95, - 1697.95, - 1697.95, - 1697.95, - 0 - ], - [ - "2017-12-18T14:13:00+0530", - 1697.95, - 1697.95, - 1697.95, - 1697.95, - 0 - ], - [ - "2017-12-18T14:14:00+0530", - 1697.95, - 1697.95, - 1697, - 1697, - 170 - ], - [ - "2017-12-18T14:15:00+0530", - 1697, - 1697, - 1696.5, - 1696.5, - 93 - ], - [ - "2017-12-18T14:16:00+0530", - 1696.5, - 1696.5, - 1693.05, - 1695.25, - 1072 - ], - [ - "2017-12-18T14:17:00+0530", - 1695.25, - 1695.5, - 1694, - 1694, - 121 - ], - [ - "2017-12-18T14:18:00+0530", - 1694, - 1694, - 1693, - 1693.15, - 111 - ], - [ - "2017-12-18T14:19:00+0530", - 1693.15, - 1694, - 1693.15, - 1694, - 30 - ], - [ - "2017-12-18T14:20:00+0530", - 1694, - 1694, - 1694, - 1694, - 194 - ], - [ - "2017-12-18T14:21:00+0530", - 1694.1, - 1696.4, - 1694.1, - 1696.4, - 126 - ], - [ - "2017-12-18T14:22:00+0530", - 1696.4, - 1696.4, - 1695.25, - 1695.25, - 22 - ], - [ - "2017-12-18T14:23:00+0530", - 1695.25, - 1695.4, - 1695.25, - 1695.4, - 11 - ], - [ - "2017-12-18T14:24:00+0530", - 1695.4, - 1695.6, - 1695.25, - 1695.25, - 139 - ], - [ - "2017-12-18T14:25:00+0530", - 1695.25, - 1695.25, - 1693.55, - 1693.65, - 220 - ], - [ - "2017-12-18T14:26:00+0530", - 1693.65, - 1694.75, - 1693.3, - 1693.3, - 488 - ], - [ - "2017-12-18T14:27:00+0530", - 1693.3, - 1696.95, - 1693.3, - 1695.05, - 243 - ], - [ - "2017-12-18T14:28:00+0530", - 1695.05, - 1696.95, - 1695.05, - 1696.9, - 178 - ], - [ - "2017-12-18T14:29:00+0530", - 1696.9, - 1697.6, - 1696.55, - 1696.55, - 736 - ], - [ - "2017-12-18T14:30:00+0530", - 1696.55, - 1699.35, - 1696, - 1699, - 1870 - ], - [ - "2017-12-18T14:31:00+0530", - 1699, - 1699, - 1698.2, - 1698.2, - 46 - ], - [ - "2017-12-18T14:32:00+0530", - 1698.2, - 1698.2, - 1697.7, - 1698.15, - 128 - ], - [ - "2017-12-18T14:33:00+0530", - 1698.15, - 1698.5, - 1696.75, - 1698.5, - 499 - ], - [ - "2017-12-18T14:34:00+0530", - 1698.5, - 1698.5, - 1697.65, - 1697.65, - 64 - ], - [ - "2017-12-18T14:35:00+0530", - 1697.65, - 1698.95, - 1697.65, - 1698.5, - 415 - ], - [ - "2017-12-18T14:36:00+0530", - 1698.5, - 1698.5, - 1698.5, - 1698.5, - 0 - ], - [ - "2017-12-18T14:37:00+0530", - 1698.5, - 1698.5, - 1696.1, - 1696.1, - 70 - ], - [ - "2017-12-18T14:38:00+0530", - 1696.1, - 1698, - 1696.1, - 1698, - 190 - ], - [ - "2017-12-18T14:39:00+0530", - 1697.05, - 1697.8, - 1696.2, - 1697.45, - 142 - ], - [ - "2017-12-18T14:40:00+0530", - 1697.45, - 1697.45, - 1696.4, - 1696.55, - 145 - ], - [ - "2017-12-18T14:41:00+0530", - 1696.55, - 1697.25, - 1696.55, - 1697.1, - 16 - ], - [ - "2017-12-18T14:42:00+0530", - 1697.1, - 1697.1, - 1696.4, - 1696.4, - 132 - ], - [ - "2017-12-18T14:43:00+0530", - 1696.4, - 1698.75, - 1696.4, - 1698.75, - 506 - ], - [ - "2017-12-18T14:44:00+0530", - 1698.75, - 1698.75, - 1697, - 1697.1, - 97 - ], - [ - "2017-12-18T14:45:00+0530", - 1697.1, - 1699, - 1697.1, - 1699, - 777 - ], - [ - "2017-12-18T14:46:00+0530", - 1699, - 1699.45, - 1698.75, - 1699, - 102 - ], - [ - "2017-12-18T14:47:00+0530", - 1699, - 1700, - 1699, - 1699.2, - 1027 - ], - [ - "2017-12-18T14:48:00+0530", - 1699.2, - 1699.2, - 1698.45, - 1699, - 1070 - ], - [ - "2017-12-18T14:49:00+0530", - 1699, - 1699, - 1698.35, - 1699, - 1008 - ], - [ - "2017-12-18T14:50:00+0530", - 1699, - 1699.1, - 1698.6, - 1699.1, - 69 - ], - [ - "2017-12-18T14:51:00+0530", - 1699.1, - 1699.1, - 1697.7, - 1698, - 401 - ], - [ - "2017-12-18T14:52:00+0530", - 1698, - 1698, - 1697.7, - 1697.7, - 31 - ], - [ - "2017-12-18T14:53:00+0530", - 1697.7, - 1697.85, - 1697, - 1697, - 67 - ], - [ - "2017-12-18T14:54:00+0530", - 1697, - 1697.15, - 1696.1, - 1697.05, - 445 - ], - [ - "2017-12-18T14:55:00+0530", - 1697.05, - 1697.05, - 1695, - 1695, - 1016 - ], - [ - "2017-12-18T14:56:00+0530", - 1695, - 1696, - 1693.75, - 1696, - 2129 - ], - [ - "2017-12-18T14:57:00+0530", - 1696, - 1696, - 1693, - 1693, - 1385 - ], - [ - "2017-12-18T14:58:00+0530", - 1693, - 1696, - 1692.9, - 1692.9, - 1168 - ], - [ - "2017-12-18T14:59:00+0530", - 1692.9, - 1693.9, - 1692.9, - 1693.25, - 1166 - ], - [ - "2017-12-18T15:00:00+0530", - 1693.25, - 1695.25, - 1693.25, - 1695, - 741 - ], - [ - "2017-12-18T15:01:00+0530", - 1695, - 1697.95, - 1695, - 1697.95, - 1336 - ], - [ - "2017-12-18T15:02:00+0530", - 1696.85, - 1697.9, - 1695, - 1696, - 2391 - ], - [ - "2017-12-18T15:03:00+0530", - 1696, - 1696.7, - 1695, - 1695.3, - 1589 - ], - [ - "2017-12-18T15:04:00+0530", - 1695.3, - 1696.15, - 1693.95, - 1696.15, - 1300 - ], - [ - "2017-12-18T15:05:00+0530", - 1696.15, - 1698, - 1695.3, - 1696.85, - 1075 - ], - [ - "2017-12-18T15:06:00+0530", - 1696.85, - 1697.9, - 1695.7, - 1697.7, - 927 - ], - [ - "2017-12-18T15:07:00+0530", - 1697.7, - 1697.9, - 1697, - 1697.85, - 1409 - ], - [ - "2017-12-18T15:08:00+0530", - 1697.85, - 1697.85, - 1696, - 1696.95, - 1090 - ], - [ - "2017-12-18T15:09:00+0530", - 1696.95, - 1696.95, - 1695.5, - 1695.85, - 1165 - ], - [ - "2017-12-18T15:10:00+0530", - 1695.85, - 1697.95, - 1695.85, - 1697.95, - 1304 - ], - [ - "2017-12-18T15:11:00+0530", - 1697.95, - 1697.95, - 1695.9, - 1697.7, - 1143 - ], - [ - "2017-12-18T15:12:00+0530", - 1697.7, - 1697.9, - 1696.55, - 1697.1, - 1754 - ], - [ - "2017-12-18T15:13:00+0530", - 1697.1, - 1697.7, - 1696.15, - 1696.75, - 1425 - ], - [ - "2017-12-18T15:14:00+0530", - 1696.4, - 1698, - 1696.4, - 1697.8, - 1484 - ], - [ - "2017-12-18T15:15:00+0530", - 1697.8, - 1697.8, - 1695.3, - 1696.9, - 1980 - ], - [ - "2017-12-18T15:16:00+0530", - 1695.65, - 1697.8, - 1695.65, - 1696.55, - 2482 - ], - [ - "2017-12-18T15:17:00+0530", - 1696.55, - 1698, - 1695.35, - 1696.9, - 2034 - ], - [ - "2017-12-18T15:18:00+0530", - 1696.9, - 1696.9, - 1695.3, - 1696, - 1512 - ], - [ - "2017-12-18T15:19:00+0530", - 1696, - 1696.9, - 1694.15, - 1695.35, - 1415 - ], - [ - "2017-12-18T15:20:00+0530", - 1695.35, - 1696.75, - 1695.05, - 1695.2, - 1802 - ], - [ - "2017-12-18T15:21:00+0530", - 1696.6, - 1696.75, - 1693.55, - 1693.55, - 2206 - ], - [ - "2017-12-18T15:22:00+0530", - 1693.5, - 1697.05, - 1693.3, - 1695.15, - 3252 - ], - [ - "2017-12-18T15:23:00+0530", - 1695.15, - 1698.55, - 1695.15, - 1696.05, - 149689 - ], - [ - "2017-12-18T15:24:00+0530", - 1696.05, - 1698.15, - 1696.05, - 1696.5, - 1389 - ], - [ - "2017-12-18T15:25:00+0530", - 1696.5, - 1697.65, - 1695.65, - 1695.65, - 1645 - ], - [ - "2017-12-18T15:26:00+0530", - 1695.65, - 1697.25, - 1695, - 1697, - 2610 - ], - [ - "2017-12-18T15:27:00+0530", - 1696.85, - 1696.85, - 1695, - 1696.45, - 1882 - ], - [ - "2017-12-18T15:28:00+0530", - 1696.45, - 1696.45, - 1695, - 1695, - 2832 - ], - [ - "2017-12-18T15:29:00+0530", - 1696.3, - 1699.3, - 1695.05, - 1699.3, - 1423 - ], - [ - "2017-12-19T09:15:00+0530", - 1704.8, - 1704.8, - 1700.35, - 1704.5, - 689 - ], - [ - "2017-12-19T09:16:00+0530", - 1704.5, - 1705.05, - 1701.05, - 1703.05, - 1641 - ], - [ - "2017-12-19T09:17:00+0530", - 1703.05, - 1703.25, - 1700.05, - 1703.25, - 1173 - ], - [ - "2017-12-19T09:18:00+0530", - 1703.25, - 1703.25, - 1701.85, - 1701.85, - 419 - ], - [ - "2017-12-19T09:19:00+0530", - 1701, - 1702.65, - 1700, - 1701.9, - 571 - ], - [ - "2017-12-19T09:20:00+0530", - 1701.9, - 1703, - 1700, - 1703, - 1091 - ], - [ - "2017-12-19T09:21:00+0530", - 1702.95, - 1703.25, - 1702, - 1702.65, - 493 - ], - [ - "2017-12-19T09:22:00+0530", - 1702.65, - 1703.7, - 1702.65, - 1703.7, - 228 - ], - [ - "2017-12-19T09:23:00+0530", - 1702.45, - 1704, - 1702, - 1702.55, - 352 - ], - [ - "2017-12-19T09:24:00+0530", - 1702.55, - 1703.65, - 1702.55, - 1702.95, - 148 - ], - [ - "2017-12-19T09:25:00+0530", - 1702.95, - 1704, - 1702.95, - 1704, - 91 - ], - [ - "2017-12-19T09:26:00+0530", - 1704, - 1708, - 1703.95, - 1707.8, - 1114 - ], - [ - "2017-12-19T09:27:00+0530", - 1707.85, - 1709.95, - 1707.6, - 1708.8, - 5129 - ], - [ - "2017-12-19T09:28:00+0530", - 1708.8, - 1709.8, - 1706.1, - 1706.1, - 1124 - ], - [ - "2017-12-19T09:29:00+0530", - 1706.1, - 1706.3, - 1704, - 1704, - 693 - ], - [ - "2017-12-19T09:30:00+0530", - 1704, - 1705.6, - 1703.4, - 1705.6, - 701 - ], - [ - "2017-12-19T09:31:00+0530", - 1705.6, - 1707, - 1703.5, - 1706.45, - 985 - ], - [ - "2017-12-19T09:32:00+0530", - 1706.45, - 1707.25, - 1705.65, - 1705.65, - 635 - ], - [ - "2017-12-19T09:33:00+0530", - 1706, - 1706.7, - 1705.5, - 1705.5, - 410 - ], - [ - "2017-12-19T09:34:00+0530", - 1705.6, - 1707, - 1705.4, - 1707, - 386 - ], - [ - "2017-12-19T09:35:00+0530", - 1706.25, - 1706.55, - 1705.4, - 1706, - 200 - ], - [ - "2017-12-19T09:36:00+0530", - 1706, - 1706, - 1703.75, - 1704.5, - 245 - ], - [ - "2017-12-19T09:37:00+0530", - 1704.5, - 1707, - 1704.5, - 1707, - 566 - ], - [ - "2017-12-19T09:38:00+0530", - 1707, - 1707, - 1704.55, - 1706.05, - 657 - ], - [ - "2017-12-19T09:39:00+0530", - 1706.05, - 1707.95, - 1706.05, - 1707.95, - 269 - ], - [ - "2017-12-19T09:40:00+0530", - 1707.95, - 1708.85, - 1707.25, - 1708.8, - 461 - ], - [ - "2017-12-19T09:41:00+0530", - 1708.85, - 1710, - 1708.15, - 1710, - 1223 - ], - [ - "2017-12-19T09:42:00+0530", - 1709.95, - 1710, - 1707.3, - 1709.75, - 703 - ], - [ - "2017-12-19T09:43:00+0530", - 1709.75, - 1712, - 1709.75, - 1711.95, - 2045 - ], - [ - "2017-12-19T09:44:00+0530", - 1711, - 1713, - 1711, - 1712.9, - 2591 - ], - [ - "2017-12-19T09:45:00+0530", - 1712.9, - 1715, - 1712, - 1714.3, - 3196 - ], - [ - "2017-12-19T09:46:00+0530", - 1714.3, - 1718.9, - 1714.3, - 1717.2, - 4696 - ], - [ - "2017-12-19T09:47:00+0530", - 1717.2, - 1718.9, - 1717, - 1718.9, - 1779 - ], - [ - "2017-12-19T09:48:00+0530", - 1718.9, - 1718.95, - 1714.35, - 1714.7, - 3474 - ], - [ - "2017-12-19T09:49:00+0530", - 1714.7, - 1716, - 1714.7, - 1716, - 976 - ], - [ - "2017-12-19T09:50:00+0530", - 1716, - 1717, - 1715.9, - 1717, - 1231 - ], - [ - "2017-12-19T09:51:00+0530", - 1716.1, - 1717, - 1716, - 1716, - 679 - ], - [ - "2017-12-19T09:52:00+0530", - 1716, - 1716.65, - 1715, - 1716, - 1054 - ], - [ - "2017-12-19T09:53:00+0530", - 1716, - 1716, - 1713.9, - 1713.9, - 1416 - ], - [ - "2017-12-19T09:54:00+0530", - 1713.9, - 1714.45, - 1713, - 1713, - 585 - ], - [ - "2017-12-19T09:55:00+0530", - 1714, - 1714, - 1712.2, - 1713.85, - 929 - ], - [ - "2017-12-19T09:56:00+0530", - 1714, - 1714, - 1714, - 1714, - 147 - ], - [ - "2017-12-19T09:57:00+0530", - 1714, - 1715, - 1713.85, - 1714.75, - 421 - ], - [ - "2017-12-19T09:58:00+0530", - 1714.75, - 1714.75, - 1712.5, - 1713.65, - 266 - ], - [ - "2017-12-19T09:59:00+0530", - 1713.65, - 1713.65, - 1712.5, - 1713.2, - 367 - ], - [ - "2017-12-19T10:00:00+0530", - 1713.2, - 1714, - 1713.2, - 1714, - 112 - ], - [ - "2017-12-19T10:01:00+0530", - 1714, - 1714, - 1713.85, - 1713.9, - 71 - ], - [ - "2017-12-19T10:02:00+0530", - 1713.9, - 1713.9, - 1713.75, - 1713.85, - 301 - ], - [ - "2017-12-19T10:03:00+0530", - 1713.85, - 1713.85, - 1713.75, - 1713.75, - 101 - ], - [ - "2017-12-19T10:04:00+0530", - 1713.75, - 1713.8, - 1712.05, - 1712.05, - 833 - ], - [ - "2017-12-19T10:05:00+0530", - 1712.05, - 1713.8, - 1712.05, - 1713.1, - 195 - ], - [ - "2017-12-19T10:06:00+0530", - 1713.1, - 1713.45, - 1712, - 1712.6, - 333 - ], - [ - "2017-12-19T10:07:00+0530", - 1712.6, - 1713.8, - 1712, - 1713, - 228 - ], - [ - "2017-12-19T10:08:00+0530", - 1713, - 1713, - 1712, - 1712.85, - 272 - ], - [ - "2017-12-19T10:09:00+0530", - 1712.85, - 1712.85, - 1710.35, - 1710.35, - 597 - ], - [ - "2017-12-19T10:10:00+0530", - 1710.35, - 1712.15, - 1710.3, - 1710.65, - 253 - ], - [ - "2017-12-19T10:11:00+0530", - 1710.65, - 1711.9, - 1710.55, - 1710.55, - 113 - ], - [ - "2017-12-19T10:12:00+0530", - 1710.55, - 1710.6, - 1710.1, - 1710.1, - 1244 - ], - [ - "2017-12-19T10:13:00+0530", - 1709.45, - 1710, - 1708.25, - 1710, - 941 - ], - [ - "2017-12-19T10:14:00+0530", - 1710, - 1710, - 1709.1, - 1709.6, - 307 - ], - [ - "2017-12-19T10:15:00+0530", - 1709.6, - 1710.65, - 1709.6, - 1709.6, - 2716 - ], - [ - "2017-12-19T10:16:00+0530", - 1709.65, - 1710, - 1709.15, - 1709.15, - 351 - ], - [ - "2017-12-19T10:17:00+0530", - 1709.15, - 1709.85, - 1708.95, - 1709.6, - 268 - ], - [ - "2017-12-19T10:18:00+0530", - 1709.6, - 1709.6, - 1709.05, - 1709.5, - 55 - ], - [ - "2017-12-19T10:19:00+0530", - 1709.5, - 1710, - 1709.5, - 1709.85, - 2307 - ], - [ - "2017-12-19T10:20:00+0530", - 1709.85, - 1709.85, - 1709.1, - 1709.8, - 334 - ], - [ - "2017-12-19T10:21:00+0530", - 1709.8, - 1709.8, - 1709.8, - 1709.8, - 9 - ], - [ - "2017-12-19T10:22:00+0530", - 1709.8, - 1709.8, - 1709.1, - 1709.1, - 84 - ], - [ - "2017-12-19T10:23:00+0530", - 1709.1, - 1709.85, - 1708.4, - 1708.4, - 1885 - ], - [ - "2017-12-19T10:24:00+0530", - 1708.4, - 1708.4, - 1707, - 1707.45, - 639 - ], - [ - "2017-12-19T10:25:00+0530", - 1707.45, - 1707.45, - 1706.25, - 1706.5, - 348 - ], - [ - "2017-12-19T10:26:00+0530", - 1706.5, - 1708.5, - 1705.8, - 1705.8, - 945 - ], - [ - "2017-12-19T10:27:00+0530", - 1705.8, - 1706.75, - 1703.55, - 1705, - 2334 - ], - [ - "2017-12-19T10:28:00+0530", - 1705, - 1705.8, - 1704.1, - 1705.8, - 1247 - ], - [ - "2017-12-19T10:29:00+0530", - 1705.8, - 1705.8, - 1705, - 1705.1, - 205 - ], - [ - "2017-12-19T10:30:00+0530", - 1705.1, - 1706, - 1705.1, - 1706, - 570 - ], - [ - "2017-12-19T10:31:00+0530", - 1706, - 1706, - 1705.35, - 1705.5, - 41 - ], - [ - "2017-12-19T10:32:00+0530", - 1705.5, - 1706, - 1705.5, - 1705.95, - 184 - ], - [ - "2017-12-19T10:33:00+0530", - 1705.95, - 1706, - 1705.6, - 1706, - 248 - ], - [ - "2017-12-19T10:34:00+0530", - 1706, - 1706.55, - 1706, - 1706.55, - 542 - ], - [ - "2017-12-19T10:35:00+0530", - 1706.55, - 1707.35, - 1706, - 1707.35, - 147 - ], - [ - "2017-12-19T10:36:00+0530", - 1707.45, - 1708.95, - 1707.45, - 1708.3, - 233 - ], - [ - "2017-12-19T10:37:00+0530", - 1709.5, - 1709.5, - 1709.05, - 1709.15, - 559 - ], - [ - "2017-12-19T10:38:00+0530", - 1709.15, - 1710.05, - 1709.15, - 1709.3, - 717 - ], - [ - "2017-12-19T10:39:00+0530", - 1709.3, - 1709.3, - 1708.3, - 1708.3, - 26 - ], - [ - "2017-12-19T10:40:00+0530", - 1708.3, - 1708.3, - 1708, - 1708, - 102 - ], - [ - "2017-12-19T10:41:00+0530", - 1708, - 1708.05, - 1708, - 1708, - 35 - ], - [ - "2017-12-19T10:42:00+0530", - 1708, - 1708.05, - 1708, - 1708.05, - 70 - ], - [ - "2017-12-19T10:43:00+0530", - 1708.05, - 1708.7, - 1708.05, - 1708.4, - 12 - ], - [ - "2017-12-19T10:44:00+0530", - 1708.4, - 1710, - 1708.4, - 1710, - 410 - ], - [ - "2017-12-19T10:45:00+0530", - 1710, - 1710, - 1709, - 1709.55, - 41 - ], - [ - "2017-12-19T10:46:00+0530", - 1709.55, - 1709.55, - 1709, - 1709, - 30 - ], - [ - "2017-12-19T10:47:00+0530", - 1709, - 1709.5, - 1709, - 1709, - 122 - ], - [ - "2017-12-19T10:48:00+0530", - 1709, - 1709.35, - 1709, - 1709, - 69 - ], - [ - "2017-12-19T10:49:00+0530", - 1709, - 1709, - 1709, - 1709, - 40 - ], - [ - "2017-12-19T10:50:00+0530", - 1709, - 1709.1, - 1708.7, - 1708.75, - 317 - ], - [ - "2017-12-19T10:51:00+0530", - 1708.75, - 1709.55, - 1708.75, - 1708.9, - 198 - ], - [ - "2017-12-19T10:52:00+0530", - 1708.9, - 1708.9, - 1708.9, - 1708.9, - 19 - ], - [ - "2017-12-19T10:53:00+0530", - 1708.9, - 1708.9, - 1708.9, - 1708.9, - 22 - ], - [ - "2017-12-19T10:54:00+0530", - 1708.9, - 1709.95, - 1708.8, - 1708.95, - 140 - ], - [ - "2017-12-19T10:55:00+0530", - 1708.95, - 1709.55, - 1708.95, - 1709.55, - 10 - ], - [ - "2017-12-19T10:56:00+0530", - 1709.55, - 1709.55, - 1709.05, - 1709.05, - 37 - ], - [ - "2017-12-19T10:57:00+0530", - 1709.05, - 1709.05, - 1709, - 1709, - 43 - ], - [ - "2017-12-19T10:58:00+0530", - 1709, - 1709.55, - 1708.95, - 1709.05, - 128 - ], - [ - "2017-12-19T10:59:00+0530", - 1709.05, - 1709.05, - 1708.05, - 1708.05, - 85 - ], - [ - "2017-12-19T11:00:00+0530", - 1708.05, - 1708.05, - 1707.5, - 1707.5, - 368 - ], - [ - "2017-12-19T11:01:00+0530", - 1707.5, - 1708.5, - 1707, - 1708, - 168 - ], - [ - "2017-12-19T11:02:00+0530", - 1708.1, - 1710, - 1708.1, - 1708.8, - 220 - ], - [ - "2017-12-19T11:03:00+0530", - 1708.8, - 1710, - 1708.8, - 1709.5, - 530 - ], - [ - "2017-12-19T11:04:00+0530", - 1709.5, - 1710.05, - 1709.5, - 1710, - 1926 - ], - [ - "2017-12-19T11:05:00+0530", - 1710, - 1710.35, - 1709.5, - 1710.2, - 7830 - ], - [ - "2017-12-19T11:06:00+0530", - 1710, - 1710.35, - 1708.8, - 1710.1, - 1785 - ], - [ - "2017-12-19T11:07:00+0530", - 1710.1, - 1710.1, - 1709.95, - 1709.95, - 2 - ], - [ - "2017-12-19T11:08:00+0530", - 1709.95, - 1709.95, - 1708.35, - 1708.35, - 67 - ], - [ - "2017-12-19T11:09:00+0530", - 1708.35, - 1709.75, - 1708.15, - 1709.75, - 86 - ], - [ - "2017-12-19T11:10:00+0530", - 1709.75, - 1709.75, - 1709.05, - 1709.35, - 31 - ], - [ - "2017-12-19T11:11:00+0530", - 1709.35, - 1709.35, - 1708.15, - 1708.25, - 128 - ], - [ - "2017-12-19T11:12:00+0530", - 1708.25, - 1708.25, - 1708.15, - 1708.15, - 67 - ], - [ - "2017-12-19T11:13:00+0530", - 1708.15, - 1708.15, - 1708.15, - 1708.15, - 29 - ], - [ - "2017-12-19T11:14:00+0530", - 1708.1, - 1708.2, - 1708.1, - 1708.2, - 107 - ], - [ - "2017-12-19T11:15:00+0530", - 1708.2, - 1708.2, - 1708.2, - 1708.2, - 3 - ], - [ - "2017-12-19T11:16:00+0530", - 1708.6, - 1709.4, - 1708.6, - 1709.3, - 35 - ], - [ - "2017-12-19T11:17:00+0530", - 1709.3, - 1709.3, - 1709.3, - 1709.3, - 0 - ], - [ - "2017-12-19T11:18:00+0530", - 1708.5, - 1709.55, - 1708.5, - 1708.75, - 66 - ], - [ - "2017-12-19T11:19:00+0530", - 1708.75, - 1709.1, - 1708.5, - 1708.5, - 16 - ], - [ - "2017-12-19T11:20:00+0530", - 1708.9, - 1708.9, - 1708.5, - 1708.85, - 260 - ], - [ - "2017-12-19T11:21:00+0530", - 1708.5, - 1709.4, - 1708.05, - 1709.4, - 481 - ], - [ - "2017-12-19T11:22:00+0530", - 1709.4, - 1710.1, - 1709.4, - 1710, - 2124 - ], - [ - "2017-12-19T11:23:00+0530", - 1709.9, - 1709.9, - 1707.05, - 1708.55, - 886 - ], - [ - "2017-12-19T11:24:00+0530", - 1708.55, - 1708.55, - 1707.5, - 1708.05, - 487 - ], - [ - "2017-12-19T11:25:00+0530", - 1708.3, - 1708.85, - 1708.05, - 1708.4, - 757 - ], - [ - "2017-12-19T11:26:00+0530", - 1708.4, - 1709.8, - 1708.1, - 1709.8, - 7 - ], - [ - "2017-12-19T11:27:00+0530", - 1708.6, - 1709.2, - 1708.35, - 1709.2, - 10 - ], - [ - "2017-12-19T11:28:00+0530", - 1709.8, - 1709.8, - 1709.1, - 1709.1, - 113 - ], - [ - "2017-12-19T11:29:00+0530", - 1709.1, - 1709.1, - 1708.7, - 1708.75, - 63 - ], - [ - "2017-12-19T11:30:00+0530", - 1708.75, - 1708.75, - 1708.35, - 1708.75, - 41 - ], - [ - "2017-12-19T11:31:00+0530", - 1708.75, - 1708.75, - 1708.3, - 1708.3, - 14 - ], - [ - "2017-12-19T11:32:00+0530", - 1708.25, - 1708.7, - 1708.25, - 1708.7, - 26 - ], - [ - "2017-12-19T11:33:00+0530", - 1708.35, - 1708.35, - 1708.35, - 1708.35, - 21 - ], - [ - "2017-12-19T11:34:00+0530", - 1708.35, - 1708.35, - 1708.35, - 1708.35, - 21 - ], - [ - "2017-12-19T11:35:00+0530", - 1708.35, - 1708.8, - 1708.35, - 1708.8, - 75 - ], - [ - "2017-12-19T11:36:00+0530", - 1708.6, - 1708.6, - 1708.6, - 1708.6, - 2 - ], - [ - "2017-12-19T11:37:00+0530", - 1708.6, - 1708.65, - 1708.6, - 1708.65, - 36 - ], - [ - "2017-12-19T11:38:00+0530", - 1708.65, - 1709.7, - 1708.65, - 1709.7, - 72 - ], - [ - "2017-12-19T11:39:00+0530", - 1708.65, - 1709.55, - 1708.65, - 1709.55, - 71 - ], - [ - "2017-12-19T11:40:00+0530", - 1708.95, - 1709.2, - 1708.95, - 1709.05, - 642 - ], - [ - "2017-12-19T11:41:00+0530", - 1709.05, - 1709.05, - 1709, - 1709, - 76 - ], - [ - "2017-12-19T11:42:00+0530", - 1709, - 1709, - 1708.55, - 1708.55, - 70 - ], - [ - "2017-12-19T11:43:00+0530", - 1708.55, - 1709, - 1708.05, - 1708.05, - 141 - ], - [ - "2017-12-19T11:44:00+0530", - 1708.05, - 1708.05, - 1708, - 1708, - 138 - ], - [ - "2017-12-19T11:45:00+0530", - 1707.7, - 1708, - 1707, - 1707, - 451 - ], - [ - "2017-12-19T11:46:00+0530", - 1706.6, - 1707, - 1706.6, - 1707, - 807 - ], - [ - "2017-12-19T11:47:00+0530", - 1707, - 1707, - 1706.55, - 1707, - 103 - ], - [ - "2017-12-19T11:48:00+0530", - 1706.7, - 1707, - 1706.7, - 1707, - 13 - ], - [ - "2017-12-19T11:49:00+0530", - 1707, - 1707, - 1706.4, - 1706.4, - 1680 - ], - [ - "2017-12-19T11:50:00+0530", - 1706.4, - 1706.4, - 1706, - 1706, - 122 - ], - [ - "2017-12-19T11:51:00+0530", - 1706, - 1706.55, - 1706, - 1706.55, - 100 - ], - [ - "2017-12-19T11:52:00+0530", - 1706.55, - 1707, - 1706.2, - 1707, - 70 - ], - [ - "2017-12-19T11:53:00+0530", - 1706.55, - 1706.95, - 1706.5, - 1706.5, - 201 - ], - [ - "2017-12-19T11:54:00+0530", - 1706.5, - 1706.9, - 1706.5, - 1706.9, - 327 - ], - [ - "2017-12-19T11:55:00+0530", - 1706.5, - 1706.9, - 1706.5, - 1706.9, - 195 - ], - [ - "2017-12-19T11:56:00+0530", - 1706.5, - 1707, - 1706.5, - 1707, - 66 - ], - [ - "2017-12-19T11:57:00+0530", - 1707, - 1707, - 1707, - 1707, - 17 - ], - [ - "2017-12-19T11:58:00+0530", - 1706.5, - 1706.8, - 1706.5, - 1706.55, - 8 - ], - [ - "2017-12-19T11:59:00+0530", - 1706.5, - 1706.55, - 1706.5, - 1706.55, - 94 - ], - [ - "2017-12-19T12:00:00+0530", - 1706.5, - 1706.5, - 1706.5, - 1706.5, - 21 - ], - [ - "2017-12-19T12:01:00+0530", - 1706.5, - 1707, - 1706.5, - 1707, - 1084 - ], - [ - "2017-12-19T12:02:00+0530", - 1706.7, - 1707, - 1706.7, - 1707, - 47 - ], - [ - "2017-12-19T12:03:00+0530", - 1706.7, - 1707, - 1706.7, - 1707, - 183 - ], - [ - "2017-12-19T12:04:00+0530", - 1707, - 1707, - 1706.7, - 1706.7, - 22 - ], - [ - "2017-12-19T12:05:00+0530", - 1706.75, - 1707, - 1706.75, - 1706.95, - 366 - ], - [ - "2017-12-19T12:06:00+0530", - 1706.95, - 1707, - 1706.95, - 1707, - 922 - ], - [ - "2017-12-19T12:07:00+0530", - 1706.95, - 1706.95, - 1706.95, - 1706.95, - 7 - ], - [ - "2017-12-19T12:08:00+0530", - 1706.95, - 1707, - 1706.95, - 1707, - 480 - ], - [ - "2017-12-19T12:09:00+0530", - 1707, - 1707, - 1706.95, - 1707, - 789 - ], - [ - "2017-12-19T12:10:00+0530", - 1707, - 1707.05, - 1707, - 1707, - 797 - ], - [ - "2017-12-19T12:11:00+0530", - 1707, - 1707.25, - 1706.5, - 1706.5, - 2441 - ], - [ - "2017-12-19T12:12:00+0530", - 1706.5, - 1706.5, - 1706, - 1706.1, - 280 - ], - [ - "2017-12-19T12:13:00+0530", - 1706.1, - 1706.3, - 1706.1, - 1706.1, - 51 - ], - [ - "2017-12-19T12:14:00+0530", - 1706.1, - 1706.3, - 1706.1, - 1706.1, - 42 - ], - [ - "2017-12-19T12:15:00+0530", - 1706.1, - 1706.1, - 1705.35, - 1705.45, - 221 - ], - [ - "2017-12-19T12:16:00+0530", - 1705.45, - 1705.6, - 1705.3, - 1705.3, - 339 - ], - [ - "2017-12-19T12:17:00+0530", - 1705.3, - 1707, - 1705.3, - 1706.2, - 126 - ], - [ - "2017-12-19T12:18:00+0530", - 1706.35, - 1707, - 1706.35, - 1706.45, - 619 - ], - [ - "2017-12-19T12:19:00+0530", - 1706.45, - 1706.5, - 1706.1, - 1706.5, - 446 - ], - [ - "2017-12-19T12:20:00+0530", - 1706.1, - 1706.3, - 1705, - 1705.8, - 135 - ], - [ - "2017-12-19T12:21:00+0530", - 1705.8, - 1705.8, - 1705.7, - 1705.7, - 72 - ], - [ - "2017-12-19T12:22:00+0530", - 1705.7, - 1705.7, - 1705.1, - 1705.1, - 55 - ], - [ - "2017-12-19T12:23:00+0530", - 1705, - 1705.5, - 1705, - 1705, - 389 - ], - [ - "2017-12-19T12:24:00+0530", - 1705, - 1705, - 1705, - 1705, - 46 - ], - [ - "2017-12-19T12:25:00+0530", - 1705, - 1707.5, - 1705, - 1705, - 702 - ], - [ - "2017-12-19T12:26:00+0530", - 1705, - 1705, - 1704.9, - 1704.9, - 102 - ], - [ - "2017-12-19T12:27:00+0530", - 1704.5, - 1705.5, - 1704.5, - 1705.5, - 165 - ], - [ - "2017-12-19T12:28:00+0530", - 1705.5, - 1706.1, - 1705.5, - 1706.1, - 152 - ], - [ - "2017-12-19T12:29:00+0530", - 1705.5, - 1705.5, - 1705.5, - 1705.5, - 24 - ], - [ - "2017-12-19T12:30:00+0530", - 1705.5, - 1705.9, - 1705.5, - 1705.9, - 24 - ], - [ - "2017-12-19T12:31:00+0530", - 1705.9, - 1706.05, - 1705.9, - 1705.95, - 101 - ], - [ - "2017-12-19T12:32:00+0530", - 1705.95, - 1705.95, - 1704, - 1705.45, - 6000 - ], - [ - "2017-12-19T12:33:00+0530", - 1704.6, - 1705.55, - 1704.6, - 1704.9, - 603 - ], - [ - "2017-12-19T12:34:00+0530", - 1704.85, - 1705.95, - 1704.5, - 1704.8, - 1500 - ], - [ - "2017-12-19T12:35:00+0530", - 1705.75, - 1705.75, - 1704.5, - 1705, - 3084 - ], - [ - "2017-12-19T12:36:00+0530", - 1704.65, - 1706.7, - 1704.65, - 1706, - 15219 - ], - [ - "2017-12-19T12:37:00+0530", - 1706, - 1706.45, - 1705, - 1705.85, - 2249 - ], - [ - "2017-12-19T12:38:00+0530", - 1705.65, - 1708.7, - 1705.65, - 1708.7, - 230 - ], - [ - "2017-12-19T12:39:00+0530", - 1708.7, - 1711.15, - 1707.95, - 1710.5, - 2037 - ], - [ - "2017-12-19T12:40:00+0530", - 1710.05, - 1712.35, - 1710.05, - 1711.05, - 863 - ], - [ - "2017-12-19T12:41:00+0530", - 1711.05, - 1711.5, - 1711, - 1711.2, - 214 - ], - [ - "2017-12-19T12:42:00+0530", - 1711.2, - 1711.5, - 1711, - 1711, - 190 - ], - [ - "2017-12-19T12:43:00+0530", - 1711, - 1712.9, - 1710.55, - 1712, - 1457 - ], - [ - "2017-12-19T12:44:00+0530", - 1712, - 1712, - 1710, - 1711.5, - 888 - ], - [ - "2017-12-19T12:45:00+0530", - 1710.5, - 1711.35, - 1709.65, - 1710.1, - 736 - ], - [ - "2017-12-19T12:46:00+0530", - 1710.1, - 1710.1, - 1709.15, - 1710.05, - 106 - ], - [ - "2017-12-19T12:47:00+0530", - 1709.25, - 1710.05, - 1709.25, - 1710, - 115 - ], - [ - "2017-12-19T12:48:00+0530", - 1710, - 1710.4, - 1709.4, - 1710, - 798 - ], - [ - "2017-12-19T12:49:00+0530", - 1710, - 1710.95, - 1709.3, - 1710.95, - 36 - ], - [ - "2017-12-19T12:50:00+0530", - 1710, - 1711, - 1710, - 1711, - 145 - ], - [ - "2017-12-19T12:51:00+0530", - 1709.95, - 1709.95, - 1709.7, - 1709.7, - 91 - ], - [ - "2017-12-19T12:52:00+0530", - 1709.7, - 1710.4, - 1709.7, - 1710.4, - 403 - ], - [ - "2017-12-19T12:53:00+0530", - 1711, - 1711.5, - 1709.45, - 1710.9, - 1306 - ], - [ - "2017-12-19T12:54:00+0530", - 1710.9, - 1710.9, - 1710.05, - 1710.3, - 63 - ], - [ - "2017-12-19T12:55:00+0530", - 1710.1, - 1710.1, - 1710.1, - 1710.1, - 52 - ], - [ - "2017-12-19T12:56:00+0530", - 1710, - 1710.75, - 1710, - 1710.75, - 30 - ], - [ - "2017-12-19T12:57:00+0530", - 1710.05, - 1710.8, - 1710.05, - 1710.25, - 35 - ], - [ - "2017-12-19T12:58:00+0530", - 1710.25, - 1711.2, - 1710, - 1710, - 718 - ], - [ - "2017-12-19T12:59:00+0530", - 1710.1, - 1710.1, - 1710.1, - 1710.1, - 2 - ], - [ - "2017-12-19T13:00:00+0530", - 1711.35, - 1711.35, - 1710.2, - 1710.2, - 12 - ], - [ - "2017-12-19T13:01:00+0530", - 1710.05, - 1710.25, - 1710.05, - 1710.25, - 25 - ], - [ - "2017-12-19T13:02:00+0530", - 1710.25, - 1710.25, - 1709.1, - 1709.1, - 256 - ], - [ - "2017-12-19T13:03:00+0530", - 1709.1, - 1709.8, - 1708.35, - 1708.35, - 74 - ], - [ - "2017-12-19T13:04:00+0530", - 1708.35, - 1709, - 1708, - 1708.95, - 465 - ], - [ - "2017-12-19T13:05:00+0530", - 1708.25, - 1709.75, - 1708.25, - 1709.75, - 28 - ], - [ - "2017-12-19T13:06:00+0530", - 1709.15, - 1709.65, - 1708.8, - 1709.65, - 228 - ], - [ - "2017-12-19T13:07:00+0530", - 1708.6, - 1708.6, - 1708.6, - 1708.6, - 2 - ], - [ - "2017-12-19T13:08:00+0530", - 1708.6, - 1709, - 1708.05, - 1708.25, - 44 - ], - [ - "2017-12-19T13:09:00+0530", - 1708.25, - 1708.25, - 1708.15, - 1708.15, - 88 - ], - [ - "2017-12-19T13:10:00+0530", - 1708.15, - 1709.9, - 1708.15, - 1709.9, - 456 - ], - [ - "2017-12-19T13:11:00+0530", - 1709.9, - 1709.9, - 1709.1, - 1709.1, - 37 - ], - [ - "2017-12-19T13:12:00+0530", - 1709.1, - 1709.9, - 1709.1, - 1709.5, - 28 - ], - [ - "2017-12-19T13:13:00+0530", - 1709.4, - 1709.4, - 1709.4, - 1709.4, - 21 - ], - [ - "2017-12-19T13:14:00+0530", - 1709.35, - 1709.9, - 1708, - 1708, - 189 - ], - [ - "2017-12-19T13:15:00+0530", - 1708.1, - 1709.8, - 1708.1, - 1709.5, - 137 - ], - [ - "2017-12-19T13:16:00+0530", - 1709.15, - 1709.5, - 1709, - 1709, - 171 - ], - [ - "2017-12-19T13:17:00+0530", - 1709, - 1709.95, - 1709, - 1709, - 84 - ], - [ - "2017-12-19T13:18:00+0530", - 1709, - 1709.9, - 1708.95, - 1709.7, - 223 - ], - [ - "2017-12-19T13:19:00+0530", - 1709, - 1709.75, - 1708.95, - 1708.95, - 60 - ], - [ - "2017-12-19T13:20:00+0530", - 1708.95, - 1710.25, - 1708.95, - 1708.95, - 85 - ], - [ - "2017-12-19T13:21:00+0530", - 1709.15, - 1710.45, - 1709.15, - 1710.2, - 63 - ], - [ - "2017-12-19T13:22:00+0530", - 1711, - 1711, - 1709.35, - 1710.25, - 120 - ], - [ - "2017-12-19T13:23:00+0530", - 1709.4, - 1710.9, - 1709.4, - 1710.9, - 117 - ], - [ - "2017-12-19T13:24:00+0530", - 1709.9, - 1709.9, - 1709.9, - 1709.9, - 3 - ], - [ - "2017-12-19T13:25:00+0530", - 1710, - 1711, - 1710, - 1710.45, - 222 - ], - [ - "2017-12-19T13:26:00+0530", - 1710.35, - 1711.5, - 1710.35, - 1710.35, - 91 - ], - [ - "2017-12-19T13:27:00+0530", - 1711.5, - 1711.5, - 1710.35, - 1710.95, - 127 - ], - [ - "2017-12-19T13:28:00+0530", - 1710.95, - 1710.95, - 1709.55, - 1709.95, - 174 - ], - [ - "2017-12-19T13:29:00+0530", - 1710, - 1710, - 1709.55, - 1710, - 71 - ], - [ - "2017-12-19T13:30:00+0530", - 1709.6, - 1710, - 1709.5, - 1710, - 166 - ], - [ - "2017-12-19T13:31:00+0530", - 1709.55, - 1710, - 1709.55, - 1709.65, - 95 - ], - [ - "2017-12-19T13:32:00+0530", - 1709.6, - 1709.65, - 1709.55, - 1709.55, - 122 - ], - [ - "2017-12-19T13:33:00+0530", - 1709.55, - 1710.85, - 1709.55, - 1709.95, - 146 - ], - [ - "2017-12-19T13:34:00+0530", - 1709.95, - 1710.9, - 1709.95, - 1710.5, - 236 - ], - [ - "2017-12-19T13:35:00+0530", - 1710.5, - 1710.5, - 1710, - 1710.5, - 59 - ], - [ - "2017-12-19T13:36:00+0530", - 1710, - 1710.9, - 1710, - 1710.9, - 116 - ], - [ - "2017-12-19T13:37:00+0530", - 1710, - 1710.95, - 1710, - 1710, - 106 - ], - [ - "2017-12-19T13:38:00+0530", - 1710, - 1710.9, - 1710, - 1710.9, - 109 - ], - [ - "2017-12-19T13:39:00+0530", - 1710.25, - 1710.9, - 1710.25, - 1710.9, - 59 - ], - [ - "2017-12-19T13:40:00+0530", - 1710.25, - 1710.95, - 1710.25, - 1710.9, - 216 - ], - [ - "2017-12-19T13:41:00+0530", - 1710.25, - 1711.15, - 1710.25, - 1711.15, - 1135 - ], - [ - "2017-12-19T13:42:00+0530", - 1711.3, - 1711.9, - 1711.3, - 1711.5, - 88 - ], - [ - "2017-12-19T13:43:00+0530", - 1711.5, - 1712, - 1711.45, - 1712, - 181 - ], - [ - "2017-12-19T13:44:00+0530", - 1712, - 1714.95, - 1711.9, - 1714.95, - 1240 - ], - [ - "2017-12-19T13:45:00+0530", - 1714.95, - 1714.95, - 1713.85, - 1714, - 470 - ], - [ - "2017-12-19T13:46:00+0530", - 1714, - 1714, - 1713.7, - 1713.85, - 214 - ], - [ - "2017-12-19T13:47:00+0530", - 1712.8, - 1713, - 1712.45, - 1713, - 251 - ], - [ - "2017-12-19T13:48:00+0530", - 1712.8, - 1713.45, - 1712.8, - 1713.4, - 126 - ], - [ - "2017-12-19T13:49:00+0530", - 1713.85, - 1713.9, - 1713.15, - 1713.3, - 508 - ], - [ - "2017-12-19T13:50:00+0530", - 1713.15, - 1713.9, - 1713.15, - 1713.55, - 187 - ], - [ - "2017-12-19T13:51:00+0530", - 1713.55, - 1714.95, - 1713.3, - 1713.6, - 250 - ], - [ - "2017-12-19T13:52:00+0530", - 1713.6, - 1713.6, - 1713.55, - 1713.6, - 127 - ], - [ - "2017-12-19T13:53:00+0530", - 1713.6, - 1714.5, - 1713.55, - 1713.55, - 126 - ], - [ - "2017-12-19T13:54:00+0530", - 1713.55, - 1714.5, - 1713.3, - 1714.5, - 476 - ], - [ - "2017-12-19T13:55:00+0530", - 1713.5, - 1714.9, - 1713.5, - 1714.9, - 273 - ], - [ - "2017-12-19T13:56:00+0530", - 1714.5, - 1714.5, - 1713.5, - 1714.5, - 117 - ], - [ - "2017-12-19T13:57:00+0530", - 1714.5, - 1714.5, - 1713.45, - 1714, - 469 - ], - [ - "2017-12-19T13:58:00+0530", - 1714, - 1714.85, - 1713.3, - 1714, - 373 - ], - [ - "2017-12-19T13:59:00+0530", - 1713.55, - 1716, - 1713.55, - 1715.5, - 1360 - ], - [ - "2017-12-19T14:00:00+0530", - 1715.5, - 1716, - 1715.5, - 1715.5, - 172 - ], - [ - "2017-12-19T14:01:00+0530", - 1715.5, - 1716.75, - 1715.5, - 1716.05, - 1410 - ], - [ - "2017-12-19T14:02:00+0530", - 1716.05, - 1716.5, - 1716.05, - 1716.5, - 431 - ], - [ - "2017-12-19T14:03:00+0530", - 1716.05, - 1716.6, - 1716.05, - 1716.1, - 756 - ], - [ - "2017-12-19T14:04:00+0530", - 1716.1, - 1717, - 1716, - 1716, - 720 - ], - [ - "2017-12-19T14:05:00+0530", - 1716, - 1716.9, - 1716, - 1716.9, - 127 - ], - [ - "2017-12-19T14:06:00+0530", - 1716.05, - 1716.05, - 1716, - 1716, - 32 - ], - [ - "2017-12-19T14:07:00+0530", - 1716, - 1716.5, - 1716, - 1716, - 269 - ], - [ - "2017-12-19T14:08:00+0530", - 1716, - 1716.05, - 1714.5, - 1715.9, - 1173 - ], - [ - "2017-12-19T14:09:00+0530", - 1715.9, - 1715.9, - 1714.45, - 1715, - 127 - ], - [ - "2017-12-19T14:10:00+0530", - 1715, - 1715, - 1714.45, - 1714.5, - 139 - ], - [ - "2017-12-19T14:11:00+0530", - 1714.5, - 1714.5, - 1714.05, - 1714.05, - 318 - ], - [ - "2017-12-19T14:12:00+0530", - 1714.05, - 1715.35, - 1714, - 1714.05, - 185 - ], - [ - "2017-12-19T14:13:00+0530", - 1714.05, - 1715.9, - 1714.05, - 1715.45, - 206 - ], - [ - "2017-12-19T14:14:00+0530", - 1714.2, - 1715.7, - 1714.2, - 1715.7, - 59 - ], - [ - "2017-12-19T14:15:00+0530", - 1714.25, - 1716, - 1714.2, - 1715.9, - 210 - ], - [ - "2017-12-19T14:16:00+0530", - 1715.9, - 1716, - 1715.8, - 1715.8, - 232 - ], - [ - "2017-12-19T14:17:00+0530", - 1715.8, - 1716, - 1715, - 1715, - 136 - ], - [ - "2017-12-19T14:18:00+0530", - 1714.7, - 1715.7, - 1714.6, - 1715.7, - 45 - ], - [ - "2017-12-19T14:19:00+0530", - 1714.65, - 1716, - 1714.55, - 1714.75, - 220 - ], - [ - "2017-12-19T14:20:00+0530", - 1714.75, - 1715.95, - 1714.75, - 1715.9, - 150 - ], - [ - "2017-12-19T14:21:00+0530", - 1715.15, - 1715.9, - 1715.15, - 1715.5, - 236 - ], - [ - "2017-12-19T14:22:00+0530", - 1715.4, - 1716, - 1715.4, - 1716, - 378 - ], - [ - "2017-12-19T14:23:00+0530", - 1715.55, - 1716, - 1715.55, - 1716, - 159 - ], - [ - "2017-12-19T14:24:00+0530", - 1716, - 1716, - 1715.45, - 1715.9, - 126 - ], - [ - "2017-12-19T14:25:00+0530", - 1715.45, - 1715.9, - 1715.45, - 1715.9, - 99 - ], - [ - "2017-12-19T14:26:00+0530", - 1715.45, - 1716.5, - 1715.45, - 1716.5, - 506 - ], - [ - "2017-12-19T14:27:00+0530", - 1716.5, - 1717.1, - 1715.75, - 1716, - 274 - ], - [ - "2017-12-19T14:28:00+0530", - 1716, - 1717.5, - 1716, - 1717.4, - 301 - ], - [ - "2017-12-19T14:29:00+0530", - 1717.5, - 1717.65, - 1717.35, - 1717.35, - 925 - ], - [ - "2017-12-19T14:30:00+0530", - 1717.35, - 1717.95, - 1716.95, - 1717.95, - 331 - ], - [ - "2017-12-19T14:31:00+0530", - 1717.95, - 1718.6, - 1717.05, - 1718.2, - 2218 - ], - [ - "2017-12-19T14:32:00+0530", - 1718.2, - 1720, - 1718.1, - 1718.7, - 3441 - ], - [ - "2017-12-19T14:33:00+0530", - 1718.7, - 1721, - 1718.7, - 1721, - 1661 - ], - [ - "2017-12-19T14:34:00+0530", - 1721.6, - 1723, - 1721.6, - 1722, - 2315 - ], - [ - "2017-12-19T14:35:00+0530", - 1721, - 1721.9, - 1720.15, - 1720.5, - 1289 - ], - [ - "2017-12-19T14:36:00+0530", - 1719.7, - 1721, - 1719.7, - 1720.7, - 1002 - ], - [ - "2017-12-19T14:37:00+0530", - 1720.9, - 1721.2, - 1720.7, - 1721, - 676 - ], - [ - "2017-12-19T14:38:00+0530", - 1720.95, - 1721, - 1720.5, - 1720.5, - 1366 - ], - [ - "2017-12-19T14:39:00+0530", - 1720.8, - 1720.95, - 1720.5, - 1720.5, - 958 - ], - [ - "2017-12-19T14:40:00+0530", - 1720.15, - 1720.5, - 1720, - 1720, - 677 - ], - [ - "2017-12-19T14:41:00+0530", - 1720, - 1720.4, - 1719.85, - 1720.4, - 2110 - ], - [ - "2017-12-19T14:42:00+0530", - 1719.95, - 1720.35, - 1719.8, - 1719.95, - 763 - ], - [ - "2017-12-19T14:43:00+0530", - 1720, - 1720.75, - 1720, - 1720.75, - 1215 - ], - [ - "2017-12-19T14:44:00+0530", - 1720.75, - 1723, - 1720.75, - 1722.85, - 1117 - ], - [ - "2017-12-19T14:45:00+0530", - 1722.9, - 1724.4, - 1722.9, - 1724, - 1839 - ], - [ - "2017-12-19T14:46:00+0530", - 1724.25, - 1724.35, - 1723.2, - 1723.35, - 1418 - ], - [ - "2017-12-19T14:47:00+0530", - 1723.35, - 1724, - 1722.9, - 1723.7, - 841 - ], - [ - "2017-12-19T14:48:00+0530", - 1723.5, - 1723.9, - 1723, - 1723.9, - 782 - ], - [ - "2017-12-19T14:49:00+0530", - 1723.85, - 1725.5, - 1723.85, - 1725.4, - 4940 - ], - [ - "2017-12-19T14:50:00+0530", - 1725.35, - 1727.45, - 1725.25, - 1726.9, - 5052 - ], - [ - "2017-12-19T14:51:00+0530", - 1727, - 1728.15, - 1727, - 1728.15, - 3821 - ], - [ - "2017-12-19T14:52:00+0530", - 1728.2, - 1729.65, - 1728.2, - 1729.65, - 3444 - ], - [ - "2017-12-19T14:53:00+0530", - 1729.7, - 1731.95, - 1729.7, - 1731.25, - 5146 - ], - [ - "2017-12-19T14:54:00+0530", - 1730.1, - 1730.1, - 1728.2, - 1728.45, - 1599 - ], - [ - "2017-12-19T14:55:00+0530", - 1728.4, - 1728.9, - 1727.3, - 1727.7, - 920 - ], - [ - "2017-12-19T14:56:00+0530", - 1727.35, - 1727.55, - 1725.2, - 1725.6, - 1132 - ], - [ - "2017-12-19T14:57:00+0530", - 1725.55, - 1727.05, - 1725, - 1726.2, - 3696 - ], - [ - "2017-12-19T14:58:00+0530", - 1726.2, - 1728, - 1726.2, - 1727.95, - 841 - ], - [ - "2017-12-19T14:59:00+0530", - 1727.9, - 1729.15, - 1727.9, - 1729.05, - 1264 - ], - [ - "2017-12-19T15:00:00+0530", - 1729.15, - 1729.15, - 1728.1, - 1728.4, - 949 - ], - [ - "2017-12-19T15:01:00+0530", - 1728.45, - 1728.9, - 1728.45, - 1728.7, - 1569 - ], - [ - "2017-12-19T15:02:00+0530", - 1728.65, - 1729.05, - 1728.65, - 1728.65, - 818 - ], - [ - "2017-12-19T15:03:00+0530", - 1728.65, - 1728.65, - 1728.2, - 1728.45, - 1162 - ], - [ - "2017-12-19T15:04:00+0530", - 1728.5, - 1729.1, - 1728.45, - 1729.1, - 1180 - ], - [ - "2017-12-19T15:05:00+0530", - 1729.05, - 1729.2, - 1729.05, - 1729.1, - 1115 - ], - [ - "2017-12-19T15:06:00+0530", - 1729.1, - 1730.5, - 1729.1, - 1730.5, - 2069 - ], - [ - "2017-12-19T15:07:00+0530", - 1730.45, - 1731.95, - 1730.45, - 1731.95, - 868 - ], - [ - "2017-12-19T15:08:00+0530", - 1732, - 1733.35, - 1732, - 1733, - 2155 - ], - [ - "2017-12-19T15:09:00+0530", - 1732.9, - 1733.6, - 1732.9, - 1733.45, - 1514 - ], - [ - "2017-12-19T15:10:00+0530", - 1733.4, - 1733.4, - 1729.05, - 1729.2, - 2064 - ], - [ - "2017-12-19T15:11:00+0530", - 1729.2, - 1730, - 1728.65, - 1728.75, - 1002 - ], - [ - "2017-12-19T15:12:00+0530", - 1728.75, - 1728.9, - 1728.65, - 1728.8, - 1051 - ], - [ - "2017-12-19T15:13:00+0530", - 1728.7, - 1729.25, - 1727.8, - 1727.95, - 1664 - ], - [ - "2017-12-19T15:14:00+0530", - 1727.95, - 1728.9, - 1726.55, - 1727.1, - 2272 - ], - [ - "2017-12-19T15:15:00+0530", - 1727.1, - 1728.05, - 1726, - 1728.05, - 636 - ], - [ - "2017-12-19T15:16:00+0530", - 1728.05, - 1730, - 1728.05, - 1729.2, - 1880 - ], - [ - "2017-12-19T15:17:00+0530", - 1729.2, - 1729.35, - 1729.2, - 1729.35, - 680 - ], - [ - "2017-12-19T15:18:00+0530", - 1729.4, - 1729.9, - 1729.35, - 1729.9, - 1481 - ], - [ - "2017-12-19T15:19:00+0530", - 1729.9, - 1730.95, - 1729.8, - 1730.95, - 1323 - ], - [ - "2017-12-19T15:20:00+0530", - 1730.95, - 1731, - 1730.9, - 1730.9, - 1413 - ], - [ - "2017-12-19T15:21:00+0530", - 1730.9, - 1731, - 1730.9, - 1730.95, - 1316 - ], - [ - "2017-12-19T15:22:00+0530", - 1730.95, - 1733, - 1730.9, - 1732.7, - 2481 - ], - [ - "2017-12-19T15:23:00+0530", - 1732.7, - 1733.9, - 1732.65, - 1732.75, - 1626 - ], - [ - "2017-12-19T15:24:00+0530", - 1732.75, - 1732.75, - 1731.45, - 1731.75, - 1481 - ], - [ - "2017-12-19T15:25:00+0530", - 1731.4, - 1731.4, - 1730.4, - 1731, - 3229 - ], - [ - "2017-12-19T15:26:00+0530", - 1731, - 1731.85, - 1731, - 1731.2, - 1893 - ], - [ - "2017-12-19T15:27:00+0530", - 1731.25, - 1731.7, - 1729.95, - 1729.95, - 3772 - ], - [ - "2017-12-19T15:28:00+0530", - 1729.95, - 1730.35, - 1727.2, - 1730, - 300 - ], - [ - "2017-12-19T15:29:00+0530", - 1730, - 1731, - 1726, - 1726, - 882 - ], - [ - "2017-12-20T09:15:00+0530", - 1726.95, - 1727.05, - 1723, - 1724.35, - 932 - ], - [ - "2017-12-20T09:16:00+0530", - 1724.35, - 1726, - 1722.1, - 1725, - 1601 - ], - [ - "2017-12-20T09:17:00+0530", - 1724.05, - 1726.8, - 1723.8, - 1726.5, - 1063 - ], - [ - "2017-12-20T09:18:00+0530", - 1726.5, - 1726.5, - 1724.3, - 1726, - 261 - ], - [ - "2017-12-20T09:19:00+0530", - 1726, - 1726.45, - 1724.5, - 1725.4, - 1075 - ], - [ - "2017-12-20T09:20:00+0530", - 1724.95, - 1726, - 1724.05, - 1726, - 242 - ], - [ - "2017-12-20T09:21:00+0530", - 1726, - 1728, - 1725.55, - 1728, - 1321 - ], - [ - "2017-12-20T09:22:00+0530", - 1728, - 1729.45, - 1727.6, - 1729.45, - 718 - ], - [ - "2017-12-20T09:23:00+0530", - 1729.45, - 1730, - 1728, - 1728.95, - 253 - ], - [ - "2017-12-20T09:24:00+0530", - 1728.95, - 1731.8, - 1728.95, - 1730.7, - 1442 - ], - [ - "2017-12-20T09:25:00+0530", - 1730.7, - 1733.2, - 1730.7, - 1732.1, - 1718 - ], - [ - "2017-12-20T09:26:00+0530", - 1732.1, - 1739.9, - 1732.1, - 1736.8, - 4137 - ], - [ - "2017-12-20T09:27:00+0530", - 1736.8, - 1737.15, - 1735.9, - 1735.9, - 1235 - ], - [ - "2017-12-20T09:28:00+0530", - 1735.05, - 1736, - 1734.75, - 1734.75, - 497 - ], - [ - "2017-12-20T09:29:00+0530", - 1734.75, - 1736, - 1734, - 1736, - 953 - ], - [ - "2017-12-20T09:30:00+0530", - 1735.15, - 1735.75, - 1734.05, - 1734.25, - 677 - ], - [ - "2017-12-20T09:31:00+0530", - 1734.25, - 1737.05, - 1734.25, - 1736.9, - 1765 - ], - [ - "2017-12-20T09:32:00+0530", - 1736.85, - 1736.85, - 1734.95, - 1736, - 846 - ], - [ - "2017-12-20T09:33:00+0530", - 1736, - 1736.95, - 1736, - 1736.85, - 339 - ], - [ - "2017-12-20T09:34:00+0530", - 1736.85, - 1736.85, - 1735.3, - 1735.3, - 26 - ], - [ - "2017-12-20T09:35:00+0530", - 1735, - 1735.7, - 1734.1, - 1734.1, - 511 - ], - [ - "2017-12-20T09:36:00+0530", - 1734.1, - 1734.85, - 1734, - 1734.85, - 511 - ], - [ - "2017-12-20T09:37:00+0530", - 1734.85, - 1736, - 1734, - 1736, - 595 - ], - [ - "2017-12-20T09:38:00+0530", - 1736, - 1736, - 1735, - 1735.25, - 329 - ], - [ - "2017-12-20T09:39:00+0530", - 1735, - 1736, - 1735, - 1735.25, - 562 - ], - [ - "2017-12-20T09:40:00+0530", - 1735.25, - 1735.95, - 1735, - 1735, - 195 - ], - [ - "2017-12-20T09:41:00+0530", - 1734.85, - 1735.8, - 1734.1, - 1734.1, - 260 - ], - [ - "2017-12-20T09:42:00+0530", - 1734.1, - 1734.5, - 1734, - 1734, - 454 - ], - [ - "2017-12-20T09:43:00+0530", - 1734, - 1734, - 1731.25, - 1733, - 490 - ], - [ - "2017-12-20T09:44:00+0530", - 1733, - 1733.5, - 1733, - 1733.5, - 53 - ], - [ - "2017-12-20T09:45:00+0530", - 1734.45, - 1734.45, - 1731.65, - 1734, - 628 - ], - [ - "2017-12-20T09:46:00+0530", - 1734, - 1734, - 1733.9, - 1733.9, - 446 - ], - [ - "2017-12-20T09:47:00+0530", - 1733.9, - 1734, - 1733, - 1733, - 453 - ], - [ - "2017-12-20T09:48:00+0530", - 1733, - 1734.05, - 1733, - 1734.05, - 163 - ], - [ - "2017-12-20T09:49:00+0530", - 1733.05, - 1733.7, - 1733.05, - 1733.2, - 88 - ], - [ - "2017-12-20T09:50:00+0530", - 1733.2, - 1733.8, - 1733, - 1733.65, - 118 - ], - [ - "2017-12-20T09:51:00+0530", - 1733, - 1733.1, - 1733, - 1733, - 603 - ], - [ - "2017-12-20T09:52:00+0530", - 1733, - 1733.65, - 1733, - 1733, - 125 - ], - [ - "2017-12-20T09:53:00+0530", - 1733, - 1733.1, - 1732.05, - 1732.05, - 557 - ], - [ - "2017-12-20T09:54:00+0530", - 1732.05, - 1732.05, - 1732, - 1732, - 193 - ], - [ - "2017-12-20T09:55:00+0530", - 1732, - 1732, - 1731.05, - 1731.25, - 601 - ], - [ - "2017-12-20T09:56:00+0530", - 1731.25, - 1731.25, - 1730.05, - 1730.05, - 620 - ], - [ - "2017-12-20T09:57:00+0530", - 1730.05, - 1730.5, - 1730, - 1730.5, - 562 - ], - [ - "2017-12-20T09:58:00+0530", - 1730.5, - 1731.05, - 1730.5, - 1731.05, - 146 - ], - [ - "2017-12-20T09:59:00+0530", - 1731.05, - 1732, - 1731, - 1731, - 10 - ], - [ - "2017-12-20T10:00:00+0530", - 1731, - 1732, - 1731, - 1731.05, - 182 - ], - [ - "2017-12-20T10:01:00+0530", - 1731.05, - 1732.85, - 1730.5, - 1732.85, - 340 - ], - [ - "2017-12-20T10:02:00+0530", - 1732.85, - 1732.85, - 1731.8, - 1731.8, - 90 - ], - [ - "2017-12-20T10:03:00+0530", - 1731.8, - 1733, - 1731.25, - 1732.9, - 382 - ], - [ - "2017-12-20T10:04:00+0530", - 1732.9, - 1732.9, - 1732.9, - 1732.9, - 0 - ], - [ - "2017-12-20T10:05:00+0530", - 1732.9, - 1733, - 1732.75, - 1733, - 61 - ], - [ - "2017-12-20T10:06:00+0530", - 1733, - 1733, - 1732.85, - 1732.95, - 50 - ], - [ - "2017-12-20T10:07:00+0530", - 1732.95, - 1732.95, - 1732, - 1732, - 1 - ], - [ - "2017-12-20T10:08:00+0530", - 1732, - 1732, - 1732, - 1732, - 0 - ], - [ - "2017-12-20T10:09:00+0530", - 1732, - 1732.85, - 1732, - 1732, - 20 - ], - [ - "2017-12-20T10:10:00+0530", - 1732, - 1732, - 1732, - 1732, - 75 - ], - [ - "2017-12-20T10:11:00+0530", - 1732, - 1732, - 1731.25, - 1731.25, - 24 - ], - [ - "2017-12-20T10:12:00+0530", - 1731.25, - 1731.95, - 1731.25, - 1731.95, - 102 - ], - [ - "2017-12-20T10:13:00+0530", - 1731.95, - 1731.95, - 1731.9, - 1731.9, - 2 - ], - [ - "2017-12-20T10:14:00+0530", - 1731.9, - 1731.9, - 1731.25, - 1731.25, - 500 - ], - [ - "2017-12-20T10:15:00+0530", - 1731, - 1731, - 1730.5, - 1730.5, - 307 - ], - [ - "2017-12-20T10:16:00+0530", - 1730.5, - 1731.75, - 1730.5, - 1731, - 86 - ], - [ - "2017-12-20T10:17:00+0530", - 1731, - 1731, - 1730.55, - 1730.9, - 164 - ], - [ - "2017-12-20T10:18:00+0530", - 1730.55, - 1731, - 1730.55, - 1731, - 170 - ], - [ - "2017-12-20T10:19:00+0530", - 1731, - 1731, - 1730.55, - 1730.55, - 68 - ], - [ - "2017-12-20T10:20:00+0530", - 1730.55, - 1731.2, - 1730.55, - 1731.05, - 52 - ], - [ - "2017-12-20T10:21:00+0530", - 1731.05, - 1731.5, - 1726.3, - 1728.4, - 4758 - ], - [ - "2017-12-20T10:22:00+0530", - 1728.4, - 1729.45, - 1726.55, - 1729.45, - 548 - ], - [ - "2017-12-20T10:23:00+0530", - 1729.45, - 1729.45, - 1726.75, - 1726.75, - 373 - ], - [ - "2017-12-20T10:24:00+0530", - 1726.75, - 1729, - 1726.65, - 1728.2, - 113 - ], - [ - "2017-12-20T10:25:00+0530", - 1728.2, - 1728.2, - 1727.35, - 1728, - 339 - ], - [ - "2017-12-20T10:26:00+0530", - 1727.5, - 1729, - 1727.5, - 1729, - 249 - ], - [ - "2017-12-20T10:27:00+0530", - 1729, - 1731, - 1728.45, - 1731, - 1062 - ], - [ - "2017-12-20T10:28:00+0530", - 1731, - 1731, - 1729.2, - 1729.4, - 78 - ], - [ - "2017-12-20T10:29:00+0530", - 1729.4, - 1730.15, - 1729.35, - 1730.15, - 164 - ], - [ - "2017-12-20T10:30:00+0530", - 1730.15, - 1730.45, - 1729.6, - 1729.6, - 129 - ], - [ - "2017-12-20T10:31:00+0530", - 1729.6, - 1731, - 1729.6, - 1731, - 261 - ], - [ - "2017-12-20T10:32:00+0530", - 1731, - 1731, - 1729.3, - 1729.35, - 187 - ], - [ - "2017-12-20T10:33:00+0530", - 1729.35, - 1729.6, - 1729.35, - 1729.6, - 61 - ], - [ - "2017-12-20T10:34:00+0530", - 1729.6, - 1729.6, - 1727.3, - 1727.3, - 148 - ], - [ - "2017-12-20T10:35:00+0530", - 1727.3, - 1730.9, - 1727.3, - 1729.65, - 156 - ], - [ - "2017-12-20T10:36:00+0530", - 1729.65, - 1729.65, - 1729.65, - 1729.65, - 0 - ], - [ - "2017-12-20T10:37:00+0530", - 1729.65, - 1729.65, - 1728, - 1728, - 204 - ], - [ - "2017-12-20T10:38:00+0530", - 1728, - 1729.1, - 1728, - 1728.65, - 163 - ], - [ - "2017-12-20T10:39:00+0530", - 1728.65, - 1728.65, - 1727, - 1727.85, - 460 - ], - [ - "2017-12-20T10:40:00+0530", - 1727.85, - 1727.85, - 1726.65, - 1726.65, - 583 - ], - [ - "2017-12-20T10:41:00+0530", - 1726.65, - 1726.9, - 1726.2, - 1726.2, - 561 - ], - [ - "2017-12-20T10:42:00+0530", - 1726.15, - 1726.9, - 1726.15, - 1726.55, - 124 - ], - [ - "2017-12-20T10:43:00+0530", - 1726.75, - 1726.75, - 1724.45, - 1725, - 1114 - ], - [ - "2017-12-20T10:44:00+0530", - 1725, - 1725, - 1724.8, - 1724.8, - 570 - ], - [ - "2017-12-20T10:45:00+0530", - 1724.8, - 1726.25, - 1724.7, - 1724.7, - 1373 - ], - [ - "2017-12-20T10:46:00+0530", - 1724.7, - 1725.7, - 1724.7, - 1725.05, - 99 - ], - [ - "2017-12-20T10:47:00+0530", - 1725.05, - 1725.95, - 1725.05, - 1725.95, - 77 - ], - [ - "2017-12-20T10:48:00+0530", - 1725.95, - 1725.95, - 1725.3, - 1725.3, - 22 - ], - [ - "2017-12-20T10:49:00+0530", - 1725.6, - 1725.95, - 1725.35, - 1725.35, - 45 - ], - [ - "2017-12-20T10:50:00+0530", - 1725.35, - 1725.95, - 1725.35, - 1725.9, - 72 - ], - [ - "2017-12-20T10:51:00+0530", - 1725.9, - 1725.9, - 1725.9, - 1725.9, - 0 - ], - [ - "2017-12-20T10:52:00+0530", - 1725.85, - 1725.95, - 1725.85, - 1725.95, - 29 - ], - [ - "2017-12-20T10:53:00+0530", - 1725.95, - 1725.95, - 1725, - 1725.4, - 207 - ], - [ - "2017-12-20T10:54:00+0530", - 1725.4, - 1725.4, - 1724.6, - 1725, - 405 - ], - [ - "2017-12-20T10:55:00+0530", - 1725, - 1725, - 1724.65, - 1725, - 33 - ], - [ - "2017-12-20T10:56:00+0530", - 1724.7, - 1724.7, - 1724.65, - 1724.65, - 50 - ], - [ - "2017-12-20T10:57:00+0530", - 1724.65, - 1724.9, - 1724.65, - 1724.9, - 3 - ], - [ - "2017-12-20T10:58:00+0530", - 1724.9, - 1725, - 1724.9, - 1725, - 399 - ], - [ - "2017-12-20T10:59:00+0530", - 1725, - 1725, - 1724.9, - 1724.9, - 6 - ], - [ - "2017-12-20T11:00:00+0530", - 1724.9, - 1724.9, - 1724.6, - 1724.8, - 128 - ], - [ - "2017-12-20T11:01:00+0530", - 1724.8, - 1725, - 1724.65, - 1725, - 624 - ], - [ - "2017-12-20T11:02:00+0530", - 1725, - 1727, - 1725, - 1727, - 355 - ], - [ - "2017-12-20T11:03:00+0530", - 1727, - 1728.2, - 1726.75, - 1726.75, - 752 - ], - [ - "2017-12-20T11:04:00+0530", - 1726.75, - 1727.6, - 1726.75, - 1727.6, - 33 - ], - [ - "2017-12-20T11:05:00+0530", - 1727.6, - 1728, - 1727.6, - 1727.6, - 685 - ], - [ - "2017-12-20T11:06:00+0530", - 1727.6, - 1728.15, - 1727.6, - 1727.8, - 4 - ], - [ - "2017-12-20T11:07:00+0530", - 1727.8, - 1728.15, - 1727.6, - 1728.15, - 209 - ], - [ - "2017-12-20T11:08:00+0530", - 1728.15, - 1728.15, - 1726.75, - 1726.8, - 99 - ], - [ - "2017-12-20T11:09:00+0530", - 1726.8, - 1727.6, - 1726.3, - 1726.3, - 55 - ], - [ - "2017-12-20T11:10:00+0530", - 1726.3, - 1727.75, - 1726.3, - 1727.75, - 40 - ], - [ - "2017-12-20T11:11:00+0530", - 1727.75, - 1727.75, - 1725.05, - 1725.05, - 769 - ], - [ - "2017-12-20T11:12:00+0530", - 1725.05, - 1727.75, - 1725.05, - 1726.85, - 186 - ], - [ - "2017-12-20T11:13:00+0530", - 1726.85, - 1727.65, - 1726.8, - 1726.85, - 48 - ], - [ - "2017-12-20T11:14:00+0530", - 1726.85, - 1728.2, - 1725.6, - 1728.2, - 288 - ], - [ - "2017-12-20T11:15:00+0530", - 1728.2, - 1729.75, - 1726.85, - 1726.85, - 350 - ], - [ - "2017-12-20T11:16:00+0530", - 1726.85, - 1726.85, - 1726.85, - 1726.85, - 0 - ], - [ - "2017-12-20T11:17:00+0530", - 1726.85, - 1727.5, - 1726.5, - 1727.5, - 11 - ], - [ - "2017-12-20T11:18:00+0530", - 1727.5, - 1727.5, - 1726.6, - 1726.6, - 44 - ], - [ - "2017-12-20T11:19:00+0530", - 1726.6, - 1727.5, - 1726.6, - 1727.5, - 5 - ], - [ - "2017-12-20T11:20:00+0530", - 1726.75, - 1727, - 1726.75, - 1727, - 19 - ], - [ - "2017-12-20T11:21:00+0530", - 1727, - 1727.4, - 1727, - 1727, - 128 - ], - [ - "2017-12-20T11:22:00+0530", - 1727, - 1727, - 1726.1, - 1726.1, - 501 - ], - [ - "2017-12-20T11:23:00+0530", - 1726.1, - 1726.1, - 1724, - 1724.1, - 1129 - ], - [ - "2017-12-20T11:24:00+0530", - 1724.15, - 1724.85, - 1724.15, - 1724.65, - 413 - ], - [ - "2017-12-20T11:25:00+0530", - 1724.65, - 1724.65, - 1723.25, - 1723.45, - 976 - ], - [ - "2017-12-20T11:26:00+0530", - 1723.45, - 1723.9, - 1722.5, - 1722.5, - 1370 - ], - [ - "2017-12-20T11:27:00+0530", - 1722, - 1725.45, - 1721.5, - 1724.95, - 1484 - ], - [ - "2017-12-20T11:28:00+0530", - 1724.95, - 1724.95, - 1722, - 1722, - 348 - ], - [ - "2017-12-20T11:29:00+0530", - 1722, - 1724.15, - 1722, - 1724.15, - 102 - ], - [ - "2017-12-20T11:30:00+0530", - 1724.15, - 1725.7, - 1724.15, - 1725.25, - 600 - ], - [ - "2017-12-20T11:31:00+0530", - 1725.25, - 1725.4, - 1723.95, - 1724, - 1061 - ], - [ - "2017-12-20T11:32:00+0530", - 1724, - 1725.55, - 1724, - 1725, - 388 - ], - [ - "2017-12-20T11:33:00+0530", - 1725, - 1727, - 1725, - 1726.45, - 861 - ], - [ - "2017-12-20T11:34:00+0530", - 1726.45, - 1727, - 1726.4, - 1726.4, - 170 - ], - [ - "2017-12-20T11:35:00+0530", - 1726.4, - 1726.4, - 1726.25, - 1726.3, - 14 - ], - [ - "2017-12-20T11:36:00+0530", - 1726.3, - 1728, - 1726.3, - 1727.65, - 341 - ], - [ - "2017-12-20T11:37:00+0530", - 1727.65, - 1727.65, - 1726.3, - 1727.35, - 113 - ], - [ - "2017-12-20T11:38:00+0530", - 1727.35, - 1728, - 1726.6, - 1726.6, - 290 - ], - [ - "2017-12-20T11:39:00+0530", - 1726.6, - 1726.6, - 1726.6, - 1726.6, - 0 - ], - [ - "2017-12-20T11:40:00+0530", - 1726.6, - 1726.6, - 1726.6, - 1726.6, - 0 - ], - [ - "2017-12-20T11:41:00+0530", - 1726.3, - 1726.4, - 1726.3, - 1726.4, - 72 - ], - [ - "2017-12-20T11:42:00+0530", - 1726.4, - 1728.35, - 1726.4, - 1728.35, - 324 - ], - [ - "2017-12-20T11:43:00+0530", - 1728.35, - 1728.6, - 1728.35, - 1728.55, - 200 - ], - [ - "2017-12-20T11:44:00+0530", - 1728.55, - 1729.9, - 1728.5, - 1728.5, - 235 - ], - [ - "2017-12-20T11:45:00+0530", - 1728.5, - 1728.5, - 1728.5, - 1728.5, - 20 - ], - [ - "2017-12-20T11:46:00+0530", - 1728.5, - 1729.4, - 1728, - 1728, - 195 - ], - [ - "2017-12-20T11:47:00+0530", - 1728, - 1728.1, - 1728, - 1728.1, - 9 - ], - [ - "2017-12-20T11:48:00+0530", - 1728.1, - 1728.9, - 1728.1, - 1728.15, - 66 - ], - [ - "2017-12-20T11:49:00+0530", - 1728.15, - 1728.15, - 1728.1, - 1728.1, - 5 - ], - [ - "2017-12-20T11:50:00+0530", - 1728, - 1728, - 1726.4, - 1728, - 1027 - ], - [ - "2017-12-20T11:51:00+0530", - 1728, - 1729, - 1728, - 1728.35, - 10 - ], - [ - "2017-12-20T11:52:00+0530", - 1728.35, - 1728.35, - 1728.35, - 1728.35, - 8 - ], - [ - "2017-12-20T11:53:00+0530", - 1728.35, - 1728.35, - 1728.35, - 1728.35, - 87 - ], - [ - "2017-12-20T11:54:00+0530", - 1728.35, - 1728.35, - 1728.35, - 1728.35, - 0 - ], - [ - "2017-12-20T11:55:00+0530", - 1728.35, - 1729.4, - 1727.65, - 1727.65, - 196 - ], - [ - "2017-12-20T11:56:00+0530", - 1727.65, - 1729.4, - 1727.65, - 1729.1, - 125 - ], - [ - "2017-12-20T11:57:00+0530", - 1729.1, - 1729.1, - 1729.1, - 1729.1, - 0 - ], - [ - "2017-12-20T11:58:00+0530", - 1729.1, - 1729.1, - 1728.85, - 1729.1, - 101 - ], - [ - "2017-12-20T11:59:00+0530", - 1729.1, - 1729.1, - 1728.05, - 1728.05, - 25 - ], - [ - "2017-12-20T12:00:00+0530", - 1728.05, - 1728.05, - 1728, - 1728, - 118 - ], - [ - "2017-12-20T12:01:00+0530", - 1728, - 1728, - 1727.7, - 1727.7, - 51 - ], - [ - "2017-12-20T12:02:00+0530", - 1727.7, - 1727.7, - 1727.7, - 1727.7, - 1 - ], - [ - "2017-12-20T12:03:00+0530", - 1727.7, - 1729, - 1727.7, - 1729, - 245 - ], - [ - "2017-12-20T12:04:00+0530", - 1729, - 1729, - 1727, - 1727, - 150 - ], - [ - "2017-12-20T12:05:00+0530", - 1727, - 1727, - 1727, - 1727, - 0 - ], - [ - "2017-12-20T12:06:00+0530", - 1727, - 1727, - 1727, - 1727, - 0 - ], - [ - "2017-12-20T12:07:00+0530", - 1727, - 1728.25, - 1727, - 1728.25, - 50 - ], - [ - "2017-12-20T12:08:00+0530", - 1728.25, - 1728.25, - 1728.25, - 1728.25, - 0 - ], - [ - "2017-12-20T12:09:00+0530", - 1728.25, - 1728.25, - 1727.4, - 1727.4, - 58 - ], - [ - "2017-12-20T12:10:00+0530", - 1727.4, - 1727.4, - 1726.65, - 1726.65, - 228 - ], - [ - "2017-12-20T12:11:00+0530", - 1726.65, - 1727, - 1726.65, - 1726.9, - 5 - ], - [ - "2017-12-20T12:12:00+0530", - 1726.9, - 1726.9, - 1725.15, - 1725.15, - 147 - ], - [ - "2017-12-20T12:13:00+0530", - 1725.15, - 1725.15, - 1725, - 1725, - 323 - ], - [ - "2017-12-20T12:14:00+0530", - 1725, - 1726.1, - 1725, - 1726.1, - 231 - ], - [ - "2017-12-20T12:15:00+0530", - 1726.1, - 1726.8, - 1725.15, - 1726.8, - 83 - ], - [ - "2017-12-20T12:16:00+0530", - 1726.8, - 1726.8, - 1726.7, - 1726.7, - 14 - ], - [ - "2017-12-20T12:17:00+0530", - 1726.7, - 1726.7, - 1725.8, - 1725.8, - 82 - ], - [ - "2017-12-20T12:18:00+0530", - 1725.8, - 1725.8, - 1725.8, - 1725.8, - 22 - ], - [ - "2017-12-20T12:19:00+0530", - 1725.85, - 1725.85, - 1725.3, - 1725.3, - 51 - ], - [ - "2017-12-20T12:20:00+0530", - 1725.3, - 1725.3, - 1724.1, - 1724.1, - 231 - ], - [ - "2017-12-20T12:21:00+0530", - 1724.1, - 1724.95, - 1723.15, - 1724.95, - 200 - ], - [ - "2017-12-20T12:22:00+0530", - 1724.95, - 1724.95, - 1724.25, - 1724.25, - 1 - ], - [ - "2017-12-20T12:23:00+0530", - 1724.25, - 1724.6, - 1724, - 1724.5, - 117 - ], - [ - "2017-12-20T12:24:00+0530", - 1724, - 1724.6, - 1724, - 1724.6, - 182 - ], - [ - "2017-12-20T12:25:00+0530", - 1724, - 1724.45, - 1723, - 1723, - 155 - ], - [ - "2017-12-20T12:26:00+0530", - 1723, - 1724.35, - 1723, - 1723.3, - 82 - ], - [ - "2017-12-20T12:27:00+0530", - 1723.3, - 1723.7, - 1723, - 1723, - 105 - ], - [ - "2017-12-20T12:28:00+0530", - 1723, - 1723.3, - 1722.5, - 1723.3, - 172 - ], - [ - "2017-12-20T12:29:00+0530", - 1723.3, - 1723.3, - 1722, - 1722.5, - 301 - ], - [ - "2017-12-20T12:30:00+0530", - 1722.5, - 1722.5, - 1721.55, - 1721.6, - 549 - ], - [ - "2017-12-20T12:31:00+0530", - 1721.6, - 1723.9, - 1721.6, - 1723.9, - 633 - ], - [ - "2017-12-20T12:32:00+0530", - 1724, - 1727.3, - 1723.9, - 1726.05, - 752 - ], - [ - "2017-12-20T12:33:00+0530", - 1725.05, - 1725.05, - 1722.45, - 1724, - 178 - ], - [ - "2017-12-20T12:34:00+0530", - 1724, - 1724.1, - 1724, - 1724.1, - 5 - ], - [ - "2017-12-20T12:35:00+0530", - 1724.1, - 1724.95, - 1724.1, - 1724.3, - 111 - ], - [ - "2017-12-20T12:36:00+0530", - 1724.3, - 1724.95, - 1724.3, - 1724.9, - 40 - ], - [ - "2017-12-20T12:37:00+0530", - 1724.9, - 1726.1, - 1724.9, - 1726.1, - 979 - ], - [ - "2017-12-20T12:38:00+0530", - 1726.1, - 1727, - 1726.1, - 1727, - 100 - ], - [ - "2017-12-20T12:39:00+0530", - 1727, - 1727, - 1724.55, - 1726.5, - 1201 - ], - [ - "2017-12-20T12:40:00+0530", - 1726.5, - 1726.5, - 1726.5, - 1726.5, - 0 - ], - [ - "2017-12-20T12:41:00+0530", - 1726.5, - 1726.5, - 1724.55, - 1726.05, - 10 - ], - [ - "2017-12-20T12:42:00+0530", - 1726.05, - 1726.05, - 1726.05, - 1726.05, - 0 - ], - [ - "2017-12-20T12:43:00+0530", - 1726.05, - 1726.05, - 1724.55, - 1724.55, - 78 - ], - [ - "2017-12-20T12:44:00+0530", - 1724.55, - 1725, - 1724.55, - 1725, - 30 - ], - [ - "2017-12-20T12:45:00+0530", - 1725, - 1725.7, - 1724.2, - 1725.6, - 82 - ], - [ - "2017-12-20T12:46:00+0530", - 1725.6, - 1725.8, - 1725.6, - 1725.7, - 35 - ], - [ - "2017-12-20T12:47:00+0530", - 1725.7, - 1725.7, - 1725.65, - 1725.65, - 16 - ], - [ - "2017-12-20T12:48:00+0530", - 1725.65, - 1727.1, - 1725.65, - 1727.1, - 660 - ], - [ - "2017-12-20T12:49:00+0530", - 1725.8, - 1727.2, - 1725.8, - 1726.9, - 353 - ], - [ - "2017-12-20T12:50:00+0530", - 1726.9, - 1726.9, - 1725.95, - 1725.95, - 66 - ], - [ - "2017-12-20T12:51:00+0530", - 1725.95, - 1725.95, - 1725.5, - 1725.5, - 62 - ], - [ - "2017-12-20T12:52:00+0530", - 1726.85, - 1726.85, - 1726.85, - 1726.85, - 30 - ], - [ - "2017-12-20T12:53:00+0530", - 1726.85, - 1726.85, - 1725.5, - 1726, - 21 - ], - [ - "2017-12-20T12:54:00+0530", - 1726, - 1726, - 1725.4, - 1725.4, - 1 - ], - [ - "2017-12-20T12:55:00+0530", - 1725.4, - 1725.4, - 1725.1, - 1725.1, - 10 - ], - [ - "2017-12-20T12:56:00+0530", - 1725.1, - 1725.1, - 1724.35, - 1724.45, - 149 - ], - [ - "2017-12-20T12:57:00+0530", - 1724.45, - 1725.55, - 1724.25, - 1725.55, - 12 - ], - [ - "2017-12-20T12:58:00+0530", - 1725.55, - 1725.55, - 1725.55, - 1725.55, - 0 - ], - [ - "2017-12-20T12:59:00+0530", - 1725.55, - 1725.55, - 1725.55, - 1725.55, - 0 - ], - [ - "2017-12-20T13:00:00+0530", - 1725.55, - 1725.55, - 1724.65, - 1724.65, - 11 - ], - [ - "2017-12-20T13:01:00+0530", - 1724.65, - 1724.65, - 1724.65, - 1724.65, - 0 - ], - [ - "2017-12-20T13:02:00+0530", - 1724.65, - 1724.85, - 1724.65, - 1724.85, - 58 - ], - [ - "2017-12-20T13:03:00+0530", - 1724.85, - 1724.95, - 1724.85, - 1724.95, - 9 - ], - [ - "2017-12-20T13:04:00+0530", - 1724.95, - 1724.95, - 1724.95, - 1724.95, - 0 - ], - [ - "2017-12-20T13:05:00+0530", - 1724.95, - 1725, - 1724.65, - 1724.65, - 85 - ], - [ - "2017-12-20T13:06:00+0530", - 1724.65, - 1724.65, - 1724.2, - 1724.2, - 468 - ], - [ - "2017-12-20T13:07:00+0530", - 1724.2, - 1726.05, - 1724.2, - 1725, - 81 - ], - [ - "2017-12-20T13:08:00+0530", - 1725, - 1727, - 1725, - 1726.4, - 181 - ], - [ - "2017-12-20T13:09:00+0530", - 1726.4, - 1726.4, - 1725.4, - 1725.4, - 1 - ], - [ - "2017-12-20T13:10:00+0530", - 1725.4, - 1725.4, - 1725.05, - 1725.05, - 31 - ], - [ - "2017-12-20T13:11:00+0530", - 1725.05, - 1725.05, - 1725.05, - 1725.05, - 0 - ], - [ - "2017-12-20T13:12:00+0530", - 1725.05, - 1725.1, - 1725.05, - 1725.1, - 30 - ], - [ - "2017-12-20T13:13:00+0530", - 1725.1, - 1726, - 1725.1, - 1725.2, - 181 - ], - [ - "2017-12-20T13:14:00+0530", - 1725.2, - 1725.2, - 1725.2, - 1725.2, - 0 - ], - [ - "2017-12-20T13:15:00+0530", - 1725.2, - 1725.2, - 1725.2, - 1725.2, - 22 - ], - [ - "2017-12-20T13:16:00+0530", - 1725.2, - 1726.35, - 1725.2, - 1726.35, - 35 - ], - [ - "2017-12-20T13:17:00+0530", - 1726.35, - 1726.35, - 1726.35, - 1726.35, - 50 - ], - [ - "2017-12-20T13:18:00+0530", - 1726.35, - 1726.35, - 1726.35, - 1726.35, - 0 - ], - [ - "2017-12-20T13:19:00+0530", - 1726.35, - 1727, - 1725.55, - 1727, - 195 - ], - [ - "2017-12-20T13:20:00+0530", - 1727, - 1727, - 1725.7, - 1725.7, - 50 - ], - [ - "2017-12-20T13:21:00+0530", - 1725.7, - 1726.45, - 1724.65, - 1724.75, - 70 - ], - [ - "2017-12-20T13:22:00+0530", - 1724.75, - 1724.85, - 1724.2, - 1724.25, - 328 - ], - [ - "2017-12-20T13:23:00+0530", - 1724.25, - 1726.9, - 1724.2, - 1726.9, - 180 - ], - [ - "2017-12-20T13:24:00+0530", - 1726.9, - 1726.9, - 1726.9, - 1726.9, - 0 - ], - [ - "2017-12-20T13:25:00+0530", - 1726.9, - 1726.9, - 1726, - 1726.9, - 224 - ], - [ - "2017-12-20T13:26:00+0530", - 1726.9, - 1726.9, - 1726, - 1726.35, - 44 - ], - [ - "2017-12-20T13:27:00+0530", - 1726.35, - 1726.35, - 1726.35, - 1726.35, - 20 - ], - [ - "2017-12-20T13:28:00+0530", - 1726.35, - 1726.35, - 1726.35, - 1726.35, - 77 - ], - [ - "2017-12-20T13:29:00+0530", - 1726.35, - 1726.7, - 1726.35, - 1726.7, - 1 - ], - [ - "2017-12-20T13:30:00+0530", - 1726.7, - 1726.95, - 1726.1, - 1726.95, - 63 - ], - [ - "2017-12-20T13:31:00+0530", - 1726.95, - 1726.95, - 1726.1, - 1726.1, - 153 - ], - [ - "2017-12-20T13:32:00+0530", - 1726.1, - 1726.1, - 1724.15, - 1724.15, - 534 - ], - [ - "2017-12-20T13:33:00+0530", - 1724.15, - 1724.15, - 1723.05, - 1723.3, - 395 - ], - [ - "2017-12-20T13:34:00+0530", - 1723.3, - 1725.5, - 1723.3, - 1724.05, - 212 - ], - [ - "2017-12-20T13:35:00+0530", - 1724.05, - 1726, - 1724.05, - 1726, - 335 - ], - [ - "2017-12-20T13:36:00+0530", - 1726, - 1726, - 1726, - 1726, - 0 - ], - [ - "2017-12-20T13:37:00+0530", - 1726, - 1726, - 1725.4, - 1726, - 11 - ], - [ - "2017-12-20T13:38:00+0530", - 1725.65, - 1727.45, - 1725, - 1727.45, - 528 - ], - [ - "2017-12-20T13:39:00+0530", - 1727.45, - 1727.45, - 1724.65, - 1726, - 172 - ], - [ - "2017-12-20T13:40:00+0530", - 1726, - 1726, - 1725.6, - 1725.6, - 1 - ], - [ - "2017-12-20T13:41:00+0530", - 1725.6, - 1726.3, - 1725.6, - 1725.65, - 11 - ], - [ - "2017-12-20T13:42:00+0530", - 1725.65, - 1726, - 1725.2, - 1725.2, - 127 - ], - [ - "2017-12-20T13:43:00+0530", - 1725.2, - 1726.15, - 1725.15, - 1726.15, - 128 - ], - [ - "2017-12-20T13:44:00+0530", - 1726.15, - 1726.35, - 1725.3, - 1726.35, - 28 - ], - [ - "2017-12-20T13:45:00+0530", - 1726.35, - 1726.35, - 1726, - 1726, - 170 - ], - [ - "2017-12-20T13:46:00+0530", - 1726, - 1726, - 1726, - 1726, - 0 - ], - [ - "2017-12-20T13:47:00+0530", - 1726, - 1727.05, - 1726, - 1727.05, - 177 - ], - [ - "2017-12-20T13:48:00+0530", - 1727.05, - 1731, - 1726.45, - 1731, - 3021 - ], - [ - "2017-12-20T13:49:00+0530", - 1731, - 1732, - 1729, - 1729, - 807 - ], - [ - "2017-12-20T13:50:00+0530", - 1729, - 1732, - 1728.6, - 1730.35, - 3980 - ], - [ - "2017-12-20T13:51:00+0530", - 1730.35, - 1731.3, - 1730, - 1731.3, - 356 - ], - [ - "2017-12-20T13:52:00+0530", - 1731.3, - 1731.3, - 1729.55, - 1730, - 578 - ], - [ - "2017-12-20T13:53:00+0530", - 1730, - 1730.05, - 1729, - 1730.05, - 665 - ], - [ - "2017-12-20T13:54:00+0530", - 1730.05, - 1730.1, - 1729.05, - 1729.05, - 245 - ], - [ - "2017-12-20T13:55:00+0530", - 1729.05, - 1730.45, - 1729, - 1730.45, - 385 - ], - [ - "2017-12-20T13:56:00+0530", - 1730.45, - 1730.45, - 1728, - 1728, - 77 - ], - [ - "2017-12-20T13:57:00+0530", - 1728, - 1729, - 1728, - 1728, - 119 - ], - [ - "2017-12-20T13:58:00+0530", - 1728, - 1729.85, - 1728, - 1729.85, - 336 - ], - [ - "2017-12-20T13:59:00+0530", - 1729.85, - 1729.95, - 1729.05, - 1729.9, - 115 - ], - [ - "2017-12-20T14:00:00+0530", - 1729.9, - 1730, - 1729.15, - 1729.15, - 500 - ], - [ - "2017-12-20T14:01:00+0530", - 1729.15, - 1730.05, - 1729.15, - 1730.05, - 189 - ], - [ - "2017-12-20T14:02:00+0530", - 1730.05, - 1730.9, - 1729.9, - 1729.9, - 166 - ], - [ - "2017-12-20T14:03:00+0530", - 1730.5, - 1730.5, - 1730, - 1730, - 205 - ], - [ - "2017-12-20T14:04:00+0530", - 1730, - 1730, - 1728.5, - 1728.5, - 170 - ], - [ - "2017-12-20T14:05:00+0530", - 1728.5, - 1728.5, - 1727.8, - 1728.5, - 264 - ], - [ - "2017-12-20T14:06:00+0530", - 1728.5, - 1728.65, - 1728.1, - 1728.65, - 26 - ], - [ - "2017-12-20T14:07:00+0530", - 1728.65, - 1730, - 1728, - 1728, - 538 - ], - [ - "2017-12-20T14:08:00+0530", - 1728, - 1728, - 1727, - 1727, - 41 - ], - [ - "2017-12-20T14:09:00+0530", - 1727, - 1727, - 1725, - 1725, - 858 - ], - [ - "2017-12-20T14:10:00+0530", - 1725, - 1725.95, - 1725, - 1725.1, - 195 - ], - [ - "2017-12-20T14:11:00+0530", - 1725.1, - 1726, - 1725.1, - 1726, - 367 - ], - [ - "2017-12-20T14:12:00+0530", - 1726, - 1732, - 1726, - 1731, - 2358 - ], - [ - "2017-12-20T14:13:00+0530", - 1731, - 1732, - 1730.15, - 1730.15, - 246 - ], - [ - "2017-12-20T14:14:00+0530", - 1730.15, - 1730.15, - 1727.9, - 1728.35, - 225 - ], - [ - "2017-12-20T14:15:00+0530", - 1728.35, - 1728.35, - 1728, - 1728, - 25 - ], - [ - "2017-12-20T14:16:00+0530", - 1728, - 1728, - 1727.7, - 1727.9, - 165 - ], - [ - "2017-12-20T14:17:00+0530", - 1727.9, - 1728.1, - 1727.5, - 1728.1, - 406 - ], - [ - "2017-12-20T14:18:00+0530", - 1728.1, - 1728.65, - 1727.8, - 1728.65, - 70 - ], - [ - "2017-12-20T14:19:00+0530", - 1728.65, - 1728.65, - 1727, - 1727, - 131 - ], - [ - "2017-12-20T14:20:00+0530", - 1727, - 1728.1, - 1726.2, - 1728.1, - 201 - ], - [ - "2017-12-20T14:21:00+0530", - 1728.1, - 1728.1, - 1728.1, - 1728.1, - 0 - ], - [ - "2017-12-20T14:22:00+0530", - 1728.1, - 1728.1, - 1728.1, - 1728.1, - 0 - ], - [ - "2017-12-20T14:23:00+0530", - 1727.1, - 1727.2, - 1727.1, - 1727.2, - 137 - ], - [ - "2017-12-20T14:24:00+0530", - 1727.2, - 1728, - 1727.2, - 1728, - 50 - ], - [ - "2017-12-20T14:25:00+0530", - 1728, - 1728.95, - 1728, - 1728.9, - 59 - ], - [ - "2017-12-20T14:26:00+0530", - 1728.9, - 1728.9, - 1728.1, - 1728.3, - 131 - ], - [ - "2017-12-20T14:27:00+0530", - 1728.3, - 1728.9, - 1728.3, - 1728.9, - 10 - ], - [ - "2017-12-20T14:28:00+0530", - 1728.9, - 1728.9, - 1728.2, - 1728.2, - 44 - ], - [ - "2017-12-20T14:29:00+0530", - 1728.2, - 1729.35, - 1728.2, - 1728.6, - 155 - ], - [ - "2017-12-20T14:30:00+0530", - 1728.6, - 1729.65, - 1728.6, - 1729.65, - 112 - ], - [ - "2017-12-20T14:31:00+0530", - 1729.65, - 1729.65, - 1728.75, - 1729.3, - 28 - ], - [ - "2017-12-20T14:32:00+0530", - 1729.3, - 1729.3, - 1729, - 1729, - 54 - ], - [ - "2017-12-20T14:33:00+0530", - 1729, - 1729.05, - 1729, - 1729.05, - 19 - ], - [ - "2017-12-20T14:34:00+0530", - 1729.05, - 1729.6, - 1729.05, - 1729.35, - 187 - ], - [ - "2017-12-20T14:35:00+0530", - 1729.35, - 1729.35, - 1728.1, - 1728.1, - 164 - ], - [ - "2017-12-20T14:36:00+0530", - 1728.1, - 1728.1, - 1728, - 1728, - 15 - ], - [ - "2017-12-20T14:37:00+0530", - 1728, - 1728.2, - 1728, - 1728.2, - 26 - ], - [ - "2017-12-20T14:38:00+0530", - 1728, - 1729.45, - 1728, - 1729.45, - 157 - ], - [ - "2017-12-20T14:39:00+0530", - 1729.45, - 1729.45, - 1728.55, - 1729.2, - 288 - ], - [ - "2017-12-20T14:40:00+0530", - 1729.2, - 1729.95, - 1729, - 1729.95, - 620 - ], - [ - "2017-12-20T14:41:00+0530", - 1729.95, - 1730, - 1729.45, - 1729.45, - 341 - ], - [ - "2017-12-20T14:42:00+0530", - 1729.45, - 1729.45, - 1729.05, - 1729.05, - 163 - ], - [ - "2017-12-20T14:43:00+0530", - 1729.05, - 1729.05, - 1729, - 1729, - 60 - ], - [ - "2017-12-20T14:44:00+0530", - 1729, - 1729.4, - 1728.6, - 1729.4, - 196 - ], - [ - "2017-12-20T14:45:00+0530", - 1729.4, - 1734.3, - 1729.4, - 1734.3, - 2078 - ], - [ - "2017-12-20T14:46:00+0530", - 1733.4, - 1735, - 1733.25, - 1735, - 1953 - ], - [ - "2017-12-20T14:47:00+0530", - 1735, - 1735, - 1733.8, - 1733.8, - 954 - ], - [ - "2017-12-20T14:48:00+0530", - 1733.8, - 1734.9, - 1733, - 1733, - 124 - ], - [ - "2017-12-20T14:49:00+0530", - 1733, - 1734.85, - 1732.9, - 1733.75, - 414 - ], - [ - "2017-12-20T14:50:00+0530", - 1733.75, - 1733.75, - 1732, - 1732.5, - 650 - ], - [ - "2017-12-20T14:51:00+0530", - 1732.5, - 1734.15, - 1732.5, - 1734.15, - 38 - ], - [ - "2017-12-20T14:52:00+0530", - 1734.15, - 1734.15, - 1732.8, - 1732.8, - 20 - ], - [ - "2017-12-20T14:53:00+0530", - 1732, - 1732.75, - 1732, - 1732.15, - 154 - ], - [ - "2017-12-20T14:54:00+0530", - 1732.15, - 1732.6, - 1732, - 1732.6, - 460 - ], - [ - "2017-12-20T14:55:00+0530", - 1732.6, - 1732.65, - 1732, - 1732, - 510 - ], - [ - "2017-12-20T14:56:00+0530", - 1732, - 1732.95, - 1731.05, - 1732.5, - 226 - ], - [ - "2017-12-20T14:57:00+0530", - 1732.5, - 1732.5, - 1732.1, - 1732.1, - 234 - ], - [ - "2017-12-20T14:58:00+0530", - 1732.1, - 1732.5, - 1732.1, - 1732.1, - 148 - ], - [ - "2017-12-20T14:59:00+0530", - 1732.1, - 1732.1, - 1732, - 1732.05, - 169 - ], - [ - "2017-12-20T15:00:00+0530", - 1732.1, - 1732.1, - 1729, - 1729, - 803 - ], - [ - "2017-12-20T15:01:00+0530", - 1729, - 1730.8, - 1729, - 1729, - 449 - ], - [ - "2017-12-20T15:02:00+0530", - 1729, - 1729, - 1729, - 1729, - 392 - ], - [ - "2017-12-20T15:03:00+0530", - 1729, - 1729, - 1727.1, - 1728, - 294 - ], - [ - "2017-12-20T15:04:00+0530", - 1728, - 1728, - 1726.55, - 1727.9, - 380 - ], - [ - "2017-12-20T15:05:00+0530", - 1727.9, - 1727.9, - 1727.05, - 1727.05, - 4 - ], - [ - "2017-12-20T15:06:00+0530", - 1727.05, - 1727.05, - 1726.6, - 1726.6, - 69 - ], - [ - "2017-12-20T15:07:00+0530", - 1726.6, - 1730.7, - 1725.9, - 1730.7, - 2740 - ], - [ - "2017-12-20T15:08:00+0530", - 1730.8, - 1731.95, - 1730.15, - 1730.15, - 924 - ], - [ - "2017-12-20T15:09:00+0530", - 1730.15, - 1730.75, - 1729.15, - 1729.95, - 795 - ], - [ - "2017-12-20T15:10:00+0530", - 1729.95, - 1730, - 1729.25, - 1729.25, - 443 - ], - [ - "2017-12-20T15:11:00+0530", - 1729.25, - 1729.9, - 1727, - 1728.5, - 853 - ], - [ - "2017-12-20T15:12:00+0530", - 1728.5, - 1729.3, - 1727.85, - 1727.85, - 559 - ], - [ - "2017-12-20T15:13:00+0530", - 1727.7, - 1727.7, - 1726.65, - 1727, - 800 - ], - [ - "2017-12-20T15:14:00+0530", - 1727, - 1727.5, - 1726.2, - 1726.2, - 219 - ], - [ - "2017-12-20T15:15:00+0530", - 1726.2, - 1727.95, - 1725.4, - 1727.95, - 803 - ], - [ - "2017-12-20T15:16:00+0530", - 1727.95, - 1727.95, - 1725.8, - 1726.9, - 549 - ], - [ - "2017-12-20T15:17:00+0530", - 1726.9, - 1729, - 1726.7, - 1728.5, - 542 - ], - [ - "2017-12-20T15:18:00+0530", - 1728.5, - 1728.55, - 1727, - 1728.5, - 829 - ], - [ - "2017-12-20T15:19:00+0530", - 1727.7, - 1729.1, - 1726.1, - 1727.85, - 1565 - ], - [ - "2017-12-20T15:20:00+0530", - 1727.85, - 1729, - 1727.85, - 1728.6, - 753 - ], - [ - "2017-12-20T15:21:00+0530", - 1728.6, - 1730, - 1725.85, - 1726.05, - 1541 - ], - [ - "2017-12-20T15:22:00+0530", - 1726.05, - 1727.5, - 1724, - 1724.65, - 1001 - ], - [ - "2017-12-20T15:23:00+0530", - 1724.65, - 1726.45, - 1723.8, - 1726.45, - 521 - ], - [ - "2017-12-20T15:24:00+0530", - 1726.45, - 1726.45, - 1723.95, - 1723.95, - 1265 - ], - [ - "2017-12-20T15:25:00+0530", - 1723.95, - 1724, - 1723, - 1723.95, - 1036 - ], - [ - "2017-12-20T15:26:00+0530", - 1723.95, - 1725, - 1723.95, - 1724.1, - 1273 - ], - [ - "2017-12-20T15:27:00+0530", - 1724.1, - 1724.5, - 1724.1, - 1724.4, - 405 - ], - [ - "2017-12-20T15:28:00+0530", - 1724.4, - 1724.85, - 1722, - 1723.4, - 619 - ], - [ - "2017-12-20T15:29:00+0530", - 1723.4, - 1723.5, - 1721.4, - 1721.4, - 1211 - ], - [ - "2017-12-21T09:15:00+0530", - 1718, - 1724.45, - 1718, - 1721.6, - 1296 - ], - [ - "2017-12-21T09:16:00+0530", - 1719.9, - 1723.45, - 1719, - 1719, - 1083 - ], - [ - "2017-12-21T09:17:00+0530", - 1719.7, - 1722.2, - 1719.7, - 1721, - 1734 - ], - [ - "2017-12-21T09:18:00+0530", - 1721, - 1721, - 1720, - 1720, - 596 - ], - [ - "2017-12-21T09:19:00+0530", - 1720, - 1720, - 1718.15, - 1719.6, - 1147 - ], - [ - "2017-12-21T09:20:00+0530", - 1720, - 1720.95, - 1717.8, - 1717.8, - 2350 - ], - [ - "2017-12-21T09:21:00+0530", - 1718.7, - 1721, - 1718.7, - 1721, - 673 - ], - [ - "2017-12-21T09:22:00+0530", - 1721, - 1723, - 1718.7, - 1723, - 599 - ], - [ - "2017-12-21T09:23:00+0530", - 1722.9, - 1724.85, - 1722.9, - 1724.85, - 902 - ], - [ - "2017-12-21T09:24:00+0530", - 1724.85, - 1726.8, - 1724.85, - 1725, - 3171 - ], - [ - "2017-12-21T09:25:00+0530", - 1726.4, - 1726.4, - 1725.8, - 1726.3, - 979 - ], - [ - "2017-12-21T09:26:00+0530", - 1726.3, - 1731, - 1726.3, - 1730.55, - 2495 - ], - [ - "2017-12-21T09:27:00+0530", - 1730.6, - 1731.4, - 1730.6, - 1731.35, - 1471 - ], - [ - "2017-12-21T09:28:00+0530", - 1731.35, - 1732.35, - 1730.55, - 1732.25, - 1169 - ], - [ - "2017-12-21T09:29:00+0530", - 1732.25, - 1734.55, - 1731.6, - 1734.55, - 2417 - ], - [ - "2017-12-21T09:30:00+0530", - 1734.55, - 1734.8, - 1733, - 1733, - 644 - ], - [ - "2017-12-21T09:31:00+0530", - 1733, - 1734.1, - 1733, - 1733.25, - 723 - ], - [ - "2017-12-21T09:32:00+0530", - 1733.25, - 1733.75, - 1733, - 1733.05, - 861 - ], - [ - "2017-12-21T09:33:00+0530", - 1733.05, - 1733.05, - 1731.3, - 1731.3, - 2406 - ], - [ - "2017-12-21T09:34:00+0530", - 1731.3, - 1733.4, - 1731.3, - 1733.4, - 290 - ], - [ - "2017-12-21T09:35:00+0530", - 1733.4, - 1733.4, - 1732.35, - 1733.05, - 591 - ], - [ - "2017-12-21T09:36:00+0530", - 1733.05, - 1733.1, - 1732.5, - 1732.5, - 53 - ], - [ - "2017-12-21T09:37:00+0530", - 1732.5, - 1733, - 1732.5, - 1732.9, - 131 - ], - [ - "2017-12-21T09:38:00+0530", - 1732.9, - 1732.9, - 1732.2, - 1732.2, - 213 - ], - [ - "2017-12-21T09:39:00+0530", - 1732.05, - 1732.05, - 1731.5, - 1731.5, - 267 - ], - [ - "2017-12-21T09:40:00+0530", - 1731.35, - 1731.35, - 1730.05, - 1730.05, - 123 - ], - [ - "2017-12-21T09:41:00+0530", - 1730.05, - 1730.9, - 1730, - 1730, - 1883 - ], - [ - "2017-12-21T09:42:00+0530", - 1730, - 1731.3, - 1730, - 1730.3, - 152 - ], - [ - "2017-12-21T09:43:00+0530", - 1730.3, - 1730.75, - 1730.3, - 1730.5, - 330 - ], - [ - "2017-12-21T09:44:00+0530", - 1730.5, - 1731.7, - 1729.85, - 1730, - 670 - ], - [ - "2017-12-21T09:45:00+0530", - 1730, - 1730, - 1728.1, - 1729.95, - 126 - ], - [ - "2017-12-21T09:46:00+0530", - 1729.95, - 1730.8, - 1729.95, - 1730.7, - 85 - ], - [ - "2017-12-21T09:47:00+0530", - 1730.7, - 1731.8, - 1730.5, - 1731.6, - 135 - ], - [ - "2017-12-21T09:48:00+0530", - 1731.6, - 1731.6, - 1731, - 1731.4, - 66 - ], - [ - "2017-12-21T09:49:00+0530", - 1731.4, - 1731.4, - 1730.25, - 1730.5, - 1112 - ], - [ - "2017-12-21T09:50:00+0530", - 1730.5, - 1731.35, - 1730.5, - 1731, - 293 - ], - [ - "2017-12-21T09:51:00+0530", - 1731, - 1731.95, - 1730, - 1730, - 399 - ], - [ - "2017-12-21T09:52:00+0530", - 1731, - 1731, - 1730, - 1730, - 563 - ], - [ - "2017-12-21T09:53:00+0530", - 1730, - 1730.15, - 1729.85, - 1730.1, - 103 - ], - [ - "2017-12-21T09:54:00+0530", - 1730.1, - 1730.1, - 1727.05, - 1728.05, - 832 - ], - [ - "2017-12-21T09:55:00+0530", - 1728.05, - 1730.75, - 1728, - 1730.75, - 491 - ], - [ - "2017-12-21T09:56:00+0530", - 1730.75, - 1734.85, - 1730.05, - 1732.6, - 1625 - ], - [ - "2017-12-21T09:57:00+0530", - 1733, - 1733, - 1731.15, - 1732, - 275 - ], - [ - "2017-12-21T09:58:00+0530", - 1732, - 1738.8, - 1732, - 1737.05, - 3534 - ], - [ - "2017-12-21T09:59:00+0530", - 1737.05, - 1737.5, - 1734, - 1736.7, - 951 - ], - [ - "2017-12-21T10:00:00+0530", - 1736.7, - 1736.7, - 1734.45, - 1734.65, - 951 - ], - [ - "2017-12-21T10:01:00+0530", - 1734.65, - 1735.15, - 1733, - 1734.65, - 1826 - ], - [ - "2017-12-21T10:02:00+0530", - 1734.65, - 1735, - 1733.5, - 1734, - 684 - ], - [ - "2017-12-21T10:03:00+0530", - 1734, - 1734, - 1733.5, - 1733.55, - 541 - ], - [ - "2017-12-21T10:04:00+0530", - 1733.55, - 1733.55, - 1732.8, - 1732.8, - 526 - ], - [ - "2017-12-21T10:05:00+0530", - 1732.35, - 1735.6, - 1732.35, - 1735.6, - 582 - ], - [ - "2017-12-21T10:06:00+0530", - 1735.6, - 1736, - 1734.6, - 1736, - 463 - ], - [ - "2017-12-21T10:07:00+0530", - 1736, - 1737, - 1735.9, - 1736, - 854 - ], - [ - "2017-12-21T10:08:00+0530", - 1736, - 1739.9, - 1736, - 1739.5, - 1096 - ], - [ - "2017-12-21T10:09:00+0530", - 1739.25, - 1740, - 1736.35, - 1737, - 2359 - ], - [ - "2017-12-21T10:10:00+0530", - 1738, - 1738.05, - 1736.65, - 1738, - 928 - ], - [ - "2017-12-21T10:11:00+0530", - 1738, - 1738.7, - 1736, - 1738.45, - 1092 - ], - [ - "2017-12-21T10:12:00+0530", - 1738.45, - 1738.7, - 1737.1, - 1738, - 475 - ], - [ - "2017-12-21T10:13:00+0530", - 1738, - 1743.8, - 1738, - 1743.8, - 2877 - ], - [ - "2017-12-21T10:14:00+0530", - 1743.8, - 1744.2, - 1743, - 1743, - 6553 - ], - [ - "2017-12-21T10:15:00+0530", - 1743.3, - 1744.15, - 1743.1, - 1744.15, - 2001 - ], - [ - "2017-12-21T10:16:00+0530", - 1744.15, - 1746, - 1744, - 1744.7, - 4209 - ], - [ - "2017-12-21T10:17:00+0530", - 1744.7, - 1744.85, - 1743, - 1743, - 1635 - ], - [ - "2017-12-21T10:18:00+0530", - 1743.7, - 1744.5, - 1743, - 1744.5, - 1683 - ], - [ - "2017-12-21T10:19:00+0530", - 1744.4, - 1744.85, - 1743.8, - 1744.4, - 1022 - ], - [ - "2017-12-21T10:20:00+0530", - 1744.4, - 1744.4, - 1742, - 1742.45, - 1770 - ], - [ - "2017-12-21T10:21:00+0530", - 1742.45, - 1743, - 1742.1, - 1742.1, - 1121 - ], - [ - "2017-12-21T10:22:00+0530", - 1742.1, - 1743.35, - 1742.1, - 1743, - 571 - ], - [ - "2017-12-21T10:23:00+0530", - 1743, - 1743.5, - 1742, - 1742.35, - 406 - ], - [ - "2017-12-21T10:24:00+0530", - 1742.35, - 1742.65, - 1741, - 1741.5, - 1018 - ], - [ - "2017-12-21T10:25:00+0530", - 1741.5, - 1742.6, - 1741.4, - 1742, - 842 - ], - [ - "2017-12-21T10:26:00+0530", - 1742, - 1743, - 1742, - 1743, - 808 - ], - [ - "2017-12-21T10:27:00+0530", - 1743, - 1743, - 1742.1, - 1743, - 1067 - ], - [ - "2017-12-21T10:28:00+0530", - 1743, - 1743, - 1742.8, - 1742.8, - 1373 - ], - [ - "2017-12-21T10:29:00+0530", - 1742.8, - 1742.85, - 1742, - 1742, - 1544 - ], - [ - "2017-12-21T10:30:00+0530", - 1742, - 1742.9, - 1742, - 1742, - 486 - ], - [ - "2017-12-21T10:31:00+0530", - 1742, - 1742.75, - 1742, - 1742.75, - 500 - ], - [ - "2017-12-21T10:32:00+0530", - 1742.75, - 1742.75, - 1741, - 1741, - 422 - ], - [ - "2017-12-21T10:33:00+0530", - 1741, - 1741.9, - 1741, - 1741.9, - 428 - ], - [ - "2017-12-21T10:34:00+0530", - 1741.9, - 1743, - 1740.5, - 1741.05, - 1185 - ], - [ - "2017-12-21T10:35:00+0530", - 1741.05, - 1742, - 1740.95, - 1741.05, - 227 - ], - [ - "2017-12-21T10:36:00+0530", - 1741.05, - 1741.05, - 1741.05, - 1741.05, - 30 - ], - [ - "2017-12-21T10:37:00+0530", - 1741.05, - 1741.8, - 1741.05, - 1741.15, - 71 - ], - [ - "2017-12-21T10:38:00+0530", - 1741.15, - 1742, - 1741, - 1741.9, - 569 - ], - [ - "2017-12-21T10:39:00+0530", - 1741.9, - 1742, - 1741, - 1741.95, - 175 - ], - [ - "2017-12-21T10:40:00+0530", - 1741.95, - 1742.1, - 1741, - 1741.5, - 416 - ], - [ - "2017-12-21T10:41:00+0530", - 1741.5, - 1742.7, - 1741, - 1742.5, - 894 - ], - [ - "2017-12-21T10:42:00+0530", - 1742.5, - 1742.5, - 1741.1, - 1741.1, - 135 - ], - [ - "2017-12-21T10:43:00+0530", - 1741.1, - 1742, - 1741, - 1742, - 691 - ], - [ - "2017-12-21T10:44:00+0530", - 1742, - 1742, - 1740.85, - 1740.85, - 26 - ], - [ - "2017-12-21T10:45:00+0530", - 1740.85, - 1740.85, - 1740.3, - 1740.3, - 14 - ], - [ - "2017-12-21T10:46:00+0530", - 1740.3, - 1742, - 1740.3, - 1742, - 331 - ], - [ - "2017-12-21T10:47:00+0530", - 1742, - 1742, - 1741, - 1741, - 30 - ], - [ - "2017-12-21T10:48:00+0530", - 1741, - 1742.5, - 1741, - 1742, - 453 - ], - [ - "2017-12-21T10:49:00+0530", - 1742.95, - 1743, - 1741.95, - 1742.25, - 1321 - ], - [ - "2017-12-21T10:50:00+0530", - 1742.25, - 1742.25, - 1741.45, - 1741.45, - 700 - ], - [ - "2017-12-21T10:51:00+0530", - 1741.45, - 1741.45, - 1741.2, - 1741.2, - 10 - ], - [ - "2017-12-21T10:52:00+0530", - 1741.2, - 1741.2, - 1741, - 1741.15, - 550 - ], - [ - "2017-12-21T10:53:00+0530", - 1741.15, - 1741.15, - 1741.1, - 1741.1, - 210 - ], - [ - "2017-12-21T10:54:00+0530", - 1741.1, - 1741.1, - 1741, - 1741, - 115 - ], - [ - "2017-12-21T10:55:00+0530", - 1741, - 1741, - 1740.65, - 1740.65, - 257 - ], - [ - "2017-12-21T10:56:00+0530", - 1740.65, - 1741, - 1740.4, - 1740.4, - 136 - ], - [ - "2017-12-21T10:57:00+0530", - 1740.4, - 1740.4, - 1740.35, - 1740.35, - 74 - ], - [ - "2017-12-21T10:58:00+0530", - 1740.35, - 1740.35, - 1740.2, - 1740.2, - 230 - ], - [ - "2017-12-21T10:59:00+0530", - 1740.2, - 1740.2, - 1740, - 1740, - 331 - ], - [ - "2017-12-21T11:00:00+0530", - 1740, - 1740.75, - 1740, - 1740.75, - 135 - ], - [ - "2017-12-21T11:01:00+0530", - 1740.75, - 1740.75, - 1738.1, - 1739, - 549 - ], - [ - "2017-12-21T11:02:00+0530", - 1739, - 1739.5, - 1739, - 1739.5, - 46 - ], - [ - "2017-12-21T11:03:00+0530", - 1739.5, - 1740.9, - 1739.5, - 1740.9, - 110 - ], - [ - "2017-12-21T11:04:00+0530", - 1740.9, - 1742.85, - 1740.9, - 1742.85, - 3137 - ], - [ - "2017-12-21T11:05:00+0530", - 1742.85, - 1742.85, - 1742, - 1742, - 860 - ], - [ - "2017-12-21T11:06:00+0530", - 1742, - 1742.95, - 1742, - 1742.95, - 36 - ], - [ - "2017-12-21T11:07:00+0530", - 1742.95, - 1742.95, - 1742, - 1742, - 15 - ], - [ - "2017-12-21T11:08:00+0530", - 1742, - 1742.6, - 1742, - 1742.6, - 349 - ], - [ - "2017-12-21T11:09:00+0530", - 1742.6, - 1742.6, - 1742, - 1742, - 105 - ], - [ - "2017-12-21T11:10:00+0530", - 1743, - 1743.2, - 1742.1, - 1742.1, - 173 - ], - [ - "2017-12-21T11:11:00+0530", - 1743.15, - 1743.5, - 1743.15, - 1743.15, - 169 - ], - [ - "2017-12-21T11:12:00+0530", - 1743.15, - 1743.15, - 1742.05, - 1742.05, - 130 - ], - [ - "2017-12-21T11:13:00+0530", - 1742.05, - 1743.1, - 1742.05, - 1743.1, - 5 - ], - [ - "2017-12-21T11:14:00+0530", - 1743.1, - 1743.1, - 1742, - 1742.05, - 1062 - ], - [ - "2017-12-21T11:15:00+0530", - 1742.05, - 1742.3, - 1742, - 1742.15, - 147 - ], - [ - "2017-12-21T11:16:00+0530", - 1742.15, - 1742.15, - 1742, - 1742, - 24 - ], - [ - "2017-12-21T11:17:00+0530", - 1742, - 1742.75, - 1742, - 1742.05, - 27 - ], - [ - "2017-12-21T11:18:00+0530", - 1742.05, - 1743.45, - 1742.05, - 1743.45, - 130 - ], - [ - "2017-12-21T11:19:00+0530", - 1743.45, - 1743.45, - 1742.1, - 1743, - 32 - ], - [ - "2017-12-21T11:20:00+0530", - 1743, - 1743, - 1743, - 1743, - 54 - ], - [ - "2017-12-21T11:21:00+0530", - 1743, - 1743.45, - 1743, - 1743, - 165 - ], - [ - "2017-12-21T11:22:00+0530", - 1743, - 1743, - 1742.65, - 1743, - 3 - ], - [ - "2017-12-21T11:23:00+0530", - 1743, - 1743, - 1743, - 1743, - 10 - ], - [ - "2017-12-21T11:24:00+0530", - 1743, - 1743, - 1743, - 1743, - 106 - ], - [ - "2017-12-21T11:25:00+0530", - 1743, - 1743, - 1742.1, - 1742.1, - 445 - ], - [ - "2017-12-21T11:26:00+0530", - 1742.1, - 1743, - 1742.1, - 1742.1, - 23 - ], - [ - "2017-12-21T11:27:00+0530", - 1742.1, - 1742.1, - 1742, - 1742, - 42 - ], - [ - "2017-12-21T11:28:00+0530", - 1742, - 1742.05, - 1742, - 1742, - 296 - ], - [ - "2017-12-21T11:29:00+0530", - 1742, - 1742, - 1741.7, - 1741.7, - 975 - ], - [ - "2017-12-21T11:30:00+0530", - 1741.7, - 1741.8, - 1741.7, - 1741.75, - 161 - ], - [ - "2017-12-21T11:31:00+0530", - 1741.75, - 1742, - 1741, - 1741.25, - 128 - ], - [ - "2017-12-21T11:32:00+0530", - 1741.25, - 1741.25, - 1739.1, - 1739.1, - 312 - ], - [ - "2017-12-21T11:33:00+0530", - 1739.1, - 1739.3, - 1739.1, - 1739.3, - 419 - ], - [ - "2017-12-21T11:34:00+0530", - 1739.3, - 1740, - 1739.3, - 1740, - 76 - ], - [ - "2017-12-21T11:35:00+0530", - 1740, - 1740.95, - 1740, - 1740, - 64 - ], - [ - "2017-12-21T11:36:00+0530", - 1740, - 1740.4, - 1740, - 1740, - 170 - ], - [ - "2017-12-21T11:37:00+0530", - 1740, - 1740.7, - 1740, - 1740.1, - 8 - ], - [ - "2017-12-21T11:38:00+0530", - 1740.1, - 1740.7, - 1740.1, - 1740.25, - 98 - ], - [ - "2017-12-21T11:39:00+0530", - 1740.25, - 1740.6, - 1740, - 1740.3, - 325 - ], - [ - "2017-12-21T11:40:00+0530", - 1740.3, - 1740.3, - 1739.5, - 1739.5, - 100 - ], - [ - "2017-12-21T11:41:00+0530", - 1739.5, - 1740.6, - 1739.35, - 1739.35, - 566 - ], - [ - "2017-12-21T11:42:00+0530", - 1739.35, - 1740.85, - 1739.3, - 1739.55, - 646 - ], - [ - "2017-12-21T11:43:00+0530", - 1739.55, - 1740.75, - 1739, - 1739, - 39 - ], - [ - "2017-12-21T11:44:00+0530", - 1739, - 1739, - 1738.5, - 1738.5, - 50 - ], - [ - "2017-12-21T11:45:00+0530", - 1738.5, - 1740.35, - 1738.5, - 1740.35, - 182 - ], - [ - "2017-12-21T11:46:00+0530", - 1740.35, - 1740.35, - 1739, - 1739, - 151 - ], - [ - "2017-12-21T11:47:00+0530", - 1739, - 1739.2, - 1739, - 1739.2, - 50 - ], - [ - "2017-12-21T11:48:00+0530", - 1739.2, - 1739.2, - 1738.5, - 1738.5, - 299 - ], - [ - "2017-12-21T11:49:00+0530", - 1738.5, - 1739.2, - 1737.2, - 1737.2, - 1220 - ], - [ - "2017-12-21T11:50:00+0530", - 1737.2, - 1737.6, - 1735.2, - 1736.9, - 1300 - ], - [ - "2017-12-21T11:51:00+0530", - 1736.9, - 1737.1, - 1736, - 1737, - 350 - ], - [ - "2017-12-21T11:52:00+0530", - 1737, - 1738, - 1737, - 1738, - 101 - ], - [ - "2017-12-21T11:53:00+0530", - 1738.85, - 1738.85, - 1737.9, - 1737.9, - 103 - ], - [ - "2017-12-21T11:54:00+0530", - 1737.9, - 1738.4, - 1737, - 1738.4, - 99 - ], - [ - "2017-12-21T11:55:00+0530", - 1738.4, - 1738.4, - 1737, - 1737, - 136 - ], - [ - "2017-12-21T11:56:00+0530", - 1736.8, - 1736.8, - 1736, - 1736, - 472 - ], - [ - "2017-12-21T11:57:00+0530", - 1736, - 1736.45, - 1736, - 1736, - 268 - ], - [ - "2017-12-21T11:58:00+0530", - 1736, - 1736, - 1736, - 1736, - 119 - ], - [ - "2017-12-21T11:59:00+0530", - 1736, - 1738.7, - 1736, - 1738.65, - 1481 - ], - [ - "2017-12-21T12:00:00+0530", - 1738.65, - 1738.65, - 1738, - 1738, - 50 - ], - [ - "2017-12-21T12:01:00+0530", - 1738, - 1738, - 1736.75, - 1737.8, - 26 - ], - [ - "2017-12-21T12:02:00+0530", - 1737.8, - 1737.8, - 1736.8, - 1737.5, - 201 - ], - [ - "2017-12-21T12:03:00+0530", - 1737.5, - 1737.8, - 1737.4, - 1737.4, - 21 - ], - [ - "2017-12-21T12:04:00+0530", - 1737.4, - 1737.65, - 1736.75, - 1737.65, - 60 - ], - [ - "2017-12-21T12:05:00+0530", - 1737.65, - 1737.65, - 1736, - 1736, - 131 - ], - [ - "2017-12-21T12:06:00+0530", - 1736, - 1737.95, - 1736, - 1737.7, - 65 - ], - [ - "2017-12-21T12:07:00+0530", - 1737.7, - 1738, - 1737.7, - 1737.7, - 70 - ], - [ - "2017-12-21T12:08:00+0530", - 1737.7, - 1738.55, - 1737.7, - 1738, - 476 - ], - [ - "2017-12-21T12:09:00+0530", - 1738, - 1738.85, - 1738, - 1738.85, - 2 - ], - [ - "2017-12-21T12:10:00+0530", - 1738.85, - 1738.85, - 1737.7, - 1738.7, - 50 - ], - [ - "2017-12-21T12:11:00+0530", - 1738.7, - 1738.7, - 1738.5, - 1738.5, - 62 - ], - [ - "2017-12-21T12:12:00+0530", - 1738.5, - 1739.2, - 1738.5, - 1739.2, - 30 - ], - [ - "2017-12-21T12:13:00+0530", - 1739.2, - 1740.65, - 1739.2, - 1740.6, - 296 - ], - [ - "2017-12-21T12:14:00+0530", - 1740.6, - 1740.6, - 1739.4, - 1740.4, - 25 - ], - [ - "2017-12-21T12:15:00+0530", - 1740.4, - 1740.8, - 1740.4, - 1740.8, - 42 - ], - [ - "2017-12-21T12:16:00+0530", - 1740.8, - 1740.8, - 1738.85, - 1738.85, - 445 - ], - [ - "2017-12-21T12:17:00+0530", - 1738.85, - 1738.85, - 1738.5, - 1738.5, - 25 - ], - [ - "2017-12-21T12:18:00+0530", - 1738.5, - 1738.55, - 1738.5, - 1738.55, - 30 - ], - [ - "2017-12-21T12:19:00+0530", - 1739.7, - 1739.75, - 1738.5, - 1739.2, - 165 - ], - [ - "2017-12-21T12:20:00+0530", - 1739.2, - 1739.2, - 1738, - 1738, - 88 - ], - [ - "2017-12-21T12:21:00+0530", - 1738, - 1738, - 1738, - 1738, - 0 - ], - [ - "2017-12-21T12:22:00+0530", - 1738, - 1738.9, - 1738, - 1738.9, - 20 - ], - [ - "2017-12-21T12:23:00+0530", - 1738.9, - 1739, - 1738.15, - 1738.15, - 52 - ], - [ - "2017-12-21T12:24:00+0530", - 1738.15, - 1738.2, - 1738.15, - 1738.2, - 150 - ], - [ - "2017-12-21T12:25:00+0530", - 1738.2, - 1738.2, - 1738.2, - 1738.2, - 0 - ], - [ - "2017-12-21T12:26:00+0530", - 1738.2, - 1738.2, - 1738.2, - 1738.2, - 25 - ], - [ - "2017-12-21T12:27:00+0530", - 1738.2, - 1739, - 1738.2, - 1738.3, - 635 - ], - [ - "2017-12-21T12:28:00+0530", - 1738.3, - 1738.3, - 1738.3, - 1738.3, - 100 - ], - [ - "2017-12-21T12:29:00+0530", - 1738.3, - 1739.75, - 1738.3, - 1738.4, - 65 - ], - [ - "2017-12-21T12:30:00+0530", - 1738.4, - 1738.4, - 1738.4, - 1738.4, - 0 - ], - [ - "2017-12-21T12:31:00+0530", - 1738.4, - 1740.1, - 1738.4, - 1740.1, - 1847 - ], - [ - "2017-12-21T12:32:00+0530", - 1740.1, - 1741, - 1740.05, - 1740.05, - 149 - ], - [ - "2017-12-21T12:33:00+0530", - 1740.05, - 1740.1, - 1739.1, - 1739.1, - 502 - ], - [ - "2017-12-21T12:34:00+0530", - 1739.1, - 1739.65, - 1738.8, - 1738.85, - 120 - ], - [ - "2017-12-21T12:35:00+0530", - 1738.85, - 1738.95, - 1738.85, - 1738.95, - 19 - ], - [ - "2017-12-21T12:36:00+0530", - 1738.95, - 1739.1, - 1738.95, - 1739.1, - 10 - ], - [ - "2017-12-21T12:37:00+0530", - 1739.1, - 1739.1, - 1738.5, - 1738.5, - 39 - ], - [ - "2017-12-21T12:38:00+0530", - 1738.5, - 1738.5, - 1738, - 1738, - 400 - ], - [ - "2017-12-21T12:39:00+0530", - 1738, - 1738.95, - 1737.7, - 1738.5, - 297 - ], - [ - "2017-12-21T12:40:00+0530", - 1738.5, - 1740, - 1738.5, - 1739.5, - 5 - ], - [ - "2017-12-21T12:41:00+0530", - 1739.5, - 1741.15, - 1739.5, - 1741.15, - 170 - ], - [ - "2017-12-21T12:42:00+0530", - 1741.15, - 1741.2, - 1739.3, - 1739.3, - 1018 - ], - [ - "2017-12-21T12:43:00+0530", - 1739.3, - 1739.75, - 1739.2, - 1739.2, - 70 - ], - [ - "2017-12-21T12:44:00+0530", - 1739.2, - 1739.7, - 1739.2, - 1739.7, - 20 - ], - [ - "2017-12-21T12:45:00+0530", - 1739.7, - 1739.7, - 1739.7, - 1739.7, - 15 - ], - [ - "2017-12-21T12:46:00+0530", - 1739.7, - 1740, - 1739.7, - 1740, - 10 - ], - [ - "2017-12-21T12:47:00+0530", - 1740, - 1740.55, - 1740, - 1740.55, - 1 - ], - [ - "2017-12-21T12:48:00+0530", - 1740.55, - 1740.55, - 1740, - 1740, - 25 - ], - [ - "2017-12-21T12:49:00+0530", - 1740, - 1740, - 1740, - 1740, - 120 - ], - [ - "2017-12-21T12:50:00+0530", - 1740, - 1740.7, - 1740, - 1740.7, - 10 - ], - [ - "2017-12-21T12:51:00+0530", - 1740.7, - 1740.7, - 1740, - 1740, - 20 - ], - [ - "2017-12-21T12:52:00+0530", - 1740, - 1740.5, - 1740, - 1740.5, - 6 - ], - [ - "2017-12-21T12:53:00+0530", - 1740.45, - 1740.7, - 1740.4, - 1740.7, - 58 - ], - [ - "2017-12-21T12:54:00+0530", - 1740.7, - 1740.7, - 1740.7, - 1740.7, - 0 - ], - [ - "2017-12-21T12:55:00+0530", - 1740.7, - 1740.7, - 1739.3, - 1739.95, - 315 - ], - [ - "2017-12-21T12:56:00+0530", - 1739.95, - 1739.95, - 1739.95, - 1739.95, - 0 - ], - [ - "2017-12-21T12:57:00+0530", - 1739.95, - 1740.3, - 1739.95, - 1740.3, - 30 - ], - [ - "2017-12-21T12:58:00+0530", - 1740.3, - 1740.3, - 1740, - 1740, - 25 - ], - [ - "2017-12-21T12:59:00+0530", - 1740, - 1740.3, - 1740, - 1740.3, - 95 - ], - [ - "2017-12-21T13:00:00+0530", - 1740.3, - 1740.3, - 1740.3, - 1740.3, - 6 - ], - [ - "2017-12-21T13:01:00+0530", - 1740.3, - 1740.95, - 1740.3, - 1740.95, - 2 - ], - [ - "2017-12-21T13:02:00+0530", - 1740.95, - 1740.95, - 1740.95, - 1740.95, - 0 - ], - [ - "2017-12-21T13:03:00+0530", - 1740.95, - 1741.75, - 1740.95, - 1741.75, - 312 - ], - [ - "2017-12-21T13:04:00+0530", - 1741.75, - 1741.75, - 1741, - 1741.05, - 438 - ], - [ - "2017-12-21T13:05:00+0530", - 1741.7, - 1741.7, - 1741.15, - 1741.15, - 3 - ], - [ - "2017-12-21T13:06:00+0530", - 1741.15, - 1741.3, - 1741, - 1741, - 659 - ], - [ - "2017-12-21T13:07:00+0530", - 1741, - 1741.85, - 1741, - 1741.55, - 948 - ], - [ - "2017-12-21T13:08:00+0530", - 1741.55, - 1741.9, - 1740.45, - 1740.45, - 103 - ], - [ - "2017-12-21T13:09:00+0530", - 1740.45, - 1740.45, - 1740, - 1740, - 159 - ], - [ - "2017-12-21T13:10:00+0530", - 1740, - 1741.5, - 1740, - 1741, - 148 - ], - [ - "2017-12-21T13:11:00+0530", - 1741, - 1741, - 1741, - 1741, - 5 - ], - [ - "2017-12-21T13:12:00+0530", - 1741, - 1741.9, - 1741, - 1741.9, - 64 - ], - [ - "2017-12-21T13:13:00+0530", - 1741.9, - 1741.9, - 1740.85, - 1741.85, - 224 - ], - [ - "2017-12-21T13:14:00+0530", - 1741.85, - 1741.95, - 1741.85, - 1741.95, - 15 - ], - [ - "2017-12-21T13:15:00+0530", - 1741.95, - 1741.95, - 1741.05, - 1741.95, - 28 - ], - [ - "2017-12-21T13:16:00+0530", - 1741.95, - 1741.95, - 1741.95, - 1741.95, - 440 - ], - [ - "2017-12-21T13:17:00+0530", - 1741.95, - 1741.95, - 1741.95, - 1741.95, - 0 - ], - [ - "2017-12-21T13:18:00+0530", - 1741.95, - 1741.95, - 1741.05, - 1741.05, - 10 - ], - [ - "2017-12-21T13:19:00+0530", - 1741.55, - 1741.55, - 1739, - 1739, - 520 - ], - [ - "2017-12-21T13:20:00+0530", - 1739, - 1739, - 1739, - 1739, - 0 - ], - [ - "2017-12-21T13:21:00+0530", - 1739, - 1740.5, - 1739, - 1739.5, - 33 - ], - [ - "2017-12-21T13:22:00+0530", - 1739.5, - 1740.5, - 1739.5, - 1740.5, - 1 - ], - [ - "2017-12-21T13:23:00+0530", - 1740.5, - 1741.25, - 1740, - 1741.25, - 23 - ], - [ - "2017-12-21T13:24:00+0530", - 1741.25, - 1741.25, - 1741.25, - 1741.25, - 0 - ], - [ - "2017-12-21T13:25:00+0530", - 1741.25, - 1741.25, - 1739.55, - 1739.55, - 25 - ], - [ - "2017-12-21T13:26:00+0530", - 1739.55, - 1739.55, - 1739.55, - 1739.55, - 0 - ], - [ - "2017-12-21T13:27:00+0530", - 1739.3, - 1739.5, - 1739.3, - 1739.5, - 83 - ], - [ - "2017-12-21T13:28:00+0530", - 1739.5, - 1739.5, - 1738.85, - 1739, - 148 - ], - [ - "2017-12-21T13:29:00+0530", - 1739, - 1739, - 1737.9, - 1737.9, - 701 - ], - [ - "2017-12-21T13:30:00+0530", - 1737.9, - 1739.5, - 1737.7, - 1739.35, - 304 - ], - [ - "2017-12-21T13:31:00+0530", - 1739.35, - 1739.5, - 1739.35, - 1739.5, - 65 - ], - [ - "2017-12-21T13:32:00+0530", - 1739.5, - 1740, - 1739.5, - 1740, - 29 - ], - [ - "2017-12-21T13:33:00+0530", - 1740, - 1740, - 1740, - 1740, - 6 - ], - [ - "2017-12-21T13:34:00+0530", - 1740, - 1740.8, - 1740, - 1740.8, - 89 - ], - [ - "2017-12-21T13:35:00+0530", - 1740.8, - 1740.95, - 1740.05, - 1740.9, - 60 - ], - [ - "2017-12-21T13:36:00+0530", - 1740.9, - 1740.95, - 1740.55, - 1740.6, - 29 - ], - [ - "2017-12-21T13:37:00+0530", - 1740.6, - 1741.15, - 1740.6, - 1741.15, - 105 - ], - [ - "2017-12-21T13:38:00+0530", - 1741.15, - 1741.2, - 1741.15, - 1741.2, - 4 - ], - [ - "2017-12-21T13:39:00+0530", - 1741.2, - 1741.2, - 1741.15, - 1741.15, - 5 - ], - [ - "2017-12-21T13:40:00+0530", - 1741.15, - 1741.15, - 1740.35, - 1741, - 330 - ], - [ - "2017-12-21T13:41:00+0530", - 1741, - 1741, - 1739, - 1740, - 152 - ], - [ - "2017-12-21T13:42:00+0530", - 1740.15, - 1740.3, - 1739.15, - 1740, - 84 - ], - [ - "2017-12-21T13:43:00+0530", - 1740, - 1740.4, - 1739, - 1740.4, - 60 - ], - [ - "2017-12-21T13:44:00+0530", - 1740.4, - 1740.95, - 1740.4, - 1740.95, - 4 - ], - [ - "2017-12-21T13:45:00+0530", - 1740.95, - 1740.95, - 1740.3, - 1740.3, - 210 - ], - [ - "2017-12-21T13:46:00+0530", - 1740.3, - 1741, - 1739.55, - 1739.55, - 13 - ], - [ - "2017-12-21T13:47:00+0530", - 1739.55, - 1741, - 1739.55, - 1740.75, - 6 - ], - [ - "2017-12-21T13:48:00+0530", - 1740.75, - 1741, - 1740.4, - 1741, - 17 - ], - [ - "2017-12-21T13:49:00+0530", - 1741, - 1741.2, - 1740.8, - 1740.8, - 54 - ], - [ - "2017-12-21T13:50:00+0530", - 1740.8, - 1742.25, - 1740.8, - 1742.25, - 286 - ], - [ - "2017-12-21T13:51:00+0530", - 1742.25, - 1742.85, - 1741.8, - 1742.85, - 225 - ], - [ - "2017-12-21T13:52:00+0530", - 1742.9, - 1743.45, - 1742.9, - 1743.45, - 601 - ], - [ - "2017-12-21T13:53:00+0530", - 1743.45, - 1743.45, - 1743, - 1743.3, - 285 - ], - [ - "2017-12-21T13:54:00+0530", - 1743.3, - 1743.3, - 1740.65, - 1740.65, - 520 - ], - [ - "2017-12-21T13:55:00+0530", - 1740.65, - 1740.95, - 1740.65, - 1740.9, - 195 - ], - [ - "2017-12-21T13:56:00+0530", - 1740.9, - 1741, - 1739.8, - 1741, - 223 - ], - [ - "2017-12-21T13:57:00+0530", - 1741, - 1741, - 1741, - 1741, - 4 - ], - [ - "2017-12-21T13:58:00+0530", - 1741, - 1742.4, - 1741, - 1742.4, - 5 - ], - [ - "2017-12-21T13:59:00+0530", - 1742.4, - 1742.45, - 1741.25, - 1742.4, - 239 - ], - [ - "2017-12-21T14:00:00+0530", - 1742.4, - 1743.2, - 1741.05, - 1741.15, - 249 - ], - [ - "2017-12-21T14:01:00+0530", - 1741.15, - 1741.9, - 1741.15, - 1741.45, - 64 - ], - [ - "2017-12-21T14:02:00+0530", - 1741.45, - 1741.9, - 1741.05, - 1741.85, - 44 - ], - [ - "2017-12-21T14:03:00+0530", - 1741.85, - 1741.9, - 1740.35, - 1741.75, - 37 - ], - [ - "2017-12-21T14:04:00+0530", - 1741.75, - 1741.9, - 1741.3, - 1741.9, - 5 - ], - [ - "2017-12-21T14:05:00+0530", - 1741.9, - 1742.45, - 1740.65, - 1742.45, - 18 - ], - [ - "2017-12-21T14:06:00+0530", - 1742.45, - 1743.2, - 1742.45, - 1743.1, - 620 - ], - [ - "2017-12-21T14:07:00+0530", - 1743.1, - 1743.2, - 1742.8, - 1742.8, - 296 - ], - [ - "2017-12-21T14:08:00+0530", - 1742.8, - 1742.8, - 1742.7, - 1742.7, - 6 - ], - [ - "2017-12-21T14:09:00+0530", - 1742.7, - 1743, - 1742.2, - 1743, - 506 - ], - [ - "2017-12-21T14:10:00+0530", - 1743, - 1743, - 1742.85, - 1742.85, - 4 - ], - [ - "2017-12-21T14:11:00+0530", - 1742.85, - 1742.95, - 1742.1, - 1742.95, - 15 - ], - [ - "2017-12-21T14:12:00+0530", - 1742.95, - 1743, - 1742.15, - 1742.95, - 154 - ], - [ - "2017-12-21T14:13:00+0530", - 1742.95, - 1742.95, - 1742.7, - 1742.7, - 107 - ], - [ - "2017-12-21T14:14:00+0530", - 1742.7, - 1742.7, - 1742.65, - 1742.65, - 8 - ], - [ - "2017-12-21T14:15:00+0530", - 1742.65, - 1742.9, - 1742.65, - 1742.9, - 351 - ], - [ - "2017-12-21T14:16:00+0530", - 1742.9, - 1742.9, - 1742, - 1742, - 282 - ], - [ - "2017-12-21T14:17:00+0530", - 1742, - 1743, - 1742, - 1742.9, - 461 - ], - [ - "2017-12-21T14:18:00+0530", - 1742.95, - 1742.95, - 1742.05, - 1742.95, - 6 - ], - [ - "2017-12-21T14:19:00+0530", - 1742.95, - 1742.95, - 1742.75, - 1742.75, - 5 - ], - [ - "2017-12-21T14:20:00+0530", - 1741.35, - 1742.85, - 1741.35, - 1742.6, - 31 - ], - [ - "2017-12-21T14:21:00+0530", - 1742.6, - 1742.85, - 1741.6, - 1742.5, - 181 - ], - [ - "2017-12-21T14:22:00+0530", - 1742.5, - 1742.5, - 1740.55, - 1741.8, - 81 - ], - [ - "2017-12-21T14:23:00+0530", - 1740, - 1741.85, - 1740, - 1741.85, - 502 - ], - [ - "2017-12-21T14:24:00+0530", - 1741.85, - 1742.1, - 1741.85, - 1741.95, - 61 - ], - [ - "2017-12-21T14:25:00+0530", - 1741.95, - 1741.95, - 1740.5, - 1740.5, - 4 - ], - [ - "2017-12-21T14:26:00+0530", - 1740.5, - 1742, - 1740.5, - 1742, - 53 - ], - [ - "2017-12-21T14:27:00+0530", - 1742, - 1742, - 1740.85, - 1742, - 65 - ], - [ - "2017-12-21T14:28:00+0530", - 1741.6, - 1742, - 1741.6, - 1742, - 5 - ], - [ - "2017-12-21T14:29:00+0530", - 1742, - 1742, - 1740.65, - 1740.65, - 111 - ], - [ - "2017-12-21T14:30:00+0530", - 1740.65, - 1741.5, - 1740.65, - 1741.5, - 29 - ], - [ - "2017-12-21T14:31:00+0530", - 1741.5, - 1741.5, - 1741.5, - 1741.5, - 25 - ], - [ - "2017-12-21T14:32:00+0530", - 1741.5, - 1741.85, - 1741.5, - 1741.85, - 268 - ], - [ - "2017-12-21T14:33:00+0530", - 1741.85, - 1741.9, - 1741.5, - 1741.5, - 569 - ], - [ - "2017-12-21T14:34:00+0530", - 1741.5, - 1742, - 1741.15, - 1742, - 350 - ], - [ - "2017-12-21T14:35:00+0530", - 1741.15, - 1741.15, - 1741.15, - 1741.15, - 20 - ], - [ - "2017-12-21T14:36:00+0530", - 1741.15, - 1741.5, - 1741.15, - 1741.4, - 51 - ], - [ - "2017-12-21T14:37:00+0530", - 1742.95, - 1742.95, - 1742.25, - 1742.25, - 102 - ], - [ - "2017-12-21T14:38:00+0530", - 1742.25, - 1742.25, - 1741.45, - 1742, - 90 - ], - [ - "2017-12-21T14:39:00+0530", - 1742, - 1742.85, - 1742, - 1742, - 85 - ], - [ - "2017-12-21T14:40:00+0530", - 1742, - 1742, - 1742, - 1742, - 40 - ], - [ - "2017-12-21T14:41:00+0530", - 1742, - 1742, - 1741.6, - 1741.6, - 100 - ], - [ - "2017-12-21T14:42:00+0530", - 1741.6, - 1741.6, - 1741.6, - 1741.6, - 24 - ], - [ - "2017-12-21T14:43:00+0530", - 1741.6, - 1741.65, - 1741.6, - 1741.65, - 60 - ], - [ - "2017-12-21T14:44:00+0530", - 1741.65, - 1742.05, - 1741.65, - 1741.85, - 878 - ], - [ - "2017-12-21T14:45:00+0530", - 1741.85, - 1741.85, - 1736.95, - 1737.75, - 2048 - ], - [ - "2017-12-21T14:46:00+0530", - 1737.75, - 1739.85, - 1737.05, - 1739.85, - 386 - ], - [ - "2017-12-21T14:47:00+0530", - 1739.85, - 1740.5, - 1739.85, - 1740.05, - 403 - ], - [ - "2017-12-21T14:48:00+0530", - 1740.05, - 1740.35, - 1739.1, - 1739.1, - 267 - ], - [ - "2017-12-21T14:49:00+0530", - 1739.1, - 1739.75, - 1739.1, - 1739.2, - 110 - ], - [ - "2017-12-21T14:50:00+0530", - 1739.2, - 1740, - 1739.2, - 1740, - 31 - ], - [ - "2017-12-21T14:51:00+0530", - 1740, - 1740.05, - 1739, - 1739, - 178 - ], - [ - "2017-12-21T14:52:00+0530", - 1739.2, - 1739.2, - 1739, - 1739, - 379 - ], - [ - "2017-12-21T14:53:00+0530", - 1739, - 1739, - 1736.95, - 1737.6, - 258 - ], - [ - "2017-12-21T14:54:00+0530", - 1737.6, - 1738, - 1736.55, - 1736.55, - 773 - ], - [ - "2017-12-21T14:55:00+0530", - 1736.55, - 1737.5, - 1736.55, - 1736.6, - 40 - ], - [ - "2017-12-21T14:56:00+0530", - 1736.6, - 1736.6, - 1736, - 1736.5, - 196 - ], - [ - "2017-12-21T14:57:00+0530", - 1736.5, - 1738, - 1736.5, - 1738, - 348 - ], - [ - "2017-12-21T14:58:00+0530", - 1738, - 1738.25, - 1737.05, - 1737.05, - 111 - ], - [ - "2017-12-21T14:59:00+0530", - 1737.05, - 1738, - 1736.9, - 1736.9, - 331 - ], - [ - "2017-12-21T15:00:00+0530", - 1736.9, - 1737.8, - 1736.9, - 1737.15, - 632 - ], - [ - "2017-12-21T15:01:00+0530", - 1737.15, - 1739, - 1737.15, - 1737.55, - 1017 - ], - [ - "2017-12-21T15:02:00+0530", - 1738, - 1738, - 1737.1, - 1737.5, - 163 - ], - [ - "2017-12-21T15:03:00+0530", - 1737.5, - 1738, - 1737.2, - 1738, - 493 - ], - [ - "2017-12-21T15:04:00+0530", - 1738, - 1738.95, - 1738, - 1738.95, - 245 - ], - [ - "2017-12-21T15:05:00+0530", - 1738.95, - 1739, - 1737.65, - 1737.65, - 92 - ], - [ - "2017-12-21T15:06:00+0530", - 1737.65, - 1738.3, - 1737.15, - 1737.8, - 234 - ], - [ - "2017-12-21T15:07:00+0530", - 1737.8, - 1740.95, - 1737.8, - 1740.1, - 3354 - ], - [ - "2017-12-21T15:08:00+0530", - 1740.1, - 1740.75, - 1740.1, - 1740.1, - 154 - ], - [ - "2017-12-21T15:09:00+0530", - 1740.1, - 1740.1, - 1739.55, - 1739.6, - 121 - ], - [ - "2017-12-21T15:10:00+0530", - 1739.6, - 1740.85, - 1739.6, - 1739.95, - 829 - ], - [ - "2017-12-21T15:11:00+0530", - 1739.95, - 1739.95, - 1738, - 1738.9, - 383 - ], - [ - "2017-12-21T15:12:00+0530", - 1738.9, - 1739.05, - 1737.5, - 1737.5, - 598 - ], - [ - "2017-12-21T15:13:00+0530", - 1737.5, - 1738.5, - 1737.05, - 1737.05, - 405 - ], - [ - "2017-12-21T15:14:00+0530", - 1737.05, - 1739.8, - 1737.05, - 1739.45, - 531 - ], - [ - "2017-12-21T15:15:00+0530", - 1738.55, - 1739.1, - 1737.55, - 1739.1, - 207 - ], - [ - "2017-12-21T15:16:00+0530", - 1739.1, - 1740.7, - 1737.6, - 1738.5, - 3263 - ], - [ - "2017-12-21T15:17:00+0530", - 1738.5, - 1739.15, - 1738, - 1738, - 124 - ], - [ - "2017-12-21T15:18:00+0530", - 1738, - 1738.8, - 1738, - 1738, - 310 - ], - [ - "2017-12-21T15:19:00+0530", - 1738, - 1740.6, - 1738, - 1739.6, - 934 - ], - [ - "2017-12-21T15:20:00+0530", - 1739.6, - 1741.1, - 1738.25, - 1739, - 1333 - ], - [ - "2017-12-21T15:21:00+0530", - 1739.15, - 1740.85, - 1738.3, - 1739.25, - 1176 - ], - [ - "2017-12-21T15:22:00+0530", - 1739.5, - 1740.8, - 1738.6, - 1738.7, - 2614 - ], - [ - "2017-12-21T15:23:00+0530", - 1738.7, - 1738.85, - 1738.35, - 1738.85, - 980 - ], - [ - "2017-12-21T15:24:00+0530", - 1739, - 1739.9, - 1738.7, - 1738.7, - 884 - ], - [ - "2017-12-21T15:25:00+0530", - 1738.7, - 1739.85, - 1738.7, - 1738.7, - 454 - ], - [ - "2017-12-21T15:26:00+0530", - 1738.7, - 1738.85, - 1738.6, - 1738.6, - 1345 - ], - [ - "2017-12-21T15:27:00+0530", - 1738.55, - 1738.55, - 1736, - 1736.95, - 518 - ], - [ - "2017-12-21T15:28:00+0530", - 1736.95, - 1736.95, - 1735.3, - 1736.85, - 457 - ], - [ - "2017-12-21T15:29:00+0530", - 1736.1, - 1737.95, - 1732, - 1736, - 880 - ], - [ - "2017-12-22T09:15:00+0530", - 1742, - 1743.9, - 1735.6, - 1743.9, - 2078 - ], - [ - "2017-12-22T09:16:00+0530", - 1744.9, - 1744.9, - 1742.1, - 1744.5, - 1242 - ], - [ - "2017-12-22T09:17:00+0530", - 1743.6, - 1744, - 1740.55, - 1744, - 1075 - ], - [ - "2017-12-22T09:18:00+0530", - 1743.95, - 1744.8, - 1743.7, - 1743.7, - 385 - ], - [ - "2017-12-22T09:19:00+0530", - 1743.7, - 1744.5, - 1742.35, - 1744.05, - 642 - ], - [ - "2017-12-22T09:20:00+0530", - 1744.05, - 1744.7, - 1742.15, - 1742.15, - 356 - ], - [ - "2017-12-22T09:21:00+0530", - 1742.95, - 1743.75, - 1742.15, - 1742.5, - 458 - ], - [ - "2017-12-22T09:22:00+0530", - 1743.85, - 1743.9, - 1742.55, - 1742.55, - 396 - ], - [ - "2017-12-22T09:23:00+0530", - 1742.55, - 1743.15, - 1741.15, - 1741.15, - 584 - ], - [ - "2017-12-22T09:24:00+0530", - 1741.15, - 1742.9, - 1741.15, - 1742.9, - 258 - ], - [ - "2017-12-22T09:25:00+0530", - 1742.9, - 1742.9, - 1742, - 1742.3, - 640 - ], - [ - "2017-12-22T09:26:00+0530", - 1742.3, - 1742.3, - 1741.3, - 1741.3, - 505 - ], - [ - "2017-12-22T09:27:00+0530", - 1741.45, - 1742.6, - 1741.45, - 1742.6, - 238 - ], - [ - "2017-12-22T09:28:00+0530", - 1742.2, - 1742.7, - 1741.3, - 1742.7, - 375 - ], - [ - "2017-12-22T09:29:00+0530", - 1742.7, - 1742.7, - 1741, - 1741, - 168 - ], - [ - "2017-12-22T09:30:00+0530", - 1741, - 1741, - 1739.85, - 1739.85, - 304 - ], - [ - "2017-12-22T09:31:00+0530", - 1740.1, - 1740.1, - 1739, - 1739.5, - 212 - ], - [ - "2017-12-22T09:32:00+0530", - 1739.5, - 1739.5, - 1737, - 1737, - 334 - ], - [ - "2017-12-22T09:33:00+0530", - 1736.55, - 1738.3, - 1736.55, - 1738.3, - 853 - ], - [ - "2017-12-22T09:34:00+0530", - 1738.3, - 1738.85, - 1736.75, - 1736.75, - 764 - ], - [ - "2017-12-22T09:35:00+0530", - 1736.75, - 1736.75, - 1733.55, - 1733.55, - 756 - ], - [ - "2017-12-22T09:36:00+0530", - 1733.55, - 1735.2, - 1731, - 1732.7, - 2158 - ], - [ - "2017-12-22T09:37:00+0530", - 1732.7, - 1732.7, - 1730, - 1730.45, - 1356 - ], - [ - "2017-12-22T09:38:00+0530", - 1730.45, - 1731.55, - 1730.05, - 1731, - 782 - ], - [ - "2017-12-22T09:39:00+0530", - 1730.55, - 1731.65, - 1730.5, - 1731, - 506 - ], - [ - "2017-12-22T09:40:00+0530", - 1730.55, - 1731.65, - 1729.15, - 1729.15, - 2041 - ], - [ - "2017-12-22T09:41:00+0530", - 1729.15, - 1731.7, - 1729.15, - 1730.1, - 574 - ], - [ - "2017-12-22T09:42:00+0530", - 1730.1, - 1730.1, - 1726.2, - 1726.55, - 3554 - ], - [ - "2017-12-22T09:43:00+0530", - 1726.55, - 1727.15, - 1725.8, - 1727, - 912 - ], - [ - "2017-12-22T09:44:00+0530", - 1727, - 1728.45, - 1726.5, - 1727.9, - 911 - ], - [ - "2017-12-22T09:45:00+0530", - 1727.9, - 1727.9, - 1725.6, - 1726.5, - 597 - ], - [ - "2017-12-22T09:46:00+0530", - 1726.5, - 1727.95, - 1726, - 1726.55, - 1133 - ], - [ - "2017-12-22T09:47:00+0530", - 1726.55, - 1728.95, - 1726.55, - 1728.9, - 155 - ], - [ - "2017-12-22T09:48:00+0530", - 1728.9, - 1728.9, - 1726.45, - 1727, - 392 - ], - [ - "2017-12-22T09:49:00+0530", - 1727, - 1727, - 1726, - 1727, - 983 - ], - [ - "2017-12-22T09:50:00+0530", - 1726, - 1727.5, - 1726, - 1726.55, - 545 - ], - [ - "2017-12-22T09:51:00+0530", - 1726.55, - 1727.35, - 1726.55, - 1727.35, - 1 - ], - [ - "2017-12-22T09:52:00+0530", - 1727.35, - 1727.8, - 1726, - 1726, - 466 - ], - [ - "2017-12-22T09:53:00+0530", - 1726, - 1726.95, - 1725.3, - 1725.3, - 658 - ], - [ - "2017-12-22T09:54:00+0530", - 1725.3, - 1727.45, - 1725.3, - 1726.15, - 224 - ], - [ - "2017-12-22T09:55:00+0530", - 1726.15, - 1727, - 1726.1, - 1726.5, - 424 - ], - [ - "2017-12-22T09:56:00+0530", - 1727.25, - 1728.7, - 1726.95, - 1728.7, - 275 - ], - [ - "2017-12-22T09:57:00+0530", - 1728.7, - 1728.85, - 1728, - 1728, - 262 - ], - [ - "2017-12-22T09:58:00+0530", - 1728, - 1730, - 1728, - 1728.8, - 467 - ], - [ - "2017-12-22T09:59:00+0530", - 1728.8, - 1729.7, - 1728.5, - 1728.5, - 355 - ], - [ - "2017-12-22T10:00:00+0530", - 1728.5, - 1730, - 1728.5, - 1729.1, - 510 - ], - [ - "2017-12-22T10:01:00+0530", - 1729.1, - 1730, - 1728.55, - 1728.6, - 272 - ], - [ - "2017-12-22T10:02:00+0530", - 1729.75, - 1731.8, - 1729.15, - 1731, - 328 - ], - [ - "2017-12-22T10:03:00+0530", - 1730.75, - 1730.75, - 1729.8, - 1730, - 350 - ], - [ - "2017-12-22T10:04:00+0530", - 1730.35, - 1730.55, - 1729, - 1729.35, - 321 - ], - [ - "2017-12-22T10:05:00+0530", - 1729.35, - 1730, - 1729, - 1729.05, - 71 - ], - [ - "2017-12-22T10:06:00+0530", - 1729.05, - 1730.15, - 1729, - 1729.05, - 127 - ], - [ - "2017-12-22T10:07:00+0530", - 1729.05, - 1729.95, - 1729.05, - 1729.95, - 176 - ], - [ - "2017-12-22T10:08:00+0530", - 1729.95, - 1730.15, - 1729.1, - 1729.1, - 36 - ], - [ - "2017-12-22T10:09:00+0530", - 1730, - 1730, - 1729.1, - 1729.1, - 394 - ], - [ - "2017-12-22T10:10:00+0530", - 1729.1, - 1730.55, - 1729.1, - 1730.15, - 545 - ], - [ - "2017-12-22T10:11:00+0530", - 1730.15, - 1731, - 1730.15, - 1730.15, - 113 - ], - [ - "2017-12-22T10:12:00+0530", - 1730.15, - 1730.15, - 1729.5, - 1729.5, - 255 - ], - [ - "2017-12-22T10:13:00+0530", - 1729.5, - 1729.95, - 1729.5, - 1729.5, - 61 - ], - [ - "2017-12-22T10:14:00+0530", - 1729.5, - 1729.95, - 1729.5, - 1729.5, - 24 - ], - [ - "2017-12-22T10:15:00+0530", - 1729.5, - 1729.5, - 1729.5, - 1729.5, - 4 - ], - [ - "2017-12-22T10:16:00+0530", - 1729.5, - 1730.65, - 1729.5, - 1729.5, - 252 - ], - [ - "2017-12-22T10:17:00+0530", - 1729.5, - 1729.5, - 1729.5, - 1729.5, - 271 - ], - [ - "2017-12-22T10:18:00+0530", - 1729.5, - 1729.5, - 1729.5, - 1729.5, - 0 - ], - [ - "2017-12-22T10:19:00+0530", - 1729.5, - 1730.15, - 1729.5, - 1729.55, - 47 - ], - [ - "2017-12-22T10:20:00+0530", - 1729.55, - 1731, - 1729.55, - 1730, - 132 - ], - [ - "2017-12-22T10:21:00+0530", - 1730, - 1731.1, - 1729.35, - 1729.35, - 585 - ], - [ - "2017-12-22T10:22:00+0530", - 1729.35, - 1730.6, - 1729.35, - 1730.6, - 8 - ], - [ - "2017-12-22T10:23:00+0530", - 1730.6, - 1730.6, - 1730.6, - 1730.6, - 0 - ], - [ - "2017-12-22T10:24:00+0530", - 1730.6, - 1732.5, - 1729.35, - 1729.35, - 336 - ], - [ - "2017-12-22T10:25:00+0530", - 1729.35, - 1732.45, - 1728.6, - 1731, - 692 - ], - [ - "2017-12-22T10:26:00+0530", - 1731, - 1731, - 1730, - 1730.8, - 319 - ], - [ - "2017-12-22T10:27:00+0530", - 1730.8, - 1732, - 1730.1, - 1731.75, - 740 - ], - [ - "2017-12-22T10:28:00+0530", - 1731.75, - 1731.75, - 1731.15, - 1731.15, - 1 - ], - [ - "2017-12-22T10:29:00+0530", - 1731.15, - 1731.9, - 1730.8, - 1730.8, - 44 - ], - [ - "2017-12-22T10:30:00+0530", - 1730.8, - 1732.6, - 1730.8, - 1731.9, - 126 - ], - [ - "2017-12-22T10:31:00+0530", - 1731.9, - 1731.9, - 1731.2, - 1731.2, - 20 - ], - [ - "2017-12-22T10:32:00+0530", - 1731.2, - 1731.2, - 1730.25, - 1730.25, - 455 - ], - [ - "2017-12-22T10:33:00+0530", - 1730.2, - 1730.3, - 1730.2, - 1730.3, - 157 - ], - [ - "2017-12-22T10:34:00+0530", - 1730.3, - 1730.3, - 1730.3, - 1730.3, - 0 - ], - [ - "2017-12-22T10:35:00+0530", - 1730.3, - 1730.3, - 1730.3, - 1730.3, - 0 - ], - [ - "2017-12-22T10:36:00+0530", - 1730.3, - 1731.25, - 1730.3, - 1731.25, - 98 - ], - [ - "2017-12-22T10:37:00+0530", - 1731.25, - 1731.25, - 1729.6, - 1729.6, - 122 - ], - [ - "2017-12-22T10:38:00+0530", - 1729.6, - 1729.6, - 1728.55, - 1728.55, - 42 - ], - [ - "2017-12-22T10:39:00+0530", - 1728.55, - 1731.25, - 1728.55, - 1731, - 301 - ], - [ - "2017-12-22T10:40:00+0530", - 1731, - 1731.9, - 1731, - 1731, - 268 - ], - [ - "2017-12-22T10:41:00+0530", - 1731, - 1731.9, - 1731, - 1731, - 295 - ], - [ - "2017-12-22T10:42:00+0530", - 1731, - 1731.55, - 1731, - 1731.55, - 530 - ], - [ - "2017-12-22T10:43:00+0530", - 1731.55, - 1731.55, - 1731, - 1731, - 100 - ], - [ - "2017-12-22T10:44:00+0530", - 1731, - 1731.85, - 1731, - 1731, - 71 - ], - [ - "2017-12-22T10:45:00+0530", - 1731, - 1731, - 1730, - 1730, - 816 - ], - [ - "2017-12-22T10:46:00+0530", - 1730, - 1730, - 1729, - 1729, - 202 - ], - [ - "2017-12-22T10:47:00+0530", - 1729, - 1730, - 1729, - 1729, - 164 - ], - [ - "2017-12-22T10:48:00+0530", - 1729, - 1729, - 1728, - 1728.5, - 864 - ], - [ - "2017-12-22T10:49:00+0530", - 1729, - 1729, - 1728.2, - 1728.25, - 369 - ], - [ - "2017-12-22T10:50:00+0530", - 1728.25, - 1729.45, - 1727.05, - 1727.05, - 599 - ], - [ - "2017-12-22T10:51:00+0530", - 1727.05, - 1729.1, - 1727.05, - 1728.7, - 808 - ], - [ - "2017-12-22T10:52:00+0530", - 1726.25, - 1727.4, - 1726, - 1726, - 211 - ], - [ - "2017-12-22T10:53:00+0530", - 1726, - 1727.4, - 1726, - 1726, - 175 - ], - [ - "2017-12-22T10:54:00+0530", - 1727, - 1727, - 1726, - 1726.95, - 543 - ], - [ - "2017-12-22T10:55:00+0530", - 1726.95, - 1727.85, - 1726.2, - 1726.5, - 162 - ], - [ - "2017-12-22T10:56:00+0530", - 1726.5, - 1726.5, - 1726.5, - 1726.5, - 20 - ], - [ - "2017-12-22T10:57:00+0530", - 1726.5, - 1727.9, - 1726.5, - 1726.65, - 21 - ], - [ - "2017-12-22T10:58:00+0530", - 1727.9, - 1728.05, - 1727, - 1727.25, - 188 - ], - [ - "2017-12-22T10:59:00+0530", - 1727.25, - 1729.35, - 1727.25, - 1727.9, - 147 - ], - [ - "2017-12-22T11:00:00+0530", - 1727.9, - 1727.9, - 1726.25, - 1727.05, - 299 - ], - [ - "2017-12-22T11:01:00+0530", - 1727, - 1728, - 1726.7, - 1727, - 204 - ], - [ - "2017-12-22T11:02:00+0530", - 1727, - 1728.2, - 1727, - 1728.2, - 184 - ], - [ - "2017-12-22T11:03:00+0530", - 1728.2, - 1728.95, - 1728.2, - 1728.95, - 9 - ], - [ - "2017-12-22T11:04:00+0530", - 1728.2, - 1729, - 1728, - 1728, - 318 - ], - [ - "2017-12-22T11:05:00+0530", - 1728, - 1728.55, - 1728, - 1728, - 239 - ], - [ - "2017-12-22T11:06:00+0530", - 1728, - 1728.4, - 1728, - 1728.4, - 16 - ], - [ - "2017-12-22T11:07:00+0530", - 1728.4, - 1728.85, - 1728, - 1728, - 231 - ], - [ - "2017-12-22T11:08:00+0530", - 1728, - 1728.7, - 1728, - 1728, - 132 - ], - [ - "2017-12-22T11:09:00+0530", - 1728, - 1728, - 1728, - 1728, - 7 - ], - [ - "2017-12-22T11:10:00+0530", - 1728, - 1728.9, - 1728, - 1728.05, - 3 - ], - [ - "2017-12-22T11:11:00+0530", - 1728.05, - 1728.05, - 1728.05, - 1728.05, - 0 - ], - [ - "2017-12-22T11:12:00+0530", - 1728.05, - 1728.95, - 1728.05, - 1728.95, - 3 - ], - [ - "2017-12-22T11:13:00+0530", - 1728.95, - 1728.95, - 1728.85, - 1728.85, - 1 - ], - [ - "2017-12-22T11:14:00+0530", - 1728.85, - 1728.85, - 1728, - 1728, - 99 - ], - [ - "2017-12-22T11:15:00+0530", - 1728, - 1728.7, - 1728, - 1728, - 135 - ], - [ - "2017-12-22T11:16:00+0530", - 1728, - 1728, - 1728, - 1728, - 5 - ], - [ - "2017-12-22T11:17:00+0530", - 1728, - 1728, - 1726.55, - 1726.65, - 353 - ], - [ - "2017-12-22T11:18:00+0530", - 1726.65, - 1728.7, - 1726.65, - 1726.65, - 81 - ], - [ - "2017-12-22T11:19:00+0530", - 1726.65, - 1728.05, - 1726.65, - 1727.15, - 62 - ], - [ - "2017-12-22T11:20:00+0530", - 1727.15, - 1727.75, - 1726.65, - 1727.1, - 26 - ], - [ - "2017-12-22T11:21:00+0530", - 1727.1, - 1728.2, - 1727.1, - 1728.2, - 8 - ], - [ - "2017-12-22T11:22:00+0530", - 1728.2, - 1729.6, - 1727.2, - 1728.4, - 1018 - ], - [ - "2017-12-22T11:23:00+0530", - 1727.2, - 1728.35, - 1727.2, - 1728.35, - 14 - ], - [ - "2017-12-22T11:24:00+0530", - 1728.35, - 1728.5, - 1727.25, - 1728.1, - 55 - ], - [ - "2017-12-22T11:25:00+0530", - 1728.1, - 1728.7, - 1727.3, - 1727.45, - 573 - ], - [ - "2017-12-22T11:26:00+0530", - 1727.45, - 1728.45, - 1727.45, - 1727.75, - 38 - ], - [ - "2017-12-22T11:27:00+0530", - 1727.75, - 1727.75, - 1727.65, - 1727.65, - 96 - ], - [ - "2017-12-22T11:28:00+0530", - 1727.65, - 1727.85, - 1727.2, - 1727.2, - 83 - ], - [ - "2017-12-22T11:29:00+0530", - 1728.05, - 1728.4, - 1727, - 1727, - 465 - ], - [ - "2017-12-22T11:30:00+0530", - 1727, - 1727.6, - 1726.05, - 1726.15, - 255 - ], - [ - "2017-12-22T11:31:00+0530", - 1726.15, - 1727, - 1726.05, - 1726.1, - 84 - ], - [ - "2017-12-22T11:32:00+0530", - 1726.1, - 1727, - 1726, - 1727, - 372 - ], - [ - "2017-12-22T11:33:00+0530", - 1727, - 1727.7, - 1726, - 1726, - 125 - ], - [ - "2017-12-22T11:34:00+0530", - 1726, - 1726, - 1726, - 1726, - 317 - ], - [ - "2017-12-22T11:35:00+0530", - 1726, - 1726.7, - 1726, - 1726.7, - 55 - ], - [ - "2017-12-22T11:36:00+0530", - 1726.7, - 1727, - 1726.7, - 1727, - 1 - ], - [ - "2017-12-22T11:37:00+0530", - 1727, - 1727, - 1726, - 1726, - 368 - ], - [ - "2017-12-22T11:38:00+0530", - 1726, - 1726, - 1726, - 1726, - 1 - ], - [ - "2017-12-22T11:39:00+0530", - 1726, - 1727, - 1726, - 1726, - 37 - ], - [ - "2017-12-22T11:40:00+0530", - 1726, - 1727, - 1726, - 1726.25, - 86 - ], - [ - "2017-12-22T11:41:00+0530", - 1726.25, - 1727, - 1726.15, - 1726.15, - 79 - ], - [ - "2017-12-22T11:42:00+0530", - 1726.15, - 1726.15, - 1726, - 1726.05, - 55 - ], - [ - "2017-12-22T11:43:00+0530", - 1726.05, - 1727.7, - 1726.05, - 1727, - 214 - ], - [ - "2017-12-22T11:44:00+0530", - 1727, - 1727.8, - 1727, - 1727.8, - 18 - ], - [ - "2017-12-22T11:45:00+0530", - 1727.8, - 1729, - 1727, - 1728.95, - 713 - ], - [ - "2017-12-22T11:46:00+0530", - 1727.25, - 1728.6, - 1726.8, - 1728.45, - 378 - ], - [ - "2017-12-22T11:47:00+0530", - 1728.45, - 1728.45, - 1726.95, - 1728.2, - 25 - ], - [ - "2017-12-22T11:48:00+0530", - 1728.2, - 1728.2, - 1727.05, - 1728.2, - 30 - ], - [ - "2017-12-22T11:49:00+0530", - 1728.2, - 1728.2, - 1727.25, - 1727.25, - 45 - ], - [ - "2017-12-22T11:50:00+0530", - 1727.25, - 1728, - 1726, - 1727.45, - 1469 - ], - [ - "2017-12-22T11:51:00+0530", - 1726, - 1727.6, - 1726, - 1726.55, - 182 - ], - [ - "2017-12-22T11:52:00+0530", - 1727, - 1727.65, - 1726.25, - 1726.35, - 195 - ], - [ - "2017-12-22T11:53:00+0530", - 1726.35, - 1727.55, - 1726.35, - 1726.5, - 20 - ], - [ - "2017-12-22T11:54:00+0530", - 1726.5, - 1727.4, - 1726.5, - 1726.5, - 141 - ], - [ - "2017-12-22T11:55:00+0530", - 1726.5, - 1726.8, - 1726.1, - 1726.1, - 362 - ], - [ - "2017-12-22T11:56:00+0530", - 1726.1, - 1727.1, - 1726.1, - 1726.1, - 115 - ], - [ - "2017-12-22T11:57:00+0530", - 1726.1, - 1727, - 1726.1, - 1726.1, - 6 - ], - [ - "2017-12-22T11:58:00+0530", - 1726.1, - 1727.05, - 1726.1, - 1726.2, - 138 - ], - [ - "2017-12-22T11:59:00+0530", - 1726.2, - 1727.15, - 1726, - 1726, - 293 - ], - [ - "2017-12-22T12:00:00+0530", - 1726, - 1726, - 1726, - 1726, - 23 - ], - [ - "2017-12-22T12:01:00+0530", - 1726, - 1726, - 1726, - 1726, - 72 - ], - [ - "2017-12-22T12:02:00+0530", - 1726, - 1727.15, - 1726, - 1726.05, - 44 - ], - [ - "2017-12-22T12:03:00+0530", - 1726.05, - 1726.15, - 1726.05, - 1726.15, - 15 - ], - [ - "2017-12-22T12:04:00+0530", - 1726.15, - 1726.25, - 1726.05, - 1726.1, - 185 - ], - [ - "2017-12-22T12:05:00+0530", - 1726.1, - 1726.1, - 1726.1, - 1726.1, - 0 - ], - [ - "2017-12-22T12:06:00+0530", - 1726.1, - 1726.95, - 1726.1, - 1726.15, - 72 - ], - [ - "2017-12-22T12:07:00+0530", - 1726.15, - 1726.95, - 1726.1, - 1726.1, - 121 - ], - [ - "2017-12-22T12:08:00+0530", - 1726.1, - 1726.95, - 1726.1, - 1726.1, - 30 - ], - [ - "2017-12-22T12:09:00+0530", - 1726.1, - 1726.95, - 1726.1, - 1726.1, - 223 - ], - [ - "2017-12-22T12:10:00+0530", - 1726.1, - 1726.9, - 1726.05, - 1726.05, - 139 - ], - [ - "2017-12-22T12:11:00+0530", - 1726.05, - 1726.05, - 1726, - 1726, - 116 - ], - [ - "2017-12-22T12:12:00+0530", - 1726, - 1726, - 1726, - 1726, - 0 - ], - [ - "2017-12-22T12:13:00+0530", - 1726, - 1726, - 1726, - 1726, - 0 - ], - [ - "2017-12-22T12:14:00+0530", - 1726, - 1726.75, - 1723.6, - 1723.7, - 2661 - ], - [ - "2017-12-22T12:15:00+0530", - 1723.6, - 1723.6, - 1720.9, - 1721.1, - 4427 - ], - [ - "2017-12-22T12:16:00+0530", - 1721.2, - 1722.65, - 1720.35, - 1720.85, - 1046 - ], - [ - "2017-12-22T12:17:00+0530", - 1720.8, - 1723, - 1720.45, - 1720.55, - 2521 - ], - [ - "2017-12-22T12:18:00+0530", - 1720.3, - 1721.9, - 1720, - 1721.9, - 2351 - ], - [ - "2017-12-22T12:19:00+0530", - 1721.05, - 1721.95, - 1721, - 1721.9, - 313 - ], - [ - "2017-12-22T12:20:00+0530", - 1721, - 1722, - 1720.6, - 1720.6, - 1351 - ], - [ - "2017-12-22T12:21:00+0530", - 1721.05, - 1722.3, - 1721, - 1721.15, - 933 - ], - [ - "2017-12-22T12:22:00+0530", - 1721.25, - 1722.25, - 1721, - 1721.05, - 570 - ], - [ - "2017-12-22T12:23:00+0530", - 1721.05, - 1722, - 1721, - 1721, - 564 - ], - [ - "2017-12-22T12:24:00+0530", - 1721.1, - 1722, - 1721.1, - 1721.2, - 142 - ], - [ - "2017-12-22T12:25:00+0530", - 1721.2, - 1722.15, - 1721, - 1721.05, - 824 - ], - [ - "2017-12-22T12:26:00+0530", - 1721.05, - 1721.9, - 1721.05, - 1721.5, - 70 - ], - [ - "2017-12-22T12:27:00+0530", - 1721.5, - 1722, - 1721.05, - 1721.05, - 528 - ], - [ - "2017-12-22T12:28:00+0530", - 1721.05, - 1722.5, - 1721.05, - 1721.6, - 1328 - ], - [ - "2017-12-22T12:29:00+0530", - 1721.6, - 1722, - 1721.2, - 1721.8, - 116 - ], - [ - "2017-12-22T12:30:00+0530", - 1721.8, - 1722, - 1721.8, - 1721.95, - 15 - ], - [ - "2017-12-22T12:31:00+0530", - 1721.95, - 1723, - 1721.7, - 1722, - 2108 - ], - [ - "2017-12-22T12:32:00+0530", - 1722, - 1722.1, - 1720.5, - 1721.6, - 5144 - ], - [ - "2017-12-22T12:33:00+0530", - 1721.9, - 1721.9, - 1721.05, - 1721.2, - 97 - ], - [ - "2017-12-22T12:34:00+0530", - 1721.2, - 1722, - 1721.2, - 1721.9, - 132 - ], - [ - "2017-12-22T12:35:00+0530", - 1721.5, - 1721.95, - 1720.2, - 1721, - 3458 - ], - [ - "2017-12-22T12:36:00+0530", - 1721, - 1722, - 1720.1, - 1721.25, - 560 - ], - [ - "2017-12-22T12:37:00+0530", - 1721.25, - 1722, - 1721.25, - 1721.25, - 1132 - ], - [ - "2017-12-22T12:38:00+0530", - 1721.25, - 1722.75, - 1721, - 1721.5, - 1680 - ], - [ - "2017-12-22T12:39:00+0530", - 1721.5, - 1721.5, - 1721, - 1721, - 608 - ], - [ - "2017-12-22T12:40:00+0530", - 1721, - 1721.65, - 1721, - 1721, - 822 - ], - [ - "2017-12-22T12:41:00+0530", - 1721, - 1722.15, - 1720.7, - 1721.05, - 3246 - ], - [ - "2017-12-22T12:42:00+0530", - 1721.05, - 1721.85, - 1721, - 1721.85, - 553 - ], - [ - "2017-12-22T12:43:00+0530", - 1721.85, - 1722.25, - 1721.3, - 1721.55, - 786 - ], - [ - "2017-12-22T12:44:00+0530", - 1721.55, - 1721.6, - 1720.35, - 1721, - 3289 - ], - [ - "2017-12-22T12:45:00+0530", - 1721, - 1721.3, - 1721, - 1721.3, - 186 - ], - [ - "2017-12-22T12:46:00+0530", - 1721.3, - 1722, - 1721.3, - 1722, - 419 - ], - [ - "2017-12-22T12:47:00+0530", - 1722, - 1722, - 1721.3, - 1721.85, - 295 - ], - [ - "2017-12-22T12:48:00+0530", - 1721.85, - 1722, - 1721, - 1721, - 1794 - ], - [ - "2017-12-22T12:49:00+0530", - 1721, - 1722, - 1720.15, - 1720.15, - 202 - ], - [ - "2017-12-22T12:50:00+0530", - 1720.15, - 1722.1, - 1720.15, - 1721.65, - 682 - ], - [ - "2017-12-22T12:51:00+0530", - 1721.65, - 1721.8, - 1721.6, - 1721.75, - 46 - ], - [ - "2017-12-22T12:52:00+0530", - 1721.75, - 1721.95, - 1721.75, - 1721.9, - 3 - ], - [ - "2017-12-22T12:53:00+0530", - 1721.9, - 1721.9, - 1721.05, - 1721.05, - 4 - ], - [ - "2017-12-22T12:54:00+0530", - 1721.05, - 1721.75, - 1721.05, - 1721.05, - 473 - ], - [ - "2017-12-22T12:55:00+0530", - 1721.05, - 1721.05, - 1720.4, - 1720.4, - 36 - ], - [ - "2017-12-22T12:56:00+0530", - 1720.4, - 1721, - 1720.4, - 1720.6, - 483 - ], - [ - "2017-12-22T12:57:00+0530", - 1720.6, - 1722, - 1720.6, - 1722, - 520 - ], - [ - "2017-12-22T12:58:00+0530", - 1722, - 1722.35, - 1722, - 1722.35, - 414 - ], - [ - "2017-12-22T12:59:00+0530", - 1722.35, - 1722.35, - 1721.4, - 1722, - 958 - ], - [ - "2017-12-22T13:00:00+0530", - 1722, - 1722.35, - 1722, - 1722, - 518 - ], - [ - "2017-12-22T13:01:00+0530", - 1722.35, - 1722.35, - 1720.65, - 1721, - 5374 - ], - [ - "2017-12-22T13:02:00+0530", - 1721, - 1722.5, - 1721, - 1722.5, - 52 - ], - [ - "2017-12-22T13:03:00+0530", - 1723, - 1724, - 1722.6, - 1722.65, - 1771 - ], - [ - "2017-12-22T13:04:00+0530", - 1722.65, - 1723.85, - 1722.65, - 1722.65, - 123 - ], - [ - "2017-12-22T13:05:00+0530", - 1722.65, - 1722.95, - 1722.25, - 1722.95, - 17 - ], - [ - "2017-12-22T13:06:00+0530", - 1722.95, - 1723.9, - 1722.25, - 1723.3, - 736 - ], - [ - "2017-12-22T13:07:00+0530", - 1723.3, - 1723.3, - 1722, - 1723.1, - 141 - ], - [ - "2017-12-22T13:08:00+0530", - 1723.1, - 1723.75, - 1722.1, - 1723, - 664 - ], - [ - "2017-12-22T13:09:00+0530", - 1723, - 1723.95, - 1723, - 1723.45, - 157 - ], - [ - "2017-12-22T13:10:00+0530", - 1723.45, - 1724, - 1723.05, - 1723.25, - 207 - ], - [ - "2017-12-22T13:11:00+0530", - 1723.25, - 1724, - 1723.25, - 1723.5, - 78 - ], - [ - "2017-12-22T13:12:00+0530", - 1723.5, - 1726.65, - 1723.5, - 1725.95, - 3888 - ], - [ - "2017-12-22T13:13:00+0530", - 1725.95, - 1725.95, - 1725.15, - 1725.25, - 367 - ], - [ - "2017-12-22T13:14:00+0530", - 1725.25, - 1726, - 1724.5, - 1724.65, - 663 - ], - [ - "2017-12-22T13:15:00+0530", - 1725.65, - 1726, - 1725, - 1725.35, - 478 - ], - [ - "2017-12-22T13:16:00+0530", - 1725.3, - 1728.1, - 1725, - 1728.1, - 2079 - ], - [ - "2017-12-22T13:17:00+0530", - 1728.1, - 1728.1, - 1726.1, - 1726.1, - 776 - ], - [ - "2017-12-22T13:18:00+0530", - 1726.1, - 1726.2, - 1725.75, - 1725.75, - 127 - ], - [ - "2017-12-22T13:19:00+0530", - 1725.75, - 1726.55, - 1725.75, - 1726.5, - 74 - ], - [ - "2017-12-22T13:20:00+0530", - 1726.5, - 1726.5, - 1725.65, - 1726.05, - 140 - ], - [ - "2017-12-22T13:21:00+0530", - 1726.05, - 1726.05, - 1725.15, - 1725.15, - 4 - ], - [ - "2017-12-22T13:22:00+0530", - 1725.15, - 1726.5, - 1725.15, - 1726.5, - 470 - ], - [ - "2017-12-22T13:23:00+0530", - 1726.5, - 1726.5, - 1725, - 1725.5, - 173 - ], - [ - "2017-12-22T13:24:00+0530", - 1725.5, - 1727, - 1725.5, - 1727, - 258 - ], - [ - "2017-12-22T13:25:00+0530", - 1727, - 1727.3, - 1726.2, - 1726.2, - 34 - ], - [ - "2017-12-22T13:26:00+0530", - 1726.2, - 1727.4, - 1726.2, - 1726.35, - 35 - ], - [ - "2017-12-22T13:27:00+0530", - 1726.35, - 1727.85, - 1726.35, - 1726.55, - 649 - ], - [ - "2017-12-22T13:28:00+0530", - 1726.55, - 1727.55, - 1726.55, - 1727.55, - 61 - ], - [ - "2017-12-22T13:29:00+0530", - 1727.55, - 1727.85, - 1727.55, - 1727.85, - 194 - ], - [ - "2017-12-22T13:30:00+0530", - 1727.85, - 1728.2, - 1726.55, - 1727.5, - 652 - ], - [ - "2017-12-22T13:31:00+0530", - 1727.5, - 1728.25, - 1727.5, - 1728.25, - 78 - ], - [ - "2017-12-22T13:32:00+0530", - 1728.25, - 1728.3, - 1727, - 1727, - 71 - ], - [ - "2017-12-22T13:33:00+0530", - 1727, - 1728, - 1727, - 1728, - 101 - ], - [ - "2017-12-22T13:34:00+0530", - 1727, - 1727, - 1725.05, - 1725.05, - 810 - ], - [ - "2017-12-22T13:35:00+0530", - 1725.05, - 1725.1, - 1725.05, - 1725.1, - 200 - ], - [ - "2017-12-22T13:36:00+0530", - 1725.1, - 1725.25, - 1725, - 1725.2, - 577 - ], - [ - "2017-12-22T13:37:00+0530", - 1725.2, - 1725.2, - 1724.5, - 1724.5, - 866 - ], - [ - "2017-12-22T13:38:00+0530", - 1724.5, - 1725.45, - 1724.2, - 1724.2, - 102 - ], - [ - "2017-12-22T13:39:00+0530", - 1724.2, - 1725, - 1724.2, - 1725, - 11 - ], - [ - "2017-12-22T13:40:00+0530", - 1725, - 1725, - 1721, - 1721, - 456 - ], - [ - "2017-12-22T13:41:00+0530", - 1721, - 1721.65, - 1720, - 1721, - 381 - ], - [ - "2017-12-22T13:42:00+0530", - 1721, - 1723, - 1721, - 1723, - 86 - ], - [ - "2017-12-22T13:43:00+0530", - 1723, - 1724.2, - 1723, - 1723.05, - 4 - ], - [ - "2017-12-22T13:44:00+0530", - 1723.05, - 1723.85, - 1723.05, - 1723.85, - 10 - ], - [ - "2017-12-22T13:45:00+0530", - 1723.85, - 1723.85, - 1723.1, - 1723.1, - 20 - ], - [ - "2017-12-22T13:46:00+0530", - 1723.45, - 1724.95, - 1723.45, - 1724.95, - 433 - ], - [ - "2017-12-22T13:47:00+0530", - 1724.95, - 1724.95, - 1723.5, - 1723.5, - 89 - ], - [ - "2017-12-22T13:48:00+0530", - 1723.5, - 1723.85, - 1722.05, - 1722.3, - 700 - ], - [ - "2017-12-22T13:49:00+0530", - 1722.3, - 1724.45, - 1722.05, - 1723.15, - 714 - ], - [ - "2017-12-22T13:50:00+0530", - 1723.15, - 1724.35, - 1722.9, - 1722.9, - 206 - ], - [ - "2017-12-22T13:51:00+0530", - 1723.95, - 1724, - 1722.95, - 1722.95, - 50 - ], - [ - "2017-12-22T13:52:00+0530", - 1722.95, - 1724.2, - 1722.95, - 1724.2, - 100 - ], - [ - "2017-12-22T13:53:00+0530", - 1724.2, - 1724.2, - 1722.6, - 1722.6, - 21 - ], - [ - "2017-12-22T13:54:00+0530", - 1722.6, - 1724.25, - 1722.6, - 1723.95, - 83 - ], - [ - "2017-12-22T13:55:00+0530", - 1723.95, - 1724.4, - 1723.95, - 1724.4, - 44 - ], - [ - "2017-12-22T13:56:00+0530", - 1724.4, - 1724.4, - 1723.15, - 1723.15, - 1 - ], - [ - "2017-12-22T13:57:00+0530", - 1723.15, - 1723.15, - 1723.15, - 1723.15, - 0 - ], - [ - "2017-12-22T13:58:00+0530", - 1723.15, - 1723.15, - 1722.5, - 1722.5, - 123 - ], - [ - "2017-12-22T13:59:00+0530", - 1722.5, - 1722.5, - 1722.5, - 1722.5, - 0 - ], - [ - "2017-12-22T14:00:00+0530", - 1722.5, - 1722.75, - 1722.5, - 1722.75, - 5 - ], - [ - "2017-12-22T14:01:00+0530", - 1722.75, - 1723.05, - 1722.75, - 1723.05, - 104 - ], - [ - "2017-12-22T14:02:00+0530", - 1723.05, - 1723.5, - 1723.05, - 1723.5, - 1 - ], - [ - "2017-12-22T14:03:00+0530", - 1723.5, - 1724.85, - 1723.5, - 1724.85, - 24 - ], - [ - "2017-12-22T14:04:00+0530", - 1724.85, - 1724.85, - 1724.65, - 1724.65, - 202 - ], - [ - "2017-12-22T14:05:00+0530", - 1725.25, - 1725.25, - 1724.65, - 1724.65, - 30 - ], - [ - "2017-12-22T14:06:00+0530", - 1724.65, - 1725.3, - 1723.5, - 1723.5, - 120 - ], - [ - "2017-12-22T14:07:00+0530", - 1723.5, - 1724, - 1723.5, - 1724, - 42 - ], - [ - "2017-12-22T14:08:00+0530", - 1724, - 1724.45, - 1723.2, - 1723.2, - 1817 - ], - [ - "2017-12-22T14:09:00+0530", - 1722.65, - 1724.3, - 1722.65, - 1723.75, - 1096 - ], - [ - "2017-12-22T14:10:00+0530", - 1723.75, - 1724, - 1723.75, - 1723.75, - 28 - ], - [ - "2017-12-22T14:11:00+0530", - 1723.75, - 1723.75, - 1723.75, - 1723.75, - 5 - ], - [ - "2017-12-22T14:12:00+0530", - 1723.75, - 1723.9, - 1723.55, - 1723.9, - 81 - ], - [ - "2017-12-22T14:13:00+0530", - 1723.9, - 1723.9, - 1723.5, - 1723.5, - 12 - ], - [ - "2017-12-22T14:14:00+0530", - 1723.5, - 1723.85, - 1722.5, - 1722.5, - 175 - ], - [ - "2017-12-22T14:15:00+0530", - 1722.5, - 1722.55, - 1722, - 1722.2, - 101 - ], - [ - "2017-12-22T14:16:00+0530", - 1722.2, - 1722.25, - 1722, - 1722, - 188 - ], - [ - "2017-12-22T14:17:00+0530", - 1722, - 1722, - 1721.45, - 1722, - 126 - ], - [ - "2017-12-22T14:18:00+0530", - 1722, - 1722, - 1720.55, - 1720.55, - 94 - ], - [ - "2017-12-22T14:19:00+0530", - 1720.55, - 1721.75, - 1720.55, - 1720.6, - 85 - ], - [ - "2017-12-22T14:20:00+0530", - 1720.6, - 1720.85, - 1720.6, - 1720.85, - 21 - ], - [ - "2017-12-22T14:21:00+0530", - 1720.85, - 1721.8, - 1720.85, - 1721.1, - 45 - ], - [ - "2017-12-22T14:22:00+0530", - 1721.1, - 1721.8, - 1721.1, - 1721.1, - 174 - ], - [ - "2017-12-22T14:23:00+0530", - 1721.1, - 1721.2, - 1721.1, - 1721.1, - 98 - ], - [ - "2017-12-22T14:24:00+0530", - 1721.1, - 1722, - 1720.5, - 1720.5, - 757 - ], - [ - "2017-12-22T14:25:00+0530", - 1720.5, - 1720.95, - 1720, - 1720.15, - 812 - ], - [ - "2017-12-22T14:26:00+0530", - 1720.15, - 1720.2, - 1718.35, - 1718.35, - 746 - ], - [ - "2017-12-22T14:27:00+0530", - 1718.35, - 1719.65, - 1718, - 1718.15, - 906 - ], - [ - "2017-12-22T14:28:00+0530", - 1719.3, - 1719.9, - 1717.3, - 1717.3, - 426 - ], - [ - "2017-12-22T14:29:00+0530", - 1717.3, - 1718.95, - 1717.05, - 1717.95, - 120 - ], - [ - "2017-12-22T14:30:00+0530", - 1719.1, - 1719.2, - 1718, - 1718.5, - 344 - ], - [ - "2017-12-22T14:31:00+0530", - 1718.5, - 1719.4, - 1718.5, - 1719, - 256 - ], - [ - "2017-12-22T14:32:00+0530", - 1719, - 1719, - 1719, - 1719, - 3 - ], - [ - "2017-12-22T14:33:00+0530", - 1719.8, - 1719.8, - 1719, - 1719, - 5 - ], - [ - "2017-12-22T14:34:00+0530", - 1719, - 1722.9, - 1719, - 1722.65, - 1265 - ], - [ - "2017-12-22T14:35:00+0530", - 1722.65, - 1722.65, - 1721.25, - 1722.5, - 458 - ], - [ - "2017-12-22T14:36:00+0530", - 1722.5, - 1722.5, - 1721, - 1721.35, - 279 - ], - [ - "2017-12-22T14:37:00+0530", - 1721.35, - 1722.85, - 1721.35, - 1721.5, - 616 - ], - [ - "2017-12-22T14:38:00+0530", - 1721.5, - 1722.7, - 1721.5, - 1721.5, - 456 - ], - [ - "2017-12-22T14:39:00+0530", - 1721.5, - 1722, - 1721.5, - 1721.5, - 43 - ], - [ - "2017-12-22T14:40:00+0530", - 1721.5, - 1721.5, - 1721.1, - 1721.5, - 193 - ], - [ - "2017-12-22T14:41:00+0530", - 1721.5, - 1721.5, - 1721.1, - 1721.1, - 15 - ], - [ - "2017-12-22T14:42:00+0530", - 1721.1, - 1721.1, - 1721, - 1721.1, - 109 - ], - [ - "2017-12-22T14:43:00+0530", - 1721.1, - 1721.1, - 1721, - 1721.1, - 122 - ], - [ - "2017-12-22T14:44:00+0530", - 1721.2, - 1722.7, - 1721.2, - 1722, - 54 - ], - [ - "2017-12-22T14:45:00+0530", - 1722, - 1722.7, - 1722, - 1722, - 65 - ], - [ - "2017-12-22T14:46:00+0530", - 1722, - 1722, - 1721.55, - 1721.6, - 84 - ], - [ - "2017-12-22T14:47:00+0530", - 1721.6, - 1722, - 1721.5, - 1722, - 56 - ], - [ - "2017-12-22T14:48:00+0530", - 1722, - 1722, - 1722, - 1722, - 0 - ], - [ - "2017-12-22T14:49:00+0530", - 1722, - 1722, - 1720.5, - 1720.5, - 240 - ], - [ - "2017-12-22T14:50:00+0530", - 1720.5, - 1721.65, - 1720.5, - 1720.5, - 181 - ], - [ - "2017-12-22T14:51:00+0530", - 1720.5, - 1720.9, - 1720, - 1720, - 211 - ], - [ - "2017-12-22T14:52:00+0530", - 1720, - 1720.15, - 1719.05, - 1719.05, - 440 - ], - [ - "2017-12-22T14:53:00+0530", - 1719.05, - 1719.85, - 1717.55, - 1717.7, - 321 - ], - [ - "2017-12-22T14:54:00+0530", - 1717.7, - 1719.2, - 1717.7, - 1718.45, - 152 - ], - [ - "2017-12-22T14:55:00+0530", - 1718.45, - 1720.65, - 1718.45, - 1720.65, - 650 - ], - [ - "2017-12-22T14:56:00+0530", - 1720.65, - 1720.65, - 1718.9, - 1720.25, - 72 - ], - [ - "2017-12-22T14:57:00+0530", - 1720.25, - 1720.25, - 1720, - 1720, - 42 - ], - [ - "2017-12-22T14:58:00+0530", - 1720, - 1720.1, - 1719.95, - 1719.95, - 97 - ], - [ - "2017-12-22T14:59:00+0530", - 1719.95, - 1720.9, - 1719.95, - 1720.9, - 602 - ], - [ - "2017-12-22T15:00:00+0530", - 1720.9, - 1722.3, - 1720.05, - 1721.85, - 445 - ], - [ - "2017-12-22T15:01:00+0530", - 1721.85, - 1722.7, - 1721.85, - 1721.95, - 577 - ], - [ - "2017-12-22T15:02:00+0530", - 1721.95, - 1722.5, - 1721.6, - 1721.6, - 864 - ], - [ - "2017-12-22T15:03:00+0530", - 1721.6, - 1725, - 1721.6, - 1724.7, - 1973 - ], - [ - "2017-12-22T15:04:00+0530", - 1724.7, - 1725.2, - 1724.4, - 1724.5, - 176 - ], - [ - "2017-12-22T15:05:00+0530", - 1724.5, - 1724.5, - 1724.05, - 1724.05, - 68 - ], - [ - "2017-12-22T15:06:00+0530", - 1724.05, - 1724.05, - 1721.4, - 1722.4, - 197 - ], - [ - "2017-12-22T15:07:00+0530", - 1722.4, - 1722.4, - 1720.75, - 1721.6, - 864 - ], - [ - "2017-12-22T15:08:00+0530", - 1721.6, - 1723.9, - 1721.45, - 1722.65, - 986 - ], - [ - "2017-12-22T15:09:00+0530", - 1722.65, - 1723.85, - 1722.65, - 1723.85, - 139 - ], - [ - "2017-12-22T15:10:00+0530", - 1723.85, - 1724, - 1723.85, - 1724, - 243 - ], - [ - "2017-12-22T15:11:00+0530", - 1724, - 1724.25, - 1722.7, - 1723.95, - 1574 - ], - [ - "2017-12-22T15:12:00+0530", - 1723.95, - 1723.95, - 1721.1, - 1722.05, - 1425 - ], - [ - "2017-12-22T15:13:00+0530", - 1721.25, - 1722.4, - 1721, - 1722.05, - 2069 - ], - [ - "2017-12-22T15:14:00+0530", - 1721.55, - 1723.85, - 1721.55, - 1723.85, - 1063 - ], - [ - "2017-12-22T15:15:00+0530", - 1722.8, - 1723.95, - 1722.1, - 1722.15, - 686 - ], - [ - "2017-12-22T15:16:00+0530", - 1722.15, - 1722.75, - 1719.6, - 1720.95, - 2765 - ], - [ - "2017-12-22T15:17:00+0530", - 1720.95, - 1720.95, - 1719.1, - 1720.05, - 954 - ], - [ - "2017-12-22T15:18:00+0530", - 1720.05, - 1721.3, - 1719.55, - 1719.55, - 347 - ], - [ - "2017-12-22T15:19:00+0530", - 1720.85, - 1721.55, - 1719.55, - 1720.8, - 609 - ], - [ - "2017-12-22T15:20:00+0530", - 1720.8, - 1723, - 1720.8, - 1723, - 1856 - ], - [ - "2017-12-22T15:21:00+0530", - 1723, - 1723, - 1721.95, - 1722.65, - 943 - ], - [ - "2017-12-22T15:22:00+0530", - 1722.65, - 1722.7, - 1720.7, - 1721.05, - 2217 - ], - [ - "2017-12-22T15:23:00+0530", - 1721.7, - 1722.15, - 1719.2, - 1722.15, - 1365 - ], - [ - "2017-12-22T15:24:00+0530", - 1722.15, - 1722.15, - 1720.55, - 1720.55, - 995 - ], - [ - "2017-12-22T15:25:00+0530", - 1720.55, - 1721.25, - 1720.55, - 1720.85, - 464 - ], - [ - "2017-12-22T15:26:00+0530", - 1720.75, - 1721.3, - 1719.9, - 1720, - 1131 - ], - [ - "2017-12-22T15:27:00+0530", - 1719.4, - 1720, - 1719.3, - 1719.4, - 2283 - ], - [ - "2017-12-22T15:28:00+0530", - 1719.4, - 1721, - 1719.2, - 1721, - 2479 - ], - [ - "2017-12-22T15:29:00+0530", - 1721, - 1721.35, - 1718.7, - 1720.85, - 900 - ], - [ - "2017-12-26T09:15:00+0530", - 1723, - 1733.6, - 1719.3, - 1721.1, - 1433 - ], - [ - "2017-12-26T09:16:00+0530", - 1721.1, - 1723.65, - 1721.1, - 1722, - 1525 - ], - [ - "2017-12-26T09:17:00+0530", - 1722, - 1722, - 1720, - 1720.65, - 508 - ], - [ - "2017-12-26T09:18:00+0530", - 1720.65, - 1722, - 1720.55, - 1721.8, - 243 - ], - [ - "2017-12-26T09:19:00+0530", - 1721.8, - 1725.7, - 1721.7, - 1724.25, - 1890 - ], - [ - "2017-12-26T09:20:00+0530", - 1722.6, - 1722.9, - 1721, - 1722, - 690 - ], - [ - "2017-12-26T09:21:00+0530", - 1721.8, - 1721.8, - 1720.05, - 1720.6, - 493 - ], - [ - "2017-12-26T09:22:00+0530", - 1720.6, - 1721.85, - 1720.6, - 1721.85, - 364 - ], - [ - "2017-12-26T09:23:00+0530", - 1721.75, - 1722.25, - 1714.6, - 1714.6, - 1649 - ], - [ - "2017-12-26T09:24:00+0530", - 1714.55, - 1716.65, - 1711.5, - 1714.8, - 2012 - ], - [ - "2017-12-26T09:25:00+0530", - 1714.8, - 1717.95, - 1714.8, - 1716, - 593 - ], - [ - "2017-12-26T09:26:00+0530", - 1716.05, - 1716.85, - 1716.05, - 1716.7, - 317 - ], - [ - "2017-12-26T09:27:00+0530", - 1716.7, - 1716.7, - 1714.7, - 1714.95, - 423 - ], - [ - "2017-12-26T09:28:00+0530", - 1715, - 1716.35, - 1715, - 1716, - 732 - ], - [ - "2017-12-26T09:29:00+0530", - 1716, - 1716.55, - 1715.65, - 1716.55, - 626 - ], - [ - "2017-12-26T09:30:00+0530", - 1716.55, - 1718.25, - 1716.55, - 1718, - 1158 - ], - [ - "2017-12-26T09:31:00+0530", - 1717.85, - 1718.8, - 1717.2, - 1718.15, - 243 - ], - [ - "2017-12-26T09:32:00+0530", - 1718.15, - 1722, - 1718.15, - 1722, - 425 - ], - [ - "2017-12-26T09:33:00+0530", - 1721.95, - 1722, - 1721.95, - 1722, - 187 - ], - [ - "2017-12-26T09:34:00+0530", - 1721, - 1721, - 1719.35, - 1720, - 364 - ], - [ - "2017-12-26T09:35:00+0530", - 1719.7, - 1720.5, - 1719, - 1719.1, - 567 - ], - [ - "2017-12-26T09:36:00+0530", - 1719.1, - 1720, - 1719.05, - 1719.85, - 368 - ], - [ - "2017-12-26T09:37:00+0530", - 1719.85, - 1719.9, - 1717.5, - 1718.55, - 1184 - ], - [ - "2017-12-26T09:38:00+0530", - 1718.55, - 1718.55, - 1718.45, - 1718.45, - 193 - ], - [ - "2017-12-26T09:39:00+0530", - 1718.45, - 1718.45, - 1717.85, - 1718, - 166 - ], - [ - "2017-12-26T09:40:00+0530", - 1718.05, - 1718.05, - 1715.65, - 1716.3, - 1200 - ], - [ - "2017-12-26T09:41:00+0530", - 1716.3, - 1718, - 1716.3, - 1717.5, - 77 - ], - [ - "2017-12-26T09:42:00+0530", - 1717.5, - 1717.5, - 1715.4, - 1715.65, - 1885 - ], - [ - "2017-12-26T09:43:00+0530", - 1715.65, - 1716.4, - 1710.5, - 1712.3, - 4974 - ], - [ - "2017-12-26T09:44:00+0530", - 1712.3, - 1712.8, - 1710.55, - 1712.55, - 742 - ], - [ - "2017-12-26T09:45:00+0530", - 1712.55, - 1715.05, - 1712.55, - 1715, - 437 - ], - [ - "2017-12-26T09:46:00+0530", - 1715, - 1715.95, - 1714.25, - 1714.25, - 677 - ], - [ - "2017-12-26T09:47:00+0530", - 1714.15, - 1714.15, - 1713.5, - 1714, - 804 - ], - [ - "2017-12-26T09:48:00+0530", - 1714, - 1714, - 1713.9, - 1713.9, - 181 - ], - [ - "2017-12-26T09:49:00+0530", - 1713.9, - 1714, - 1713.25, - 1713.95, - 87 - ], - [ - "2017-12-26T09:50:00+0530", - 1713.85, - 1713.85, - 1713.35, - 1713.8, - 131 - ], - [ - "2017-12-26T09:51:00+0530", - 1713.3, - 1714, - 1713.3, - 1714, - 299 - ], - [ - "2017-12-26T09:52:00+0530", - 1714, - 1714.7, - 1714, - 1714.7, - 344 - ], - [ - "2017-12-26T09:53:00+0530", - 1714.7, - 1714.85, - 1714.7, - 1714.85, - 192 - ], - [ - "2017-12-26T09:54:00+0530", - 1714.85, - 1714.85, - 1714.75, - 1714.8, - 69 - ], - [ - "2017-12-26T09:55:00+0530", - 1714.85, - 1714.9, - 1714.7, - 1714.7, - 292 - ], - [ - "2017-12-26T09:56:00+0530", - 1714.75, - 1715, - 1714.75, - 1715, - 219 - ], - [ - "2017-12-26T09:57:00+0530", - 1715, - 1716.85, - 1714.85, - 1716.85, - 80 - ], - [ - "2017-12-26T09:58:00+0530", - 1716.8, - 1716.8, - 1715, - 1715, - 118 - ], - [ - "2017-12-26T09:59:00+0530", - 1715, - 1715.85, - 1714.85, - 1715.65, - 77 - ], - [ - "2017-12-26T10:00:00+0530", - 1715.6, - 1716.95, - 1715.6, - 1716.95, - 571 - ], - [ - "2017-12-26T10:01:00+0530", - 1716.95, - 1716.95, - 1716.1, - 1716.7, - 82 - ], - [ - "2017-12-26T10:02:00+0530", - 1716.7, - 1716.9, - 1716.7, - 1716.9, - 93 - ], - [ - "2017-12-26T10:03:00+0530", - 1716.95, - 1716.95, - 1716.7, - 1716.7, - 104 - ], - [ - "2017-12-26T10:04:00+0530", - 1716.7, - 1716.95, - 1716.7, - 1716.95, - 110 - ], - [ - "2017-12-26T10:05:00+0530", - 1716.95, - 1717.6, - 1716.7, - 1717.55, - 156 - ], - [ - "2017-12-26T10:06:00+0530", - 1717.55, - 1718.3, - 1716.75, - 1717, - 219 - ], - [ - "2017-12-26T10:07:00+0530", - 1717, - 1718.25, - 1717, - 1718.25, - 111 - ], - [ - "2017-12-26T10:08:00+0530", - 1718.25, - 1719.55, - 1718, - 1718.3, - 36235 - ], - [ - "2017-12-26T10:09:00+0530", - 1718.3, - 1719.3, - 1718.3, - 1718.4, - 157 - ], - [ - "2017-12-26T10:10:00+0530", - 1718.4, - 1718.4, - 1718, - 1718.35, - 78 - ], - [ - "2017-12-26T10:11:00+0530", - 1718.35, - 1718.35, - 1718, - 1718.05, - 117 - ], - [ - "2017-12-26T10:12:00+0530", - 1718.05, - 1719.3, - 1717.05, - 1719.25, - 878 - ], - [ - "2017-12-26T10:13:00+0530", - 1719.25, - 1719.75, - 1719.25, - 1719.5, - 109 - ], - [ - "2017-12-26T10:14:00+0530", - 1719.5, - 1719.95, - 1718.8, - 1719.05, - 96 - ], - [ - "2017-12-26T10:15:00+0530", - 1719.05, - 1722, - 1719.05, - 1721, - 634 - ], - [ - "2017-12-26T10:16:00+0530", - 1721, - 1722, - 1720.85, - 1721.7, - 586 - ], - [ - "2017-12-26T10:17:00+0530", - 1721.7, - 1723.8, - 1721.7, - 1723.8, - 345 - ], - [ - "2017-12-26T10:18:00+0530", - 1724.5, - 1724.5, - 1723, - 1723, - 559 - ], - [ - "2017-12-26T10:19:00+0530", - 1723.5, - 1723.9, - 1722.15, - 1722.15, - 536 - ], - [ - "2017-12-26T10:20:00+0530", - 1722.15, - 1722.6, - 1720.9, - 1722.4, - 227 - ], - [ - "2017-12-26T10:21:00+0530", - 1722.45, - 1722.55, - 1721, - 1721, - 303 - ], - [ - "2017-12-26T10:22:00+0530", - 1721, - 1721, - 1720, - 1720, - 436 - ], - [ - "2017-12-26T10:23:00+0530", - 1720, - 1720, - 1719, - 1720, - 166 - ], - [ - "2017-12-26T10:24:00+0530", - 1720, - 1720.45, - 1720, - 1720.45, - 103 - ], - [ - "2017-12-26T10:25:00+0530", - 1720.45, - 1720.45, - 1719.45, - 1719.45, - 77 - ], - [ - "2017-12-26T10:26:00+0530", - 1719.45, - 1720.5, - 1719.45, - 1720.5, - 93 - ], - [ - "2017-12-26T10:27:00+0530", - 1720.5, - 1720.85, - 1719.45, - 1720.4, - 368 - ], - [ - "2017-12-26T10:28:00+0530", - 1720.35, - 1720.35, - 1720.15, - 1720.15, - 68 - ], - [ - "2017-12-26T10:29:00+0530", - 1720.15, - 1720.15, - 1720.05, - 1720.05, - 67 - ], - [ - "2017-12-26T10:30:00+0530", - 1720, - 1720, - 1720, - 1720, - 67 - ], - [ - "2017-12-26T10:31:00+0530", - 1720, - 1720.35, - 1719.45, - 1720.3, - 306 - ], - [ - "2017-12-26T10:32:00+0530", - 1720.25, - 1720.25, - 1720.25, - 1720.25, - 68 - ], - [ - "2017-12-26T10:33:00+0530", - 1720.25, - 1721, - 1719.8, - 1721, - 95 - ], - [ - "2017-12-26T10:34:00+0530", - 1721, - 1721.55, - 1721, - 1721.2, - 782 - ], - [ - "2017-12-26T10:35:00+0530", - 1722, - 1723, - 1721, - 1723, - 398 - ], - [ - "2017-12-26T10:36:00+0530", - 1723, - 1727.55, - 1723, - 1725.65, - 1277 - ], - [ - "2017-12-26T10:37:00+0530", - 1725.6, - 1726, - 1725.05, - 1725.05, - 635 - ], - [ - "2017-12-26T10:38:00+0530", - 1724.95, - 1724.95, - 1724, - 1724.9, - 196 - ], - [ - "2017-12-26T10:39:00+0530", - 1724.9, - 1726, - 1724, - 1724, - 1675 - ], - [ - "2017-12-26T10:40:00+0530", - 1724.05, - 1724.2, - 1724.05, - 1724.2, - 172 - ], - [ - "2017-12-26T10:41:00+0530", - 1724.2, - 1726.85, - 1724.2, - 1725.65, - 476 - ], - [ - "2017-12-26T10:42:00+0530", - 1725.65, - 1727.55, - 1725.65, - 1727.35, - 324 - ], - [ - "2017-12-26T10:43:00+0530", - 1727.35, - 1727.55, - 1725.1, - 1725.1, - 580 - ], - [ - "2017-12-26T10:44:00+0530", - 1725.1, - 1726.2, - 1724.85, - 1726.1, - 107 - ], - [ - "2017-12-26T10:45:00+0530", - 1726.15, - 1726.35, - 1726.15, - 1726.35, - 67 - ], - [ - "2017-12-26T10:46:00+0530", - 1726.4, - 1726.4, - 1724.7, - 1725.9, - 194 - ], - [ - "2017-12-26T10:47:00+0530", - 1725.85, - 1725.9, - 1725, - 1725.9, - 142 - ], - [ - "2017-12-26T10:48:00+0530", - 1725.85, - 1726.15, - 1725.85, - 1726.05, - 147 - ], - [ - "2017-12-26T10:49:00+0530", - 1726.05, - 1726.05, - 1725.7, - 1725.7, - 117 - ], - [ - "2017-12-26T10:50:00+0530", - 1725.75, - 1726, - 1725.65, - 1726, - 68 - ], - [ - "2017-12-26T10:51:00+0530", - 1726, - 1726.45, - 1725.3, - 1726.4, - 173 - ], - [ - "2017-12-26T10:52:00+0530", - 1726.4, - 1727, - 1726.4, - 1726.4, - 156 - ], - [ - "2017-12-26T10:53:00+0530", - 1726.4, - 1727, - 1726.05, - 1727, - 174 - ], - [ - "2017-12-26T10:54:00+0530", - 1727, - 1727, - 1726.05, - 1726.05, - 69 - ], - [ - "2017-12-26T10:55:00+0530", - 1726.05, - 1727, - 1726.05, - 1726.95, - 167 - ], - [ - "2017-12-26T10:56:00+0530", - 1726.95, - 1726.95, - 1726, - 1726, - 173 - ], - [ - "2017-12-26T10:57:00+0530", - 1726, - 1726.9, - 1725.85, - 1726.9, - 211 - ], - [ - "2017-12-26T10:58:00+0530", - 1726.85, - 1726.9, - 1726.85, - 1726.9, - 173 - ], - [ - "2017-12-26T10:59:00+0530", - 1726.85, - 1726.85, - 1726.8, - 1726.8, - 67 - ], - [ - "2017-12-26T11:00:00+0530", - 1726, - 1726.85, - 1725.5, - 1726.85, - 325 - ], - [ - "2017-12-26T11:01:00+0530", - 1726.9, - 1729.25, - 1726.5, - 1729.25, - 1850 - ], - [ - "2017-12-26T11:02:00+0530", - 1729.25, - 1729.25, - 1728.25, - 1728.8, - 309 - ], - [ - "2017-12-26T11:03:00+0530", - 1728.8, - 1729.5, - 1728.55, - 1729, - 231 - ], - [ - "2017-12-26T11:04:00+0530", - 1729, - 1729.85, - 1729, - 1729.5, - 198 - ], - [ - "2017-12-26T11:05:00+0530", - 1729.5, - 1729.5, - 1728.2, - 1728.95, - 227 - ], - [ - "2017-12-26T11:06:00+0530", - 1728.95, - 1729.3, - 1728.7, - 1729.3, - 339 - ], - [ - "2017-12-26T11:07:00+0530", - 1729.3, - 1729.3, - 1728.7, - 1729.25, - 241 - ], - [ - "2017-12-26T11:08:00+0530", - 1729.3, - 1729.4, - 1728.95, - 1729.35, - 413 - ], - [ - "2017-12-26T11:09:00+0530", - 1729.4, - 1729.4, - 1729, - 1729.4, - 128 - ], - [ - "2017-12-26T11:10:00+0530", - 1729.4, - 1731, - 1729.1, - 1731, - 1922 - ], - [ - "2017-12-26T11:11:00+0530", - 1731, - 1732, - 1729.65, - 1732, - 823 - ], - [ - "2017-12-26T11:12:00+0530", - 1732, - 1732, - 1730.15, - 1732, - 479 - ], - [ - "2017-12-26T11:13:00+0530", - 1732, - 1732, - 1730.85, - 1732, - 566 - ], - [ - "2017-12-26T11:14:00+0530", - 1732, - 1732, - 1731, - 1731, - 635 - ], - [ - "2017-12-26T11:15:00+0530", - 1731, - 1731.85, - 1731, - 1731.25, - 256 - ], - [ - "2017-12-26T11:16:00+0530", - 1731.25, - 1732, - 1731.25, - 1731.55, - 400 - ], - [ - "2017-12-26T11:17:00+0530", - 1731.55, - 1731.55, - 1731.05, - 1731.05, - 145 - ], - [ - "2017-12-26T11:18:00+0530", - 1731.05, - 1732.75, - 1731.05, - 1732.75, - 789 - ], - [ - "2017-12-26T11:19:00+0530", - 1732.7, - 1732.7, - 1731.6, - 1732, - 391 - ], - [ - "2017-12-26T11:20:00+0530", - 1732.05, - 1732.3, - 1731.5, - 1731.5, - 478 - ], - [ - "2017-12-26T11:21:00+0530", - 1731.5, - 1732, - 1731.5, - 1731.5, - 119 - ], - [ - "2017-12-26T11:22:00+0530", - 1731.5, - 1732, - 1731, - 1731.4, - 679 - ], - [ - "2017-12-26T11:23:00+0530", - 1731.45, - 1731.45, - 1730.1, - 1731.2, - 488 - ], - [ - "2017-12-26T11:24:00+0530", - 1731.2, - 1731.2, - 1728.75, - 1728.75, - 343 - ], - [ - "2017-12-26T11:25:00+0530", - 1728.75, - 1730.8, - 1728.75, - 1730.8, - 661 - ], - [ - "2017-12-26T11:26:00+0530", - 1730.8, - 1730.95, - 1730.8, - 1730.95, - 217 - ], - [ - "2017-12-26T11:27:00+0530", - 1730.9, - 1731.1, - 1730, - 1731.1, - 302 - ], - [ - "2017-12-26T11:28:00+0530", - 1731.1, - 1731.9, - 1731, - 1731.9, - 331 - ], - [ - "2017-12-26T11:29:00+0530", - 1731.9, - 1732.95, - 1731.5, - 1731.5, - 624 - ], - [ - "2017-12-26T11:30:00+0530", - 1731.5, - 1732.65, - 1731.2, - 1731.65, - 152 - ], - [ - "2017-12-26T11:31:00+0530", - 1731.65, - 1732.5, - 1731.65, - 1732.35, - 274 - ], - [ - "2017-12-26T11:32:00+0530", - 1732.2, - 1732.2, - 1731.1, - 1731.7, - 178 - ], - [ - "2017-12-26T11:33:00+0530", - 1731.7, - 1731.7, - 1730.9, - 1731.7, - 83 - ], - [ - "2017-12-26T11:34:00+0530", - 1731.75, - 1731.75, - 1731.35, - 1731.35, - 105 - ], - [ - "2017-12-26T11:35:00+0530", - 1731.35, - 1732, - 1731.35, - 1732, - 76 - ], - [ - "2017-12-26T11:36:00+0530", - 1732, - 1732.3, - 1732, - 1732, - 676 - ], - [ - "2017-12-26T11:37:00+0530", - 1732.05, - 1732.05, - 1731.35, - 1731.35, - 295 - ], - [ - "2017-12-26T11:38:00+0530", - 1731.35, - 1731.65, - 1731.05, - 1731.65, - 85 - ], - [ - "2017-12-26T11:39:00+0530", - 1731.65, - 1731.65, - 1731.35, - 1731.35, - 257 - ], - [ - "2017-12-26T11:40:00+0530", - 1731.35, - 1731.9, - 1731.35, - 1731.4, - 74 - ], - [ - "2017-12-26T11:41:00+0530", - 1731.4, - 1732.4, - 1731.4, - 1732.4, - 240 - ], - [ - "2017-12-26T11:42:00+0530", - 1732.35, - 1732.5, - 1732.2, - 1732.5, - 171 - ], - [ - "2017-12-26T11:43:00+0530", - 1732.5, - 1732.8, - 1732.4, - 1732.75, - 201 - ], - [ - "2017-12-26T11:44:00+0530", - 1732.75, - 1732.8, - 1731.6, - 1732.65, - 82 - ], - [ - "2017-12-26T11:45:00+0530", - 1732.7, - 1732.8, - 1731.55, - 1732.8, - 105 - ], - [ - "2017-12-26T11:46:00+0530", - 1732.8, - 1732.85, - 1731.2, - 1731.2, - 174 - ], - [ - "2017-12-26T11:47:00+0530", - 1731.2, - 1732.9, - 1731.2, - 1732.85, - 236 - ], - [ - "2017-12-26T11:48:00+0530", - 1732.9, - 1732.9, - 1732.8, - 1732.8, - 76 - ], - [ - "2017-12-26T11:49:00+0530", - 1732.85, - 1732.95, - 1732.8, - 1732.9, - 109 - ], - [ - "2017-12-26T11:50:00+0530", - 1732.9, - 1732.95, - 1732.8, - 1732.9, - 107 - ], - [ - "2017-12-26T11:51:00+0530", - 1732.95, - 1733, - 1732.9, - 1733, - 156 - ], - [ - "2017-12-26T11:52:00+0530", - 1733, - 1733, - 1732, - 1732.45, - 223 - ], - [ - "2017-12-26T11:53:00+0530", - 1732.45, - 1732.9, - 1731, - 1731, - 224 - ], - [ - "2017-12-26T11:54:00+0530", - 1731, - 1731, - 1728.65, - 1729.5, - 762 - ], - [ - "2017-12-26T11:55:00+0530", - 1729.5, - 1729.55, - 1728.15, - 1729.55, - 431 - ], - [ - "2017-12-26T11:56:00+0530", - 1729.5, - 1730.9, - 1729.35, - 1729.95, - 558 - ], - [ - "2017-12-26T11:57:00+0530", - 1729.95, - 1731.85, - 1729.95, - 1731.7, - 142 - ], - [ - "2017-12-26T11:58:00+0530", - 1731.75, - 1731.9, - 1730.45, - 1730.45, - 571 - ], - [ - "2017-12-26T11:59:00+0530", - 1730.45, - 1731.3, - 1730.45, - 1731, - 95 - ], - [ - "2017-12-26T12:00:00+0530", - 1731, - 1731.25, - 1731, - 1731.2, - 88 - ], - [ - "2017-12-26T12:01:00+0530", - 1731.2, - 1731.2, - 1731, - 1731, - 117 - ], - [ - "2017-12-26T12:02:00+0530", - 1731, - 1731.55, - 1731, - 1731, - 99 - ], - [ - "2017-12-26T12:03:00+0530", - 1731, - 1731.65, - 1731, - 1731.55, - 67 - ], - [ - "2017-12-26T12:04:00+0530", - 1731.55, - 1731.55, - 1731, - 1731, - 149 - ], - [ - "2017-12-26T12:05:00+0530", - 1731, - 1731.85, - 1731, - 1731.85, - 226 - ], - [ - "2017-12-26T12:06:00+0530", - 1731.85, - 1731.85, - 1730.45, - 1731.8, - 138 - ], - [ - "2017-12-26T12:07:00+0530", - 1731.8, - 1731.8, - 1731, - 1731.25, - 71 - ], - [ - "2017-12-26T12:08:00+0530", - 1731.25, - 1731.85, - 1731.2, - 1731.2, - 182 - ], - [ - "2017-12-26T12:09:00+0530", - 1731.2, - 1731.85, - 1731.2, - 1731.85, - 90 - ], - [ - "2017-12-26T12:10:00+0530", - 1731.85, - 1731.85, - 1731.25, - 1731.85, - 97 - ], - [ - "2017-12-26T12:11:00+0530", - 1731.85, - 1731.85, - 1731.2, - 1731.85, - 119 - ], - [ - "2017-12-26T12:12:00+0530", - 1731.85, - 1731.9, - 1731.85, - 1731.9, - 77 - ], - [ - "2017-12-26T12:13:00+0530", - 1731.9, - 1732, - 1731.25, - 1732, - 92 - ], - [ - "2017-12-26T12:14:00+0530", - 1731.95, - 1732, - 1731.25, - 1732, - 77 - ], - [ - "2017-12-26T12:15:00+0530", - 1732, - 1732, - 1731.25, - 1731.25, - 75 - ], - [ - "2017-12-26T12:16:00+0530", - 1731.25, - 1732, - 1731.2, - 1731.2, - 428 - ], - [ - "2017-12-26T12:17:00+0530", - 1731.2, - 1732, - 1731.15, - 1731.15, - 77 - ], - [ - "2017-12-26T12:18:00+0530", - 1730.95, - 1731.9, - 1730.75, - 1731.85, - 87 - ], - [ - "2017-12-26T12:19:00+0530", - 1731.8, - 1731.8, - 1730, - 1730, - 128 - ], - [ - "2017-12-26T12:20:00+0530", - 1730, - 1731.05, - 1730, - 1731.05, - 92 - ], - [ - "2017-12-26T12:21:00+0530", - 1731, - 1731, - 1729.7, - 1729.7, - 192 - ], - [ - "2017-12-26T12:22:00+0530", - 1729.7, - 1730.8, - 1729.7, - 1730.8, - 75 - ], - [ - "2017-12-26T12:23:00+0530", - 1730.8, - 1731, - 1730.1, - 1730.1, - 207 - ], - [ - "2017-12-26T12:24:00+0530", - 1730.1, - 1731.4, - 1730.1, - 1731.4, - 67 - ], - [ - "2017-12-26T12:25:00+0530", - 1731.3, - 1731.35, - 1730, - 1730, - 172 - ], - [ - "2017-12-26T12:26:00+0530", - 1730, - 1730.9, - 1730, - 1730.9, - 93 - ], - [ - "2017-12-26T12:27:00+0530", - 1730.95, - 1731.9, - 1730.7, - 1731.85, - 73 - ], - [ - "2017-12-26T12:28:00+0530", - 1731.8, - 1731.85, - 1729.9, - 1729.9, - 101 - ], - [ - "2017-12-26T12:29:00+0530", - 1729.9, - 1729.9, - 1729.9, - 1729.9, - 1 - ], - [ - "2017-12-26T12:30:00+0530", - 1729.9, - 1730, - 1729.9, - 1730, - 5 - ], - [ - "2017-12-26T12:31:00+0530", - 1730, - 1730, - 1729.85, - 1729.85, - 20 - ], - [ - "2017-12-26T12:32:00+0530", - 1729.35, - 1729.35, - 1729.15, - 1729.2, - 91 - ], - [ - "2017-12-26T12:33:00+0530", - 1729.2, - 1730.75, - 1729.2, - 1730.75, - 526 - ], - [ - "2017-12-26T12:34:00+0530", - 1730, - 1730, - 1729.95, - 1729.95, - 100 - ], - [ - "2017-12-26T12:35:00+0530", - 1729.95, - 1729.95, - 1729.95, - 1729.95, - 0 - ], - [ - "2017-12-26T12:36:00+0530", - 1729.95, - 1730.95, - 1729.95, - 1730.95, - 63 - ], - [ - "2017-12-26T12:37:00+0530", - 1730.95, - 1731.1, - 1730.95, - 1731.1, - 100 - ], - [ - "2017-12-26T12:38:00+0530", - 1731.1, - 1731.5, - 1731.1, - 1731.5, - 1168 - ], - [ - "2017-12-26T12:39:00+0530", - 1731.5, - 1732.45, - 1731.5, - 1732.45, - 397 - ], - [ - "2017-12-26T12:40:00+0530", - 1732.45, - 1732.45, - 1731.9, - 1732, - 51 - ], - [ - "2017-12-26T12:41:00+0530", - 1732, - 1732.45, - 1732, - 1732.45, - 36 - ], - [ - "2017-12-26T12:42:00+0530", - 1732.45, - 1732.45, - 1732.45, - 1732.45, - 0 - ], - [ - "2017-12-26T12:43:00+0530", - 1732.25, - 1732.25, - 1731.8, - 1731.8, - 31 - ], - [ - "2017-12-26T12:44:00+0530", - 1731.8, - 1732, - 1731.8, - 1732, - 26 - ], - [ - "2017-12-26T12:45:00+0530", - 1732, - 1732.1, - 1731.9, - 1732, - 56 - ], - [ - "2017-12-26T12:46:00+0530", - 1732, - 1732, - 1732, - 1732, - 0 - ], - [ - "2017-12-26T12:47:00+0530", - 1732, - 1732, - 1732, - 1732, - 25 - ], - [ - "2017-12-26T12:48:00+0530", - 1732, - 1732, - 1732, - 1732, - 0 - ], - [ - "2017-12-26T12:49:00+0530", - 1732, - 1732, - 1732, - 1732, - 0 - ], - [ - "2017-12-26T12:50:00+0530", - 1732, - 1732, - 1731.8, - 1731.8, - 294 - ], - [ - "2017-12-26T12:51:00+0530", - 1731.8, - 1732.25, - 1731.7, - 1732.05, - 135 - ], - [ - "2017-12-26T12:52:00+0530", - 1732.05, - 1732.6, - 1731.9, - 1732.5, - 263 - ], - [ - "2017-12-26T12:53:00+0530", - 1732.5, - 1732.5, - 1731.6, - 1731.6, - 33 - ], - [ - "2017-12-26T12:54:00+0530", - 1731.6, - 1732, - 1731.6, - 1732, - 1 - ], - [ - "2017-12-26T12:55:00+0530", - 1732, - 1732, - 1732, - 1732, - 0 - ], - [ - "2017-12-26T12:56:00+0530", - 1732, - 1732, - 1731.3, - 1732, - 538 - ], - [ - "2017-12-26T12:57:00+0530", - 1732, - 1732, - 1731.25, - 1731.25, - 125 - ], - [ - "2017-12-26T12:58:00+0530", - 1732, - 1732.4, - 1731.5, - 1732, - 78 - ], - [ - "2017-12-26T12:59:00+0530", - 1731.5, - 1731.5, - 1731.5, - 1731.5, - 19 - ], - [ - "2017-12-26T13:00:00+0530", - 1732.4, - 1732.4, - 1732.4, - 1732.4, - 3 - ], - [ - "2017-12-26T13:01:00+0530", - 1732.4, - 1732.4, - 1732.05, - 1732.1, - 234 - ], - [ - "2017-12-26T13:02:00+0530", - 1732.1, - 1732.95, - 1732.1, - 1732.95, - 181 - ], - [ - "2017-12-26T13:03:00+0530", - 1732.95, - 1735.6, - 1732.95, - 1735.5, - 3900 - ], - [ - "2017-12-26T13:04:00+0530", - 1735.5, - 1736.4, - 1735, - 1735.6, - 956 - ], - [ - "2017-12-26T13:05:00+0530", - 1735.6, - 1736.4, - 1735, - 1735.5, - 541 - ], - [ - "2017-12-26T13:06:00+0530", - 1735.5, - 1735.5, - 1733.8, - 1735, - 13553 - ], - [ - "2017-12-26T13:07:00+0530", - 1735, - 1735.2, - 1733.85, - 1735, - 1964 - ], - [ - "2017-12-26T13:08:00+0530", - 1735, - 1735, - 1735, - 1735, - 553 - ], - [ - "2017-12-26T13:09:00+0530", - 1735, - 1735, - 1735, - 1735, - 469 - ], - [ - "2017-12-26T13:10:00+0530", - 1735, - 1735.5, - 1734.8, - 1735, - 354 - ], - [ - "2017-12-26T13:11:00+0530", - 1735, - 1735, - 1733.8, - 1733.95, - 668 - ], - [ - "2017-12-26T13:12:00+0530", - 1733.95, - 1735, - 1733.85, - 1735, - 785 - ], - [ - "2017-12-26T13:13:00+0530", - 1735, - 1735.4, - 1734.35, - 1734.35, - 441 - ], - [ - "2017-12-26T13:14:00+0530", - 1734.35, - 1735, - 1734.35, - 1735, - 260 - ], - [ - "2017-12-26T13:15:00+0530", - 1735, - 1735, - 1735, - 1735, - 17 - ], - [ - "2017-12-26T13:16:00+0530", - 1735, - 1736, - 1735, - 1736, - 139 - ], - [ - "2017-12-26T13:17:00+0530", - 1736, - 1736.4, - 1736, - 1736, - 63 - ], - [ - "2017-12-26T13:18:00+0530", - 1735.5, - 1735.9, - 1735.5, - 1735.9, - 40 - ], - [ - "2017-12-26T13:19:00+0530", - 1735.9, - 1736, - 1734.55, - 1735.5, - 58 - ], - [ - "2017-12-26T13:20:00+0530", - 1735.5, - 1735.5, - 1734.55, - 1735, - 21 - ], - [ - "2017-12-26T13:21:00+0530", - 1735, - 1735, - 1734.55, - 1734.55, - 56 - ], - [ - "2017-12-26T13:22:00+0530", - 1734.55, - 1734.6, - 1734.55, - 1734.6, - 1 - ], - [ - "2017-12-26T13:23:00+0530", - 1734.6, - 1735.85, - 1734.15, - 1734.15, - 260 - ], - [ - "2017-12-26T13:24:00+0530", - 1734.15, - 1736.4, - 1734.15, - 1736.4, - 305 - ], - [ - "2017-12-26T13:25:00+0530", - 1735.95, - 1736.4, - 1735.9, - 1736, - 168 - ], - [ - "2017-12-26T13:26:00+0530", - 1735.75, - 1735.75, - 1734.55, - 1734.55, - 51 - ], - [ - "2017-12-26T13:27:00+0530", - 1734.55, - 1735.2, - 1734.05, - 1735.2, - 241 - ], - [ - "2017-12-26T13:28:00+0530", - 1735.2, - 1735.2, - 1735, - 1735, - 100 - ], - [ - "2017-12-26T13:29:00+0530", - 1734.15, - 1735, - 1734.15, - 1735, - 30 - ], - [ - "2017-12-26T13:30:00+0530", - 1735, - 1735, - 1734.15, - 1734.15, - 292 - ], - [ - "2017-12-26T13:31:00+0530", - 1734.15, - 1734.3, - 1732.1, - 1732.1, - 186 - ], - [ - "2017-12-26T13:32:00+0530", - 1732.1, - 1733, - 1732.1, - 1732.6, - 140 - ], - [ - "2017-12-26T13:33:00+0530", - 1732.6, - 1733, - 1731.4, - 1733, - 252 - ], - [ - "2017-12-26T13:34:00+0530", - 1733, - 1733, - 1732, - 1732, - 69 - ], - [ - "2017-12-26T13:35:00+0530", - 1732, - 1732, - 1731.35, - 1731.9, - 20 - ], - [ - "2017-12-26T13:36:00+0530", - 1731.9, - 1732, - 1731.9, - 1732, - 16 - ], - [ - "2017-12-26T13:37:00+0530", - 1732, - 1732.8, - 1731.95, - 1731.95, - 76 - ], - [ - "2017-12-26T13:38:00+0530", - 1731.95, - 1732, - 1731.55, - 1731.55, - 52 - ], - [ - "2017-12-26T13:39:00+0530", - 1731.2, - 1732.15, - 1731.1, - 1731.15, - 175 - ], - [ - "2017-12-26T13:40:00+0530", - 1731.15, - 1732, - 1731.15, - 1732, - 6 - ], - [ - "2017-12-26T13:41:00+0530", - 1732, - 1732, - 1731.5, - 1731.5, - 36 - ], - [ - "2017-12-26T13:42:00+0530", - 1731.5, - 1733, - 1731.5, - 1732.4, - 137 - ], - [ - "2017-12-26T13:43:00+0530", - 1732.4, - 1732.4, - 1731.4, - 1731.4, - 173 - ], - [ - "2017-12-26T13:44:00+0530", - 1731.4, - 1732, - 1731.4, - 1732, - 100 - ], - [ - "2017-12-26T13:45:00+0530", - 1732, - 1732.7, - 1732, - 1732.7, - 25 - ], - [ - "2017-12-26T13:46:00+0530", - 1732.7, - 1733, - 1732.7, - 1733, - 102 - ], - [ - "2017-12-26T13:47:00+0530", - 1733, - 1733, - 1733, - 1733, - 21 - ], - [ - "2017-12-26T13:48:00+0530", - 1733, - 1733.5, - 1733, - 1733.5, - 192 - ], - [ - "2017-12-26T13:49:00+0530", - 1733.5, - 1734.3, - 1733.5, - 1734.3, - 140 - ], - [ - "2017-12-26T13:50:00+0530", - 1735, - 1735, - 1735, - 1735, - 536 - ], - [ - "2017-12-26T13:51:00+0530", - 1735, - 1735, - 1734.25, - 1734.25, - 150 - ], - [ - "2017-12-26T13:52:00+0530", - 1734.25, - 1734.25, - 1734.25, - 1734.25, - 0 - ], - [ - "2017-12-26T13:53:00+0530", - 1734.25, - 1735.5, - 1734.25, - 1735.5, - 550 - ], - [ - "2017-12-26T13:54:00+0530", - 1735.5, - 1736, - 1735, - 1735.1, - 1106 - ], - [ - "2017-12-26T13:55:00+0530", - 1735.1, - 1736.75, - 1735.1, - 1736.75, - 516 - ], - [ - "2017-12-26T13:56:00+0530", - 1736.75, - 1736.75, - 1736, - 1736, - 115 - ], - [ - "2017-12-26T13:57:00+0530", - 1736, - 1736, - 1735.5, - 1736, - 100 - ], - [ - "2017-12-26T13:58:00+0530", - 1735.35, - 1735.35, - 1735.35, - 1735.35, - 2 - ], - [ - "2017-12-26T13:59:00+0530", - 1735.35, - 1736, - 1735.35, - 1736, - 360 - ], - [ - "2017-12-26T14:00:00+0530", - 1736, - 1736, - 1735.75, - 1736, - 111 - ], - [ - "2017-12-26T14:01:00+0530", - 1736, - 1736, - 1735.75, - 1735.85, - 188 - ], - [ - "2017-12-26T14:02:00+0530", - 1735.85, - 1736.2, - 1735.8, - 1735.95, - 25 - ], - [ - "2017-12-26T14:03:00+0530", - 1735.95, - 1735.95, - 1735.55, - 1735.55, - 23 - ], - [ - "2017-12-26T14:04:00+0530", - 1735.55, - 1735.55, - 1735.55, - 1735.55, - 27 - ], - [ - "2017-12-26T14:05:00+0530", - 1735.55, - 1736.2, - 1735.55, - 1736, - 432 - ], - [ - "2017-12-26T14:06:00+0530", - 1736.8, - 1736.8, - 1735.95, - 1735.95, - 26 - ], - [ - "2017-12-26T14:07:00+0530", - 1735.95, - 1735.95, - 1735.95, - 1735.95, - 49 - ], - [ - "2017-12-26T14:08:00+0530", - 1735.95, - 1735.95, - 1735.9, - 1735.9, - 10 - ], - [ - "2017-12-26T14:09:00+0530", - 1735.45, - 1736, - 1735.25, - 1736, - 438 - ], - [ - "2017-12-26T14:10:00+0530", - 1736, - 1736, - 1735.45, - 1735.55, - 46 - ], - [ - "2017-12-26T14:11:00+0530", - 1735.55, - 1735.65, - 1735.55, - 1735.65, - 43 - ], - [ - "2017-12-26T14:12:00+0530", - 1735.65, - 1735.95, - 1735.25, - 1735.25, - 88 - ], - [ - "2017-12-26T14:13:00+0530", - 1735.25, - 1735.65, - 1735.25, - 1735.65, - 8 - ], - [ - "2017-12-26T14:14:00+0530", - 1735.65, - 1736.4, - 1735.55, - 1735.65, - 1000 - ], - [ - "2017-12-26T14:15:00+0530", - 1735.65, - 1735.8, - 1735.6, - 1735.8, - 414 - ], - [ - "2017-12-26T14:16:00+0530", - 1735.8, - 1736, - 1735.75, - 1735.75, - 85 - ], - [ - "2017-12-26T14:17:00+0530", - 1735.75, - 1736, - 1735.75, - 1736, - 390 - ], - [ - "2017-12-26T14:18:00+0530", - 1736, - 1736, - 1735.8, - 1735.8, - 273 - ], - [ - "2017-12-26T14:19:00+0530", - 1735.8, - 1735.8, - 1735.8, - 1735.8, - 0 - ], - [ - "2017-12-26T14:20:00+0530", - 1735.8, - 1735.8, - 1735.35, - 1735.35, - 10 - ], - [ - "2017-12-26T14:21:00+0530", - 1735.35, - 1736, - 1735.35, - 1736, - 100 - ], - [ - "2017-12-26T14:22:00+0530", - 1736, - 1736, - 1735.2, - 1736, - 50 - ], - [ - "2017-12-26T14:23:00+0530", - 1736, - 1736, - 1735.05, - 1735.05, - 10 - ], - [ - "2017-12-26T14:24:00+0530", - 1735.05, - 1735.05, - 1735, - 1735, - 13 - ], - [ - "2017-12-26T14:25:00+0530", - 1735, - 1739, - 1735, - 1739, - 1312 - ], - [ - "2017-12-26T14:26:00+0530", - 1737.8, - 1739, - 1737.65, - 1737.65, - 128 - ], - [ - "2017-12-26T14:27:00+0530", - 1737.65, - 1738, - 1736.3, - 1736.3, - 318 - ], - [ - "2017-12-26T14:28:00+0530", - 1736.3, - 1737.1, - 1736.05, - 1736.65, - 9 - ], - [ - "2017-12-26T14:29:00+0530", - 1736.65, - 1738.25, - 1736.3, - 1738.25, - 154 - ], - [ - "2017-12-26T14:30:00+0530", - 1738.25, - 1738.4, - 1737, - 1737.5, - 190 - ], - [ - "2017-12-26T14:31:00+0530", - 1738, - 1738.4, - 1737.7, - 1737.7, - 208 - ], - [ - "2017-12-26T14:32:00+0530", - 1737.7, - 1738.4, - 1737.7, - 1738.4, - 103 - ], - [ - "2017-12-26T14:33:00+0530", - 1738.4, - 1738.4, - 1737.7, - 1737.7, - 120 - ], - [ - "2017-12-26T14:34:00+0530", - 1738.4, - 1738.4, - 1737.5, - 1737.5, - 15 - ], - [ - "2017-12-26T14:35:00+0530", - 1737.5, - 1737.55, - 1737.5, - 1737.55, - 34 - ], - [ - "2017-12-26T14:36:00+0530", - 1737.55, - 1738.4, - 1737.5, - 1738.4, - 131 - ], - [ - "2017-12-26T14:37:00+0530", - 1738.4, - 1738.65, - 1737.75, - 1737.75, - 35 - ], - [ - "2017-12-26T14:38:00+0530", - 1737.75, - 1739, - 1737.55, - 1737.55, - 200 - ], - [ - "2017-12-26T14:39:00+0530", - 1737.55, - 1738.65, - 1737.55, - 1738.25, - 152 - ], - [ - "2017-12-26T14:40:00+0530", - 1738.25, - 1738.25, - 1738, - 1738, - 48 - ], - [ - "2017-12-26T14:41:00+0530", - 1738, - 1738, - 1733.8, - 1735.1, - 571 - ], - [ - "2017-12-26T14:42:00+0530", - 1735.1, - 1735.1, - 1735.1, - 1735.1, - 0 - ], - [ - "2017-12-26T14:43:00+0530", - 1735.05, - 1735.05, - 1735, - 1735, - 171 - ], - [ - "2017-12-26T14:44:00+0530", - 1735, - 1735, - 1735, - 1735, - 40 - ], - [ - "2017-12-26T14:45:00+0530", - 1735, - 1735.7, - 1734.65, - 1735.7, - 182 - ], - [ - "2017-12-26T14:46:00+0530", - 1735.7, - 1735.75, - 1734.65, - 1734.65, - 32 - ], - [ - "2017-12-26T14:47:00+0530", - 1734.65, - 1734.65, - 1734.65, - 1734.65, - 32 - ], - [ - "2017-12-26T14:48:00+0530", - 1734.65, - 1734.65, - 1734.65, - 1734.65, - 56 - ], - [ - "2017-12-26T14:49:00+0530", - 1734.65, - 1734.65, - 1734.65, - 1734.65, - 16 - ], - [ - "2017-12-26T14:50:00+0530", - 1734.65, - 1736, - 1734.65, - 1735.5, - 290 - ], - [ - "2017-12-26T14:51:00+0530", - 1735.5, - 1735.5, - 1733.8, - 1733.8, - 337 - ], - [ - "2017-12-26T14:52:00+0530", - 1733.8, - 1737, - 1733.8, - 1737, - 158 - ], - [ - "2017-12-26T14:53:00+0530", - 1737, - 1737.5, - 1737, - 1737.45, - 254 - ], - [ - "2017-12-26T14:54:00+0530", - 1737.45, - 1737.45, - 1735.9, - 1737.05, - 457 - ], - [ - "2017-12-26T14:55:00+0530", - 1737.05, - 1738, - 1737.05, - 1738, - 1039 - ], - [ - "2017-12-26T14:56:00+0530", - 1738, - 1739, - 1738, - 1739, - 1317 - ], - [ - "2017-12-26T14:57:00+0530", - 1739, - 1740, - 1737.55, - 1739.95, - 567 - ], - [ - "2017-12-26T14:58:00+0530", - 1739.8, - 1740, - 1737.65, - 1737.65, - 2310 - ], - [ - "2017-12-26T14:59:00+0530", - 1737.65, - 1738.7, - 1736.2, - 1738.7, - 1167 - ], - [ - "2017-12-26T15:00:00+0530", - 1738.1, - 1740, - 1738.1, - 1739.9, - 1328 - ], - [ - "2017-12-26T15:01:00+0530", - 1741, - 1741, - 1740, - 1740, - 498 - ], - [ - "2017-12-26T15:02:00+0530", - 1740, - 1740.05, - 1740, - 1740, - 179 - ], - [ - "2017-12-26T15:03:00+0530", - 1740, - 1741, - 1740, - 1741, - 250 - ], - [ - "2017-12-26T15:04:00+0530", - 1741, - 1742, - 1739.65, - 1742, - 1286 - ], - [ - "2017-12-26T15:05:00+0530", - 1742, - 1742.9, - 1740.85, - 1742, - 1589 - ], - [ - "2017-12-26T15:06:00+0530", - 1742, - 1743.7, - 1741.05, - 1743.7, - 1189 - ], - [ - "2017-12-26T15:07:00+0530", - 1742, - 1744.2, - 1742, - 1742.7, - 1706 - ], - [ - "2017-12-26T15:08:00+0530", - 1742.7, - 1744.75, - 1742.7, - 1744.75, - 380 - ], - [ - "2017-12-26T15:09:00+0530", - 1744.75, - 1744.75, - 1743.7, - 1743.7, - 703 - ], - [ - "2017-12-26T15:10:00+0530", - 1743.7, - 1744, - 1740.7, - 1741.95, - 389 - ], - [ - "2017-12-26T15:11:00+0530", - 1741.95, - 1743.85, - 1741.95, - 1743.5, - 526 - ], - [ - "2017-12-26T15:12:00+0530", - 1743.5, - 1744, - 1742.6, - 1743.75, - 1040 - ], - [ - "2017-12-26T15:13:00+0530", - 1743.95, - 1744, - 1743.2, - 1743.2, - 150 - ], - [ - "2017-12-26T15:14:00+0530", - 1743.2, - 1743.55, - 1742.7, - 1742.7, - 55 - ], - [ - "2017-12-26T15:15:00+0530", - 1742.7, - 1744, - 1742.7, - 1744, - 397 - ], - [ - "2017-12-26T15:16:00+0530", - 1744, - 1744, - 1742.55, - 1742.7, - 959 - ], - [ - "2017-12-26T15:17:00+0530", - 1742.45, - 1743.4, - 1741.7, - 1741.7, - 337 - ], - [ - "2017-12-26T15:18:00+0530", - 1741.7, - 1742.65, - 1740.4, - 1741.6, - 559 - ], - [ - "2017-12-26T15:19:00+0530", - 1741.6, - 1742.85, - 1741.4, - 1741.4, - 308 - ], - [ - "2017-12-26T15:20:00+0530", - 1741.4, - 1741.9, - 1740, - 1741.9, - 2971 - ], - [ - "2017-12-26T15:21:00+0530", - 1741.75, - 1742.75, - 1741.05, - 1741.05, - 667 - ], - [ - "2017-12-26T15:22:00+0530", - 1741.05, - 1742, - 1740.45, - 1741.95, - 583 - ], - [ - "2017-12-26T15:23:00+0530", - 1741.95, - 1743.75, - 1741.8, - 1743.75, - 701 - ], - [ - "2017-12-26T15:24:00+0530", - 1743.75, - 1743.75, - 1742.4, - 1742.4, - 169 - ], - [ - "2017-12-26T15:25:00+0530", - 1742.4, - 1743.05, - 1742.4, - 1742.95, - 208 - ], - [ - "2017-12-26T15:26:00+0530", - 1742.95, - 1744, - 1742.95, - 1743.4, - 739 - ], - [ - "2017-12-26T15:27:00+0530", - 1743.4, - 1743.5, - 1741, - 1741, - 1045 - ], - [ - "2017-12-26T15:28:00+0530", - 1741, - 1742, - 1740, - 1742, - 416 - ], - [ - "2017-12-26T15:29:00+0530", - 1742, - 1743.95, - 1740.1, - 1743.9, - 1224 - ], - [ - "2017-12-27T09:15:00+0530", - 1740.25, - 1740.9, - 1732.1, - 1738.45, - 1860 - ], - [ - "2017-12-27T09:16:00+0530", - 1738.45, - 1738.45, - 1735.65, - 1736.9, - 492 - ], - [ - "2017-12-27T09:17:00+0530", - 1736.75, - 1738.6, - 1736.35, - 1736.9, - 416 - ], - [ - "2017-12-27T09:18:00+0530", - 1736.9, - 1738, - 1736.75, - 1737.15, - 252 - ], - [ - "2017-12-27T09:19:00+0530", - 1737.15, - 1738, - 1735.8, - 1738, - 1173 - ], - [ - "2017-12-27T09:20:00+0530", - 1738, - 1738, - 1735.5, - 1735.5, - 246 - ], - [ - "2017-12-27T09:21:00+0530", - 1735.5, - 1735.5, - 1734.2, - 1735, - 101 - ], - [ - "2017-12-27T09:22:00+0530", - 1735, - 1736, - 1732, - 1733.5, - 763 - ], - [ - "2017-12-27T09:23:00+0530", - 1733.5, - 1738, - 1733, - 1738, - 1855 - ], - [ - "2017-12-27T09:24:00+0530", - 1738, - 1741.8, - 1738, - 1739.95, - 325 - ], - [ - "2017-12-27T09:25:00+0530", - 1739.95, - 1742.55, - 1739.95, - 1740.85, - 536 - ], - [ - "2017-12-27T09:26:00+0530", - 1740.85, - 1745.25, - 1740.85, - 1742.4, - 674 - ], - [ - "2017-12-27T09:27:00+0530", - 1742.4, - 1743.55, - 1741.6, - 1743.15, - 968 - ], - [ - "2017-12-27T09:28:00+0530", - 1743.15, - 1743.65, - 1741.75, - 1742.3, - 253 - ], - [ - "2017-12-27T09:29:00+0530", - 1742.3, - 1743.25, - 1740.45, - 1741.4, - 103 - ], - [ - "2017-12-27T09:30:00+0530", - 1741.4, - 1741.65, - 1740, - 1740, - 180 - ], - [ - "2017-12-27T09:31:00+0530", - 1740, - 1741.1, - 1739.9, - 1740.5, - 182 - ], - [ - "2017-12-27T09:32:00+0530", - 1740.5, - 1741, - 1739, - 1740.2, - 234 - ], - [ - "2017-12-27T09:33:00+0530", - 1740.2, - 1740.2, - 1736.15, - 1736.95, - 234 - ], - [ - "2017-12-27T09:34:00+0530", - 1736.95, - 1738, - 1736.2, - 1736.85, - 564 - ], - [ - "2017-12-27T09:35:00+0530", - 1736.85, - 1736.85, - 1735.1, - 1736, - 263 - ], - [ - "2017-12-27T09:36:00+0530", - 1736.45, - 1737.7, - 1735.1, - 1736.65, - 831 - ], - [ - "2017-12-27T09:37:00+0530", - 1736.65, - 1739.9, - 1736.65, - 1739.85, - 1191 - ], - [ - "2017-12-27T09:38:00+0530", - 1739.85, - 1739.85, - 1737.5, - 1737.7, - 34 - ], - [ - "2017-12-27T09:39:00+0530", - 1737.7, - 1737.7, - 1735.7, - 1735.7, - 958 - ], - [ - "2017-12-27T09:40:00+0530", - 1735.7, - 1736.5, - 1735.7, - 1736, - 113 - ], - [ - "2017-12-27T09:41:00+0530", - 1736, - 1737.45, - 1735.7, - 1735.7, - 499 - ], - [ - "2017-12-27T09:42:00+0530", - 1735.7, - 1736.15, - 1735.7, - 1736.15, - 25 - ], - [ - "2017-12-27T09:43:00+0530", - 1736.15, - 1736.9, - 1735.05, - 1736.9, - 593 - ], - [ - "2017-12-27T09:44:00+0530", - 1736.9, - 1736.9, - 1735.7, - 1736.85, - 129 - ], - [ - "2017-12-27T09:45:00+0530", - 1736.85, - 1736.85, - 1735.1, - 1735.1, - 410 - ], - [ - "2017-12-27T09:46:00+0530", - 1735, - 1735.3, - 1734.35, - 1735.3, - 301 - ], - [ - "2017-12-27T09:47:00+0530", - 1734.6, - 1736.15, - 1734.6, - 1735, - 443 - ], - [ - "2017-12-27T09:48:00+0530", - 1735.65, - 1736, - 1734.6, - 1736, - 260 - ], - [ - "2017-12-27T09:49:00+0530", - 1736, - 1736, - 1735.1, - 1735.1, - 178 - ], - [ - "2017-12-27T09:50:00+0530", - 1735.1, - 1735.1, - 1735.1, - 1735.1, - 0 - ], - [ - "2017-12-27T09:51:00+0530", - 1735.1, - 1736, - 1734.6, - 1735.7, - 168 - ], - [ - "2017-12-27T09:52:00+0530", - 1735.7, - 1739.7, - 1735.7, - 1739.7, - 1183 - ], - [ - "2017-12-27T09:53:00+0530", - 1739.7, - 1739.95, - 1739.55, - 1739.95, - 61 - ], - [ - "2017-12-27T09:54:00+0530", - 1739.95, - 1739.95, - 1738.35, - 1738.35, - 151 - ], - [ - "2017-12-27T09:55:00+0530", - 1739.65, - 1743.4, - 1739.65, - 1743, - 2137 - ], - [ - "2017-12-27T09:56:00+0530", - 1743, - 1743, - 1740.6, - 1742, - 300 - ], - [ - "2017-12-27T09:57:00+0530", - 1742, - 1742.45, - 1740.95, - 1742.2, - 892 - ], - [ - "2017-12-27T09:58:00+0530", - 1742.2, - 1744, - 1741.95, - 1742.5, - 1180 - ], - [ - "2017-12-27T09:59:00+0530", - 1742.5, - 1744, - 1742.5, - 1743.95, - 361 - ], - [ - "2017-12-27T10:00:00+0530", - 1743.95, - 1745.5, - 1743, - 1744.45, - 1333 - ], - [ - "2017-12-27T10:01:00+0530", - 1744.45, - 1745.1, - 1744.05, - 1744.25, - 32 - ], - [ - "2017-12-27T10:02:00+0530", - 1744.25, - 1745, - 1744, - 1744, - 358 - ], - [ - "2017-12-27T10:03:00+0530", - 1744, - 1744.95, - 1743.4, - 1744.9, - 114 - ], - [ - "2017-12-27T10:04:00+0530", - 1743.6, - 1744.7, - 1743.6, - 1743.6, - 96 - ], - [ - "2017-12-27T10:05:00+0530", - 1743.6, - 1744.7, - 1743.6, - 1744, - 239 - ], - [ - "2017-12-27T10:06:00+0530", - 1744, - 1744, - 1743.25, - 1743.25, - 812 - ], - [ - "2017-12-27T10:07:00+0530", - 1743.25, - 1743.9, - 1743.25, - 1743.25, - 73 - ], - [ - "2017-12-27T10:08:00+0530", - 1743.25, - 1743.95, - 1740.75, - 1741, - 1027 - ], - [ - "2017-12-27T10:09:00+0530", - 1741.55, - 1741.9, - 1741, - 1741, - 207 - ], - [ - "2017-12-27T10:10:00+0530", - 1741, - 1741.95, - 1740.3, - 1740.3, - 400 - ], - [ - "2017-12-27T10:11:00+0530", - 1740.3, - 1741.95, - 1740, - 1740.45, - 409 - ], - [ - "2017-12-27T10:12:00+0530", - 1740.45, - 1741.75, - 1739.5, - 1740.45, - 264 - ], - [ - "2017-12-27T10:13:00+0530", - 1740.45, - 1741.55, - 1740.45, - 1740.45, - 109 - ], - [ - "2017-12-27T10:14:00+0530", - 1740.45, - 1740.45, - 1739.55, - 1739.55, - 54 - ], - [ - "2017-12-27T10:15:00+0530", - 1739.55, - 1742.4, - 1739.55, - 1742.4, - 261 - ], - [ - "2017-12-27T10:16:00+0530", - 1742.4, - 1742.4, - 1740.55, - 1741.6, - 126 - ], - [ - "2017-12-27T10:17:00+0530", - 1741.6, - 1741.6, - 1740.55, - 1740.55, - 59 - ], - [ - "2017-12-27T10:18:00+0530", - 1740.55, - 1741.35, - 1740.55, - 1740.55, - 61 - ], - [ - "2017-12-27T10:19:00+0530", - 1740.55, - 1740.55, - 1740.55, - 1740.55, - 15 - ], - [ - "2017-12-27T10:20:00+0530", - 1740.55, - 1741, - 1740.55, - 1740.6, - 30 - ], - [ - "2017-12-27T10:21:00+0530", - 1740.6, - 1740.6, - 1740.55, - 1740.55, - 120 - ], - [ - "2017-12-27T10:22:00+0530", - 1740.55, - 1741.1, - 1740.55, - 1740.65, - 68 - ], - [ - "2017-12-27T10:23:00+0530", - 1740.65, - 1741.65, - 1740.6, - 1741.65, - 164 - ], - [ - "2017-12-27T10:24:00+0530", - 1741.65, - 1741.8, - 1740.55, - 1740.55, - 211 - ], - [ - "2017-12-27T10:25:00+0530", - 1740.55, - 1741.2, - 1740.15, - 1741.05, - 70 - ], - [ - "2017-12-27T10:26:00+0530", - 1741.05, - 1741.6, - 1740.55, - 1740.55, - 48 - ], - [ - "2017-12-27T10:27:00+0530", - 1740.55, - 1741.6, - 1740.5, - 1740.65, - 230 - ], - [ - "2017-12-27T10:28:00+0530", - 1740.65, - 1741.7, - 1740.65, - 1741.7, - 187 - ], - [ - "2017-12-27T10:29:00+0530", - 1741.7, - 1741.7, - 1740.65, - 1740.65, - 104 - ], - [ - "2017-12-27T10:30:00+0530", - 1740.65, - 1742.55, - 1740.65, - 1742.15, - 294 - ], - [ - "2017-12-27T10:31:00+0530", - 1742.15, - 1742.15, - 1740.85, - 1741.95, - 30 - ], - [ - "2017-12-27T10:32:00+0530", - 1741.95, - 1742.35, - 1740.7, - 1740.7, - 70 - ], - [ - "2017-12-27T10:33:00+0530", - 1740.7, - 1741.05, - 1740.7, - 1741.05, - 23 - ], - [ - "2017-12-27T10:34:00+0530", - 1741.05, - 1741.05, - 1741.05, - 1741.05, - 0 - ], - [ - "2017-12-27T10:35:00+0530", - 1741.05, - 1741.1, - 1741.05, - 1741.05, - 50 - ], - [ - "2017-12-27T10:36:00+0530", - 1741.05, - 1741.05, - 1741.05, - 1741.05, - 0 - ], - [ - "2017-12-27T10:37:00+0530", - 1741.05, - 1744.7, - 1741.05, - 1742.75, - 1131 - ], - [ - "2017-12-27T10:38:00+0530", - 1742.75, - 1744.6, - 1742.75, - 1743.35, - 87 - ], - [ - "2017-12-27T10:39:00+0530", - 1743.35, - 1744.5, - 1743.35, - 1744.1, - 457 - ], - [ - "2017-12-27T10:40:00+0530", - 1744.1, - 1747.5, - 1744, - 1746.85, - 2732 - ], - [ - "2017-12-27T10:41:00+0530", - 1746.85, - 1747.25, - 1745.7, - 1745.9, - 813 - ], - [ - "2017-12-27T10:42:00+0530", - 1745.9, - 1747.95, - 1745.9, - 1747.75, - 1686 - ], - [ - "2017-12-27T10:43:00+0530", - 1747.75, - 1748, - 1746, - 1747.1, - 1497 - ], - [ - "2017-12-27T10:44:00+0530", - 1747.4, - 1747.75, - 1746.4, - 1746.4, - 763 - ], - [ - "2017-12-27T10:45:00+0530", - 1746.4, - 1747, - 1745.2, - 1745.2, - 544 - ], - [ - "2017-12-27T10:46:00+0530", - 1745.2, - 1746, - 1744.85, - 1744.85, - 689 - ], - [ - "2017-12-27T10:47:00+0530", - 1744.85, - 1745.9, - 1744.5, - 1745.15, - 217 - ], - [ - "2017-12-27T10:48:00+0530", - 1745.15, - 1745.95, - 1744.65, - 1744.65, - 821 - ], - [ - "2017-12-27T10:49:00+0530", - 1744.65, - 1745.05, - 1744.65, - 1744.65, - 106 - ], - [ - "2017-12-27T10:50:00+0530", - 1744.65, - 1744.8, - 1743.45, - 1743.45, - 523 - ], - [ - "2017-12-27T10:51:00+0530", - 1743.45, - 1744, - 1743, - 1744, - 424 - ], - [ - "2017-12-27T10:52:00+0530", - 1744, - 1744, - 1742.25, - 1744, - 647 - ], - [ - "2017-12-27T10:53:00+0530", - 1744, - 1745, - 1744, - 1745, - 45 - ], - [ - "2017-12-27T10:54:00+0530", - 1745, - 1745, - 1743.9, - 1744.4, - 42 - ], - [ - "2017-12-27T10:55:00+0530", - 1744.4, - 1744.4, - 1742.2, - 1742.2, - 251 - ], - [ - "2017-12-27T10:56:00+0530", - 1742.2, - 1743, - 1741.7, - 1741.7, - 75 - ], - [ - "2017-12-27T10:57:00+0530", - 1741.7, - 1741.7, - 1741, - 1741, - 136 - ], - [ - "2017-12-27T10:58:00+0530", - 1741, - 1742.25, - 1741, - 1741.55, - 403 - ], - [ - "2017-12-27T10:59:00+0530", - 1741.55, - 1741.85, - 1741, - 1741.85, - 197 - ], - [ - "2017-12-27T11:00:00+0530", - 1741.85, - 1741.9, - 1741, - 1741.9, - 72 - ], - [ - "2017-12-27T11:01:00+0530", - 1741.9, - 1741.9, - 1740.65, - 1741.85, - 214 - ], - [ - "2017-12-27T11:02:00+0530", - 1741.85, - 1741.9, - 1740.65, - 1740.65, - 54 - ], - [ - "2017-12-27T11:03:00+0530", - 1740.65, - 1741.8, - 1740.65, - 1740.65, - 176 - ], - [ - "2017-12-27T11:04:00+0530", - 1740.65, - 1740.7, - 1740.65, - 1740.7, - 20 - ], - [ - "2017-12-27T11:05:00+0530", - 1740.7, - 1741.75, - 1740.7, - 1741.75, - 67 - ], - [ - "2017-12-27T11:06:00+0530", - 1741.75, - 1742.05, - 1740.7, - 1742.05, - 140 - ], - [ - "2017-12-27T11:07:00+0530", - 1742.05, - 1742.05, - 1740.65, - 1740.65, - 123 - ], - [ - "2017-12-27T11:08:00+0530", - 1740.65, - 1742.35, - 1740.65, - 1742, - 81 - ], - [ - "2017-12-27T11:09:00+0530", - 1742, - 1742.25, - 1740.65, - 1742.25, - 95 - ], - [ - "2017-12-27T11:10:00+0530", - 1742.25, - 1742.45, - 1740.85, - 1742.45, - 229 - ], - [ - "2017-12-27T11:11:00+0530", - 1742.45, - 1742.8, - 1741.1, - 1742, - 278 - ], - [ - "2017-12-27T11:12:00+0530", - 1742, - 1743, - 1741.55, - 1741.55, - 182 - ], - [ - "2017-12-27T11:13:00+0530", - 1741.55, - 1742.4, - 1740.65, - 1741.9, - 110 - ], - [ - "2017-12-27T11:14:00+0530", - 1741.9, - 1742.35, - 1740.65, - 1741.25, - 234 - ], - [ - "2017-12-27T11:15:00+0530", - 1741.25, - 1742.2, - 1741.25, - 1742.2, - 22 - ], - [ - "2017-12-27T11:16:00+0530", - 1742.2, - 1742.8, - 1741.35, - 1742.3, - 199 - ], - [ - "2017-12-27T11:17:00+0530", - 1742.3, - 1744.9, - 1742.3, - 1744.9, - 618 - ], - [ - "2017-12-27T11:18:00+0530", - 1744.9, - 1744.9, - 1743.85, - 1743.85, - 40 - ], - [ - "2017-12-27T11:19:00+0530", - 1743.85, - 1743.85, - 1743.55, - 1743.55, - 75 - ], - [ - "2017-12-27T11:20:00+0530", - 1743.55, - 1743.7, - 1743.15, - 1743.15, - 121 - ], - [ - "2017-12-27T11:21:00+0530", - 1743.15, - 1744.95, - 1743.1, - 1744.95, - 113 - ], - [ - "2017-12-27T11:22:00+0530", - 1744.95, - 1744.95, - 1744, - 1744, - 22 - ], - [ - "2017-12-27T11:23:00+0530", - 1744, - 1745, - 1743.2, - 1743.6, - 291 - ], - [ - "2017-12-27T11:24:00+0530", - 1743.6, - 1744.9, - 1743.6, - 1744.9, - 41 - ], - [ - "2017-12-27T11:25:00+0530", - 1744.9, - 1744.9, - 1744.9, - 1744.9, - 0 - ], - [ - "2017-12-27T11:26:00+0530", - 1744.9, - 1744.95, - 1743.6, - 1743.6, - 207 - ], - [ - "2017-12-27T11:27:00+0530", - 1743.6, - 1744.7, - 1743.4, - 1744.7, - 12 - ], - [ - "2017-12-27T11:28:00+0530", - 1744.7, - 1744.9, - 1743.85, - 1743.85, - 75 - ], - [ - "2017-12-27T11:29:00+0530", - 1743.85, - 1744, - 1743.7, - 1744, - 28 - ], - [ - "2017-12-27T11:30:00+0530", - 1744, - 1744.05, - 1743.4, - 1744.05, - 264 - ], - [ - "2017-12-27T11:31:00+0530", - 1744.05, - 1744.3, - 1742.8, - 1743.4, - 70 - ], - [ - "2017-12-27T11:32:00+0530", - 1743.4, - 1744.25, - 1742.95, - 1744.25, - 164 - ], - [ - "2017-12-27T11:33:00+0530", - 1744.25, - 1744.25, - 1743.2, - 1743.2, - 54 - ], - [ - "2017-12-27T11:34:00+0530", - 1743.25, - 1744, - 1743.05, - 1743.05, - 64 - ], - [ - "2017-12-27T11:35:00+0530", - 1743.05, - 1743.6, - 1743, - 1743, - 68 - ], - [ - "2017-12-27T11:36:00+0530", - 1743, - 1743.7, - 1742.75, - 1743.5, - 208 - ], - [ - "2017-12-27T11:37:00+0530", - 1743.5, - 1743.85, - 1742.7, - 1743.8, - 36 - ], - [ - "2017-12-27T11:38:00+0530", - 1743.8, - 1743.8, - 1743.8, - 1743.8, - 5 - ], - [ - "2017-12-27T11:39:00+0530", - 1743.8, - 1743.8, - 1742.75, - 1743.6, - 83 - ], - [ - "2017-12-27T11:40:00+0530", - 1743.6, - 1743.6, - 1742.55, - 1742.55, - 119 - ], - [ - "2017-12-27T11:41:00+0530", - 1742.55, - 1742.95, - 1742.3, - 1742.45, - 56 - ], - [ - "2017-12-27T11:42:00+0530", - 1741.8, - 1742.4, - 1740.7, - 1742.4, - 172 - ], - [ - "2017-12-27T11:43:00+0530", - 1742.4, - 1742.4, - 1740.65, - 1741.05, - 56 - ], - [ - "2017-12-27T11:44:00+0530", - 1741.05, - 1741.85, - 1741.05, - 1741.05, - 94 - ], - [ - "2017-12-27T11:45:00+0530", - 1741.05, - 1741.35, - 1741.05, - 1741.05, - 22 - ], - [ - "2017-12-27T11:46:00+0530", - 1741.05, - 1741.85, - 1741.05, - 1741.15, - 44 - ], - [ - "2017-12-27T11:47:00+0530", - 1741.15, - 1741.85, - 1741.15, - 1741.15, - 40 - ], - [ - "2017-12-27T11:48:00+0530", - 1741.15, - 1741.85, - 1741.15, - 1741.85, - 118 - ], - [ - "2017-12-27T11:49:00+0530", - 1741.85, - 1741.85, - 1741.05, - 1741.05, - 138 - ], - [ - "2017-12-27T11:50:00+0530", - 1742.6, - 1742.6, - 1742.6, - 1742.6, - 11 - ], - [ - "2017-12-27T11:51:00+0530", - 1742.6, - 1742.75, - 1740.65, - 1742.65, - 540 - ], - [ - "2017-12-27T11:52:00+0530", - 1742.65, - 1742.65, - 1741.35, - 1741.35, - 22 - ], - [ - "2017-12-27T11:53:00+0530", - 1741.35, - 1741.35, - 1741.25, - 1741.25, - 26 - ], - [ - "2017-12-27T11:54:00+0530", - 1741.25, - 1741.45, - 1740.85, - 1741.45, - 88 - ], - [ - "2017-12-27T11:55:00+0530", - 1741.45, - 1744.25, - 1741.2, - 1744.25, - 235 - ], - [ - "2017-12-27T11:56:00+0530", - 1744.25, - 1744.25, - 1743.05, - 1743.05, - 40 - ], - [ - "2017-12-27T11:57:00+0530", - 1743.05, - 1743.05, - 1742.7, - 1742.7, - 20 - ], - [ - "2017-12-27T11:58:00+0530", - 1742.7, - 1742.7, - 1742.7, - 1742.7, - 0 - ], - [ - "2017-12-27T11:59:00+0530", - 1742.7, - 1745, - 1741, - 1741.85, - 1102 - ], - [ - "2017-12-27T12:00:00+0530", - 1741.85, - 1742.45, - 1740, - 1742.45, - 1129 - ], - [ - "2017-12-27T12:01:00+0530", - 1742.45, - 1742.55, - 1742, - 1742.55, - 75 - ], - [ - "2017-12-27T12:02:00+0530", - 1742.55, - 1742.65, - 1741.25, - 1741.25, - 77 - ], - [ - "2017-12-27T12:03:00+0530", - 1741.25, - 1742.85, - 1740, - 1741.65, - 1670 - ], - [ - "2017-12-27T12:04:00+0530", - 1741, - 1742, - 1736.6, - 1737.6, - 7847 - ], - [ - "2017-12-27T12:05:00+0530", - 1736, - 1740.7, - 1735, - 1740, - 6623 - ], - [ - "2017-12-27T12:06:00+0530", - 1740, - 1740.85, - 1738.45, - 1738.95, - 1316 - ], - [ - "2017-12-27T12:07:00+0530", - 1738.95, - 1739.9, - 1738.15, - 1739.4, - 795 - ], - [ - "2017-12-27T12:08:00+0530", - 1740, - 1740, - 1739.05, - 1739.5, - 1022 - ], - [ - "2017-12-27T12:09:00+0530", - 1739.5, - 1740.55, - 1739.45, - 1740.15, - 781 - ], - [ - "2017-12-27T12:10:00+0530", - 1740.15, - 1740.65, - 1739.2, - 1740, - 305 - ], - [ - "2017-12-27T12:11:00+0530", - 1740, - 1740, - 1739.1, - 1739.85, - 539 - ], - [ - "2017-12-27T12:12:00+0530", - 1739.85, - 1739.85, - 1739.5, - 1739.8, - 1671 - ], - [ - "2017-12-27T12:13:00+0530", - 1739.8, - 1739.8, - 1739.1, - 1739.75, - 102 - ], - [ - "2017-12-27T12:14:00+0530", - 1739.75, - 1741.85, - 1739, - 1740.95, - 1663 - ], - [ - "2017-12-27T12:15:00+0530", - 1740.95, - 1741.75, - 1740.7, - 1740.75, - 55 - ], - [ - "2017-12-27T12:16:00+0530", - 1741.8, - 1741.8, - 1740.7, - 1741, - 210 - ], - [ - "2017-12-27T12:17:00+0530", - 1741, - 1741, - 1739.5, - 1739.95, - 491 - ], - [ - "2017-12-27T12:18:00+0530", - 1739.95, - 1739.95, - 1739, - 1739.5, - 93 - ], - [ - "2017-12-27T12:19:00+0530", - 1739.5, - 1739.9, - 1739, - 1739.9, - 993 - ], - [ - "2017-12-27T12:20:00+0530", - 1739.9, - 1739.9, - 1739, - 1739.5, - 1500 - ], - [ - "2017-12-27T12:21:00+0530", - 1739.85, - 1739.85, - 1738.55, - 1739.25, - 1380 - ], - [ - "2017-12-27T12:22:00+0530", - 1739.25, - 1739.9, - 1739.25, - 1739.9, - 161 - ], - [ - "2017-12-27T12:23:00+0530", - 1739.9, - 1739.9, - 1739.5, - 1739.5, - 961 - ], - [ - "2017-12-27T12:24:00+0530", - 1739.5, - 1739.85, - 1739, - 1739.4, - 137 - ], - [ - "2017-12-27T12:25:00+0530", - 1739.4, - 1739.4, - 1738.55, - 1738.55, - 174 - ], - [ - "2017-12-27T12:26:00+0530", - 1738.55, - 1739, - 1738.55, - 1738.6, - 30 - ], - [ - "2017-12-27T12:27:00+0530", - 1738.6, - 1739.5, - 1738.6, - 1738.7, - 264 - ], - [ - "2017-12-27T12:28:00+0530", - 1738.7, - 1739, - 1738.6, - 1739, - 147 - ], - [ - "2017-12-27T12:29:00+0530", - 1739, - 1739, - 1738.6, - 1738.95, - 152 - ], - [ - "2017-12-27T12:30:00+0530", - 1738.95, - 1738.95, - 1738.55, - 1738.55, - 20 - ], - [ - "2017-12-27T12:31:00+0530", - 1738.55, - 1738.95, - 1738.55, - 1738.95, - 64 - ], - [ - "2017-12-27T12:32:00+0530", - 1738.95, - 1739.7, - 1738.55, - 1739.4, - 175 - ], - [ - "2017-12-27T12:33:00+0530", - 1739.4, - 1739.5, - 1737.55, - 1739, - 772 - ], - [ - "2017-12-27T12:34:00+0530", - 1739, - 1739, - 1738.5, - 1738.9, - 196 - ], - [ - "2017-12-27T12:35:00+0530", - 1738.9, - 1738.9, - 1738.75, - 1738.9, - 156 - ], - [ - "2017-12-27T12:36:00+0530", - 1738.9, - 1738.9, - 1738.5, - 1738.9, - 97 - ], - [ - "2017-12-27T12:37:00+0530", - 1737.65, - 1738.5, - 1737.65, - 1738.5, - 112 - ], - [ - "2017-12-27T12:38:00+0530", - 1738.5, - 1738.95, - 1738.5, - 1738.95, - 970 - ], - [ - "2017-12-27T12:39:00+0530", - 1738.5, - 1740, - 1738.5, - 1740, - 1803 - ], - [ - "2017-12-27T12:40:00+0530", - 1740, - 1740, - 1739.6, - 1739.85, - 425 - ], - [ - "2017-12-27T12:41:00+0530", - 1739.85, - 1739.85, - 1739.45, - 1739.45, - 51 - ], - [ - "2017-12-27T12:42:00+0530", - 1739.45, - 1739.8, - 1739.05, - 1739.8, - 43 - ], - [ - "2017-12-27T12:43:00+0530", - 1739.25, - 1739.25, - 1738.5, - 1738.5, - 228 - ], - [ - "2017-12-27T12:44:00+0530", - 1738.5, - 1738.55, - 1738.05, - 1738.5, - 94 - ], - [ - "2017-12-27T12:45:00+0530", - 1738.5, - 1739.7, - 1738.15, - 1738.85, - 200 - ], - [ - "2017-12-27T12:46:00+0530", - 1738.85, - 1739.8, - 1738.5, - 1738.55, - 92 - ], - [ - "2017-12-27T12:47:00+0530", - 1738.55, - 1739.7, - 1738.55, - 1739.7, - 83 - ], - [ - "2017-12-27T12:48:00+0530", - 1739.7, - 1739.8, - 1738.5, - 1739.35, - 113 - ], - [ - "2017-12-27T12:49:00+0530", - 1739.35, - 1739.35, - 1738.5, - 1738.5, - 21 - ], - [ - "2017-12-27T12:50:00+0530", - 1738.5, - 1739.85, - 1738.5, - 1739.85, - 72 - ], - [ - "2017-12-27T12:51:00+0530", - 1739.85, - 1739.85, - 1738.5, - 1739.6, - 53 - ], - [ - "2017-12-27T12:52:00+0530", - 1739.6, - 1739.6, - 1739.6, - 1739.6, - 0 - ], - [ - "2017-12-27T12:53:00+0530", - 1739.6, - 1739.85, - 1738.5, - 1739.85, - 135 - ], - [ - "2017-12-27T12:54:00+0530", - 1739.85, - 1739.85, - 1738.6, - 1738.65, - 92 - ], - [ - "2017-12-27T12:55:00+0530", - 1738.65, - 1738.65, - 1738.65, - 1738.65, - 20 - ], - [ - "2017-12-27T12:56:00+0530", - 1738.65, - 1739, - 1738.65, - 1739, - 47 - ], - [ - "2017-12-27T12:57:00+0530", - 1738.85, - 1740, - 1738.75, - 1740, - 230 - ], - [ - "2017-12-27T12:58:00+0530", - 1739.3, - 1739.3, - 1739.25, - 1739.25, - 49 - ], - [ - "2017-12-27T12:59:00+0530", - 1739.25, - 1740, - 1738.75, - 1738.75, - 424 - ], - [ - "2017-12-27T13:00:00+0530", - 1738.75, - 1739.55, - 1738.5, - 1738.75, - 81 - ], - [ - "2017-12-27T13:01:00+0530", - 1738.75, - 1739.5, - 1738.5, - 1738.75, - 165 - ], - [ - "2017-12-27T13:02:00+0530", - 1738.75, - 1739.35, - 1738.5, - 1739.35, - 180 - ], - [ - "2017-12-27T13:03:00+0530", - 1738.75, - 1738.75, - 1738.5, - 1738.5, - 29 - ], - [ - "2017-12-27T13:04:00+0530", - 1738.75, - 1740, - 1738.75, - 1740, - 256 - ], - [ - "2017-12-27T13:05:00+0530", - 1740, - 1740, - 1738.85, - 1738.85, - 31 - ], - [ - "2017-12-27T13:06:00+0530", - 1738.85, - 1740, - 1738.85, - 1740, - 62 - ], - [ - "2017-12-27T13:07:00+0530", - 1740, - 1740.1, - 1739.9, - 1740.1, - 57 - ], - [ - "2017-12-27T13:08:00+0530", - 1740.1, - 1740.3, - 1739.9, - 1740, - 107 - ], - [ - "2017-12-27T13:09:00+0530", - 1739.9, - 1741.7, - 1739.9, - 1740.15, - 191 - ], - [ - "2017-12-27T13:10:00+0530", - 1740.15, - 1741.35, - 1740, - 1740.85, - 50 - ], - [ - "2017-12-27T13:11:00+0530", - 1740.5, - 1741.55, - 1740.05, - 1741.55, - 76 - ], - [ - "2017-12-27T13:12:00+0530", - 1741.55, - 1741.55, - 1740, - 1740.2, - 97 - ], - [ - "2017-12-27T13:13:00+0530", - 1740.2, - 1740.2, - 1740, - 1740, - 60 - ], - [ - "2017-12-27T13:14:00+0530", - 1740.05, - 1741, - 1740, - 1740, - 39 - ], - [ - "2017-12-27T13:15:00+0530", - 1740, - 1740.35, - 1740, - 1740.35, - 34 - ], - [ - "2017-12-27T13:16:00+0530", - 1740.4, - 1741.15, - 1740.05, - 1740.05, - 60 - ], - [ - "2017-12-27T13:17:00+0530", - 1740.05, - 1740.05, - 1740.05, - 1740.05, - 29 - ], - [ - "2017-12-27T13:18:00+0530", - 1740.25, - 1740.25, - 1740, - 1740, - 73 - ], - [ - "2017-12-27T13:19:00+0530", - 1739.9, - 1740, - 1739.9, - 1740, - 45 - ], - [ - "2017-12-27T13:20:00+0530", - 1740, - 1741.15, - 1739.9, - 1739.9, - 639 - ], - [ - "2017-12-27T13:21:00+0530", - 1739.55, - 1740.55, - 1739.5, - 1739.6, - 81 - ], - [ - "2017-12-27T13:22:00+0530", - 1739.6, - 1740.75, - 1739.5, - 1739.5, - 43 - ], - [ - "2017-12-27T13:23:00+0530", - 1739.5, - 1740.55, - 1739.5, - 1740.55, - 58 - ], - [ - "2017-12-27T13:24:00+0530", - 1739.55, - 1739.6, - 1739.55, - 1739.6, - 29 - ], - [ - "2017-12-27T13:25:00+0530", - 1739.4, - 1740.35, - 1739.4, - 1740, - 56 - ], - [ - "2017-12-27T13:26:00+0530", - 1740, - 1740.5, - 1739.55, - 1740.5, - 60 - ], - [ - "2017-12-27T13:27:00+0530", - 1739.7, - 1740.1, - 1739.55, - 1740.1, - 569 - ], - [ - "2017-12-27T13:28:00+0530", - 1740.1, - 1740.1, - 1738.75, - 1738.75, - 29 - ], - [ - "2017-12-27T13:29:00+0530", - 1738.75, - 1738.75, - 1738.75, - 1738.75, - 29 - ], - [ - "2017-12-27T13:30:00+0530", - 1738.75, - 1740, - 1738.75, - 1740, - 45 - ], - [ - "2017-12-27T13:31:00+0530", - 1740, - 1740, - 1739.25, - 1739.25, - 39 - ], - [ - "2017-12-27T13:32:00+0530", - 1739.05, - 1739.05, - 1739, - 1739, - 29 - ], - [ - "2017-12-27T13:33:00+0530", - 1739, - 1740.45, - 1739, - 1740.45, - 112 - ], - [ - "2017-12-27T13:34:00+0530", - 1740.45, - 1740.45, - 1739, - 1739, - 157 - ], - [ - "2017-12-27T13:35:00+0530", - 1739.05, - 1740.35, - 1739.05, - 1739.1, - 96 - ], - [ - "2017-12-27T13:36:00+0530", - 1739.15, - 1740.45, - 1739, - 1740.45, - 128 - ], - [ - "2017-12-27T13:37:00+0530", - 1740.45, - 1740.45, - 1739.05, - 1739.55, - 84 - ], - [ - "2017-12-27T13:38:00+0530", - 1739.55, - 1739.55, - 1739, - 1739, - 29 - ], - [ - "2017-12-27T13:39:00+0530", - 1739.3, - 1740.3, - 1739.3, - 1740.3, - 57 - ], - [ - "2017-12-27T13:40:00+0530", - 1740.3, - 1740.3, - 1739, - 1739, - 52 - ], - [ - "2017-12-27T13:41:00+0530", - 1739, - 1739.9, - 1739, - 1739, - 92 - ], - [ - "2017-12-27T13:42:00+0530", - 1739, - 1739, - 1739, - 1739, - 20 - ], - [ - "2017-12-27T13:43:00+0530", - 1739, - 1739, - 1739, - 1739, - 0 - ], - [ - "2017-12-27T13:44:00+0530", - 1739, - 1739.4, - 1739, - 1739, - 67 - ], - [ - "2017-12-27T13:45:00+0530", - 1739, - 1739.45, - 1739, - 1739.45, - 34 - ], - [ - "2017-12-27T13:46:00+0530", - 1739.45, - 1739.45, - 1739.05, - 1739.05, - 20 - ], - [ - "2017-12-27T13:47:00+0530", - 1739.05, - 1739.45, - 1739.05, - 1739.45, - 65 - ], - [ - "2017-12-27T13:48:00+0530", - 1739.45, - 1739.45, - 1739, - 1739.05, - 120 - ], - [ - "2017-12-27T13:49:00+0530", - 1739.1, - 1739.65, - 1738.7, - 1739.05, - 888 - ], - [ - "2017-12-27T13:50:00+0530", - 1739.05, - 1740.5, - 1739.05, - 1739.1, - 233 - ], - [ - "2017-12-27T13:51:00+0530", - 1739.1, - 1739.3, - 1739.05, - 1739.05, - 36 - ], - [ - "2017-12-27T13:52:00+0530", - 1739.05, - 1739.8, - 1739.05, - 1739.8, - 18 - ], - [ - "2017-12-27T13:53:00+0530", - 1739.25, - 1740.15, - 1739.15, - 1739.5, - 85 - ], - [ - "2017-12-27T13:54:00+0530", - 1739.25, - 1740, - 1739.15, - 1739.95, - 69 - ], - [ - "2017-12-27T13:55:00+0530", - 1739.5, - 1740, - 1739.35, - 1739.35, - 46 - ], - [ - "2017-12-27T13:56:00+0530", - 1739.25, - 1739.95, - 1739.2, - 1739.95, - 63 - ], - [ - "2017-12-27T13:57:00+0530", - 1739.2, - 1739.95, - 1739.1, - 1739.95, - 65 - ], - [ - "2017-12-27T13:58:00+0530", - 1739.1, - 1739.95, - 1739.05, - 1739.8, - 146 - ], - [ - "2017-12-27T13:59:00+0530", - 1739.05, - 1739.95, - 1739.05, - 1739.9, - 12 - ], - [ - "2017-12-27T14:00:00+0530", - 1739.05, - 1739.05, - 1739.05, - 1739.05, - 54 - ], - [ - "2017-12-27T14:01:00+0530", - 1739.05, - 1739.5, - 1739, - 1739.4, - 415 - ], - [ - "2017-12-27T14:02:00+0530", - 1739.1, - 1739.5, - 1739.05, - 1739.5, - 125 - ], - [ - "2017-12-27T14:03:00+0530", - 1739.5, - 1739.6, - 1739.05, - 1739.05, - 51 - ], - [ - "2017-12-27T14:04:00+0530", - 1739.05, - 1739.85, - 1739.05, - 1739.05, - 159 - ], - [ - "2017-12-27T14:05:00+0530", - 1739.05, - 1739.85, - 1739, - 1739.75, - 277 - ], - [ - "2017-12-27T14:06:00+0530", - 1739.1, - 1739.1, - 1739.05, - 1739.05, - 31 - ], - [ - "2017-12-27T14:07:00+0530", - 1739.05, - 1739.8, - 1739.05, - 1739.8, - 59 - ], - [ - "2017-12-27T14:08:00+0530", - 1739.05, - 1739.9, - 1739, - 1739.9, - 166 - ], - [ - "2017-12-27T14:09:00+0530", - 1739.05, - 1740.1, - 1739.05, - 1739.15, - 828 - ], - [ - "2017-12-27T14:10:00+0530", - 1739.15, - 1740.5, - 1739.05, - 1739.5, - 392 - ], - [ - "2017-12-27T14:11:00+0530", - 1739.5, - 1739.5, - 1739, - 1739.45, - 56 - ], - [ - "2017-12-27T14:12:00+0530", - 1739.05, - 1739.5, - 1739, - 1739.5, - 475 - ], - [ - "2017-12-27T14:13:00+0530", - 1739.1, - 1739.9, - 1739.05, - 1739.9, - 148 - ], - [ - "2017-12-27T14:14:00+0530", - 1739, - 1739.45, - 1738.55, - 1739.45, - 123 - ], - [ - "2017-12-27T14:15:00+0530", - 1739.05, - 1739.85, - 1738.55, - 1739.8, - 229 - ], - [ - "2017-12-27T14:16:00+0530", - 1739.05, - 1739.05, - 1738.55, - 1738.55, - 31 - ], - [ - "2017-12-27T14:17:00+0530", - 1739.05, - 1739.6, - 1739.05, - 1739.05, - 33 - ], - [ - "2017-12-27T14:18:00+0530", - 1739.05, - 1739.35, - 1739, - 1739.25, - 189 - ], - [ - "2017-12-27T14:19:00+0530", - 1739.25, - 1739.85, - 1739.05, - 1739.25, - 70 - ], - [ - "2017-12-27T14:20:00+0530", - 1739, - 1739.8, - 1739, - 1739.8, - 492 - ], - [ - "2017-12-27T14:21:00+0530", - 1739.25, - 1739.7, - 1739.25, - 1739.25, - 2672 - ], - [ - "2017-12-27T14:22:00+0530", - 1739.65, - 1739.95, - 1738.6, - 1739.2, - 1800 - ], - [ - "2017-12-27T14:23:00+0530", - 1739.2, - 1739.2, - 1738, - 1738.7, - 425 - ], - [ - "2017-12-27T14:24:00+0530", - 1738, - 1738.6, - 1738, - 1738.6, - 1250 - ], - [ - "2017-12-27T14:25:00+0530", - 1738.3, - 1739.25, - 1737.6, - 1738.75, - 556 - ], - [ - "2017-12-27T14:26:00+0530", - 1738, - 1738.8, - 1737.05, - 1738.7, - 1017 - ], - [ - "2017-12-27T14:27:00+0530", - 1738, - 1738.75, - 1737.9, - 1738.1, - 1072 - ], - [ - "2017-12-27T14:28:00+0530", - 1738.1, - 1738.5, - 1737.25, - 1738, - 846 - ], - [ - "2017-12-27T14:29:00+0530", - 1738, - 1738.35, - 1736.25, - 1736.25, - 1019 - ], - [ - "2017-12-27T14:30:00+0530", - 1736.05, - 1737.8, - 1736.05, - 1736.5, - 439 - ], - [ - "2017-12-27T14:31:00+0530", - 1736, - 1736.25, - 1735, - 1735, - 1161 - ], - [ - "2017-12-27T14:32:00+0530", - 1735, - 1736.15, - 1735, - 1735.05, - 208 - ], - [ - "2017-12-27T14:33:00+0530", - 1736.35, - 1737.75, - 1735.75, - 1736.4, - 245 - ], - [ - "2017-12-27T14:34:00+0530", - 1735.1, - 1736, - 1735, - 1736, - 907 - ], - [ - "2017-12-27T14:35:00+0530", - 1735.5, - 1736.6, - 1734.8, - 1734.8, - 1799 - ], - [ - "2017-12-27T14:36:00+0530", - 1735.5, - 1737.6, - 1734.15, - 1737.6, - 2623 - ], - [ - "2017-12-27T14:37:00+0530", - 1735.5, - 1736.4, - 1735.5, - 1735.5, - 772 - ], - [ - "2017-12-27T14:38:00+0530", - 1735.5, - 1736.35, - 1734.35, - 1736.3, - 3209 - ], - [ - "2017-12-27T14:39:00+0530", - 1735.5, - 1737, - 1735.5, - 1735.5, - 1169 - ], - [ - "2017-12-27T14:40:00+0530", - 1735.5, - 1736.4, - 1735, - 1735, - 4324 - ], - [ - "2017-12-27T14:41:00+0530", - 1734.15, - 1737.05, - 1733.55, - 1735, - 4313 - ], - [ - "2017-12-27T14:42:00+0530", - 1735, - 1736, - 1735, - 1735, - 1824 - ], - [ - "2017-12-27T14:43:00+0530", - 1734.15, - 1735, - 1730.9, - 1730.9, - 2682 - ], - [ - "2017-12-27T14:44:00+0530", - 1730.75, - 1732, - 1730.75, - 1730.75, - 622 - ], - [ - "2017-12-27T14:45:00+0530", - 1730.75, - 1731, - 1727.15, - 1727.15, - 2209 - ], - [ - "2017-12-27T14:46:00+0530", - 1727.15, - 1730.95, - 1727.1, - 1727.95, - 901 - ], - [ - "2017-12-27T14:47:00+0530", - 1727.95, - 1729.9, - 1726.45, - 1728.8, - 2331 - ], - [ - "2017-12-27T14:48:00+0530", - 1728.5, - 1730.95, - 1727.6, - 1730.85, - 743 - ], - [ - "2017-12-27T14:49:00+0530", - 1730.15, - 1730.9, - 1728, - 1729, - 625 - ], - [ - "2017-12-27T14:50:00+0530", - 1729, - 1729.25, - 1725.4, - 1729.25, - 1310 - ], - [ - "2017-12-27T14:51:00+0530", - 1727.9, - 1729, - 1726.55, - 1727.55, - 224 - ], - [ - "2017-12-27T14:52:00+0530", - 1728.4, - 1729.65, - 1727.1, - 1729.65, - 629 - ], - [ - "2017-12-27T14:53:00+0530", - 1728.55, - 1730, - 1728, - 1729.6, - 451 - ], - [ - "2017-12-27T14:54:00+0530", - 1729.6, - 1732.9, - 1729.6, - 1732.1, - 741 - ], - [ - "2017-12-27T14:55:00+0530", - 1730.95, - 1731.9, - 1730.6, - 1731.9, - 168 - ], - [ - "2017-12-27T14:56:00+0530", - 1731.9, - 1732.25, - 1730.9, - 1730.9, - 268 - ], - [ - "2017-12-27T14:57:00+0530", - 1730.9, - 1732.25, - 1730.1, - 1732, - 389 - ], - [ - "2017-12-27T14:58:00+0530", - 1732.15, - 1732.15, - 1730.9, - 1731.35, - 221 - ], - [ - "2017-12-27T14:59:00+0530", - 1731.35, - 1732.25, - 1730.55, - 1732.25, - 838 - ], - [ - "2017-12-27T15:00:00+0530", - 1732.2, - 1733, - 1732, - 1732.85, - 967 - ], - [ - "2017-12-27T15:01:00+0530", - 1732.55, - 1734.4, - 1732.55, - 1734.4, - 321 - ], - [ - "2017-12-27T15:02:00+0530", - 1734.4, - 1735.9, - 1734.15, - 1734.8, - 882 - ], - [ - "2017-12-27T15:03:00+0530", - 1734.8, - 1737.95, - 1734.8, - 1737, - 837 - ], - [ - "2017-12-27T15:04:00+0530", - 1737, - 1737, - 1736, - 1736, - 2101 - ], - [ - "2017-12-27T15:05:00+0530", - 1736, - 1737.35, - 1735.7, - 1736.5, - 1802 - ], - [ - "2017-12-27T15:06:00+0530", - 1736.5, - 1737.9, - 1735.9, - 1736.9, - 2940 - ], - [ - "2017-12-27T15:07:00+0530", - 1736.9, - 1737.95, - 1736.2, - 1737.6, - 317 - ], - [ - "2017-12-27T15:08:00+0530", - 1737.8, - 1738, - 1736.8, - 1737.4, - 549 - ], - [ - "2017-12-27T15:09:00+0530", - 1737.4, - 1738, - 1736.55, - 1736.8, - 521 - ], - [ - "2017-12-27T15:10:00+0530", - 1736.8, - 1736.8, - 1735.65, - 1736, - 577 - ], - [ - "2017-12-27T15:11:00+0530", - 1736, - 1736.8, - 1735.55, - 1736.1, - 136 - ], - [ - "2017-12-27T15:12:00+0530", - 1736, - 1737.05, - 1736, - 1736.95, - 2115 - ], - [ - "2017-12-27T15:13:00+0530", - 1736.95, - 1737.4, - 1736.2, - 1736.95, - 255 - ], - [ - "2017-12-27T15:14:00+0530", - 1736, - 1738.85, - 1736, - 1738.85, - 579 - ], - [ - "2017-12-27T15:15:00+0530", - 1738.85, - 1739.5, - 1737.75, - 1738, - 801 - ], - [ - "2017-12-27T15:16:00+0530", - 1737.9, - 1738.7, - 1736.15, - 1737, - 380 - ], - [ - "2017-12-27T15:17:00+0530", - 1737.05, - 1738.6, - 1737.05, - 1737.5, - 273 - ], - [ - "2017-12-27T15:18:00+0530", - 1737.5, - 1738, - 1736.5, - 1736.5, - 654 - ], - [ - "2017-12-27T15:19:00+0530", - 1736, - 1737.5, - 1735.1, - 1736.5, - 2438 - ], - [ - "2017-12-27T15:20:00+0530", - 1736.5, - 1736.5, - 1734.75, - 1736.05, - 8466 - ], - [ - "2017-12-27T15:21:00+0530", - 1736.9, - 1737.5, - 1735.45, - 1736, - 3553 - ], - [ - "2017-12-27T15:22:00+0530", - 1736, - 1738.8, - 1734, - 1734, - 8319 - ], - [ - "2017-12-27T15:23:00+0530", - 1734, - 1735.5, - 1734, - 1735.5, - 603 - ], - [ - "2017-12-27T15:24:00+0530", - 1735.5, - 1735.5, - 1734, - 1735.1, - 942 - ], - [ - "2017-12-27T15:25:00+0530", - 1735.1, - 1735.75, - 1734.3, - 1734.75, - 366 - ], - [ - "2017-12-27T15:26:00+0530", - 1734.75, - 1734.75, - 1733.75, - 1734.1, - 1476 - ], - [ - "2017-12-27T15:27:00+0530", - 1734.1, - 1734.5, - 1734, - 1734, - 754 - ], - [ - "2017-12-27T15:28:00+0530", - 1734, - 1734.5, - 1733.15, - 1734.5, - 1557 - ], - [ - "2017-12-27T15:29:00+0530", - 1734.5, - 1734.5, - 1730.45, - 1730.45, - 567 - ] - ] - } -} diff --git a/mock_responses/holdings.json b/mock_responses/holdings.json deleted file mode 100644 index a9b6449..0000000 --- a/mock_responses/holdings.json +++ /dev/null @@ -1,822 +0,0 @@ -{ - "status": "success", - "data": [ - { - "tradingsymbol": "BENGALASM", - "exchange": "BSE", - "instrument_token": 136472324, - "isin": "INE083K01017", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 1150, - "last_price": 2620, - "close_price": 2751.1, - "pnl": 1470, - "day_change": -131.0999999999999, - "day_change_percentage": -4.7653665806404675 - }, - { - "tradingsymbol": "CONFIPET", - "exchange": "BSE", - "instrument_token": 134868228, - "isin": "INE552D01024", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 5.89, - "last_price": 31.35, - "close_price": 31.5, - "pnl": 25.46, - "day_change": -0.14999999999999858, - "day_change_percentage": -0.4761904761904716 - }, - { - "tradingsymbol": "IPOWER", - "exchange": "BSE", - "instrument_token": 131175684, - "isin": "INE468F01010", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 0, - "last_price": 1.95, - "close_price": 0, - "pnl": 1.95, - "day_change": 0, - "day_change_percentage": 0 - }, - { - "tradingsymbol": "JCTLTD", - "exchange": "BSE", - "instrument_token": 128057092, - "isin": "INE945A01026", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 6.03, - "last_price": 3.5, - "close_price": 3.48, - "pnl": -2.5300000000000002, - "day_change": 0.020000000000000018, - "day_change_percentage": 0.5747126436781614 - }, - { - "tradingsymbol": "SPICEJET", - "exchange": "BSE", - "instrument_token": 128072964, - "isin": "INE285B01017", - "product": "CNC", - "price": 0, - "quantity": 5, - "t1_quantity": 0, - "realised_quantity": 5, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 61.2, - "last_price": 145.65, - "close_price": 146.05, - "pnl": 422.25, - "day_change": -0.4000000000000057, - "day_change_percentage": -0.2738788086271864 - }, - { - "tradingsymbol": "ADANIENT", - "exchange": "NSE", - "instrument_token": 6401, - "isin": "INE423A01024", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 77.375, - "last_price": 165.25, - "close_price": 165.95, - "pnl": 175.75, - "day_change": -0.6999999999999886, - "day_change_percentage": -0.42181379933714286 - }, - { - "tradingsymbol": "ADANIPORTS", - "exchange": "NSE", - "instrument_token": 3861249, - "isin": "INE742F01042", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 238.875, - "last_price": 398.7, - "close_price": 404.2, - "pnl": 319.65, - "day_change": -5.5, - "day_change_percentage": -1.3607125185551707 - }, - { - "tradingsymbol": "ADANIPOWER", - "exchange": "NSE", - "instrument_token": 4451329, - "isin": "INE814H01011", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 32, - "last_price": 40.7, - "close_price": 40.65, - "pnl": 17.400000000000006, - "day_change": 0.05000000000000426, - "day_change_percentage": 0.12300123001231063 - }, - { - "tradingsymbol": "APOLLOTYRE", - "exchange": "NSE", - "instrument_token": 41729, - "isin": "INE438A01022", - "product": "CNC", - "price": 0, - "quantity": 4, - "t1_quantity": 0, - "realised_quantity": 4, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 206.9, - "last_price": 268.8, - "close_price": 268.85, - "pnl": 247.60000000000002, - "day_change": -0.05000000000001137, - "day_change_percentage": -0.018597731076812854 - }, - { - "tradingsymbol": "ASHOKLEY", - "exchange": "NSE", - "instrument_token": 54273, - "isin": "INE208A01029", - "product": "CNC", - "price": 0, - "quantity": 3, - "t1_quantity": 0, - "realised_quantity": 3, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 103.08333333333299, - "last_price": 117.7, - "close_price": 118.6, - "pnl": 43.850000000001046, - "day_change": -0.8999999999999915, - "day_change_percentage": -0.7588532883642424 - }, - { - "tradingsymbol": "AXISBANK", - "exchange": "NSE", - "instrument_token": 1510401, - "isin": "INE238A01034", - "product": "CNC", - "price": 0, - "quantity": 11, - "t1_quantity": 0, - "realised_quantity": 11, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 460.227272727273, - "last_price": 546.85, - "close_price": 554.6, - "pnl": 952.8499999999975, - "day_change": -7.75, - "day_change_percentage": -1.3974035340786153 - }, - { - "tradingsymbol": "CIPLA", - "exchange": "NSE", - "instrument_token": 177665, - "isin": "INE059A01026", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 546.6, - "last_price": 606.05, - "close_price": 612.65, - "pnl": 59.44999999999993, - "day_change": -6.600000000000023, - "day_change_percentage": -1.0772871949726637 - }, - { - "tradingsymbol": "DBCORP", - "exchange": "NSE", - "instrument_token": 4577537, - "isin": "INE950I01011", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 351, - "last_price": 353.7, - "close_price": 346.7, - "pnl": 5.399999999999977, - "day_change": 7, - "day_change_percentage": 2.0190366310931642 - }, - { - "tradingsymbol": "DHANBANK", - "exchange": "NSE", - "instrument_token": 2907905, - "isin": "INE680A01011", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 24.7, - "last_price": 29.95, - "close_price": 29.8, - "pnl": 5.25, - "day_change": 0.14999999999999858, - "day_change_percentage": 0.5033557046979817 - }, - { - "tradingsymbol": "DMART", - "exchange": "NSE", - "instrument_token": 5097729, - "isin": "INE192R01011", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 889.95, - "last_price": 1148.35, - "close_price": 1146.35, - "pnl": 516.7999999999997, - "day_change": 2, - "day_change_percentage": 0.17446678588563705 - }, - { - "tradingsymbol": "DQE-BE", - "exchange": "NSE", - "instrument_token": 6211329, - "isin": "INE656K01010", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 35.7, - "last_price": 18.45, - "close_price": 18.45, - "pnl": -17.250000000000004, - "day_change": 0, - "day_change_percentage": 0 - }, - { - "tradingsymbol": "FINCABLES", - "exchange": "NSE", - "instrument_token": 265729, - "isin": "INE235A01022", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 411.55, - "last_price": 699.45, - "close_price": 706.25, - "pnl": 575.8000000000001, - "day_change": -6.7999999999999545, - "day_change_percentage": -0.9628318584070731 - }, - { - "tradingsymbol": "FSL", - "exchange": "NSE", - "instrument_token": 3661825, - "isin": "INE684F01012", - "product": "CNC", - "price": 0, - "quantity": 17, - "t1_quantity": 0, - "realised_quantity": 17, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 36.8, - "last_price": 40.5, - "close_price": 40.15, - "pnl": 62.90000000000005, - "day_change": 0.3500000000000014, - "day_change_percentage": 0.8717310087173136 - }, - { - "tradingsymbol": "GABRIEL", - "exchange": "NSE", - "instrument_token": 277761, - "isin": "INE524A01029", - "product": "CNC", - "price": 0, - "quantity": 6, - "t1_quantity": 0, - "realised_quantity": 6, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 107.55, - "last_price": 196.15, - "close_price": 195.25, - "pnl": 531.6, - "day_change": 0.9000000000000057, - "day_change_percentage": 0.46094750320102723 - }, - { - "tradingsymbol": "GAIL", - "exchange": "NSE", - "instrument_token": 1207553, - "isin": "INE129A01019", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 454.7, - "last_price": 511.2, - "close_price": 508.1, - "pnl": 56.5, - "day_change": 3.099999999999966, - "day_change_percentage": 0.6101161188742307 - }, - { - "tradingsymbol": "GVKPIL-BE", - "exchange": "NSE", - "instrument_token": 3386625, - "isin": "INE251H01024", - "product": "CNC", - "price": 0, - "quantity": 20, - "t1_quantity": 0, - "realised_quantity": 20, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 5.75, - "last_price": 18.15, - "close_price": 18.1, - "pnl": 247.99999999999997, - "day_change": 0.04999999999999716, - "day_change_percentage": 0.27624309392263624 - }, - { - "tradingsymbol": "HDFCBANK", - "exchange": "NSE", - "instrument_token": 341249, - "isin": "INE040A01026", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 1234.5, - "last_price": 1878.05, - "close_price": 1856.75, - "pnl": 1287.1, - "day_change": 21.299999999999955, - "day_change_percentage": 1.14716574660024 - }, - { - "tradingsymbol": "HMVL", - "exchange": "NSE", - "instrument_token": 4918017, - "isin": "INE871K01015", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 271.9, - "last_price": 250.55, - "close_price": 248.35, - "pnl": -42.69999999999993, - "day_change": 2.200000000000017, - "day_change_percentage": 0.8858465874773574 - }, - { - "tradingsymbol": "ICICIBANK", - "exchange": "NSE", - "instrument_token": 1270529, - "isin": "INE090A01021", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 309.7, - "last_price": 315.3, - "close_price": 312.8, - "pnl": 5.600000000000023, - "day_change": 2.5, - "day_change_percentage": 0.7992327365728901 - }, - { - "tradingsymbol": "ICIL", - "exchange": "NSE", - "instrument_token": 3068673, - "isin": "INE483B01026", - "product": "CNC", - "price": 0, - "quantity": 4, - "t1_quantity": 0, - "realised_quantity": 4, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 157.5, - "last_price": 125.7, - "close_price": 120.25, - "pnl": -127.19999999999999, - "day_change": 5.450000000000003, - "day_change_percentage": 4.532224532224535 - }, - { - "tradingsymbol": "IDBI", - "exchange": "NSE", - "instrument_token": 377857, - "isin": "INE008A01015", - "product": "CNC", - "price": 0, - "quantity": 3, - "t1_quantity": 0, - "realised_quantity": 3, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 59.79999999999999, - "last_price": 60.35, - "close_price": 60.05, - "pnl": 1.650000000000034, - "day_change": 0.30000000000000426, - "day_change_percentage": 0.4995836802664517 - }, - { - "tradingsymbol": "INFY", - "exchange": "NSE", - "instrument_token": 408065, - "isin": "INE009A01021", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 967.95, - "last_price": 1033.25, - "close_price": 1034.25, - "pnl": 65.29999999999995, - "day_change": -1, - "day_change_percentage": -0.09668842156151801 - }, - { - "tradingsymbol": "ITC", - "exchange": "NSE", - "instrument_token": 424961, - "isin": "INE154A01025", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 274.5, - "last_price": 261.85, - "close_price": 262.15, - "pnl": -12.649999999999977, - "day_change": -0.2999999999999545, - "day_change_percentage": -0.11443829868394223 - }, - { - "tradingsymbol": "JKIL", - "exchange": "NSE", - "instrument_token": 3908097, - "isin": "INE576I01022", - "product": "CNC", - "price": 0, - "quantity": 3, - "t1_quantity": 0, - "realised_quantity": 3, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 216.1, - "last_price": 301.75, - "close_price": 308.2, - "pnl": 256.95000000000005, - "day_change": -6.449999999999989, - "day_change_percentage": -2.0927968851395162 - }, - { - "tradingsymbol": "JPASSOCIAT", - "exchange": "NSE", - "instrument_token": 2933761, - "isin": "INE455F01025", - "product": "CNC", - "price": 0, - "quantity": 11, - "t1_quantity": 0, - "realised_quantity": 11, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 8.00909090909091, - "last_price": 23.2, - "close_price": 21.35, - "pnl": 167.1, - "day_change": 1.8499999999999979, - "day_change_percentage": 8.665105386416851 - }, - { - "tradingsymbol": "KRIDHANINF", - "exchange": "NSE", - "instrument_token": 2938881, - "isin": "INE524L01026", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 91.75, - "last_price": 121.2, - "close_price": 122.25, - "pnl": 29.450000000000003, - "day_change": -1.0499999999999972, - "day_change_percentage": -0.85889570552147 - }, - { - "tradingsymbol": "KSL", - "exchange": "NSE", - "instrument_token": 4835585, - "isin": "INE907A01026", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 289.75, - "last_price": 408.4, - "close_price": 398.5, - "pnl": 237.29999999999995, - "day_change": 9.899999999999977, - "day_change_percentage": 2.484316185696356 - }, - { - "tradingsymbol": "KTKBANK", - "exchange": "NSE", - "instrument_token": 2061825, - "isin": "INE614B01018", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 122.05, - "last_price": 149.4, - "close_price": 151.9, - "pnl": 27.35000000000001, - "day_change": -2.5, - "day_change_percentage": -1.6458196181698483 - }, - { - "tradingsymbol": "L&TFH", - "exchange": "NSE", - "instrument_token": 6386689, - "isin": "INE498L01015", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 85.075, - "last_price": 173.45, - "close_price": 176.75, - "pnl": 176.74999999999997, - "day_change": -3.3000000000000114, - "day_change_percentage": -1.8670438472418733 - }, - { - "tradingsymbol": "NFL", - "exchange": "NSE", - "instrument_token": 3564801, - "isin": "INE870D01012", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 0, - "last_price": 69.25, - "close_price": 68.25, - "pnl": 69.25, - "day_change": 1, - "day_change_percentage": 1.465201465201465 - }, - { - "tradingsymbol": "PNB", - "exchange": "NSE", - "instrument_token": 2730497, - "isin": "INE160A01022", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 112.3, - "last_price": 170.8, - "close_price": 174.1, - "pnl": 117.00000000000003, - "day_change": -3.299999999999983, - "day_change_percentage": -1.8954623779437008 - }, - { - "tradingsymbol": "PTC", - "exchange": "NSE", - "instrument_token": 2906881, - "isin": "INE877F01012", - "product": "CNC", - "price": 0, - "quantity": 2, - "t1_quantity": 0, - "realised_quantity": 2, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 75.125, - "last_price": 115.55, - "close_price": 116.55, - "pnl": 80.85, - "day_change": -1, - "day_change_percentage": -0.8580008580008579 - }, - { - "tradingsymbol": "QUICKHEAL", - "exchange": "NSE", - "instrument_token": 3357697, - "isin": "INE306L01010", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 245, - "last_price": 318.15, - "close_price": 313.2, - "pnl": 73.14999999999998, - "day_change": 4.949999999999989, - "day_change_percentage": 1.5804597701149388 - }, - { - "tradingsymbol": "RAJRAYON-BE", - "exchange": "NSE", - "instrument_token": 3577601, - "isin": "INE533D01024", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 0.2, - "last_price": 0.35, - "close_price": 0.35, - "pnl": 0.14999999999999997, - "day_change": 0, - "day_change_percentage": 0 - }, - { - "tradingsymbol": "RELIANCE", - "exchange": "NSE", - "instrument_token": 738561, - "isin": "INE002A01018", - "product": "CNC", - "price": 0, - "quantity": 160, - "t1_quantity": 0, - "realised_quantity": 160, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 513.513924050633, - "last_price": 924.2, - "close_price": 923.75, - "pnl": 65709.77215189872, - "day_change": 0.4500000000000455, - "day_change_percentage": 0.04871447902571534 - }, - { - "tradingsymbol": "SAIL", - "exchange": "NSE", - "instrument_token": 758529, - "isin": "INE114A01011", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 61, - "last_price": 92.75, - "close_price": 91.1, - "pnl": 31.75, - "day_change": 1.6500000000000057, - "day_change_percentage": 1.8111964873765156 - }, - { - "tradingsymbol": "SBIN", - "exchange": "NSE", - "instrument_token": 779521, - "isin": "INE062A01020", - "product": "CNC", - "price": 0, - "quantity": 50, - "t1_quantity": 0, - "realised_quantity": 50, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 263.824, - "last_price": 308.4, - "close_price": 314.85, - "pnl": 2228.7999999999984, - "day_change": -6.4500000000000455, - "day_change_percentage": -2.0485945688423204 - }, - { - "tradingsymbol": "SKMEGGPROD", - "exchange": "NSE", - "instrument_token": 1211393, - "isin": "INE411D01015", - "product": "CNC", - "price": 0, - "quantity": 1, - "t1_quantity": 0, - "realised_quantity": 1, - "collateral_quantity": 0, - "collateral_type": "", - "average_price": 181.4, - "last_price": 96.95, - "close_price": 97.15, - "pnl": -84.45, - "day_change": -0.20000000000000284, - "day_change_percentage": -0.20586721564591132 - } - ] -} diff --git a/mock_responses/instruments_all.csv b/mock_responses/instruments_all.csv deleted file mode 100644 index 3efe3ed..0000000 --- a/mock_responses/instruments_all.csv +++ /dev/null @@ -1,100 +0,0 @@ -instrument_token,exchange_token,tradingsymbol,name,last_price,expiry,strike,tick_size,lot_size,instrument_type,segment,exchange -3813889,14898,CENTRALBK-BE,CENTRAL BANK OF INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -4645121,18145,EMMBI-BL,EMMBI INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4531969,17703,MIDCAPIWIN-BL,ICICI PRU MIDCAP IWIN ETF,0.0,,0.0,0.01,1,EQ,NSE,NSE -5533953,21617,ABCAPITAL-BL,ADITYA BIRLA CAPITAL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3861249,15083,ADANIPORTS,ADANI PORT & SEZ,0.0,,0.0,0.05,1,EQ,NSE,NSE -4419329,17263,ARMANFIN,ARMAN FIN SERV,0.0,,0.0,0.05,1,EQ,NSE,NSE -12073986,47164,BANKNIFTY18JAN23500CE,,2528.4,2018-01-25,23500.0,0.05,40,CE,NFO-OPT,NFO -13693186,53489,ADANIPORTS17DEC490PE,,80.65,2017-12-28,490.0,0.05,2500,PE,NFO-OPT,NFO -136483588,533139,FFTF16BGR,FORTIS FIXED TERM FUND - SERIE,0.0,,0.0,0.01,1,EQ,BSE,BSE -3713281,14505,BALAMINES-BE,BALAJI AMINES,0.0,,0.0,0.05,1,EQ,NSE,NSE -1373441,5365,BATAINDIA-BE,BATA INDIA DEP RS,0.0,,0.0,0.05,1,EQ,NSE,NSE -5421569,21178,CDSL-BE,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -5421313,21177,CDSL-BL,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -1374209,5368,CHENNPETRO-BE,CHENNAI PETRO CORP DE,0.0,,0.0,0.05,1,EQ,NSE,NSE -3419393,13357,GANGOTRI,GANGOTRI TEXTILES,0.0,,0.0,0.05,1,EQ,NSE,NSE -2703361,10560,NAVKARCORP-BL,NAVKAR CORPORATION,0.0,,0.0,0.05,1,EQ,NSE,NSE -5001473,19537,PDPL,PARENTERAL DRUGS,0.0,,0.0,0.05,1,EQ,NSE,NSE -12074242,47165,BANKNIFTY18JAN23500PE,,35.15,2018-01-25,23500.0,0.05,40,PE,NFO-OPT,NFO -12074498,47166,BANKNIFTY18JAN23600CE,,2435.55,2018-01-25,23600.0,0.05,40,CE,NFO-OPT,NFO -5420545,21174,CDSL,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -3370497,13166,CELEBRITY-BL,CELEBRITY FASHIONS,0.0,,0.0,0.05,1,EQ,NSE,NSE -12074754,47167,BANKNIFTY18JAN23600PE,,41.25,2018-01-25,23600.0,0.05,40,PE,NFO-OPT,NFO -3146497,12291,CENTEXT-BL,CENTURY EXTRUSIONS,0.0,,0.0,0.05,1,EQ,NSE,NSE -4550145,17774,GROBTEA-BE,THE GROB TEA COMPANY,0.0,,0.0,0.05,1,EQ,NSE,NSE -21227266,82919,INDIACEM17DEC220PE,,43.45,2017-12-28,220.0,0.05,3500,PE,NFO-OPT,NFO -6938881,27105,CHROMATIC-BE,CHROMATIC INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -4578305,17884,DBCORP-BL,D.B.CORP,0.0,,0.0,0.05,1,EQ,NSE,NSE -3155457,12326,DCW-BL,DCW,0.0,,0.0,0.05,1,EQ,NSE,NSE -5101569,19928,HUDCO-N8,7.64% TAX FREETRI SR2B,0.0,,0.0,0.01,1,EQ,NSE,NSE -1707521,6670,INFARINDIA,INFAR (INDIA),0.0,,0.0,0.05,1,EQ,NSE,NSE -21227522,82920,INDIACEM17DEC225CE,,0.4,2017-12-28,225.0,0.05,3500,CE,NFO-OPT,NFO -21228290,82923,INDIACEM17DEC230PE,,53.1,2017-12-28,230.0,0.05,3500,PE,NFO-OPT,NFO -136484868,533144,COX&KINGS,COX & KINGS,0.0,,0.0,0.05,1,EQ,BSE,BSE -12072962,47160,BANKNIFTY18JAN23400CE,,2622.0,2018-01-25,23400.0,0.05,40,CE,NFO-OPT,NFO -12073474,47162,BANKNIFTY18JAN23400PE,,29.85,2018-01-25,23400.0,0.05,40,PE,NFO-OPT,NFO -12075010,47168,BANKNIFTY18JAN23700CE,,2343.55,2018-01-25,23700.0,0.05,40,CE,NFO-OPT,NFO -21227778,82921,INDIACEM17DEC225PE,,48.25,2017-12-28,225.0,0.05,3500,PE,NFO-OPT,NFO -21228034,82922,INDIACEM17DEC230CE,,0.25,2017-12-28,230.0,0.05,3500,CE,NFO-OPT,NFO -112655620,440061,828GOI27-ML,828GOI2027,0.0,,0.0,0.25,500000,EQ,BSE,BSE -136441604,532975,AISHWARYA,AISHWARYA TELECOM,0.0,,0.0,0.01,1,EQ,BSE,BSE -136483076,533137,DEN,DEN NETWORKS,0.0,,0.0,0.05,1,EQ,BSE,BSE -136483332,533138,ASTEC,ASTEC LIFESCIENCES,0.0,,0.0,0.05,1,EQ,BSE,BSE -136485380,533146,DLINKINDIA,D-LINK (INDIA),0.0,,0.0,0.05,1,EQ,BSE,BSE -1219329,4763,BANKBARODA-BE,BOB - DEPO SETT,0.0,,0.0,0.05,1,EQ,NSE,NSE -2928385,11439,BANKBEES,RELIANCE ETF BANK BEES,0.0,,0.0,0.01,1,EQ,NSE,NSE -3715841,14515,BANSWRAS-BE,BANSWARA SYNTEX,0.0,,0.0,0.05,1,EQ,NSE,NSE -3137281,12255,BERGEPAINT-BL,BERGER PAINTS (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -3901185,15239,BIRLAMONEY,ADITYA BIRLA MONEY,0.0,,0.0,0.05,1,EQ,NSE,NSE -1789185,6989,CARRIERAIR-BE,CARRIER AIRCON DEPO,0.0,,0.0,0.05,1,EQ,NSE,NSE -3123713,12202,CASTEXTECH-BL,CASTEX TECHNOLOGIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -136485892,533148,JSWENERGY,JSW ENERGY,0.0,,0.0,0.05,1,EQ,BSE,BSE -136486916,533152,MBLINFRA,MBL INFRASTRUCTURES,0.0,,0.0,0.05,1,EQ,BSE,BSE -136487172,533153,FDCLTDBBPH,FDC*,0.0,,0.0,0.05,1,EQ,BSE,BSE -138027524,539170,AXISHB23DD,AXIS MUTUAL FUND,0.0,,0.0,0.01,1,EQ,BSE,BSE -244332292,954423,RCL14JUL16B,RCL-NIFTY-14-1-19-PVT,0.0,,0.0,0.01,10,EQ,BSE,BSE -244352260,954501,8HDFCL18,HDFCL-8%-15-1-18-PVT,0.0,,0.0,0.01,1,EQ,BSE,BSE -244834820,956386,945SREI24,SREI-9.45%-26-5-24-PVT,0.0,,0.0,0.01,1,EQ,BSE,BSE -5534209,21618,ABCAPITAL-BE,ADITYA BIRLA CAPITAL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3412225,13329,ERAINFRA-BL,ERA INFRA ENGINEERING,0.0,,0.0,0.05,1,EQ,NSE,NSE -1884161,7360,SETFNN50-BL,SBI-ETF NIFTY NEXT 50,0.0,,0.0,0.01,1,EQ,NSE,NSE -3028225,11829,SSWL,STEEL STRIPS WHEELS,0.0,,0.0,0.05,1,EQ,NSE,NSE -12075266,47169,BANKNIFTY18JAN23700PE,,48.15,2018-01-25,23700.0,0.05,40,PE,NFO-OPT,NFO -12525058,48926,BANKNIFTY17DEC22500PE,,8.0,2017-12-28,22500.0,0.05,40,PE,NFO-OPT,NFO -13842434,54072,BANKNIFTY17NOV23600PE,,3.0,2017-11-30,23600.0,0.05,40,PE,NFO-OPT,NFO -6128129,23938,ESSARPORTS-BE,ESSAR PORTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -21231874,82937,INDIANB17DEC160PE,,0.05,2017-12-28,160.0,0.05,2000,PE,NFO-OPT,NFO -136492036,533172,IVZINGOLD,INVESCO INDIA GOLD EXCHANGE TR,0.0,,0.0,0.01,1,EQ,BSE,BSE -21232386,82939,INDIANB17DEC170PE,,0.05,2017-12-28,170.0,0.05,2000,PE,NFO-OPT,NFO -13845506,54084,BANKNIFTY17NOV23900PE,,2.25,2017-11-30,23900.0,0.05,40,PE,NFO-OPT,NFO -136504580,533221,AHLWEST,ASIAN HOTELS (WEST),0.0,,0.0,0.05,1,EQ,BSE,BSE -4671233,18247,DEEPIND-BL,DEEP INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -6562305,25634,ESSARSHPNG,ESSAR SHIPPING,0.0,,0.0,0.05,1,EQ,NSE,NSE -136518404,533275,GAL,GYSCOAL ALLOYS,0.0,,0.0,0.01,1,EQ,BSE,BSE -3604481,14080,GODREJIND-BE,GODREJ INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4527361,17685,GPTINFRA,GPT INFRAPROJECTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -13845762,54085,BANKNIFTY17NOV24000CE,,1776.2,2017-11-30,24000.0,0.05,40,CE,NFO-OPT,NFO -211713,827,DEEPAKFERT,DEEPAK FERTILIZERS & PETR,0.0,,0.0,0.05,1,EQ,NSE,NSE -1256193,4907,ENGINERSIN,ENGINEERS INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3449089,13473,GTNTEX,GTN TEXTILES,0.0,,0.0,0.05,1,EQ,NSE,NSE -5003009,19543,HDFCMFGETF,HDFC GOLD ETF,0.0,,0.0,0.05,1,EQ,NSE,NSE -2166273,8462,DUNCANSIND-BE,DUNCANS INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -21230850,82933,INDIANB17DEC140PE,,0.05,2017-12-28,140.0,0.05,2000,PE,NFO-OPT,NFO -21231106,82934,INDIANB17DEC150CE,,262.45,2017-12-28,150.0,0.05,2000,CE,NFO-OPT,NFO -21231362,82935,INDIANB17DEC150PE,,0.05,2017-12-28,150.0,0.05,2000,PE,NFO-OPT,NFO -136518660,533276,BSLIMITED,BS,0.0,,0.0,0.01,1,EQ,BSE,BSE -3798529,14838,DECCANCE,DECCAN CEMENTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -212481,830,DEEPAKNITR,DEEPAK NITRITE,0.0,,0.0,0.05,1,EQ,NSE,NSE -3542273,13837,DONEAR-BL,DONEAR IND.,0.0,,0.0,0.05,1,EQ,NSE,NSE -3862529,15088,EDL,EMPEE DISTI.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2389505,9334,RAVALSUGAR-BE,RAVALGAONSUGAR FARM,0.0,,0.0,0.05,1,EQ,NSE,NSE -21231618,82936,INDIANB17DEC160CE,,252.5,2017-12-28,160.0,0.05,2000,CE,NFO-OPT,NFO -21232130,82938,INDIANB17DEC170CE,,242.55,2017-12-28,170.0,0.05,2000,CE,NFO-OPT,NFO -112653060,440051,830GOI42-ML,830GOI2042,0.0,,0.0,0.25,500000,EQ,BSE,BSE -7697153,30067,DUNCANSLTD-BE,DUNCANS INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4818433,18822,ENDURANCE,ENDURANCE TECHNO.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2683649,10483,ENTEGRA,ENTEGRA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3411713,13327,ERAINFRA,ERA INFRA ENGINEERING,0.0,,0.0,0.05,1,EQ,NSE,NSE -6563329,25638,ESSARSHPNG-BE,ESSAR SHIPPING,0.0,,0.0,0.05,1,EQ,NSE,NSE -4352001,17000,GISOLUTION-BE,GI ENGINEERING SOLNS,0.0,,0.0,0.05,1,EQ,NSE,NSE diff --git a/mock_responses/instruments_nse.csv b/mock_responses/instruments_nse.csv deleted file mode 100644 index 79ee2eb..0000000 --- a/mock_responses/instruments_nse.csv +++ /dev/null @@ -1,100 +0,0 @@ -instrument_token,exchange_token,tradingsymbol,name,last_price,expiry,strike,tick_size,lot_size,instrument_type,segment,exchange -3813889,14898,CENTRALBK-BE,CENTRAL BANK OF INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -4645121,18145,EMMBI-BL,EMMBI INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4531969,17703,MIDCAPIWIN-BL,ICICI PRU MIDCAP IWIN ETF,0.0,,0.0,0.01,1,EQ,NSE,NSE -5533953,21617,ABCAPITAL-BL,ADITYA BIRLA CAPITAL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3861249,15083,ADANIPORTS,ADANI PORT & SEZ,0.0,,0.0,0.05,1,EQ,NSE,NSE -4419329,17263,ARMANFIN,ARMAN FIN SERV,0.0,,0.0,0.05,1,EQ,NSE,NSE -3713281,14505,BALAMINES-BE,BALAJI AMINES,0.0,,0.0,0.05,1,EQ,NSE,NSE -1373441,5365,BATAINDIA-BE,BATA INDIA DEP RS,0.0,,0.0,0.05,1,EQ,NSE,NSE -5421569,21178,CDSL-BE,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -5421313,21177,CDSL-BL,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -1374209,5368,CHENNPETRO-BE,CHENNAI PETRO CORP DE,0.0,,0.0,0.05,1,EQ,NSE,NSE -3419393,13357,GANGOTRI,GANGOTRI TEXTILES,0.0,,0.0,0.05,1,EQ,NSE,NSE -2703361,10560,NAVKARCORP-BL,NAVKAR CORPORATION,0.0,,0.0,0.05,1,EQ,NSE,NSE -5001473,19537,PDPL,PARENTERAL DRUGS,0.0,,0.0,0.05,1,EQ,NSE,NSE -5420545,21174,CDSL,CENTRAL DEPO SER (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -3370497,13166,CELEBRITY-BL,CELEBRITY FASHIONS,0.0,,0.0,0.05,1,EQ,NSE,NSE -3146497,12291,CENTEXT-BL,CENTURY EXTRUSIONS,0.0,,0.0,0.05,1,EQ,NSE,NSE -4550145,17774,GROBTEA-BE,THE GROB TEA COMPANY,0.0,,0.0,0.05,1,EQ,NSE,NSE -6938881,27105,CHROMATIC-BE,CHROMATIC INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -4578305,17884,DBCORP-BL,D.B.CORP,0.0,,0.0,0.05,1,EQ,NSE,NSE -3155457,12326,DCW-BL,DCW,0.0,,0.0,0.05,1,EQ,NSE,NSE -5101569,19928,HUDCO-N8,7.64% TAX FREETRI SR2B,0.0,,0.0,0.01,1,EQ,NSE,NSE -1707521,6670,INFARINDIA,INFAR (INDIA),0.0,,0.0,0.05,1,EQ,NSE,NSE -1219329,4763,BANKBARODA-BE,BOB - DEPO SETT,0.0,,0.0,0.05,1,EQ,NSE,NSE -2928385,11439,BANKBEES,RELIANCE ETF BANK BEES,0.0,,0.0,0.01,1,EQ,NSE,NSE -3715841,14515,BANSWRAS-BE,BANSWARA SYNTEX,0.0,,0.0,0.05,1,EQ,NSE,NSE -3137281,12255,BERGEPAINT-BL,BERGER PAINTS (I),0.0,,0.0,0.05,1,EQ,NSE,NSE -3901185,15239,BIRLAMONEY,ADITYA BIRLA MONEY,0.0,,0.0,0.05,1,EQ,NSE,NSE -1789185,6989,CARRIERAIR-BE,CARRIER AIRCON DEPO,0.0,,0.0,0.05,1,EQ,NSE,NSE -3123713,12202,CASTEXTECH-BL,CASTEX TECHNOLOGIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -5534209,21618,ABCAPITAL-BE,ADITYA BIRLA CAPITAL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3412225,13329,ERAINFRA-BL,ERA INFRA ENGINEERING,0.0,,0.0,0.05,1,EQ,NSE,NSE -1884161,7360,SETFNN50-BL,SBI-ETF NIFTY NEXT 50,0.0,,0.0,0.01,1,EQ,NSE,NSE -3028225,11829,SSWL,STEEL STRIPS WHEELS,0.0,,0.0,0.05,1,EQ,NSE,NSE -6128129,23938,ESSARPORTS-BE,ESSAR PORTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -4671233,18247,DEEPIND-BL,DEEP INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -6562305,25634,ESSARSHPNG,ESSAR SHIPPING,0.0,,0.0,0.05,1,EQ,NSE,NSE -3604481,14080,GODREJIND-BE,GODREJ INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4527361,17685,GPTINFRA,GPT INFRAPROJECTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -211713,827,DEEPAKFERT,DEEPAK FERTILIZERS & PETR,0.0,,0.0,0.05,1,EQ,NSE,NSE -1256193,4907,ENGINERSIN,ENGINEERS INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3449089,13473,GTNTEX,GTN TEXTILES,0.0,,0.0,0.05,1,EQ,NSE,NSE -5003009,19543,HDFCMFGETF,HDFC GOLD ETF,0.0,,0.0,0.05,1,EQ,NSE,NSE -2166273,8462,DUNCANSIND-BE,DUNCANS INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -3798529,14838,DECCANCE,DECCAN CEMENTS,0.0,,0.0,0.05,1,EQ,NSE,NSE -212481,830,DEEPAKNITR,DEEPAK NITRITE,0.0,,0.0,0.05,1,EQ,NSE,NSE -3542273,13837,DONEAR-BL,DONEAR IND.,0.0,,0.0,0.05,1,EQ,NSE,NSE -3862529,15088,EDL,EMPEE DISTI.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2389505,9334,RAVALSUGAR-BE,RAVALGAONSUGAR FARM,0.0,,0.0,0.05,1,EQ,NSE,NSE -7697153,30067,DUNCANSLTD-BE,DUNCANS INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4818433,18822,ENDURANCE,ENDURANCE TECHNO.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2683649,10483,ENTEGRA,ENTEGRA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3411713,13327,ERAINFRA,ERA INFRA ENGINEERING,0.0,,0.0,0.05,1,EQ,NSE,NSE -6563329,25638,ESSARSHPNG-BE,ESSAR SHIPPING,0.0,,0.0,0.05,1,EQ,NSE,NSE -4352001,17000,GISOLUTION-BE,GI ENGINEERING SOLNS,0.0,,0.0,0.05,1,EQ,NSE,NSE -1934849,7558,GONTERPEIP-BE,GONTERMANN PEIPERS DEPO,0.0,,0.0,0.05,1,EQ,NSE,NSE -2185985,8539,GTNIND-BE,GTN INDUSTRIES,0.0,,0.0,0.05,1,EQ,NSE,NSE -3179009,12418,GUFICBIO-BL,GUFIC BIOSCIENCES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4915969,19203,SGBNOV24-GB,2.50% GOLDBONDS2024 TR-VI,0.0,,0.0,0.01,1,EQ,NSE,NSE -5401857,21101,STARCEMENT-BE,STAR CEMENT,0.0,,0.0,0.05,1,EQ,NSE,NSE -5533185,21614,ABCAPITAL,ADITYA BIRLA CAPITAL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3372545,13174,BALKRISIND-BL,BALKRISHNA IND.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2160129,8438,DATAPROINF-BE,DATAPROINFO - ROLL SETT,0.0,,0.0,0.05,1,EQ,NSE,NSE -7590401,29650,HUDCO-N7,BOND 7.19% PA TAX FREE S2,0.0,,0.0,0.01,1,EQ,NSE,NSE -3914497,15291,HERCULES-BL,HERCULES HOI.,0.0,,0.0,0.05,1,EQ,NSE,NSE -4365313,17052,HARITASEAT,HARITA SEATING SYS.,0.0,,0.0,0.05,1,EQ,NSE,NSE -3183361,12435,HERITGFOOD-BL,HERITAGE FOODS,0.0,,0.0,0.05,1,EQ,NSE,NSE -1806849,7058,HESTERBIO-BL,HESTER BIOSCIENCES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4895233,19122,HIGHGROUND-BE,HIGH GROUND ENTP,0.0,,0.0,0.05,1,EQ,NSE,NSE -3508225,13704,HINDZINC-BL,HINDUSTAN ZINC,0.0,,0.0,0.05,1,EQ,NSE,NSE -1804289,7048,HESTERBIO,HESTER BIOSCIENCES,0.0,,0.0,0.05,1,EQ,NSE,NSE -4894977,19121,HIGHGROUND-BL,HIGH GROUND ENTP,0.0,,0.0,0.05,1,EQ,NSE,NSE -3188225,12454,HIL-BL,HIL,0.0,,0.0,0.05,1,EQ,NSE,NSE -3745537,14631,HILTON-BE,HILTON METAL FORGING,0.0,,0.0,0.05,1,EQ,NSE,NSE -4593409,17943,HINDCOPPER-BE,HINDUSTAN COPPER,0.0,,0.0,0.05,1,EQ,NSE,NSE -4364801,17050,HINDNATGLS-BE,HIND NATL GLASS & IND,0.0,,0.0,0.05,1,EQ,NSE,NSE -4767233,18622,IBULHSGFIN-N7,SEC RED NCD SR. IV,0.0,,0.0,0.01,1,EQ,NSE,NSE -7589889,29648,HUDCO-N6,BOND 7.03% PA TAX FREE S1,0.0,,0.0,0.01,1,EQ,NSE,NSE -5110273,19962,HUDCO-NA,8.14% TAX FREETRI SR1A,0.0,,0.0,0.01,1,EQ,NSE,NSE -3790593,14807,HDIL-BE,HOUSING DEV & INFRA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3914753,15292,HERCULES-BE,HERCULES HOI.,0.0,,0.0,0.05,1,EQ,NSE,NSE -4774913,18652,ICICIPRULI,ICICI PRU LIFE INS CO,0.0,,0.0,0.05,1,EQ,NSE,NSE -3607041,14090,IGPL-BE,I G PETROCHEMICALS,0.0,,0.0,0.05,1,EQ,NSE,NSE -3606017,14086,IGPL,I G PETROCHEMICALS,0.0,,0.0,0.05,1,EQ,NSE,NSE -3718401,14525,ICRA-BL,ICRA,0.0,,0.0,0.05,1,EQ,NSE,NSE -3489793,13632,ICSA,ICSA (INDIA),0.0,,0.0,0.05,1,EQ,NSE,NSE -3189761,12460,IDBI-BL,IDBI BANK,0.0,,0.0,0.05,1,EQ,NSE,NSE -2795521,10920,IDFCBANK-NE,BOND 0% 2022 TR-3 SR-II,0.0,,0.0,0.01,1,EQ,NSE,NSE -2883073,11262,IGL,INDRAPRASTHA GAS,0.0,,0.0,0.05,1,EQ,NSE,NSE -5357825,20929,JALAN-SM,JALAN TRANSOLU. INDIA,0.0,,0.0,0.05,1,EQ,NSE,NSE -1388801,5425,JBFIND-BE,JBF INDUS -DEP-LS ML,0.0,,0.0,0.05,1,EQ,NSE,NSE -3083265,12044,JCHAC-BL,JOHNSON CONTROLS HITACHI,0.0,,0.0,0.05,1,EQ,NSE,NSE -3857153,15067,JCTEL-BL,JCT ELE.,0.0,,0.0,0.05,1,EQ,NSE,NSE -2997505,11709,JETAIRWAYS,JET AIRWAYS (INDIA),0.0,,0.0,0.05,1,EQ,NSE,NSE -3513089,13723,JHS-BE,JHS SVEND. LAB.,0.0,,0.0,0.05,1,EQ,NSE,NSE -3006209,11743,JINDALPHOT,JINDAL PHOTO,0.0,,0.0,0.05,1,EQ,NSE,NSE -4400641,17190,SHRIPISTON-BE,SHRIRAM PIST. & RING,0.0,,0.0,0.05,1,EQ,NSE,NSE -2122497,8291,SHRIYAMSEC-BE,SHRIYAM SEC & FIN,0.0,,0.0,0.05,1,EQ,NSE,NSE -510209,1993,IRFC-ND,BOND 8.44% PA TF TII-SIB,0.0,,0.0,0.01,1,EQ,NSE,NSE diff --git a/mock_responses/ltp.json b/mock_responses/ltp.json deleted file mode 100644 index 2dbc7b6..0000000 --- a/mock_responses/ltp.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "status": "success", - "data": { - "NSE:INFY": { - "instrument_token": 408065, - "last_price": 1074.35 - } - } -} diff --git a/mock_responses/margins.json b/mock_responses/margins.json deleted file mode 100644 index e2b9fa8..0000000 --- a/mock_responses/margins.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "status": "success", - "data": { - "equity": { - "enabled": true, - "net": 15481.524, - "available": { - "adhoc_margin": 0, - "cash": 9929.024, - "collateral": 5554.5, - "intraday_payin": 0 - }, - "utilised": { - "debits": 2, - "exposure": 0, - "m2m_realised": -2, - "m2m_unrealised": 0, - "option_premium": 0, - "payout": 0, - "span": 0, - "holding_sales": 0, - "turnover": 0 - } - }, - "commodity": { - "enabled": true, - "net": 29675.93, - "available": { - "adhoc_margin": 0, - "cash": 29249.93, - "collateral": 0, - "intraday_payin": 0 - }, - "utilised": { - "debits": -426, - "exposure": 0, - "m2m_realised": 426, - "m2m_unrealised": 0, - "option_premium": 0, - "payout": 0, - "span": 0, - "holding_sales": 0, - "turnover": 0 - } - } - } -} diff --git a/mock_responses/margins_equity.json b/mock_responses/margins_equity.json deleted file mode 100644 index 50c232b..0000000 --- a/mock_responses/margins_equity.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "status": "success", - "data": { - "enabled": true, - "net": 15481.524, - "available": { - "adhoc_margin": 0, - "cash": 9929.024, - "collateral": 5554.5, - "intraday_payin": 0 - }, - "utilised": { - "debits": 2, - "exposure": 0, - "m2m_realised": -2, - "m2m_unrealised": 0, - "option_premium": 0, - "payout": 0, - "span": 0, - "holding_sales": 0, - "turnover": 0 - } - } -} diff --git a/mock_responses/mf_holdings.json b/mock_responses/mf_holdings.json deleted file mode 100644 index 6ba40f0..0000000 --- a/mock_responses/mf_holdings.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "status": "success", - "data": [ - { - "folio": "123123/123", - "fund": "Kotak Select Focus Fund - Direct Plan", - "tradingsymbol": "INF174K01LS2", - "average_price": 30.729, - "last_price": 33.014, - "pnl": 594.769, - "last_price_date": "2016-11-11", - "quantity": 260.337 - }, - { - "folio": "385080203", - "fund": "DSP BlackRock Money Manager Fund", - "tradingsymbol": "INF740K01QQ3", - "average_price": 2146.131, - "last_price": 2277.0708, - "pnl": 61.018, - "quantity": 0.466 - }, - { - "folio": "1052046771", - "fund": "HDFC TaxSaver - Regular Plan", - "tradingsymbol": "INF179K01BB8", - "average_price": 345.849, - "last_price": 559.081, - "pnl": 61963.074, - "quantity": 290.59 - }, - { - "folio": "91022348426", - "fund": "Axis Long Term Equity Fund", - "tradingsymbol": "INF846K01131", - "average_price": 28.779, - "last_price": 41.3876, - "pnl": 44467.717, - "quantity": 3526.834 - }, - { - "folio": "488155267386", - "fund": "Reliance Money Manager Fund", - "tradingsymbol": "INF204K01EY0", - "average_price": 1002.948, - "last_price": 1007.5645, - "pnl": 2.304, - "quantity": 0.499 - } - ] -} diff --git a/mock_responses/mf_instruments.csv b/mock_responses/mf_instruments.csv deleted file mode 100644 index ec9e6fc..0000000 --- a/mock_responses/mf_instruments.csv +++ /dev/null @@ -1,100 +0,0 @@ -tradingsymbol,amc,name,purchase_allowed,redemption_allowed,minimum_purchase_amount,purchase_amount_multiplier,minimum_additional_purchase_amount,minimum_redemption_quantity,redemption_quantity_multiplier,dividend_type,scheme_type,plan,settlement_type,last_price,last_price_date -INF209K01157,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Advantage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,106.8,2017-11-23 -INF209K01165,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Advantage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,436.72,2017-11-23 -INF209K01VG0,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Advantage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,134.2,2017-11-23 -INF209K01VH8,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Advantage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,453.46,2017-11-23 -INF209K01BS7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced 95 Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,153.26,2017-11-23 -INF209K01BT5,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced 95 Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,758.0,2017-11-23 -INF209K01ZC0,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced 95 Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,796.56,2017-11-23 -INF209KA1LH3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced 95 Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,219.49,2017-11-23 -INF084M01AB8,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced Advantage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,balanced,regular,T3,50.46,2017-11-23 -INF084M01AC6,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced Advantage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,balanced,regular,T3,22.07,2017-11-23 -INF084M01DJ5,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced Advantage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,balanced,direct,T3,52.43,2017-11-23 -INF084M01DK3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Balanced Advantage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,balanced,direct,T3,23.0,2017-11-23 -INF209K010W9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking And Financial Services Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,19.62,2017-11-23 -INF209K011W7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking And Financial Services Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,27.94,2017-11-23 -INF209K013W3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking And Financial Services Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,24.55,2017-11-23 -INF209K014W1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking And Financial Services Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,28.99,2017-11-23 -INF209K01BE7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking and PSU Debt Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,9.9875,2017-11-23 -INF209K01BF4,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking and PSU Debt Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,49.8034,2017-11-23 -INF209K01YJ8,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking and PSU Debt Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,12.7089,2017-11-23 -INF209K01YK6,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking and PSU Debt Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,10.4884,2017-11-23 -INF209K01YL4,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Banking and PSU Debt Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,51.1321,2017-11-23 -INF209K01LQ0,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Cash Manager,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,408.9951,2017-11-23 -INF209K01XU7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Cash Manager - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,425.8148,2017-11-23 -INF209K01RU9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Cash Plus,1,1,5000.0,1.0,1000.0,0.001,0.001,growth,liquid,regular,T1,271.5949,2017-11-23 -INF209K01VA3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Cash Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,liquid,direct,T1,272.5712,2017-11-23 -INF209K01VD7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Cash Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,liquid,direct,T1,147.9867,2017-11-23 -INF209K01199,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Commodity Equities Fund - Global Agri Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T6,16.4009,2017-11-23 -INF209K01207,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Commodity Equities Fund - Global Agri Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T6,23.1229,2017-11-23 -INF209K01AH2,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Constant Maturity 10 Year Gilt Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,50.6235,2017-11-23 -INF209K01AI0,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Constant Maturity 10 Year Gilt Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,12.0695,2017-11-23 -INF209K01XS1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Constant Maturity 10 Year Gilt Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,50.998,2017-11-23 -INF209KA1K47,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Corporate Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,12.6521,2017-11-23 -INF209KA1K54,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Corporate Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,11.4171,2017-11-23 -INF209KA1K88,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Corporate Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,12.9524,2017-11-23 -INF209KA1K96,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Corporate Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,11.708,2017-11-23 -INF209K01397,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dividend Yield Plus,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,17.25,2017-11-23 -INF209K01405,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dividend Yield Plus,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,178.4,2017-11-23 -INF209K01Q55,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dividend Yield Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,26.66,2017-11-23 -INF209K01WA1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dividend Yield Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,185.33,2017-11-23 -INF209K01793,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,30.0556,2017-11-23 -INF209K01801,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,10.9249,2017-11-23 -INF209K01819,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,10.1744,2017-11-23 -INF209KA1TV7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T1,12.1802,2017-11-23 -INF209K01N82,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,30.8721,2017-11-23 -INF209K01R62,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,11.1149,2017-11-23 -INF209K01R88,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,10.4108,2017-11-23 -INF209KA1TX3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Dynamic Bond Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,12.4196,2017-11-23 -INF209K01256,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Enhanced Arbitrage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,10.8783,2017-11-23 -INF209K01264,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Enhanced Arbitrage Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,17.5067,2017-11-23 -INF209K01P80,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Enhanced Arbitrage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,11.0934,2017-11-23 -INF209K01VP1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Enhanced Arbitrage Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,17.9567,2017-11-23 -INF209K01AJ8,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,710.7,2017-11-23 -INF209K01AQ3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,104.58,2017-11-23 -INF209K01XX1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,742.17,2017-11-23 -INF209KA1TS3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Savings Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,13.1,2017-11-23 -INF209KA1TT1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Savings Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,11.64,2017-11-23 -INF209KA1TP9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Savings Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,13.54,2017-11-23 -INF209KA1TQ7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Equity Savings Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,12.27,2017-11-23 -INF084M01101,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Aggressive Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,fof,regular,T4,21.9919,2017-11-23 -INF084M01119,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Aggressive Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,fof,regular,T4,20.13,2017-11-23 -INF084M01044,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Conservative Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,fof,regular,T4,17.3032,2017-11-23 -INF084M01051,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Conservative Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,fof,regular,T4,15.744,2017-11-23 -INF084M01077,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Prudent Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,fof,regular,T4,19.0899,2017-11-23 -INF084M01085,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Financial Planning FoF Prudent Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,fof,regular,T4,17.1217,2017-11-23 -INF209K01MG9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Floating Rate Fund - Long Term Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,208.1037,2017-11-23 -INF209K01UX7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Floating Rate Fund - Long Term Plan - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,210.3858,2017-11-23 -INF209K01RV7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Floating Rate Fund - Short Term Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,liquid,regular,T1,225.569,2017-11-23 -INF209K01UU3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Floating Rate Fund - Short Term Plan - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,liquid,direct,T1,226.363,2017-11-23 -INF209K01BO6,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Frontline Equity Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,27.34,2017-11-23 -INF209K01BR9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Frontline Equity Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,217.34,2017-11-23 -INF209K01YX9,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Frontline Equity Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,50.73,2017-11-23 -INF209K01YY7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Frontline Equity Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,227.39,2017-11-23 -INF209K01AC3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,48.6101,2017-11-23 -INF209K01AD1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,48.6101,2017-11-23 -INF209K01AF6,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,10.1758,2017-11-23 -INF209K01XP7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,49.8019,2017-11-23 -INF209K01XQ5,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,49.8019,2017-11-23 -INF209KA1LC4,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gilt Plus - PF Plan - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,10.3855,2017-11-23 -INF209K01PF4,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gold Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,fof,regular,T3,9.5415,2017-11-23 -INF209K01PG2,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gold Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,fof,regular,T3,9.5402,2017-11-23 -INF209K01YT7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gold Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,fof,direct,T3,9.6571,2017-11-23 -INF209K01YU5,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Gold Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,fof,direct,T3,9.6609,2017-11-23 -INF209K01R13,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Income Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,13.3298,2017-11-23 -INF209K01WY1,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Income Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,direct,T1,78.7456,2017-11-23 -INF209KA1WL2,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Income Plus - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,direct,T1,11.621,2017-11-23 -INF209K01579,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Income Plus - Regular Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,debt,regular,T1,76.0586,2017-11-23 -INF209K01587,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Income Plus - Regular Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,debt,regular,T1,12.7941,2017-11-23 -INF209K01LA4,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Index Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,13.3014,2017-11-23 -INF209K01LB2,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Index Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,101.4926,2017-11-23 -INF209K01VX5,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Index Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,13.4709,2017-11-23 -INF209K01VY3,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life Index Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,101.6988,2017-11-23 -INF209K01439,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India GenNext Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,25.71,2017-11-23 -INF209K01447,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India GenNext Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,78.3,2017-11-23 -INF209K01Q63,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India GenNext Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,29.23,2017-11-23 -INF209K01WC7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India GenNext Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,82.08,2017-11-23 -INF209K01280,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India Opportunities Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,regular,T3,30.52,2017-11-23 -INF209K01298,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India Opportunities Fund,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,regular,T3,146.95,2017-11-23 -INF209K01P98,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India Opportunities Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,payout,equity,direct,T3,42.01,2017-11-23 -INF209K01VR7,BirlaSunLifeMutualFund_MF,Aditya Birla Sun Life India Opportunities Fund - Direct Plan,1,1,1000.0,1.0,1000.0,0.001,0.001,growth,equity,direct,T3,151.59,2017-11-23 diff --git a/mock_responses/mf_order_response.json b/mock_responses/mf_order_response.json deleted file mode 100644 index feb3d6a..0000000 --- a/mock_responses/mf_order_response.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "status": "success", - "data": { - "order_id": "123457", - "sip_id": "123457" - } - } \ No newline at end of file diff --git a/mock_responses/mf_orders.json b/mock_responses/mf_orders.json deleted file mode 100644 index 6062c1b..0000000 --- a/mock_responses/mf_orders.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "status": "success", - "data": [ - { - "order_id": "867688079445476", - "exchange_order_id": "", - "tradingsymbol": "INF174K01LS2", - "status": "CANCELLED", - "status_message": "", - "folio": "", - "fund": "Kotak Select Focus Fund - Direct Plan", - "order_timestamp": "2017-12-28 11:44", - "exchange_timestamp": "", - "settlement_id": "", - "transaction_type": "BUY", - "variety": "regular", - "purchase_type": "FRESH", - "quantity": 0, - "amount": 5000, - "last_price": 35.135, - "average_price": 0, - "placed_by": "DA0017", - "tag": "" - }, - { - "order_id": "396109826218232", - "exchange_order_id": "", - "tradingsymbol": "INF174K01LS2", - "status": "CANCELLED", - "status_message": "", - "folio": "", - "fund": "Kotak Select Focus Fund - Direct Plan", - "order_timestamp": "2017-12-28 11:40", - "exchange_timestamp": "", - "settlement_id": "", - "transaction_type": "BUY", - "variety": "regular", - "purchase_type": "FRESH", - "quantity": 0, - "amount": 5000, - "last_price": 35.135, - "average_price": 0, - "placed_by": "DA0017", - "tag": "" - } - ] -} diff --git a/mock_responses/mf_orders_info.json b/mock_responses/mf_orders_info.json deleted file mode 100644 index bc77860..0000000 --- a/mock_responses/mf_orders_info.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "status": "success", - "data": { - "order_id": "460687158435713", - "exchange_order_id": "", - "tradingsymbol": "INF174K01LS2", - "status": "CANCELLED", - "status_message": "", - "folio": "", - "fund": "Kotak Select Focus Fund - Direct Plan", - "order_timestamp": "2017-12-29 11:44", - "exchange_timestamp": "", - "settlement_id": "", - "transaction_type": "BUY", - "variety": "regular", - "purchase_type": "FRESH", - "quantity": 0, - "amount": 5000, - "last_price": 35.135, - "average_price": 0, - "placed_by": "DA0017", - "tag": "" - } -} diff --git a/mock_responses/mf_sip_info.json b/mock_responses/mf_sip_info.json deleted file mode 100644 index cdfbaf6..0000000 --- a/mock_responses/mf_sip_info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "status": "success", - "data": { - "sip_id": "1234", - "tradingsymbol": "INF090I01239", - "fund": "Franklin India Prima Plus", - "dividend_type": "growth", - "transaction_type": "BUY", - "status": "ACTIVE", - "created": "2016-01-01 13:00:00", - "frequency": "monthly", - "instalment_amount": 1000, - "instalments": -1, - "last_instalment": "2017-07-05 07:33:32", - "pending_instalments": -1, - "instalment_day": 5, - "tag": "" - } -} diff --git a/mock_responses/mf_sips.json b/mock_responses/mf_sips.json deleted file mode 100644 index 8a4ea20..0000000 --- a/mock_responses/mf_sips.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "status": "success", - "data": [{ - "sip_id": "1234", - "tradingsymbol": "INF090I01239", - "fund": "Franklin India Prima Plus", - "dividend_type": "growth", - "transaction_type": "BUY", - "status": "ACTIVE", - "created": "2016-01-01 13:00:00", - "frequency": "monthly", - "instalment_amount": 1000, - "instalments": -1, - "last_instalment": "2017-07-05 07:33:32", - "pending_instalments": -1, - "instalment_day": 5, - "tag": "" - }] -} diff --git a/mock_responses/ohlc.json b/mock_responses/ohlc.json deleted file mode 100644 index b4401f8..0000000 --- a/mock_responses/ohlc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "status": "success", - "data": { - "NSE:INFY": { - "instrument_token": 408065, - "last_price": 1075, - "ohlc": { - "open": 1085.8, - "high": 1085.9, - "low": 1070.9, - "close": 1075.8 - } - } - } -} diff --git a/mock_responses/order_info.json b/mock_responses/order_info.json deleted file mode 100644 index 05d9073..0000000 --- a/mock_responses/order_info.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "status": "success", - "data": [ - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": null, - "exchange_timestamp": null, - "filled_quantity": 0, - "instrument_token": 1, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:06:52", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "PUT ORDER REQ RECEIVED", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": null, - "exchange_timestamp": null, - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:06:52", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "VALIDATION PENDING", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": null, - "exchange_timestamp": null, - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:06:52", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "OPEN PENDING", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 11:06:52", - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:06:52", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "OPEN", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 11:06:52", - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:08:16", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "MODIFY VALIDATION PENDING", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 11:06:52", - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:08:16", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "MODIFY PENDING", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 11:08:16", - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:08:16", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300, - "product": "CNC", - "quantity": 1, - "status": "MODIFIED", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - }, - { - "average_price": 0, - "cancelled_quantity": 0, - "disclosed_quantity": 0, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 11:08:16", - "filled_quantity": 0, - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "2017-12-29 11:08:16", - "order_type": "LIMIT", - "parent_order_id": null, - "pending_quantity": 1, - "placed_by": "DA0017", - "price": 300.1, - "product": "CNC", - "quantity": 1, - "status": "OPEN", - "status_message": null, - "tag": null, - "tradingsymbol": "SBIN", - "transaction_type": "BUY", - "trigger_price": 0, - "validity": "DAY", - "variety": "regular" - } - ] - } diff --git a/mock_responses/order_margins.json b/mock_responses/order_margins.json deleted file mode 100644 index b4526d7..0000000 --- a/mock_responses/order_margins.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "status": "success", - "data": [ - { - "type": "equity", - "tradingsymbol": "INFY", - "exchange": "NSE", - "span": 0, - "exposure": 0, - "option_premium": 0, - "additional": 0, - "bo": 0, - "cash": 0, - "var": 961.45, - "pnl": { - "realised": 0, - "unrealised": 0 - }, - "total": 961.45 - } - ] -} diff --git a/mock_responses/order_response.json b/mock_responses/order_response.json deleted file mode 100644 index 334b163..0000000 --- a/mock_responses/order_response.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "status": "success", - "data": { - "order_id": "151220000000000" - } - } \ No newline at end of file diff --git a/mock_responses/order_trades.json b/mock_responses/order_trades.json deleted file mode 100644 index ded3a44..0000000 --- a/mock_responses/order_trades.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "status": "success", - "data": [ - { - "average_price": 310.7, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 12:02:05", - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "12:02:05", - "product": "CNC", - "quantity": 1, - "trade_id": "75894751", - "tradingsymbol": "SBIN", - "transaction_type": "BUY" - } - ] -} diff --git a/mock_responses/orders.json b/mock_responses/orders.json deleted file mode 100644 index 42ef31b..0000000 --- a/mock_responses/orders.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "status": "success", - "data": [ - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228000850038", - "exchange_order_id": "211736200053802", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 11:39:14", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 11:39:14", - "meta": {}, - "rejected_by": "", - "variety": "regular", - "exchange": "MCX", - "tradingsymbol": "GOLDGUINEA17DECFUT", - "instrument_token": 53505799, - "order_type": "LIMIT", - "transaction_type": "SELL", - "validity": "DAY", - "product": "NRML", - "quantity": 3, - "disclosed_quantity": 0, - "price": 23337, - "trigger_price": 0, - "average_price": 23337, - "filled_quantity": 3, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228000912853", - "exchange_order_id": "1300000002730006", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 12:09:31", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 12:00:28", - "meta": {}, - "rejected_by": "", - "variety": "co", - "exchange": "NSE", - "tradingsymbol": "SBIN", - "instrument_token": 779521, - "order_type": "LIMIT", - "transaction_type": "BUY", - "validity": "DAY", - "product": "CO", - "quantity": 1, - "disclosed_quantity": 0, - "price": 311, - "trigger_price": 0, - "average_price": 311, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228001116651", - "exchange_order_id": "211736200111089", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 13:08:49", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 13:08:49", - "meta": {}, - "rejected_by": "", - "variety": "regular", - "exchange": "MCX", - "tradingsymbol": "GOLDGUINEA17DECFUT", - "instrument_token": 53505799, - "order_type": "LIMIT", - "transaction_type": "BUY", - "validity": "DAY", - "product": "NRML", - "quantity": 1, - "disclosed_quantity": 0, - "price": 23388, - "trigger_price": 0, - "average_price": 23388, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228000912854", - "exchange_order_id": "1300000002730007", - "parent_order_id": "171228000912853", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 15:00:40", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 15:00:40", - "meta": {}, - "rejected_by": "", - "variety": "co", - "exchange": "NSE", - "tradingsymbol": "SBIN", - "instrument_token": 779521, - "order_type": "LIMIT", - "transaction_type": "SELL", - "validity": "DAY", - "product": "CO", - "quantity": 1, - "disclosed_quantity": 0, - "price": 0, - "trigger_price": 309, - "average_price": 309, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228001686586", - "exchange_order_id": "211736200181323", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 15:28:56", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 15:28:56", - "meta": {}, - "rejected_by": "", - "variety": "regular", - "exchange": "MCX", - "tradingsymbol": "GOLDGUINEA17DECFUT", - "instrument_token": 53505799, - "order_type": "LIMIT", - "transaction_type": "SELL", - "validity": "DAY", - "product": "NRML", - "quantity": 1, - "disclosed_quantity": 0, - "price": 23349, - "trigger_price": 0, - "average_price": 23349, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228001730092", - "exchange_order_id": "211736200297236", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 19:28:27", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 19:28:27", - "meta": {}, - "rejected_by": "", - "variety": "regular", - "exchange": "MCX", - "tradingsymbol": "LEADMINI17DECFUT", - "instrument_token": 53496327, - "order_type": "LIMIT", - "transaction_type": "BUY", - "validity": "DAY", - "product": "NRML", - "quantity": 1, - "disclosed_quantity": 0, - "price": 161.05, - "trigger_price": 0, - "average_price": 161.05, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - }, - { - "account_id": "", - "placed_by": "DA0017", - "order_id": "171228001731490", - "exchange_order_id": "211736200302177", - "parent_order_id": "", - "status": "COMPLETE", - "status_message": "", - "order_timestamp": "2017-12-28 19:37:12", - "exchange_update_timestamp": "", - "exchange_timestamp": "2017-12-28 19:37:12", - "meta": {}, - "rejected_by": "", - "variety": "regular", - "exchange": "MCX", - "tradingsymbol": "LEADMINI17DECFUT", - "instrument_token": 53496327, - "order_type": "LIMIT", - "transaction_type": "SELL", - "validity": "DAY", - "product": "NRML", - "quantity": 1, - "disclosed_quantity": 0, - "price": 161.2, - "trigger_price": 0, - "average_price": 161.2, - "filled_quantity": 1, - "pending_quantity": 0, - "cancelled_quantity": 0 - } - ] -} diff --git a/mock_responses/positions.json b/mock_responses/positions.json deleted file mode 100644 index 190e42a..0000000 --- a/mock_responses/positions.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "status": "success", - "data": { - "net": [ - { - "tradingsymbol": "LEADMINI17DECFUT", - "exchange": "MCX", - "instrument_token": 53496327, - "product": "NRML", - "quantity": 1, - "overnight_quantity": 0, - "multiplier": 1000, - "average_price": 161.05, - "close_price": 0, - "last_price": 161.05, - "value": -161050, - "pnl": 0, - "m2m": 0, - "unrealised": 0, - "realised": 0, - "buy_quantity": 1, - "buy_price": 161.05, - "buy_value": 161050, - "buy_m2m": 161050, - "sell_quantity": 0, - "sell_price": 0, - "sell_value": 0, - "sell_m2m": 0, - "day_buy_quantity": 1, - "day_buy_price": 161.05, - "day_buy_value": 161050, - "day_sell_quantity": 0, - "day_sell_price": 0, - "day_sell_value": 0 - }, - { - "tradingsymbol": "GOLDGUINEA17DECFUT", - "exchange": "MCX", - "instrument_token": 53505799, - "product": "NRML", - "quantity": 0, - "overnight_quantity": 3, - "multiplier": 1, - "average_price": 0, - "close_price": 23232, - "last_price": 23355, - "value": 801, - "pnl": 801, - "m2m": 276, - "unrealised": 801, - "realised": 0, - "buy_quantity": 4, - "buy_price": 23139.75, - "buy_value": 92559, - "buy_m2m": 93084, - "sell_quantity": 4, - "sell_price": 23340, - "sell_value": 93360, - "sell_m2m": 93360, - "day_buy_quantity": 1, - "day_buy_price": 23388, - "day_buy_value": 23388, - "day_sell_quantity": 4, - "day_sell_price": 23340, - "day_sell_value": 93360 - }, - { - "tradingsymbol": "SBIN", - "exchange": "NSE", - "instrument_token": 779521, - "product": "CO", - "quantity": 0, - "overnight_quantity": 0, - "multiplier": 1, - "average_price": 0, - "close_price": 0, - "last_price": 308.4, - "value": -2, - "pnl": -2, - "m2m": -2, - "unrealised": -2, - "realised": 0, - "buy_quantity": 1, - "buy_price": 311, - "buy_value": 311, - "buy_m2m": 311, - "sell_quantity": 1, - "sell_price": 309, - "sell_value": 309, - "sell_m2m": 309, - "day_buy_quantity": 1, - "day_buy_price": 311, - "day_buy_value": 311, - "day_sell_quantity": 1, - "day_sell_price": 309, - "day_sell_value": 309 - } - ], - "day": [ - { - "tradingsymbol": "GOLDGUINEA17DECFUT", - "exchange": "MCX", - "instrument_token": 53505799, - "product": "NRML", - "quantity": -3, - "overnight_quantity": 0, - "multiplier": 1, - "average_price": 23340, - "close_price": 23232, - "last_price": 23355, - "value": 69972, - "pnl": -93, - "m2m": -93, - "unrealised": -93, - "realised": 0, - "buy_quantity": 1, - "buy_price": 23388, - "buy_value": 23388, - "buy_m2m": 23388, - "sell_quantity": 4, - "sell_price": 23340, - "sell_value": 93360, - "sell_m2m": 93360, - "day_buy_quantity": 1, - "day_buy_price": 23388, - "day_buy_value": 23388, - "day_sell_quantity": 4, - "day_sell_price": 23340, - "day_sell_value": 93360 - }, - { - "tradingsymbol": "LEADMINI17DECFUT", - "exchange": "MCX", - "instrument_token": 53496327, - "product": "NRML", - "quantity": 1, - "overnight_quantity": 0, - "multiplier": 1000, - "average_price": 161.05, - "close_price": 0, - "last_price": 161.05, - "value": -161050, - "pnl": 0, - "m2m": 0, - "unrealised": 0, - "realised": 0, - "buy_quantity": 1, - "buy_price": 161.05, - "buy_value": 161050, - "buy_m2m": 161050, - "sell_quantity": 0, - "sell_price": 0, - "sell_value": 0, - "sell_m2m": 0, - "day_buy_quantity": 1, - "day_buy_price": 161.05, - "day_buy_value": 161050, - "day_sell_quantity": 0, - "day_sell_price": 0, - "day_sell_value": 0 - }, - { - "tradingsymbol": "SBIN", - "exchange": "NSE", - "instrument_token": 779521, - "product": "CO", - "quantity": 0, - "overnight_quantity": 0, - "multiplier": 1, - "average_price": 0, - "close_price": 0, - "last_price": 308.4, - "value": -2, - "pnl": -2, - "m2m": -2, - "unrealised": -2, - "realised": 0, - "buy_quantity": 1, - "buy_price": 311, - "buy_value": 311, - "buy_m2m": 311, - "sell_quantity": 1, - "sell_price": 309, - "sell_value": 309, - "sell_m2m": 309, - "day_buy_quantity": 1, - "day_buy_price": 311, - "day_buy_value": 311, - "day_sell_quantity": 1, - "day_sell_price": 309, - "day_sell_value": 309 - } - ] - } -} diff --git a/mock_responses/profile.json b/mock_responses/profile.json deleted file mode 100644 index ae210a7..0000000 --- a/mock_responses/profile.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "status": "success", - "data": { - "user_type": "investor", - "email": "xxxyyy@gmail.com", - "user_name": "AxAx Bxx", - "user_shortname": "abc", - "broker": "ZERODHA", - "exchanges": [ - "BSE", - "BFO", - "NFO", - "MCX", - "CDS", - "NSE" - ], - "products": [ - "BO", - "CNC", - "CO", - "MIS", - "NRML" - ], - "order_types": [ - "LIMIT", - "MARKET", - "SL", - "SL-M" - ] - } -} diff --git a/mock_responses/quote.json b/mock_responses/quote.json deleted file mode 100644 index 05079a1..0000000 --- a/mock_responses/quote.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "status": "success", - "data": { - "NSE:INFY": { - "instrument_token": 408065, - "timestamp": "2018-01-12 10:40:29", - "last_price": 1074.8, - "last_quantity": 55, - "last_trade_time": "2018-01-12 10:40:28", - "average_price": 1077.03, - "volume": 1368065, - "buy_quantity": 240020, - "sell_quantity": 509481, - "ohlc": { - "open": 1085.8, - "high": 1085.9, - "low": 1070.9, - "close": 1075.8 - }, - "net_change": 0, - "oi": 0, - "oi_day_high": 0, - "oi_day_low": 0, - "depth": { - "buy": [ - { - "price": 1074.8, - "quantity": 35, - "orders": 1 - }, - { - "price": 1074.65, - "quantity": 5, - "orders": 1 - }, - { - "price": 1074.6, - "quantity": 14, - "orders": 1 - }, - { - "price": 1074.5, - "quantity": 1529, - "orders": 3 - }, - { - "price": 1074.45, - "quantity": 139, - "orders": 1 - } - ], - "sell": [ - { - "price": 1074.85, - "quantity": 32, - "orders": 1 - }, - { - "price": 1075, - "quantity": 1264, - "orders": 18 - }, - { - "price": 1075.1, - "quantity": 14, - "orders": 1 - }, - { - "price": 1075.2, - "quantity": 600, - "orders": 1 - }, - { - "price": 1075.25, - "quantity": 22, - "orders": 2 - } - ] - } - } - } -} diff --git a/mock_responses/trades.json b/mock_responses/trades.json deleted file mode 100644 index c5a0950..0000000 --- a/mock_responses/trades.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "status": "success", - "data": [ - { - "average_price": 310.7, - "exchange": "NSE", - "exchange_order_id": "1300000001887410", - "exchange_timestamp": "2017-12-29 12:02:05", - "instrument_token": 779521, - "order_id": "171229000724687", - "order_timestamp": "12:02:05", - "product": "CNC", - "quantity": 1, - "trade_id": "75894751", - "tradingsymbol": "SBIN", - "transaction_type": "BUY" - } - ] - } diff --git a/mock_responses/trigger_range.json b/mock_responses/trigger_range.json deleted file mode 100644 index f84ba5c..0000000 --- a/mock_responses/trigger_range.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "status": "success", - "data": { - "NSE:INFY": { - "instrument_token": 0, - "lower": 1075.599, - "upper": 1138.2 - }, - "NSE:RELIANCE": { - "instrument_token": 0, - "lower": 870.57475, - "upper": 902.15 - } - } -} From 34178e3d0026ec15bb1e92ea3a2686dfe9dcb01d Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 28 May 2021 18:05:09 +0530 Subject: [PATCH 018/103] chore: switch mock_responses to submodule --- .gitmodules | 3 +++ mock_responses | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 mock_responses diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bb5989c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "mock_responses"] + path = mock_responses + url = https://github.com/zerodha/kiteconnect-mocks diff --git a/mock_responses b/mock_responses new file mode 160000 index 0000000..52a8114 --- /dev/null +++ b/mock_responses @@ -0,0 +1 @@ +Subproject commit 52a81143af2d31757108b458676eab43b1e607b8 From 4638eb054b2efc9bce837bb880ce89f9a26390a3 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 1 Jun 2021 10:39:04 +0530 Subject: [PATCH 019/103] fix: missing tags in order response Closes #34 --- go.mod | 1 + go.sum | 11 +++++++++++ mock_responses | 2 +- orders.go | 7 +++++-- orders_test.go | 15 +++++++++++---- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index ff62564..feb45b2 100644 --- a/go.mod +++ b/go.mod @@ -6,5 +6,6 @@ require ( github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 github.com/google/go-querystring v1.0.0 github.com/gorilla/websocket v1.4.0 + github.com/stretchr/testify v1.7.0 gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 ) diff --git a/go.sum b/go.sum index bfefd47..3ad10e6 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,19 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 h1:IlBbYij72r3CoD3fKTbP5jD0NJjrvemKsaxkW/QUdGE= github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36/go.mod h1:/oj50ZdPq/cUjA02lMZhijk5kR31SEydKyqah1OgBuo= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 h1:30DLrQoRqdUHslVMzxuKUnY4GKJGk1/FJtKy3yx4TKE= gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32/go.mod h1:d3R+NllX3X5e0zlG1Rful3uLvsGC/Q3OHut5464DEQw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/mock_responses b/mock_responses index 52a8114..8d184f2 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 52a81143af2d31757108b458676eab43b1e607b8 +Subproject commit 8d184f26f8967fae065ed717fb6b0ffa8367e1a4 diff --git a/orders.go b/orders.go index 6db7ff1..f4a62a7 100644 --- a/orders.go +++ b/orders.go @@ -18,12 +18,12 @@ type Order struct { ParentOrderID string `json:"parent_order_id"` Status string `json:"status"` StatusMessage string `json:"status_message"` + StatusMessageRaw string `json:"status_message_raw"` OrderTimestamp Time `json:"order_timestamp"` ExchangeUpdateTimestamp Time `json:"exchange_update_timestamp"` ExchangeTimestamp Time `json:"exchange_timestamp"` - Meta map[string]interface{} `json:"meta"` - RejectedBy string `json:"rejected_by"` Variety string `json:"variety"` + Meta map[string]interface{} `json:"meta"` Exchange string `json:"exchange"` TradingSymbol string `json:"tradingsymbol"` @@ -42,6 +42,9 @@ type Order struct { FilledQuantity float64 `json:"filled_quantity"` PendingQuantity float64 `json:"pending_quantity"` CancelledQuantity float64 `json:"cancelled_quantity"` + + Tag string `json:"tag"` + Tags []string `json:"tags"` } // Orders is a list of orders. diff --git a/orders_test.go b/orders_test.go index e395cb6..e928cf4 100644 --- a/orders_test.go +++ b/orders_test.go @@ -2,6 +2,8 @@ package kiteconnect import ( "testing" + + "github.com/stretchr/testify/require" ) func (ts *TestSuite) TestGetOrders(t *testing.T) { @@ -10,11 +12,16 @@ func (ts *TestSuite) TestGetOrders(t *testing.T) { if err != nil { t.Errorf("Error while fetching orders. %v", err) } - for _, order := range orders { - if order.OrderID == "" { - t.Errorf("Error while fetching order id in orders. %v", err) + t.Run("test empty/unparsed orders", func(t *testing.T) { + for _, order := range orders { + require.NotEqual(t, "", order.OrderID) } - } + }) + t.Run("test tag parsing", func(t *testing.T) { + require.Equal(t, "", orders[0].Tag) + require.Equal(t, "connect test order1", orders[3].Tag) + require.Equal(t, []string{"connect test order2", "XXXXX"}, orders[4].Tags) + }) } func (ts *TestSuite) TestGetTrades(t *testing.T) { From 7837e2a914ae838460e329ec6825764944571041 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 1 Jun 2021 10:45:07 +0530 Subject: [PATCH 020/103] feat: add github actions, remove travis --- .github/workflows/go-test.yml | 33 +++++++++++++++++++++++++++++++++ .travis.yml | 10 ---------- 2 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/go-test.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml new file mode 100644 index 0000000..0ecea89 --- /dev/null +++ b/.github/workflows/go-test.yml @@ -0,0 +1,33 @@ +name: Go Test + +on: + push: + branches: [master, develop] + pull_request: + branches: [master, develop] + +jobs: + test: + ## We want to define a strategy for our job + strategy: + ## this will contain a matrix of all of the combinations + ## we wish to test again: + matrix: + go-version: [1.13.x, 1.14.x, 1.15.x, 1.16.x] + platform: [ubuntu-latest, macos-latest, windows-latest] + + ## Defines the platform for each test run + runs-on: ${{ matrix.platform }} + + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.15 + + - name: Run Go Test + run: go test -v ./... diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 56352f3..0000000 --- a/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: go -go: - - 1.9.x - - 1.10.x - - 1.11.x - - 1.12.x - - 1.13.x - -install: go get -t -v . -script: go test -v -cover . From 930e9715bc0dfdaef6d740b5968d767b78214978 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 1 Jun 2021 12:21:13 +0530 Subject: [PATCH 021/103] tests: added tests for historical data with OI Closes #32 --- connect_test.go | 2 ++ market_test.go | 14 ++++++++++++++ mock_responses | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/connect_test.go b/connect_test.go index 389e8f2..efe2fb8 100644 --- a/connect_test.go +++ b/connect_test.go @@ -18,6 +18,7 @@ import ( const ( uriGetInstrumentsExchangeTest string = "/instruments/nse" uriGetHistoricalTest string = "/instruments/historical/123/myinterval" + uriGetHistoricalWithOITest string = "/instruments/historical/456/myinterval" ) // Test New Kite Connect instance @@ -132,6 +133,7 @@ var MockResponders = [][]string{ []string{http.MethodGet, URIGetMFInstruments, "mf_instruments.csv"}, []string{http.MethodGet, uriGetInstrumentsExchangeTest, "instruments_nse.csv"}, []string{http.MethodGet, uriGetHistoricalTest, "historical_minute.json"}, + []string{http.MethodGet, uriGetHistoricalWithOITest, "historical_oi.json"}, []string{http.MethodGet, URIGetTriggerRange, "trigger_range.json"}, []string{http.MethodGet, URIGetQuote, "quote.json"}, []string{http.MethodGet, URIGetLTP, "ltp.json"}, diff --git a/market_test.go b/market_test.go index 6d566dc..3dafb45 100644 --- a/market_test.go +++ b/market_test.go @@ -3,6 +3,8 @@ package kiteconnect import ( "testing" "time" + + "github.com/stretchr/testify/require" ) func (ts *TestSuite) TestGetQuote(t *testing.T) { @@ -52,6 +54,18 @@ func (ts *TestSuite) TestGetHistoricalData(t *testing.T) { } } +func (ts *TestSuite) TestGetHistoricalDataWithOI(t *testing.T) { + t.Parallel() + marketHistorical, err := ts.KiteConnect.GetHistoricalData(456, "myinterval", time.Unix(0, 0), time.Unix(1, 0), true, true) + require.Nil(t, err) + require.Equal(t, 6, len(marketHistorical)) + + for i := 0; i < len(marketHistorical)-1; i++ { + require.Greater(t, marketHistorical[i+1].Date.Unix(), marketHistorical[i].Date.Unix()) + require.NotEqual(t, marketHistorical[i].OI, 0) + } +} + func (ts *TestSuite) TestGetOHLC(t *testing.T) { t.Parallel() marketOHLC, err := ts.KiteConnect.GetOHLC() diff --git a/mock_responses b/mock_responses index 8d184f2..57def58 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 8d184f26f8967fae065ed717fb6b0ffa8367e1a4 +Subproject commit 57def58fbfea9c5e898346d9ce3211d1f499857d From 023b857b2e167589e06dc0f914cbbf8438c7794c Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 8 Jun 2021 18:03:29 +0530 Subject: [PATCH 022/103] fix: update module name to match repo url Closes #38 --- CHANGELOG.md | 71 ---------------------------- README.md | 13 +++-- examples/connect/advanced/connect.go | 2 +- examples/connect/basic/connect.go | 2 +- examples/connect/gtt/connect.go | 2 +- examples/ticker/ticker.go | 4 +- go.mod | 2 +- ticker/ticker.go | 2 +- 8 files changed, 13 insertions(+), 85 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 2ade13e..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,71 +0,0 @@ - -## [Unreleased] - - - -## [v3.1.0] - 2019-09-09 -### Chore -- update examples and changelog -- modify examples -- add go 1.11 to travis config - -### Feat -- implement gtt orders api -- add models for gtt - -### Fix -- travis config, update go versions -- change type of instrument token in orders response struct to uint32 -- access token and api key getting appended multiple times in ticker -- ticker SetRootURL() method didn't set root URL - -### Test -- fix test for Cancel Order - -### Tests -- update test package, gtt tests - -### Pull Requests -- Merge pull request [#11](https://github.com/zerodhatech/gokiteconnect/issues/11) from rhnvrm/master -- Merge pull request [#10](https://github.com/zerodhatech/gokiteconnect/issues/10) from rhnvrm/master - - - -## v3.0.0 - 2018-09-03 -### Chore -- add travis ci config - -### Connect_test -- Refactor setting up mock responders - -### Feat -- convert package to go module -- fix tests and make struct members of instrument public - -### Fix -- fix goversion in travis -- add custom go get command in travis -- travis config -- remove models.PlainResponse from user and portfolio calls - -### Refactor -- calculate depthitem info -- minor cosmetic change - -### Test -- added tests for errors - -### Tests -- market - -### Pull Requests -- Merge pull request [#7](https://github.com/zerodhatech/gokiteconnect/issues/7) from zerodhatech/gomod -- Merge pull request [#5](https://github.com/zerodhatech/gokiteconnect/issues/5) from rhnvrm/markettest -- Merge pull request [#4](https://github.com/zerodhatech/gokiteconnect/issues/4) from rhnvrm/errors_test -- Merge pull request [#3](https://github.com/zerodhatech/gokiteconnect/issues/3) from rhnvrm/master -- Merge pull request [#1](https://github.com/zerodhatech/gokiteconnect/issues/1) from mr-karan/tests -- Merge pull request [#2](https://github.com/zerodhatech/gokiteconnect/issues/2) from zerodhatech/travis - - -[Unreleased]: https://github.com/zerodhatech/gokiteconnect/compare/v3.1.0...HEAD -[v3.1.0]: https://github.com/zerodhatech/gokiteconnect/compare/v3.0.0...v3.1.0 diff --git a/README.md b/README.md index fadf3e9..f282fd8 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,13 @@ Zerodha Technology (c) 2018. Licensed under the MIT License. ## Documentation -- [Client API documentation - GoDoc](https://godoc.org/github.com/zerodhatech/gokiteconnect) +- [Client API documentation - GoDoc](https://godoc.org/github.com/zerodha/gokiteconnect) - [Kite Connect HTTP API documentation](https://kite.trade/docs/connect/v3) ## Installation ``` -go get github.com/zerodhatech/gokiteconnect/v3 +go get github.com/zerodha/gokiteconnect/v3 ``` ## API usage @@ -28,7 +28,7 @@ package main import ( "fmt" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v3" ) const ( @@ -74,8 +74,8 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" - "github.com/zerodhatech/gokiteconnect/v3/ticker" + kiteconnect "github.com/zerodha/gokiteconnect/v3" + "github.com/zerodha/gokiteconnect/v3/ticker" ) var ( @@ -144,7 +144,7 @@ func main() { # Examples -Check [examples folder](https://github.com/zerodhatech/gokiteconnect/tree/master/examples) for more examples. +Check [examples folder](https://github.com/zerodha/gokiteconnect/tree/master/examples) for more examples. You can run the following after updating the API Keys in the examples: @@ -161,4 +161,3 @@ go test -v ## Changelog [Check CHANGELOG.md](CHANGELOG.md) - diff --git a/examples/connect/advanced/connect.go b/examples/connect/advanced/connect.go index 4f201ee..0156953 100644 --- a/examples/connect/advanced/connect.go +++ b/examples/connect/advanced/connect.go @@ -6,7 +6,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v3" ) const ( diff --git a/examples/connect/basic/connect.go b/examples/connect/basic/connect.go index 80498e2..2a040e3 100644 --- a/examples/connect/basic/connect.go +++ b/examples/connect/basic/connect.go @@ -3,7 +3,7 @@ package main import ( "fmt" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v3" ) const ( diff --git a/examples/connect/gtt/connect.go b/examples/connect/gtt/connect.go index b842b7e..6ae8edc 100644 --- a/examples/connect/gtt/connect.go +++ b/examples/connect/gtt/connect.go @@ -5,7 +5,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v3" ) const ( diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index bbd1cf4..a1932f4 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -4,8 +4,8 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" - kiteticker "github.com/zerodhatech/gokiteconnect/v3/ticker" + kiteconnect "github.com/zerodha/gokiteconnect/v3" + kiteticker "github.com/zerodha/gokiteconnect/v3/ticker" ) const ( diff --git a/go.mod b/go.mod index feb45b2..260ceb7 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/zerodhatech/gokiteconnect/v3 +module github.com/zerodha/gokiteconnect/v3 go 1.14 diff --git a/ticker/ticker.go b/ticker/ticker.go index 3602763..78df370 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -11,7 +11,7 @@ import ( "time" "github.com/gorilla/websocket" - kiteconnect "github.com/zerodhatech/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v3" ) // OHLC represents OHLC packets. From 677801f1be0babc48521737ac5b97d46e61871ae Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 14 Jun 2021 19:01:19 +0530 Subject: [PATCH 023/103] chore: update mock_responses --- mock_responses | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_responses b/mock_responses index 57def58..4c95c35 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 57def58fbfea9c5e898346d9ce3211d1f499857d +Subproject commit 4c95c3505b711586f658295bcbee028b9627dd48 From 164a25e432a4401337b78ab12517a7c1b42375dc Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 14 Jun 2021 19:01:43 +0530 Subject: [PATCH 024/103] fix: change qty from string->int in pos conversion --- portfolio.go | 2 +- portfolio_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/portfolio.go b/portfolio.go index 88d3f46..fca4071 100644 --- a/portfolio.go +++ b/portfolio.go @@ -87,7 +87,7 @@ type ConvertPositionParams struct { NewProduct string `url:"new_product"` PositionType string `url:"position_type"` TransactionType string `url:"transaction_type"` - Quantity string `url:"quantity"` + Quantity int `url:"quantity"` } // GetHoldings gets a list of holdings. diff --git a/portfolio_test.go b/portfolio_test.go index 205ad64..e9b101a 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -50,7 +50,7 @@ func (ts *TestSuite) TestConvertPosition(t *testing.T) { NewProduct: "test", PositionType: "test", TransactionType: "test", - Quantity: "test", + Quantity: 1, } response, err := ts.KiteConnect.ConvertPosition(params) if err != nil || response != true { From 39fad36b8f8ed273db28be3c6b07cb27f9095d8d Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 16 Jun 2021 15:43:16 +0530 Subject: [PATCH 025/103] feat: models package This commit adds a models package to gokiteconnect which holds two refactored out models. - Time model contained in utils - Ticker models This streamlines the multiple implementations between kiteconnect and ticker packages. Closes #30 --- examples/ticker/ticker.go | 3 +- gtt.go | 8 +- market.go | 126 +++++++++++---------------- models/snaps.go | 49 +++++++++++ utils.go => models/time.go | 2 +- utils_test.go => models/time_test.go | 2 +- mutualfunds.go | 63 +++++++------- orders.go | 31 +++---- ticker/ticker.go | 101 +++++---------------- user.go | 8 +- 10 files changed, 188 insertions(+), 205 deletions(-) create mode 100644 models/snaps.go rename utils.go => models/time.go (98%) rename utils_test.go => models/time_test.go (98%) diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index a1932f4..ed3ef6d 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -5,6 +5,7 @@ import ( "time" kiteconnect "github.com/zerodha/gokiteconnect/v3" + kitemodels "github.com/zerodha/gokiteconnect/v3/models" kiteticker "github.com/zerodha/gokiteconnect/v3/ticker" ) @@ -37,7 +38,7 @@ func onConnect() { } // Triggered when tick is recevived -func onTick(tick kiteticker.Tick) { +func onTick(tick kitemodels.Tick) { fmt.Println("Tick: ", tick) } diff --git a/gtt.go b/gtt.go index cc6769e..7b7ff87 100644 --- a/gtt.go +++ b/gtt.go @@ -5,6 +5,8 @@ import ( "fmt" "net/http" "net/url" + + "github.com/zerodha/gokiteconnect/v3/models" ) // GTTType represents the available GTT order types. @@ -40,9 +42,9 @@ type GTT struct { ID int `json:"id"` UserID string `json:"user_id"` Type GTTType `json:"type" url:""` - CreatedAt Time `json:"created_at"` - UpdatedAt Time `json:"updated_at"` - ExpiresAt Time `json:"expires_at"` + CreatedAt models.Time `json:"created_at"` + UpdatedAt models.Time `json:"updated_at"` + ExpiresAt models.Time `json:"expires_at"` Status string `json:"status"` Condition GTTCondition `json:"condition"` Orders []Order `json:"orders"` diff --git a/market.go b/market.go index 248320a..1517814 100644 --- a/market.go +++ b/market.go @@ -8,6 +8,7 @@ import ( "github.com/gocarina/gocsv" "github.com/google/go-querystring/query" + "github.com/zerodha/gokiteconnect/v3/models" ) type quoteParams struct { @@ -16,51 +17,30 @@ type quoteParams struct { // Quote represents the full quote response. type Quote map[string]struct { - InstrumentToken int `json:"instrument_token"` - Timestamp Time `json:"timestamp"` - LastPrice float64 `json:"last_price"` - LastQuantity int `json:"last_quantity"` - LastTradeTime Time `json:"last_trade_time"` - AveragePrice float64 `json:"average_price"` - Volume int `json:"volume"` - BuyQuantity int `json:"buy_quantity"` - SellQuantity int `json:"sell_quantity"` - OHLC struct { - Open float64 `json:"open"` - High float64 `json:"high"` - Low float64 `json:"low"` - Close float64 `json:"close"` - } `json:"ohlc"` - NetChange float64 `json:"net_change"` - OI float64 `json:"oi"` - OIDayHigh float64 `json:"oi_day_high"` - OIDayLow float64 `json:"oi_day_low"` - LowerCircuitLimit float64 `json:"lower_circuit_limit"` - UpperCircuitLimit float64 `json:"upper_circuit_limit"` - Depth struct { - Buy []struct { - Price float64 `json:"price"` - Quantity int `json:"quantity"` - Orders int `json:"orders"` - } `json:"buy"` - Sell []struct { - Price float64 `json:"price"` - Quantity int `json:"quantity"` - Orders int `json:"orders"` - } `json:"sell"` - } `json:"depth"` + InstrumentToken int `json:"instrument_token"` + Timestamp models.Time `json:"timestamp"` + LastPrice float64 `json:"last_price"` + LastQuantity int `json:"last_quantity"` + LastTradeTime models.Time `json:"last_trade_time"` + AveragePrice float64 `json:"average_price"` + Volume int `json:"volume"` + BuyQuantity int `json:"buy_quantity"` + SellQuantity int `json:"sell_quantity"` + OHLC models.OHLC `json:"ohlc"` + NetChange float64 `json:"net_change"` + OI float64 `json:"oi"` + OIDayHigh float64 `json:"oi_day_high"` + OIDayLow float64 `json:"oi_day_low"` + LowerCircuitLimit float64 `json:"lower_circuit_limit"` + UpperCircuitLimit float64 `json:"upper_circuit_limit"` + Depth models.Depth `json:"depth"` } // QuoteOHLC represents OHLC quote response. type QuoteOHLC map[string]struct { - InstrumentToken int `json:"instrument_token"` - LastPrice float64 `json:"last_price"` - OHLC struct { - Open float64 `json:"open"` - High float64 `json:"high"` - Low float64 `json:"low"` - Close float64 `json:"close"` - } `json:"ohlc"` + InstrumentToken int `json:"instrument_token"` + LastPrice float64 `json:"last_price"` + OHLC models.OHLC `json:"ohlc"` } // QuoteLTP represents last price quote response. @@ -71,13 +51,13 @@ type QuoteLTP map[string]struct { // HistoricalData represents individual historical data response. type HistoricalData struct { - Date Time `json:"date"` - Open float64 `json:"open"` - High float64 `json:"high"` - Low float64 `json:"Low"` - Close float64 `json:"close"` - Volume int `json:"volume"` - OI int `json:"oi"` + Date models.Time `json:"date"` + Open float64 `json:"open"` + High float64 `json:"high"` + Low float64 `json:"Low"` + Close float64 `json:"close"` + Volume int `json:"volume"` + OI int `json:"oi"` } type historicalDataReceived struct { @@ -95,18 +75,18 @@ type historicalDataParams struct { // Instrument represents individual instrument response. type Instrument struct { - InstrumentToken int `csv:"instrument_token"` - ExchangeToken int `csv:"exchange_token"` - Tradingsymbol string `csv:"tradingsymbol"` - Name string `csv:"name"` - LastPrice float64 `csv:"last_price"` - Expiry Time `csv:"expiry"` - StrikePrice float64 `csv:"strike"` - TickSize float64 `csv:"tick_size"` - LotSize float64 `csv:"lot_size"` - InstrumentType string `csv:"instrument_type"` - Segment string `csv:"segment"` - Exchange string `csv:"exchange"` + InstrumentToken int `csv:"instrument_token"` + ExchangeToken int `csv:"exchange_token"` + Tradingsymbol string `csv:"tradingsymbol"` + Name string `csv:"name"` + LastPrice float64 `csv:"last_price"` + Expiry models.Time `csv:"expiry"` + StrikePrice float64 `csv:"strike"` + TickSize float64 `csv:"tick_size"` + LotSize float64 `csv:"lot_size"` + InstrumentType string `csv:"instrument_type"` + Segment string `csv:"segment"` + Exchange string `csv:"exchange"` } // Instruments represents list of instruments. @@ -119,18 +99,18 @@ type MFInstrument struct { LastPrice float64 `csv:"last_price"` AMC string `csv:"amc"` - PurchaseAllowed bool `csv:"purchase_allowed"` - RedemtpionAllowed bool `csv:"redemption_allowed"` - MinimumPurchaseAmount float64 `csv:"minimum_purchase_amount"` - PurchaseAmountMultiplier float64 `csv:"purchase_amount_multiplier"` - MinimumAdditionalPurchaseAmount float64 `csv:"additional_purchase_multiple"` - MinimumRedemptionQuantity float64 `csv:"minimum_redemption_quantity"` - RedemptionQuantityMultiplier float64 `csv:"redemption_quantity_multiplier"` - DividendType string `csv:"dividend_type"` - SchemeType string `csv:"scheme_type"` - Plan string `csv:"plan"` - SettlementType string `csv:"settlement_type"` - LastPriceDate Time `csv:"last_price_date"` + PurchaseAllowed bool `csv:"purchase_allowed"` + RedemtpionAllowed bool `csv:"redemption_allowed"` + MinimumPurchaseAmount float64 `csv:"minimum_purchase_amount"` + PurchaseAmountMultiplier float64 `csv:"purchase_amount_multiplier"` + MinimumAdditionalPurchaseAmount float64 `csv:"additional_purchase_multiple"` + MinimumRedemptionQuantity float64 `csv:"minimum_redemption_quantity"` + RedemptionQuantityMultiplier float64 `csv:"redemption_quantity_multiplier"` + DividendType string `csv:"dividend_type"` + SchemeType string `csv:"scheme_type"` + Plan string `csv:"plan"` + SettlementType string `csv:"settlement_type"` + LastPriceDate models.Time `csv:"last_price_date"` } // MFInstruments represents list of mutualfund instruments. @@ -258,7 +238,7 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD } data = append(data, HistoricalData{ - Date: Time{d}, + Date: models.Time{d}, Open: open, High: high, Low: low, diff --git a/models/snaps.go b/models/snaps.go new file mode 100644 index 0000000..479e56e --- /dev/null +++ b/models/snaps.go @@ -0,0 +1,49 @@ +package models + +// OHLC represents OHLC packets. +type OHLC struct { + InstrumentToken uint32 `json:"-"` + Open float64 `json:"open"` + High float64 `json:"high"` + Low float64 `json:"low"` + Close float64 `json:"close"` +} + +// DepthItem represents a single market depth entry. +type DepthItem struct { + Price float64 `json:"price"` + Quantity uint32 `json:"quantity"` + Orders uint32 `json:"orders"` +} + +// Depth represents a group of buy/sell market depths. +type Depth struct { + Buy [5]DepthItem `json:"buy"` + Sell [5]DepthItem `json:"sell"` +} + +// Tick represents a single packet in the market feed. +type Tick struct { + Mode string + InstrumentToken uint32 + IsTradable bool + IsIndex bool + + Timestamp Time + LastTradeTime Time + LastPrice float64 + LastTradedQuantity uint32 + TotalBuyQuantity uint32 + TotalSellQuantity uint32 + VolumeTraded uint32 + TotalBuy uint32 + TotalSell uint32 + AverageTradePrice float64 + OI uint32 + OIDayHigh uint32 + OIDayLow uint32 + NetChange float64 + + OHLC OHLC + Depth Depth +} diff --git a/utils.go b/models/time.go similarity index 98% rename from utils.go rename to models/time.go index 456e2f6..500aaad 100644 --- a/utils.go +++ b/models/time.go @@ -1,4 +1,4 @@ -package kiteconnect +package models import ( "strings" diff --git a/utils_test.go b/models/time_test.go similarity index 98% rename from utils_test.go rename to models/time_test.go index fd28784..228a98e 100644 --- a/utils_test.go +++ b/models/time_test.go @@ -1,4 +1,4 @@ -package kiteconnect +package models import ( "encoding/json" diff --git a/mutualfunds.go b/mutualfunds.go index e8ac055..2e70d4a 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -6,6 +6,7 @@ import ( "net/url" "github.com/google/go-querystring/query" + "github.com/zerodha/gokiteconnect/v3/models" ) // MFHolding represents a individual mutualfund holding. @@ -22,14 +23,14 @@ type MFHolding struct { // MFTrade represents a individual trades of a mutualfund holding. type MFTrade struct { - Fund string `json:"fund"` - Tradingsymbol string `json:"tradingsymbol"` - AveragePrice float64 `json:"average_price"` - Variety string `json:"variety"` - ExchangeTimestamp Time `json:"exchange_timestamp"` - Amount float64 `json:"amount"` - Folio string `json:"folio"` - Quantity float64 `json:"quantity"` + Fund string `json:"fund"` + Tradingsymbol string `json:"tradingsymbol"` + AveragePrice float64 `json:"average_price"` + Variety string `json:"variety"` + ExchangeTimestamp models.Time `json:"exchange_timestamp"` + Amount float64 `json:"amount"` + Folio string `json:"folio"` + Quantity float64 `json:"quantity"` } // MFHoldingBreakdown represents a list of mutualfund holdings. @@ -40,16 +41,16 @@ type MFHoldings []MFHolding // MFOrder represents a individual mutualfund order response. type MFOrder struct { - OrderID string `json:"order_id"` - ExchangeOrderID string `json:"exchange_order_id"` - Tradingsymbol string `json:"tradingsymbol"` - Status string `json:"status"` - StatusMessage string `json:"status_message"` - Folio string `json:"folio"` - Fund string `json:"fund"` - OrderTimestamp Time `json:"order_timestamp"` - ExchangeTimestamp Time `json:"exchange_timestamp"` - SettlementID string `json:"settlement_id"` + OrderID string `json:"order_id"` + ExchangeOrderID string `json:"exchange_order_id"` + Tradingsymbol string `json:"tradingsymbol"` + Status string `json:"status"` + StatusMessage string `json:"status_message"` + Folio string `json:"folio"` + Fund string `json:"fund"` + OrderTimestamp models.Time `json:"order_timestamp"` + ExchangeTimestamp models.Time `json:"exchange_timestamp"` + SettlementID string `json:"settlement_id"` TransactionType string `json:"transaction_type"` Variety string `json:"variety"` @@ -76,19 +77,19 @@ type MFSIP struct { DividendType string `json:"dividend_type"` TransactionType string `json:"transaction_type"` - Status string `json:"status"` - SipType string `json:"sip_type"` - Created Time `json:"created"` - Frequency string `json:"frequency"` - InstalmentAmount float64 `json:"instalment_amount"` - Instalments int `json:"instalments"` - LastInstalment Time `json:"last_instalment"` - PendingInstalments int `json:"pending_instalments"` - InstalmentDay int `json:"instalment_day"` - CompletedInstalments int `json:"completed_instalments"` - NextInstalment string `json:"next_instalment"` - TriggerPrice float64 `json:"trigger_price"` - Tag string `json:"tag"` + Status string `json:"status"` + SipType string `json:"sip_type"` + Created models.Time `json:"created"` + Frequency string `json:"frequency"` + InstalmentAmount float64 `json:"instalment_amount"` + Instalments int `json:"instalments"` + LastInstalment models.Time `json:"last_instalment"` + PendingInstalments int `json:"pending_instalments"` + InstalmentDay int `json:"instalment_day"` + CompletedInstalments int `json:"completed_instalments"` + NextInstalment string `json:"next_instalment"` + TriggerPrice float64 `json:"trigger_price"` + Tag string `json:"tag"` } // MFSIPs represents a list of mutualfund SIPs. diff --git a/orders.go b/orders.go index f4a62a7..00d7371 100644 --- a/orders.go +++ b/orders.go @@ -6,6 +6,7 @@ import ( "net/url" "github.com/google/go-querystring/query" + "github.com/zerodha/gokiteconnect/v3/models" ) // Order represents a individual order response. @@ -19,9 +20,9 @@ type Order struct { Status string `json:"status"` StatusMessage string `json:"status_message"` StatusMessageRaw string `json:"status_message_raw"` - OrderTimestamp Time `json:"order_timestamp"` - ExchangeUpdateTimestamp Time `json:"exchange_update_timestamp"` - ExchangeTimestamp Time `json:"exchange_timestamp"` + OrderTimestamp models.Time `json:"order_timestamp"` + ExchangeUpdateTimestamp models.Time `json:"exchange_update_timestamp"` + ExchangeTimestamp models.Time `json:"exchange_timestamp"` Variety string `json:"variety"` Meta map[string]interface{} `json:"meta"` @@ -78,18 +79,18 @@ type OrderResponse struct { // Trade represents an individual trade response. type Trade struct { - AveragePrice float64 `json:"average_price"` - Quantity float64 `json:"quantity"` - TradeID string `json:"trade_id"` - Product string `json:"product"` - FillTimestamp Time `json:"fill_timestamp"` - ExchangeTimestamp Time `json:"exchange_timestamp"` - ExchangeOrderID string `json:"exchange_order_id"` - OrderID string `json:"order_id"` - TransactionType string `json:"transaction_type"` - TradingSymbol string `json:"tradingsymbol"` - Exchange string `json:"exchange"` - InstrumentToken uint32 `json:"instrument_token"` + AveragePrice float64 `json:"average_price"` + Quantity float64 `json:"quantity"` + TradeID string `json:"trade_id"` + Product string `json:"product"` + FillTimestamp models.Time `json:"fill_timestamp"` + ExchangeTimestamp models.Time `json:"exchange_timestamp"` + ExchangeOrderID string `json:"exchange_order_id"` + OrderID string `json:"order_id"` + TransactionType string `json:"transaction_type"` + TradingSymbol string `json:"tradingsymbol"` + Exchange string `json:"exchange"` + InstrumentToken uint32 `json:"instrument_token"` } // Trades is a list of trades. diff --git a/ticker/ticker.go b/ticker/ticker.go index 78df370..0a6d8e3 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -12,61 +12,11 @@ import ( "github.com/gorilla/websocket" kiteconnect "github.com/zerodha/gokiteconnect/v3" + "github.com/zerodha/gokiteconnect/v3/models" ) -// OHLC represents OHLC packets. -type OHLC struct { - InstrumentToken uint32 - Open float64 - High float64 - Low float64 - Close float64 -} - -// LTP represents OHLC packets. -type LTP struct { - InstrumentToken uint32 - LastPrice float64 -} - -// DepthItem represents a single market depth entry. -type DepthItem struct { - Price float64 - Quantity uint32 - Orders uint32 -} - -// Depth represents a group of buy/sell market depths. -type Depth struct { - Buy [5]DepthItem - Sell [5]DepthItem -} - -// Tick represents a single packet in the market feed. -type Tick struct { - Mode Mode - InstrumentToken uint32 - IsTradable bool - IsIndex bool - - Timestamp kiteconnect.Time - LastTradeTime kiteconnect.Time - LastPrice float64 - LastTradedQuantity uint32 - TotalBuyQuantity uint32 - TotalSellQuantity uint32 - VolumeTraded uint32 - TotalBuy uint32 - TotalSell uint32 - AverageTradePrice float64 - OI uint32 - OIDayHigh uint32 - OIDayLow uint32 - NetChange float64 - - OHLC OHLC - Depth Depth -} +// Mode represents available ticker modes. +type Mode string // Ticker is a Kite connect ticker instance. type Ticker struct { @@ -88,12 +38,9 @@ type Ticker struct { subscribedTokens map[uint32]Mode } -// Mode represents available ticker modes. -type Mode string - // callbacks represents callbacks available in ticker. type callbacks struct { - onTick func(Tick) + onTick func(models.Tick) onMessage func(int, []byte) onNoReconnect func(int) onReconnect func(int, time.Duration) @@ -269,7 +216,7 @@ func (t *Ticker) OnNoReconnect(f func(attempt int)) { } // OnTick callback. -func (t *Ticker) OnTick(f func(tick Tick)) { +func (t *Ticker) OnTick(f func(tick models.Tick)) { t.callbacks.onTick = f } @@ -406,7 +353,7 @@ func (t *Ticker) triggerMessage(messageType int, message []byte) { } } -func (t *Ticker) triggerTick(tick Tick) { +func (t *Ticker) triggerTick(tick models.Tick) { if t.callbacks.onTick != nil { t.callbacks.onTick(tick) } @@ -609,9 +556,9 @@ func (t *Ticker) processTextMessage(inp []byte) { } // parseBinary parses the packets to ticks. -func (t *Ticker) parseBinary(inp []byte) ([]Tick, error) { +func (t *Ticker) parseBinary(inp []byte) ([]models.Tick, error) { pkts := t.splitPackets(inp) - var ticks []Tick + var ticks []models.Tick for _, pkt := range pkts { tick, err := t.parsePacket(pkt) @@ -645,7 +592,7 @@ func (t *Ticker) splitPackets(inp []byte) [][]byte { } // Parse parses a tick byte array into a tick struct. -func (t *Ticker) parsePacket(b []byte) (Tick, error) { +func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { var ( tk = binary.BigEndian.Uint32(b[0:4]) seg = tk & 0xFF @@ -655,8 +602,8 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { // Mode LTP parsing if len(b) == modeLTPLength { - return Tick{ - Mode: ModeLTP, + return models.Tick{ + Mode: string(ModeLTP), InstrumentToken: tk, IsTradable: isTradable, IsIndex: isIndex, @@ -671,14 +618,14 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { closePrice = t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[20:24]))) ) - tick := Tick{ - Mode: ModeQuote, + tick := models.Tick{ + Mode: string(ModeQuote), InstrumentToken: tk, IsTradable: isTradable, IsIndex: isIndex, LastPrice: lastPrice, NetChange: lastPrice - closePrice, - OHLC: OHLC{ + OHLC: models.OHLC{ High: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[8:12]))), Low: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[12:16]))), Open: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[16:20]))), @@ -687,8 +634,8 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { // On mode full set timestamp if len(b) == modeFullIndexLength { - tick.Mode = ModeFull - tick.Timestamp = kiteconnect.Time{time.Unix(int64(binary.BigEndian.Uint32(b[28:32])), 0)} + tick.Mode = string(ModeFull) + tick.Timestamp = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[28:32])), 0)} } return tick, nil @@ -701,8 +648,8 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { ) // Mode quote data. - tick := Tick{ - Mode: ModeQuote, + tick := models.Tick{ + Mode: string(ModeQuote), InstrumentToken: tk, IsTradable: isTradable, IsIndex: isIndex, @@ -712,7 +659,7 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { VolumeTraded: binary.BigEndian.Uint32(b[16:20]), TotalBuyQuantity: binary.BigEndian.Uint32(b[20:24]), TotalSellQuantity: binary.BigEndian.Uint32(b[24:28]), - OHLC: OHLC{ + OHLC: models.OHLC{ Open: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[28:32]))), High: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[32:36]))), Low: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[36:40]))), @@ -722,12 +669,12 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { // Parse full mode. if len(b) == modeFullLength { - tick.Mode = ModeFull - tick.LastTradeTime = kiteconnect.Time{time.Unix(int64(binary.BigEndian.Uint32(b[44:48])), 0)} + tick.Mode = string(ModeFull) + tick.LastTradeTime = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[44:48])), 0)} tick.OI = binary.BigEndian.Uint32(b[48:52]) tick.OIDayHigh = binary.BigEndian.Uint32(b[52:56]) tick.OIDayLow = binary.BigEndian.Uint32(b[56:60]) - tick.Timestamp = kiteconnect.Time{time.Unix(int64(binary.BigEndian.Uint32(b[60:64])), 0)} + tick.Timestamp = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[60:64])), 0)} tick.NetChange = lastPrice - closePrice // Depth Information. @@ -738,13 +685,13 @@ func (t *Ticker) parsePacket(b []byte) (Tick, error) { ) for i := 0; i < depthItems; i++ { - tick.Depth.Buy[i] = DepthItem{ + tick.Depth.Buy[i] = models.DepthItem{ Quantity: binary.BigEndian.Uint32(b[buyPos : buyPos+4]), Price: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[buyPos+4:buyPos+8]))), Orders: uint32(binary.BigEndian.Uint16(b[buyPos+8 : buyPos+10])), } - tick.Depth.Sell[i] = DepthItem{ + tick.Depth.Sell[i] = models.DepthItem{ Quantity: binary.BigEndian.Uint32(b[sellPos : sellPos+4]), Price: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[sellPos+4:sellPos+8]))), Orders: uint32(binary.BigEndian.Uint16(b[sellPos+8 : sellPos+10])), diff --git a/user.go b/user.go index 4c21cf4..9a97aae 100644 --- a/user.go +++ b/user.go @@ -5,6 +5,8 @@ import ( "fmt" "net/http" "net/url" + + "github.com/zerodha/gokiteconnect/v3/models" ) // UserSession represents the response after a successful authentication. @@ -12,9 +14,9 @@ type UserSession struct { UserProfile UserSessionTokens - APIKey string `json:"api_key"` - PublicToken string `json:"public_token"` - LoginTime Time `json:"login_time"` + APIKey string `json:"api_key"` + PublicToken string `json:"public_token"` + LoginTime models.Time `json:"login_time"` } // UserSessionTokens represents response after renew access token. From 7b646299c7970dd24dbf3d6746d5a72bbb8eb515 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 16 Jun 2021 19:17:09 +0530 Subject: [PATCH 026/103] refactor: gracefully exit ticker Ref: #28 --- ticker/ticker.go | 236 +++++++++++++++++++++++++++-------------------- 1 file changed, 138 insertions(+), 98 deletions(-) diff --git a/ticker/ticker.go b/ticker/ticker.go index 0a6d8e3..09fbfdd 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -2,6 +2,7 @@ package kiteticker import ( + "context" "encoding/binary" "encoding/json" "fmt" @@ -36,6 +37,8 @@ type Ticker struct { reconnectAttempt int subscribedTokens map[uint32]Mode + + cancel context.CancelFunc } // callbacks represents callbacks available in ticker. @@ -225,89 +228,109 @@ func (t *Ticker) OnOrderUpdate(f func(order kiteconnect.Order)) { t.callbacks.onOrderUpdate = f } -// Serve starts the connection to ticker server. Since its blocking its recommended to use it in go routine. +// Serve starts the connection to ticker server. Since its blocking its +// recommended to use it in a go routine. func (t *Ticker) Serve() { + t.ServeWithContext(context.Background()) +} + +// ServeWithContext starts the connection to ticker server and additionally +// accepts a context. Since its blocking its recommended to use it in a go +// routine. +func (t *Ticker) ServeWithContext(ctx context.Context) { + ctx, cancel := context.WithCancel(ctx) + t.cancel = cancel + for { - // If reconnect attempt exceeds max then close the loop - if t.reconnectAttempt > t.reconnectMaxRetries { - t.triggerNoReconnect(t.reconnectAttempt) + select { + case <-ctx.Done(): return - } - - // If its a reconnect then wait exponentially based on reconnect attempt - if t.reconnectAttempt > 0 { - nextDelay := time.Duration(math.Pow(2, float64(t.reconnectAttempt))) * time.Second - if nextDelay > t.reconnectMaxDelay { - nextDelay = t.reconnectMaxDelay + default: + // If reconnect attempt exceeds max then close the loop + if t.reconnectAttempt > t.reconnectMaxRetries { + t.triggerNoReconnect(t.reconnectAttempt) + return } - t.triggerReconnect(t.reconnectAttempt, nextDelay) + // If its a reconnect then wait exponentially based on reconnect attempt + if t.reconnectAttempt > 0 { + nextDelay := time.Duration(math.Pow(2, float64(t.reconnectAttempt))) * time.Second + if nextDelay > t.reconnectMaxDelay { + nextDelay = t.reconnectMaxDelay + } + + t.triggerReconnect(t.reconnectAttempt, nextDelay) - time.Sleep(nextDelay) + time.Sleep(nextDelay) - // Close the previous connection if exists - if t.Conn != nil { - t.Conn.Close() + // Close the previous connection if exists + if t.Conn != nil { + t.Conn.Close() + } } - } - // Prepare ticker URL with required params. - q := t.url.Query() - q.Set("api_key", t.apiKey) - q.Set("access_token", t.accessToken) - t.url.RawQuery = q.Encode() + // Prepare ticker URL with required params. + q := t.url.Query() + q.Set("api_key", t.apiKey) + q.Set("access_token", t.accessToken) + t.url.RawQuery = q.Encode() - // create a dialer - d := websocket.DefaultDialer - d.HandshakeTimeout = t.connectTimeout - conn, _, err := d.Dial(t.url.String(), nil) - if err != nil { - t.triggerError(err) + // create a dialer + d := websocket.DefaultDialer + d.HandshakeTimeout = t.connectTimeout + conn, _, err := d.Dial(t.url.String(), nil) + if err != nil { + t.triggerError(err) - // If auto reconnect is enabled then try reconneting else return error - if t.autoReconnect { - t.reconnectAttempt++ - continue + // If auto reconnect is enabled then try reconneting else return error + if t.autoReconnect { + t.reconnectAttempt++ + continue + } } - } - // Close the connection when its done. - defer t.Conn.Close() + // Close the connection when its done. + defer func() { + if t.Conn != nil { + t.Conn.Close() + } + }() - // Assign the current connection to the instance. - t.Conn = conn + // Assign the current connection to the instance. + t.Conn = conn - // Trigger connect callback. - t.triggerConnect() + // Trigger connect callback. + t.triggerConnect() - // Resubscribe to stored tokens - if t.reconnectAttempt > 0 { - t.Resubscribe() - } - - // Reset auto reconnect vars - t.reconnectAttempt = 0 + // Resubscribe to stored tokens + if t.reconnectAttempt > 0 { + t.Resubscribe() + } - // Set current time as last ping time - t.lastPingTime = time.Now() + // Reset auto reconnect vars + t.reconnectAttempt = 0 - // Set on close handler - t.Conn.SetCloseHandler(t.handleClose) + // Set current time as last ping time + t.lastPingTime = time.Now() - var wg sync.WaitGroup + // Set on close handler + t.Conn.SetCloseHandler(t.handleClose) - // Receive ticker data in a go routine. - wg.Add(1) - go t.readMessage(&wg) + var wg sync.WaitGroup - // Run watcher to check last ping time and reconnect if required - if t.autoReconnect { + // Receive ticker data in a go routine. wg.Add(1) - go t.checkConnection(&wg) - } + go t.readMessage(ctx, &wg) - // Wait for go routines to finish before doing next reconnect - wg.Wait() + // Run watcher to check last ping time and reconnect if required + if t.autoReconnect { + wg.Add(1) + go t.checkConnection(ctx, &wg) + } + + // Wait for go routines to finish before doing next reconnect + wg.Wait() + } } } @@ -366,57 +389,67 @@ func (t *Ticker) triggerOrderUpdate(order kiteconnect.Order) { } // Periodically check for last ping time and initiate reconnect if applicable. -func (t *Ticker) checkConnection(wg *sync.WaitGroup) { +func (t *Ticker) checkConnection(ctx context.Context, wg *sync.WaitGroup) { + defer wg.Done() for { - // Sleep before doing next check - time.Sleep(connectionCheckInterval) - - // If last ping time is greater then timeout interval then close the - // existing connection and reconnect - if time.Since(t.lastPingTime) > dataTimeoutInterval { - // Close the current connection without waiting for close frame - if t.Conn != nil { - t.Conn.Close() - } - - // Increase reconnect attempt for next reconnection - t.reconnectAttempt++ - // Mark it as done in wait group - wg.Done() + select { + case <-ctx.Done(): return + default: + // Sleep before doing next check + time.Sleep(connectionCheckInterval) + + // If last ping time is greater then timeout interval then close the + // existing connection and reconnect + if time.Since(t.lastPingTime) > dataTimeoutInterval { + // Close the current connection without waiting for close frame + if t.Conn != nil { + t.Conn.Close() + } + + // Increase reconnect attempt for next reconnection + t.reconnectAttempt++ + // Mark it as done in wait group + return + } } } } // readMessage reads the data in a loop. -func (t *Ticker) readMessage(wg *sync.WaitGroup) { +func (t *Ticker) readMessage(ctx context.Context, wg *sync.WaitGroup) { + defer wg.Done() for { - mType, msg, err := t.Conn.ReadMessage() - if err != nil { - t.triggerError(fmt.Errorf("Error reading data: %v", err)) - wg.Done() + select { + case <-ctx.Done(): return - } - - // Update last ping time to check for connection - t.lastPingTime = time.Now() - - // Trigger message. - t.triggerMessage(mType, msg) - - // If binary message then parse and send tick. - if mType == websocket.BinaryMessage { - ticks, err := t.parseBinary(msg) + default: + mType, msg, err := t.Conn.ReadMessage() if err != nil { - t.triggerError(fmt.Errorf("Error parsing data received: %v", err)) + t.triggerError(fmt.Errorf("Error reading data: %v", err)) + return } - // Trigger individual tick. - for _, tick := range ticks { - t.triggerTick(tick) + // Update last ping time to check for connection + t.lastPingTime = time.Now() + + // Trigger message. + t.triggerMessage(mType, msg) + + // If binary message then parse and send tick. + if mType == websocket.BinaryMessage { + ticks, err := t.parseBinary(msg) + if err != nil { + t.triggerError(fmt.Errorf("Error parsing data received: %v", err)) + } + + // Trigger individual tick. + for _, tick := range ticks { + t.triggerTick(tick) + } + } else if mType == websocket.TextMessage { + t.processTextMessage(msg) } - } else if mType == websocket.TextMessage { - t.processTextMessage(msg) } } } @@ -426,6 +459,13 @@ func (t *Ticker) Close() error { return t.Conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) } +// Stop the ticker instance and all the goroutines it has spawned. +func (t *Ticker) Stop() { + if t.cancel != nil { + t.cancel() + } +} + // Subscribe subscribes tick for the given list of tokens. func (t *Ticker) Subscribe(tokens []uint32) error { if len(tokens) == 0 { From ee286fcd4c61908c4338d505e9822ca02e9c5451 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 22 Jun 2021 13:32:30 +0530 Subject: [PATCH 027/103] feat: initiate holdings response call --- connect.go | 7 ++++--- connect_test.go | 1 + mock_responses | 2 +- portfolio.go | 38 ++++++++++++++++++++++++++++++++++++++ portfolio_test.go | 22 ++++++++++++++++++++++ 5 files changed, 66 insertions(+), 4 deletions(-) diff --git a/connect.go b/connect.go index 4d81255..0147601 100644 --- a/connect.go +++ b/connect.go @@ -97,9 +97,10 @@ const ( URIModifyOrder string = "/orders/%s/%s" // "/orders/{variety}/{order_id}" URICancelOrder string = "/orders/%s/%s" // "/orders/{variety}/{order_id}" - URIGetPositions string = "/portfolio/positions" - URIGetHoldings string = "/portfolio/holdings" - URIConvertPosition string = "/portfolio/positions" + URIGetPositions string = "/portfolio/positions" + URIGetHoldings string = "/portfolio/holdings" + URIInitHoldingsAuth string = "/portfolio/holdings/authorise" + URIConvertPosition string = "/portfolio/positions" URIOrderMargins string = "/margins/orders" diff --git a/connect_test.go b/connect_test.go index efe2fb8..4f0c35d 100644 --- a/connect_test.go +++ b/connect_test.go @@ -151,6 +151,7 @@ var MockResponders = [][]string{ []string{http.MethodPost, URIPlaceMFSIP, "mf_order_response.json"}, []string{http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, []string{http.MethodPost, URIOrderMargins, "order_margins.json"}, + []string{http.MethodPost, URIInitHoldingsAuth, "holdings_auth.json"}, // DELETE endpoints []string{http.MethodDelete, URICancelOrder, "order_response.json"}, diff --git a/mock_responses b/mock_responses index 4c95c35..1ecabcb 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 4c95c3505b711586f658295bcbee028b9627dd48 +Subproject commit 1ecabcbc5e22f0fcdd284cd264a31ca7db8e406f diff --git a/portfolio.go b/portfolio.go index fca4071..7dc46ec 100644 --- a/portfolio.go +++ b/portfolio.go @@ -122,3 +122,41 @@ func (c *Client) ConvertPosition(positionParams ConvertPositionParams) (bool, er return b, err } + +// HoldingsAuthParams represents the input params for initiating holdings authorization +type HoldingsAuthParams struct { + ISIN string + Quantity float64 +} + +// HoldingsAuthParams represents the response from initiating holdings authorization +type HoldingsAuthResp struct { + RequestID string `json:"request_id"` +} + +// InitiateHoldingsAuth initiates the holdings authorization flow. It accepts an optional +// list of HoldingsAuthParams which can be used to specify a set of ISINs with their +// respective quantities. Since, the isin and quantity pairs here are optional, you can +// provide holdingAuthParams as nil. If they're provided, authorisation is sought only +// for those instruments and otherwise, the entire holdings is presented for +// authorisation. The response contains request_id, which can then be used to +// redirect the user to the following URL in a webivew or a popup. +// +// https://kite.zerodha.com/connect/portfolio/authorise/holdings/:api_key/:request_id +func (c *Client) InitiateHoldingsAuth(holdingAuthParams []HoldingsAuthParams) (HoldingsAuthResp, error) { + var ( + params = make(url.Values) + ) + + for _, hap := range holdingAuthParams { + params.Add("isin", hap.ISIN) + params.Add("quantity", fmt.Sprintf("%f", hap.Quantity)) + } + + var resp HoldingsAuthResp + if err := c.doEnvelope(http.MethodPost, URIInitHoldingsAuth, params, nil, &resp); err != nil { + return resp, err + } + + return resp, nil +} diff --git a/portfolio_test.go b/portfolio_test.go index e9b101a..9ece645 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -57,3 +57,25 @@ func (ts *TestSuite) TestConvertPosition(t *testing.T) { t.Errorf("Error while converting position. %v", err) } } + +func (ts *TestSuite) TestInitiateHoldingsAuth(t *testing.T) { + t.Parallel() + params := []HoldingsAuthParams{ + { + ISIN: "INE002A01018", + Quantity: 50, + }, + { + ISIN: "INE009A01021", + Quantity: 50, + }, + } + response, err := ts.KiteConnect.InitiateHoldingsAuth(params) + if err != nil { + t.Errorf("Error while initiating holdings auth. %v", err) + } + + if response.RequestID != "na8QgCeQm05UHG6NL9sAGRzdfSF64UdB" { + t.Errorf("Error while parsing holdings auth response") + } +} From 2ca76e54a512e4510576f5dce2f65c8ce346bf3a Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 22 Jun 2021 14:25:16 +0530 Subject: [PATCH 028/103] feat: generate and return redirectURL for holAuth --- connect.go | 1 + portfolio.go | 16 +++++++++++----- portfolio_test.go | 5 +++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/connect.go b/connect.go index 0147601..80f35db 100644 --- a/connect.go +++ b/connect.go @@ -29,6 +29,7 @@ const ( requestTimeout time.Duration = 7000 * time.Millisecond baseURI string = "https://api.kite.trade" loginURI string = "https://kite.trade/connect/login?api_key=%s&v=3" + kiteBaseURI string = "https://kite.zerodha.com" // Kite connect header version kiteHeaderVersion string = "3" ) diff --git a/portfolio.go b/portfolio.go index 7dc46ec..af6368f 100644 --- a/portfolio.go +++ b/portfolio.go @@ -131,7 +131,8 @@ type HoldingsAuthParams struct { // HoldingsAuthParams represents the response from initiating holdings authorization type HoldingsAuthResp struct { - RequestID string `json:"request_id"` + RequestID string `json:"request_id"` + RedirectURL string } // InitiateHoldingsAuth initiates the holdings authorization flow. It accepts an optional @@ -139,10 +140,8 @@ type HoldingsAuthResp struct { // respective quantities. Since, the isin and quantity pairs here are optional, you can // provide holdingAuthParams as nil. If they're provided, authorisation is sought only // for those instruments and otherwise, the entire holdings is presented for -// authorisation. The response contains request_id, which can then be used to -// redirect the user to the following URL in a webivew or a popup. -// -// https://kite.zerodha.com/connect/portfolio/authorise/holdings/:api_key/:request_id +// authorisation. The response contains RequestID which can then be used to +// redirect the user in a web view. The client adds the formed RedirectURL as well. func (c *Client) InitiateHoldingsAuth(holdingAuthParams []HoldingsAuthParams) (HoldingsAuthResp, error) { var ( params = make(url.Values) @@ -158,5 +157,12 @@ func (c *Client) InitiateHoldingsAuth(holdingAuthParams []HoldingsAuthParams) (H return resp, err } + // Form and set the URL in the response. + resp.RedirectURL = genHolAuthURL(c.apiKey, resp.RequestID) + return resp, nil } + +func genHolAuthURL(apiKey, reqID string) string { + return kiteBaseURI + "/connect/portfolio/authorize/holdings/" + apiKey + "/" + reqID +} diff --git a/portfolio_test.go b/portfolio_test.go index 9ece645..4e592bc 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -1,6 +1,7 @@ package kiteconnect import ( + "strings" "testing" ) @@ -78,4 +79,8 @@ func (ts *TestSuite) TestInitiateHoldingsAuth(t *testing.T) { if response.RequestID != "na8QgCeQm05UHG6NL9sAGRzdfSF64UdB" { t.Errorf("Error while parsing holdings auth response") } + + if !strings.Contains(response.RedirectURL, kiteBaseURI) { + t.Errorf("Incorrect response URL") + } } From 22a9a368f55f850bc5d53af071512abb5b8ae178 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 23 Jun 2021 15:08:27 +0530 Subject: [PATCH 029/103] feat: add type, transfertype, exec_date to holAuth --- portfolio.go | 40 ++++++++++++++++++++++++++++++++-------- portfolio_test.go | 18 ++++++++++-------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/portfolio.go b/portfolio.go index af6368f..48442ab 100644 --- a/portfolio.go +++ b/portfolio.go @@ -123,12 +123,23 @@ func (c *Client) ConvertPosition(positionParams ConvertPositionParams) (bool, er return b, err } -// HoldingsAuthParams represents the input params for initiating holdings authorization -type HoldingsAuthParams struct { +// HoldingsAuthInstruments represents the instruments and respective quantities for +// use within the holdings auth initialization. +type HoldingsAuthInstruments struct { ISIN string Quantity float64 } +// HoldingAuthParams represents the inputs for initiating holdings authorization. +type HoldingAuthParams struct { + Type string + TransferType string + ExecDate string + + // Instruments are optional + Instruments []HoldingsAuthInstruments +} + // HoldingsAuthParams represents the response from initiating holdings authorization type HoldingsAuthResp struct { RequestID string `json:"request_id"` @@ -136,18 +147,31 @@ type HoldingsAuthResp struct { } // InitiateHoldingsAuth initiates the holdings authorization flow. It accepts an optional -// list of HoldingsAuthParams which can be used to specify a set of ISINs with their +// list of HoldingsAuthInstruments which can be used to specify a set of ISINs with their // respective quantities. Since, the isin and quantity pairs here are optional, you can -// provide holdingAuthParams as nil. If they're provided, authorisation is sought only +// provide it as nil. If they're provided, authorisation is sought only // for those instruments and otherwise, the entire holdings is presented for -// authorisation. The response contains RequestID which can then be used to -// redirect the user in a web view. The client adds the formed RedirectURL as well. -func (c *Client) InitiateHoldingsAuth(holdingAuthParams []HoldingsAuthParams) (HoldingsAuthResp, error) { +// authorisation. The response contains the RequestID which can then be used to +// redirect the user in a web view. The client forms and returns the +// formed RedirectURL as well. +func (c *Client) InitiateHoldingsAuth(haps HoldingAuthParams) (HoldingsAuthResp, error) { var ( params = make(url.Values) ) - for _, hap := range holdingAuthParams { + if haps.Type != "" { + params.Set("type", haps.Type) + } + + if haps.TransferType != "" { + params.Set("transfer_type", haps.TransferType) + } + + if haps.ExecDate != "" { + params.Set("exec_date", haps.ExecDate) + } + + for _, hap := range haps.Instruments { params.Add("isin", hap.ISIN) params.Add("quantity", fmt.Sprintf("%f", hap.Quantity)) } diff --git a/portfolio_test.go b/portfolio_test.go index 4e592bc..ff16811 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -61,14 +61,16 @@ func (ts *TestSuite) TestConvertPosition(t *testing.T) { func (ts *TestSuite) TestInitiateHoldingsAuth(t *testing.T) { t.Parallel() - params := []HoldingsAuthParams{ - { - ISIN: "INE002A01018", - Quantity: 50, - }, - { - ISIN: "INE009A01021", - Quantity: 50, + params := HoldingAuthParams{ + Instruments: []HoldingsAuthInstruments{ + { + ISIN: "INE002A01018", + Quantity: 50, + }, + { + ISIN: "INE009A01021", + Quantity: 50, + }, }, } response, err := ts.KiteConnect.InitiateHoldingsAuth(params) From 51022e4483aa79b2af084a2cde6a748d2f85efb3 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 12:48:49 +0530 Subject: [PATCH 030/103] feat: add consts for HolAuth type/trfrType --- portfolio.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/portfolio.go b/portfolio.go index 48442ab..c66f1f2 100644 --- a/portfolio.go +++ b/portfolio.go @@ -8,6 +8,16 @@ import ( "github.com/google/go-querystring/query" ) +const ( + HolAuthTypeMF = "mf" + HolAuthTypeEquity = "equity" + + HolAuthTransferTypePreTrade = "pre" + HolAuthTransferTypePostTrade = "post" + HolAuthTransferTypeOffMarket = "off" + HolAuthTransferTypeGift = "gift" +) + // Holding is an individual holdings response. type Holding struct { Tradingsymbol string `json:"tradingsymbol"` From f22ce0930046c90aac187165f4ada73198bdca7a Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 12:25:11 +0530 Subject: [PATCH 031/103] refactor: timestamp parsing logic Adds support for local tz parsing and combines parsing across both CSV and JSON parsers. --- models/time.go | 68 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/models/time.go b/models/time.go index 500aaad..c1c9cd1 100644 --- a/models/time.go +++ b/models/time.go @@ -11,41 +11,67 @@ type Time struct { } // List of known time formats -var ctLayouts = []string{"2006-01-02", "2006-01-02 15:04:05", "2006-01-02T15:04:05-0700"} +var ( + ctLayouts = []string{"2006-01-02", "2006-01-02 15:04:05"} + ctZonedLayouts = []string{"2006-01-02T15:04:05-0700"} +) // UnmarshalJSON parses JSON time string with custom time formats -func (t *Time) UnmarshalJSON(b []byte) (err error) { - var pTime time.Time - s := strings.TrimSpace(strings.Trim(string(b), "\"")) - - if s == "" || s == "null" { - t.Time = pTime - return nil +func (t *Time) UnmarshalJSON(b []byte) error { + pTime, err := parseTime(string(b)) + if err != nil { + return err } - // Iterate through known layouts and parse time - for _, l := range ctLayouts { - pTime, err = time.Parse(l, s) - if err == nil && !pTime.IsZero() { - break - } + t.Time = pTime + return nil +} + +// UnmarshalCSV converts CSV string field internal date +func (t *Time) UnmarshalCSV(s string) error { + pTime, err := parseTime(s) + if err != nil { + return err } t.Time = pTime return nil } -// UnmarshalCSV converts CSV string field internal date -func (t *Time) UnmarshalCSV(s string) (err error) { - var pTime time.Time - s = strings.TrimSpace(s) +func parseTime(ts string) (time.Time, error) { + var ( + pTime time.Time + err error + ) + + s := strings.TrimSpace(strings.Trim(ts, "\"")) + if s == "" || s == "null" { + return pTime, nil + } + + // Load IST location. + loc, err := time.LoadLocation("Asia/Kolkata") + if err != nil { + return pTime, err + } + + // Iterate through zoneless layouts and assign zone as IST. for _, l := range ctLayouts { - pTime, err = time.Parse(l, s) + pTime, err = time.ParseInLocation(l, s, loc) if err == nil && !pTime.IsZero() { break } } - t.Time = pTime - return nil + // If pattern not found then iterate and parse layouts with zone. + if pTime.IsZero() { + for _, l := range ctZonedLayouts { + pTime, err = time.Parse(l, s) + if err == nil && !pTime.IsZero() { + break + } + } + } + + return pTime, err } From eeb8293d1345539d9036f40af5e77f40c41a9144 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 13:57:53 +0530 Subject: [PATCH 032/103] fix: update mock responses for mf --- mock_responses | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_responses b/mock_responses index 1ecabcb..709ef6a 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 1ecabcbc5e22f0fcdd284cd264a31ca7db8e406f +Subproject commit 709ef6a18a5eb5edfc20a08123199586f04486b0 From 0fbc8c9056de91a0698cfc88238d510af7a859f8 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 16:31:53 +0530 Subject: [PATCH 033/103] refactor: move trimming logic outside parsing --- models/time.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/models/time.go b/models/time.go index c1c9cd1..b55fecb 100644 --- a/models/time.go +++ b/models/time.go @@ -18,7 +18,9 @@ var ( // UnmarshalJSON parses JSON time string with custom time formats func (t *Time) UnmarshalJSON(b []byte) error { - pTime, err := parseTime(string(b)) + s := strings.TrimSpace(strings.Trim(string(b), "\"")) + + pTime, err := parseTime(s) if err != nil { return err } @@ -29,6 +31,8 @@ func (t *Time) UnmarshalJSON(b []byte) error { // UnmarshalCSV converts CSV string field internal date func (t *Time) UnmarshalCSV(s string) error { + s = strings.TrimSpace(s) + pTime, err := parseTime(s) if err != nil { return err @@ -38,13 +42,12 @@ func (t *Time) UnmarshalCSV(s string) error { return nil } -func parseTime(ts string) (time.Time, error) { +func parseTime(s string) (time.Time, error) { var ( pTime time.Time err error ) - s := strings.TrimSpace(strings.Trim(ts, "\"")) if s == "" || s == "null" { return pTime, nil } From 3fcd6f3011dcee5393ca8dc178a2fd1cc52aeb51 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 17:04:17 +0530 Subject: [PATCH 034/103] refactor, test: simplify zone parsing, unit test --- market_test.go | 6 ++++++ models/time.go | 15 +++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/market_test.go b/market_test.go index 3dafb45..d461ca1 100644 --- a/market_test.go +++ b/market_test.go @@ -93,6 +93,12 @@ func (ts *TestSuite) TestGetInstruments(t *testing.T) { if mInstr.InstrumentToken == 0 { t.Errorf("Incorrect data loaded. %v", err) } + + if mInstr.InstrumentToken == 12074242 { + if mInstr.Expiry.Year() != 2018 { + t.Errorf("Incorrectly parsed timestamp for instruments") + } + } } } diff --git a/models/time.go b/models/time.go index b55fecb..406730b 100644 --- a/models/time.go +++ b/models/time.go @@ -1,6 +1,7 @@ package models import ( + "errors" "strings" "time" ) @@ -62,19 +63,17 @@ func parseTime(s string) (time.Time, error) { for _, l := range ctLayouts { pTime, err = time.ParseInLocation(l, s, loc) if err == nil && !pTime.IsZero() { - break + return pTime, nil } } // If pattern not found then iterate and parse layouts with zone. - if pTime.IsZero() { - for _, l := range ctZonedLayouts { - pTime, err = time.Parse(l, s) - if err == nil && !pTime.IsZero() { - break - } + for _, l := range ctZonedLayouts { + pTime, err = time.Parse(l, s) + if err == nil && !pTime.IsZero() { + return pTime, nil } } - return pTime, err + return pTime, errors.New("unknown time format") } From 6cc478af746722fb6dd343468b995d3e17922f99 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 30 Jun 2021 17:17:17 +0530 Subject: [PATCH 035/103] chore: update gomodule version from v3 -> v4 --- README.md | 14 +++++--------- examples/connect/advanced/connect.go | 2 +- examples/connect/basic/connect.go | 2 +- examples/connect/gtt/connect.go | 2 +- examples/ticker/ticker.go | 6 +++--- go.mod | 2 +- gtt.go | 2 +- market.go | 2 +- mutualfunds.go | 2 +- orders.go | 2 +- ticker/ticker.go | 4 ++-- user.go | 2 +- 12 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index f282fd8..5de1e0a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ 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. -Zerodha Technology (c) 2018. Licensed under the MIT License. +Zerodha Technology (c) 2021. Licensed under the MIT License. ## Documentation @@ -17,7 +17,7 @@ Zerodha Technology (c) 2018. Licensed under the MIT License. ## Installation ``` -go get github.com/zerodha/gokiteconnect/v3 +go get github.com/zerodha/gokiteconnect/v4 ``` ## API usage @@ -28,7 +28,7 @@ package main import ( "fmt" - kiteconnect "github.com/zerodha/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v4" ) const ( @@ -74,8 +74,8 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodha/gokiteconnect/v3" - "github.com/zerodha/gokiteconnect/v3/ticker" + kiteconnect "github.com/zerodha/gokiteconnect/v4" + "github.com/zerodha/gokiteconnect/v4/ticker" ) var ( @@ -157,7 +157,3 @@ go run examples/connect/basic/connect.go ``` go test -v ``` - -## Changelog - -[Check CHANGELOG.md](CHANGELOG.md) diff --git a/examples/connect/advanced/connect.go b/examples/connect/advanced/connect.go index 0156953..0fbd265 100644 --- a/examples/connect/advanced/connect.go +++ b/examples/connect/advanced/connect.go @@ -6,7 +6,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodha/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v4" ) const ( diff --git a/examples/connect/basic/connect.go b/examples/connect/basic/connect.go index 2a040e3..fc67ee3 100644 --- a/examples/connect/basic/connect.go +++ b/examples/connect/basic/connect.go @@ -3,7 +3,7 @@ package main import ( "fmt" - kiteconnect "github.com/zerodha/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v4" ) const ( diff --git a/examples/connect/gtt/connect.go b/examples/connect/gtt/connect.go index 6ae8edc..d4ee45d 100644 --- a/examples/connect/gtt/connect.go +++ b/examples/connect/gtt/connect.go @@ -5,7 +5,7 @@ import ( "log" "net/http" - kiteconnect "github.com/zerodha/gokiteconnect/v3" + kiteconnect "github.com/zerodha/gokiteconnect/v4" ) const ( diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index ed3ef6d..f2b6e2a 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -4,9 +4,9 @@ import ( "fmt" "time" - kiteconnect "github.com/zerodha/gokiteconnect/v3" - kitemodels "github.com/zerodha/gokiteconnect/v3/models" - kiteticker "github.com/zerodha/gokiteconnect/v3/ticker" + kiteconnect "github.com/zerodha/gokiteconnect/v4" + kitemodels "github.com/zerodha/gokiteconnect/v4/models" + kiteticker "github.com/zerodha/gokiteconnect/v4/ticker" ) const ( diff --git a/go.mod b/go.mod index 260ceb7..d3e1694 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/zerodha/gokiteconnect/v3 +module github.com/zerodha/gokiteconnect/v4 go 1.14 diff --git a/gtt.go b/gtt.go index 7b7ff87..c5f159e 100644 --- a/gtt.go +++ b/gtt.go @@ -6,7 +6,7 @@ import ( "net/http" "net/url" - "github.com/zerodha/gokiteconnect/v3/models" + "github.com/zerodha/gokiteconnect/v4/models" ) // GTTType represents the available GTT order types. diff --git a/market.go b/market.go index 1517814..d01efeb 100644 --- a/market.go +++ b/market.go @@ -8,7 +8,7 @@ import ( "github.com/gocarina/gocsv" "github.com/google/go-querystring/query" - "github.com/zerodha/gokiteconnect/v3/models" + "github.com/zerodha/gokiteconnect/v4/models" ) type quoteParams struct { diff --git a/mutualfunds.go b/mutualfunds.go index 2e70d4a..ee32c9c 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -6,7 +6,7 @@ import ( "net/url" "github.com/google/go-querystring/query" - "github.com/zerodha/gokiteconnect/v3/models" + "github.com/zerodha/gokiteconnect/v4/models" ) // MFHolding represents a individual mutualfund holding. diff --git a/orders.go b/orders.go index 00d7371..dd2358e 100644 --- a/orders.go +++ b/orders.go @@ -6,7 +6,7 @@ import ( "net/url" "github.com/google/go-querystring/query" - "github.com/zerodha/gokiteconnect/v3/models" + "github.com/zerodha/gokiteconnect/v4/models" ) // Order represents a individual order response. diff --git a/ticker/ticker.go b/ticker/ticker.go index 09fbfdd..201d737 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -12,8 +12,8 @@ import ( "time" "github.com/gorilla/websocket" - kiteconnect "github.com/zerodha/gokiteconnect/v3" - "github.com/zerodha/gokiteconnect/v3/models" + kiteconnect "github.com/zerodha/gokiteconnect/v4" + "github.com/zerodha/gokiteconnect/v4/models" ) // Mode represents available ticker modes. diff --git a/user.go b/user.go index 9a97aae..461f636 100644 --- a/user.go +++ b/user.go @@ -6,7 +6,7 @@ import ( "net/http" "net/url" - "github.com/zerodha/gokiteconnect/v3/models" + "github.com/zerodha/gokiteconnect/v4/models" ) // UserSession represents the response after a successful authentication. From 41ec8fd49d70d1c0960cb4c8195e8e8ff13b3330 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 1 Jul 2021 19:24:59 +0530 Subject: [PATCH 036/103] readme.md : Add extra step update submodules before tests --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f282fd8..d5d7215 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,7 @@ go run examples/connect/basic/connect.go ## Run unit tests ``` +git submodule update --init --recursive go test -v ``` From 899357723f72cc2dee62424e9e290563a1869db5 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Fri, 2 Jul 2021 10:18:54 +0530 Subject: [PATCH 037/103] Develop (#51) * readme.md : Add step update submodules before tests * Readme.md : Seperate the initial step for tests --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 5de1e0a..0cc3e17 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,14 @@ go run examples/connect/basic/connect.go ## Run unit tests +#### Fetch mock responses for testcases + +This needs to be run initially + +``` +git submodule update --init --recursive +``` + ``` go test -v ``` From a71d285d16fce61a92a91c4421cfb2ab4761302e Mon Sep 17 00:00:00 2001 From: Vishnu Sudhakaran Date: Fri, 9 Jul 2021 14:00:50 +0530 Subject: [PATCH 038/103] Added missing fields in mutualfunds SIP structs and UserProfile (#57) * Added in UserProfile which gives meta data like demat consent in user profile API call * Added SipType and StepUp param for SIP response struct and SIP POST and PUT params * Changed meta in UserProfile to a struct from json RawMessage * Changed stepup in SIP response to a struct from json RawMessage --- mutualfunds.go | 7 +++++++ user.go | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/mutualfunds.go b/mutualfunds.go index ee32c9c..b6f92c7 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -69,6 +69,9 @@ type MFOrders []MFOrder // MFAllottedISINs represents a list of all ISINs in which atleast one allotment is present. type MFAllottedISINs []string +// MFSIPStepUp represents stepup date and percentage for SIPs. +type MFSIPStepUp map[string]int + // MFSIP represents a individual mutualfund SIP response. type MFSIP struct { ID string `json:"sip_id"` @@ -89,6 +92,7 @@ type MFSIP struct { CompletedInstalments int `json:"completed_instalments"` NextInstalment string `json:"next_instalment"` TriggerPrice float64 `json:"trigger_price"` + StepUp MFSIPStepUp `json:"step_up"` Tag string `json:"tag"` } @@ -124,6 +128,8 @@ type MFSIPParams struct { InstalmentDay int `json:"instalment_day" url:"instalment_day,omitempty"` InitialAmount float64 `json:"initial_amount" url:"initial_amount,omitempty"` TriggerPrice float64 `json:"trigger_price" url:"trigger_price,omitempty"` + StepUp string `json:"step_up" url:"step_up,omitempty"` + SipType string `form:"sip_type,omitempty"` Tag string `json:"tag" url:"tag,omitempty"` } @@ -133,6 +139,7 @@ type MFSIPModifyParams struct { Frequency string `json:"frequency" url:"frequency,omitempty"` InstalmentDay int `json:"instalment_day" url:"instalment_day,omitempty"` Instalments int `json:"instalments" url:"instalments,omitempty"` + StepUp string `json:"step_up" url:"step_up,omitempty"` Status string `json:"status" url:"status,omitempty"` } diff --git a/user.go b/user.go index 461f636..d1c1e9d 100644 --- a/user.go +++ b/user.go @@ -33,6 +33,11 @@ type Bank struct { Account string `json:"account"` } +// UserMeta contains meta data of the user. +type UserMeta struct { + DematConsent string `json:"demat_consent"` +} + // UserProfile represents a user's personal and financial profile. type UserProfile struct { UserName string `json:"user_name"` @@ -42,6 +47,7 @@ type UserProfile struct { Email string `json:"email"` Phone string `json:"phone"` Broker string `json:"broker"` + Meta UserMeta `json:"meta"` Products []string `json:"products"` OrderTypes []string `json:"order_types"` Exchanges []string `json:"exchanges"` From 32da450c83aa969ef46d7f4262d90fcb4c729c08 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 9 Jul 2021 14:28:15 +0530 Subject: [PATCH 039/103] fix: dont change http status code in readEnvelope (#58) --- errors.go | 40 ++++++++++++++++++++++++---------------- http.go | 2 +- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/errors.go b/errors.go index 570b6e8..edf4945 100644 --- a/errors.go +++ b/errors.go @@ -35,36 +35,44 @@ func (e Error) Error() string { // NewError creates and returns a new instace of Error // with custom error metadata. func NewError(etype string, message string, data interface{}) error { - err := Error{} - err.Message = message - err.ErrorType = etype - err.Data = data + var ( + code = http.StatusInternalServerError + ) switch etype { case GeneralError: - err.Code = http.StatusInternalServerError + code = http.StatusInternalServerError case TokenError: - err.Code = http.StatusForbidden + code = http.StatusForbidden case PermissionError: - err.Code = http.StatusForbidden + code = http.StatusForbidden case UserError: - err.Code = http.StatusForbidden + code = http.StatusForbidden case TwoFAError: - err.Code = http.StatusForbidden + code = http.StatusForbidden case OrderError: - err.Code = http.StatusBadRequest + code = http.StatusBadRequest case InputError: - err.Code = http.StatusBadRequest + code = http.StatusBadRequest case DataError: - err.Code = http.StatusGatewayTimeout + code = http.StatusGatewayTimeout case NetworkError: - err.Code = http.StatusServiceUnavailable + code = http.StatusServiceUnavailable default: - err.Code = http.StatusInternalServerError - err.ErrorType = GeneralError + code = http.StatusInternalServerError + etype = GeneralError } - return err + return newError(etype, message, code, data) +} + +func newError(etype, message string, code int, data interface{}) Error { + return Error{ + Message: message, + ErrorType: etype, + Data: data, + Code: code, + } } // GetErrorName returns an error name given an HTTP code. diff --git a/http.go b/http.go index ed2d9f5..64c69c4 100644 --- a/http.go +++ b/http.go @@ -162,7 +162,7 @@ func readEnvelope(resp HTTPResponse, obj interface{}) error { return NewError(DataError, "Error parsing response.", nil) } - return NewError(e.ErrorType, e.Message, e.Data) + return newError(e.ErrorType, e.Message, resp.Response.StatusCode, e.Data) } // We now unmarshal the body. From d9da4ac7146c9bfc454a201a8a436d4ad3f83f0f Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Fri, 9 Jul 2021 14:29:57 +0530 Subject: [PATCH 040/103] tests: add test for ticker/parsePacket (#55) --- mock_responses | 2 +- ticker/ticker.go | 34 ++++++------- ticker/ticker_test.go | 114 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+), 18 deletions(-) create mode 100644 ticker/ticker_test.go diff --git a/mock_responses b/mock_responses index 709ef6a..fd12de1 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 709ef6a18a5eb5edfc20a08123199586f04486b0 +Subproject commit fd12de13ffa49ea175f62a83a17cf27450c518bf diff --git a/ticker/ticker.go b/ticker/ticker.go index 201d737..8817c40 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -601,7 +601,7 @@ func (t *Ticker) parseBinary(inp []byte) ([]models.Tick, error) { var ticks []models.Tick for _, pkt := range pkts { - tick, err := t.parsePacket(pkt) + tick, err := parsePacket(pkt) if err != nil { return nil, err } @@ -632,7 +632,7 @@ func (t *Ticker) splitPackets(inp []byte) [][]byte { } // Parse parses a tick byte array into a tick struct. -func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { +func parsePacket(b []byte) (models.Tick, error) { var ( tk = binary.BigEndian.Uint32(b[0:4]) seg = tk & 0xFF @@ -647,15 +647,15 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { InstrumentToken: tk, IsTradable: isTradable, IsIndex: isIndex, - LastPrice: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))), + LastPrice: convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))), }, nil } // Parse index mode full and mode quote data if len(b) == modeQuoteIndexPacketLength || len(b) == modeFullIndexLength { var ( - lastPrice = t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))) - closePrice = t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[20:24]))) + lastPrice = convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))) + closePrice = convertPrice(seg, float64(binary.BigEndian.Uint32(b[20:24]))) ) tick := models.Tick{ @@ -666,9 +666,9 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { LastPrice: lastPrice, NetChange: lastPrice - closePrice, OHLC: models.OHLC{ - High: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[8:12]))), - Low: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[12:16]))), - Open: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[16:20]))), + High: convertPrice(seg, float64(binary.BigEndian.Uint32(b[8:12]))), + Low: convertPrice(seg, float64(binary.BigEndian.Uint32(b[12:16]))), + Open: convertPrice(seg, float64(binary.BigEndian.Uint32(b[16:20]))), Close: closePrice, }} @@ -683,8 +683,8 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { // Parse mode quote. var ( - lastPrice = t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))) - closePrice = t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[40:44]))) + lastPrice = convertPrice(seg, float64(binary.BigEndian.Uint32(b[4:8]))) + closePrice = convertPrice(seg, float64(binary.BigEndian.Uint32(b[40:44]))) ) // Mode quote data. @@ -695,14 +695,14 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { IsIndex: isIndex, LastPrice: lastPrice, LastTradedQuantity: binary.BigEndian.Uint32(b[8:12]), - AverageTradePrice: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[12:16]))), + AverageTradePrice: convertPrice(seg, float64(binary.BigEndian.Uint32(b[12:16]))), VolumeTraded: binary.BigEndian.Uint32(b[16:20]), TotalBuyQuantity: binary.BigEndian.Uint32(b[20:24]), TotalSellQuantity: binary.BigEndian.Uint32(b[24:28]), OHLC: models.OHLC{ - Open: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[28:32]))), - High: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[32:36]))), - Low: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[36:40]))), + Open: convertPrice(seg, float64(binary.BigEndian.Uint32(b[28:32]))), + High: convertPrice(seg, float64(binary.BigEndian.Uint32(b[32:36]))), + Low: convertPrice(seg, float64(binary.BigEndian.Uint32(b[36:40]))), Close: closePrice, }, } @@ -727,13 +727,13 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { for i := 0; i < depthItems; i++ { tick.Depth.Buy[i] = models.DepthItem{ Quantity: binary.BigEndian.Uint32(b[buyPos : buyPos+4]), - Price: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[buyPos+4:buyPos+8]))), + Price: convertPrice(seg, float64(binary.BigEndian.Uint32(b[buyPos+4:buyPos+8]))), Orders: uint32(binary.BigEndian.Uint16(b[buyPos+8 : buyPos+10])), } tick.Depth.Sell[i] = models.DepthItem{ Quantity: binary.BigEndian.Uint32(b[sellPos : sellPos+4]), - Price: t.convertPrice(seg, float64(binary.BigEndian.Uint32(b[sellPos+4:sellPos+8]))), + Price: convertPrice(seg, float64(binary.BigEndian.Uint32(b[sellPos+4:sellPos+8]))), Orders: uint32(binary.BigEndian.Uint16(b[sellPos+8 : sellPos+10])), } @@ -747,7 +747,7 @@ func (t *Ticker) parsePacket(b []byte) (models.Tick, error) { // convertPrice converts prices of stocks from paise to rupees // with varying decimals based on the segment. -func (t *Ticker) convertPrice(seg uint32, val float64) float64 { +func convertPrice(seg uint32, val float64) float64 { if seg == NseCD { return val / 10000000.0 } diff --git a/ticker/ticker_test.go b/ticker/ticker_test.go new file mode 100644 index 0000000..af45a7a --- /dev/null +++ b/ticker/ticker_test.go @@ -0,0 +1,114 @@ +package kiteticker + +import ( + "encoding/base64" + "io/ioutil" + "testing" + "time" + + "github.com/stretchr/testify/require" + "github.com/zerodha/gokiteconnect/v4/models" +) + +func TestParseTick(t *testing.T) { + tt := []struct { + name string + pkt []byte + expTick models.Tick + }{ + { + name: "quote packet", + pkt: loadPacket(t, "../mock_responses/ticker_quote.packet"), + expTick: models.Tick{ + Mode: "quote", + InstrumentToken: 408065, + IsTradable: true, + IsIndex: false, + Timestamp: models.Time{}, + LastTradeTime: models.Time{}, + LastPrice: 1573.15, + LastTradedQuantity: 1, + TotalBuyQuantity: 256511, + TotalSellQuantity: 360503, + VolumeTraded: 1175986, + TotalBuy: 0, + TotalSell: 0, + AverageTradePrice: 1570.33, + OI: 0, + OIDayHigh: 0, + OIDayLow: 0, + NetChange: 0, + OHLC: models.OHLC{ + Open: 1569.15, + High: 1575, + Low: 1561.05, + Close: 1567.8, + }, + Depth: models.Depth{}, + }, + }, + { + name: "full packet", + pkt: loadPacket(t, "../mock_responses/ticker_full.packet"), + expTick: models.Tick{ + Mode: "full", + InstrumentToken: 408065, + IsTradable: true, + IsIndex: false, + Timestamp: models.Time{Time: time.Unix(1625461887, 0)}, + LastTradeTime: models.Time{Time: time.Unix(1625461887, 0)}, + LastPrice: 1573.7, + LastTradedQuantity: 7, + TotalBuyQuantity: 256443, + TotalSellQuantity: 363009, + VolumeTraded: 1192471, + TotalBuy: 0, + TotalSell: 0, + AverageTradePrice: 1570.37, + OI: 0, + OIDayHigh: 0, + OIDayLow: 0, + NetChange: 5.900000000000091, + OHLC: models.OHLC{ + Open: 1569.15, + High: 1575, + Low: 1561.05, + Close: 1567.8, + }, + Depth: models.Depth{ + Buy: [5]models.DepthItem{ + {Price: 1573.4, Quantity: 5, Orders: 1}, + {Price: 1573, Quantity: 140, Orders: 2}, + {Price: 1572.95, Quantity: 2, Orders: 1}, + {Price: 1572.9, Quantity: 219, Orders: 7}, + {Price: 1572.85, Quantity: 50, Orders: 1}, + }, + Sell: [5]models.DepthItem{ + {Price: 1573.7, Quantity: 172, Orders: 3}, + {Price: 1573.75, Quantity: 44, Orders: 3}, + {Price: 1573.85, Quantity: 302, Orders: 3}, + {Price: 1573.9, Quantity: 141, Orders: 2}, + {Price: 1573.95, Quantity: 724, Orders: 5}, + }, + }, + }, + }, + } + + for _, tc := range tt { + tick, err := parsePacket([]byte(tc.pkt)) + require.Nil(t, err) + + require.Equal(t, tc.expTick, tick) + } +} + +func loadPacket(t *testing.T, fname string) []byte { + file, err := ioutil.ReadFile(fname) + require.Nil(t, err) + + pkt, err := base64.StdEncoding.DecodeString(string(file)) + require.Nil(t, err) + + return pkt +} From eb18116c80a78683eb858727c4dacc4a64ab568c Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 12 Jul 2021 22:12:37 +0530 Subject: [PATCH 041/103] fix: log only if non Error errors in readEnvelope (#59) --- http.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/http.go b/http.go index 64c69c4..359b1c4 100644 --- a/http.go +++ b/http.go @@ -148,7 +148,9 @@ func (h *httpClient) DoEnvelope(method, url string, params url.Values, headers h err = readEnvelope(resp, obj) if err != nil { - h.hLog.Printf("Error parsing JSON response: %v", err) + if _, ok := err.(Error); !ok { + h.hLog.Printf("Error parsing JSON response: %v", err) + } } return err From 34a5f969ba159ec57e9e968cff7be04f8a5aa0d3 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 6 Jul 2021 14:43:57 +0530 Subject: [PATCH 042/103] feat: add compact mode margin and basket order margins --- connect.go | 3 ++- connect_test.go | 1 + margins.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++--- margins_test.go | 36 ++++++++++++++++++++++++-- mock_responses | 2 +- 5 files changed, 101 insertions(+), 8 deletions(-) diff --git a/connect.go b/connect.go index 80f35db..3654eac 100644 --- a/connect.go +++ b/connect.go @@ -103,7 +103,8 @@ const ( URIInitHoldingsAuth string = "/portfolio/holdings/authorise" URIConvertPosition string = "/portfolio/positions" - URIOrderMargins string = "/margins/orders" + URIOrderMargins string = "/margins/orders" + URIBasketMargins string = "/margins/basket" // MF endpoints URIGetMFOrders string = "/mf/orders" diff --git a/connect_test.go b/connect_test.go index 4f0c35d..b80e784 100644 --- a/connect_test.go +++ b/connect_test.go @@ -151,6 +151,7 @@ var MockResponders = [][]string{ []string{http.MethodPost, URIPlaceMFSIP, "mf_order_response.json"}, []string{http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, []string{http.MethodPost, URIOrderMargins, "order_margins.json"}, + []string{http.MethodPost, URIBasketMargins, "basket_margins.json"}, []string{http.MethodPost, URIInitHoldingsAuth, "holdings_auth.json"}, // DELETE endpoints diff --git a/margins.go b/margins.go index 9c328e3..f3d99be 100644 --- a/margins.go +++ b/margins.go @@ -3,9 +3,10 @@ package kiteconnect import ( "encoding/json" "net/http" + "net/url" ) -// OrderMarginParam represents a position in the Margin Calculator API +// OrderMarginParam represents an order in the Margin Calculator API type OrderMarginParam struct { Exchange string `json:"exchange"` Tradingsymbol string `json:"tradingsymbol"` @@ -41,8 +42,26 @@ type OrderMargins struct { Total float64 `json:"total"` } -func (c *Client) GetOrderMargins(orderParams []OrderMarginParam) ([]OrderMargins, error) { - body, err := json.Marshal(orderParams) +// BasketMargins represents response from the Margin Calculator API for Basket orders +type BasketMargins struct { + Initial OrderMargins `json:"initial"` + Final OrderMargins `json:"final"` + Orders []OrderMargins `json:"orders"` +} + +type GetMarginParams struct { + OrderParams []OrderMarginParam + Compact bool +} + +type GetBasketParams struct { + OrderParams []OrderMarginParam + Compact bool + ConsiderPositions bool +} + +func (c *Client) GetOrderMargins(marparam GetMarginParams) ([]OrderMargins, error) { + body, err := json.Marshal(marparam.OrderParams) if err != nil { return []OrderMargins{}, err } @@ -50,7 +69,12 @@ func (c *Client) GetOrderMargins(orderParams []OrderMarginParam) ([]OrderMargins var headers http.Header = map[string][]string{} headers.Add("Content-Type", "application/json") - resp, err := c.doRaw(http.MethodPost, URIOrderMargins, body, headers) + uri := URIOrderMargins + if marparam.Compact { + uri += "?mode=compact" + } + + resp, err := c.doRaw(http.MethodPost, uri, body, headers) if err != nil { return []OrderMargins{}, err } @@ -62,3 +86,38 @@ func (c *Client) GetOrderMargins(orderParams []OrderMarginParam) ([]OrderMargins return out, nil } + +func (c *Client) GetBasketMargins(baskparam GetBasketParams) (BasketMargins, error) { + body, err := json.Marshal(baskparam.OrderParams) + if err != nil { + return BasketMargins{}, err + } + + var headers http.Header = map[string][]string{} + headers.Add("Content-Type", "application/json") + + uri := URIBasketMargins + v := url.Values{} + + if baskparam.Compact { + v.Set("mode", "compact") + } + if baskparam.ConsiderPositions { + v.Set("consider_positions", "true") + } + if qp := v.Encode(); qp != "" { + uri += "?" + qp + } + + resp, err := c.doRaw(http.MethodPost, uri, body, headers) + if err != nil { + return BasketMargins{}, err + } + + var out BasketMargins + if err := readEnvelope(resp, &out); err != nil { + return BasketMargins{}, err + } + + return out, nil +} diff --git a/margins_test.go b/margins_test.go index 3efef7b..8964b41 100644 --- a/margins_test.go +++ b/margins_test.go @@ -17,12 +17,15 @@ func (ts *TestSuite) TestGetOrderMargins(t *testing.T) { TriggerPrice: 0, } - orderResponse, err := ts.KiteConnect.GetOrderMargins([]OrderMarginParam{params}) + orderResponse, err := ts.KiteConnect.GetOrderMargins(GetMarginParams{ + OrderParams: []OrderMarginParam{params}, + Compact: true, + }) if err != nil { t.Errorf("Error while getting order margins: %v", err) } - if len(orderResponse)!= 1 { + if len(orderResponse) != 1 { t.Errorf("Incorrect response, expected len(orderResponse) to be 0, got: %v", len(orderResponse)) } @@ -30,3 +33,32 @@ func (ts *TestSuite) TestGetOrderMargins(t *testing.T) { t.Errorf("Incorrect total, expected 961.45, got: %v", orderResponse[0].Total) } } + +func (ts *TestSuite) TestGetBasketMargins(t *testing.T) { + t.Parallel() + + params := OrderMarginParam{ + Exchange: "NSE", + Tradingsymbol: "INFY", + TransactionType: "BUY", + Variety: "regular", + Product: "CNC", + OrderType: "MARKET", + Quantity: 1, + Price: 0, + TriggerPrice: 0, + } + + orderResponseBasket, err := ts.KiteConnect.GetBasketMargins(GetBasketParams{ + OrderParams: []OrderMarginParam{params}, + Compact: true, + ConsiderPositions: true, + }) + if err != nil { + t.Errorf("Error while getting basket order margins: %v", err) + } + + if len(orderResponseBasket.Orders) != 2 { + t.Errorf("Incorrect response, expected len(orderResponseBasket.Orders) to be 2, got: %v", len(orderResponseBasket.Orders)) + } +} diff --git a/mock_responses b/mock_responses index fd12de1..96f362b 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit fd12de13ffa49ea175f62a83a17cf27450c518bf +Subproject commit 96f362befea388f63a378033733f4e816d9571da From 679ad411c1c9c963d8de38d59bb74129be0e2554 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 27 Jul 2021 11:21:44 +0530 Subject: [PATCH 043/103] chore: bump gorilla/websocket from 1.4.0 to 1.4.2 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d3e1694..0fedf28 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.14 require ( github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 github.com/google/go-querystring v1.0.0 - github.com/gorilla/websocket v1.4.0 + github.com/gorilla/websocket v1.4.2 github.com/stretchr/testify v1.7.0 gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 ) diff --git a/go.sum b/go.sum index 3ad10e6..ff68e5a 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 h1:IlBbYij72r3CoD3f github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36/go.mod h1:/oj50ZdPq/cUjA02lMZhijk5kR31SEydKyqah1OgBuo= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= From 1605b190fc44aa33eaf05b3c4438596884c1f283 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 16 Aug 2021 13:17:36 +0530 Subject: [PATCH 044/103] fix: incorrect custom time json unmarshalling This commit adds support for unmarshalling json timestamps using RFC3339 which is the default time.Time json Marshaller. Closes #64 --- models/time.go | 2 +- orders_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/models/time.go b/models/time.go index 406730b..f270649 100644 --- a/models/time.go +++ b/models/time.go @@ -14,7 +14,7 @@ type Time struct { // List of known time formats var ( ctLayouts = []string{"2006-01-02", "2006-01-02 15:04:05"} - ctZonedLayouts = []string{"2006-01-02T15:04:05-0700"} + ctZonedLayouts = []string{"2006-01-02T15:04:05-0700", time.RFC3339} ) // UnmarshalJSON parses JSON time string with custom time formats diff --git a/orders_test.go b/orders_test.go index e928cf4..ee59808 100644 --- a/orders_test.go +++ b/orders_test.go @@ -1,6 +1,7 @@ package kiteconnect import ( + "encoding/json" "testing" "github.com/stretchr/testify/require" @@ -142,3 +143,28 @@ func (ts *TestSuite) TestExitOrder(t *testing.T) { t.Errorf("No order id returned. Error %v", err) } } + +func (ts *TestSuite) TestIssue64(t *testing.T) { + t.Parallel() + orders, err := ts.KiteConnect.GetOrders() + if err != nil { + t.Errorf("Error while fetching orders. %v", err) + } + + // Check if marshal followed by unmarshall correctly parses timestamps + ord := orders[0] + js, err := json.Marshal(ord) + if err != nil { + t.Errorf("Error while marshalling order. %v", err) + } + + var outOrd Order + err = json.Unmarshal(js, &outOrd) + if err != nil { + t.Errorf("Error while unmarshalling order. %v", err) + } + + if !ord.ExchangeTimestamp.Equal(outOrd.ExchangeTimestamp.Time) { + t.Errorf("Incorrect timestamp parsing.\nwant:\t%v\ngot:\t%v", ord.ExchangeTimestamp, outOrd.ExchangeTimestamp) + } +} From 43d0423df647e07831e7f94a47cbabb6275b9f1d Mon Sep 17 00:00:00 2001 From: Subhadeep Das Date: Wed, 1 Sep 2021 11:07:53 +0530 Subject: [PATCH 045/103] fix: json tag for low in Historical Data (#66) to maintain consistency while marshaling / unmarshaling JSON tag has been updated for `low` in `HistoricalData` --- market.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/market.go b/market.go index d01efeb..e16ed13 100644 --- a/market.go +++ b/market.go @@ -54,7 +54,7 @@ type HistoricalData struct { Date models.Time `json:"date"` Open float64 `json:"open"` High float64 `json:"high"` - Low float64 `json:"Low"` + Low float64 `json:"low"` Close float64 `json:"close"` Volume int `json:"volume"` OI int `json:"oi"` From ecdae7df43e6afa8b35209b4b3bdb61eb1ab05a6 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Thu, 2 Sep 2021 18:38:22 +0530 Subject: [PATCH 046/103] fix: position type const, comment for timestamp (#67) * add comment for tick timestamp * add position type constants --- connect.go | 4 ++++ models/snaps.go | 1 + 2 files changed, 5 insertions(+) diff --git a/connect.go b/connect.go index 3654eac..f547c26 100644 --- a/connect.go +++ b/connect.go @@ -59,6 +59,10 @@ const ( ValidityDay = "DAY" ValidityIOC = "IOC" + // Position Type + PositionTypeDay = "day" + PositionTypeOvernight = "overnight" + // Transaction type TransactionTypeBuy = "BUY" TransactionTypeSell = "SELL" diff --git a/models/snaps.go b/models/snaps.go index 479e56e..5964161 100644 --- a/models/snaps.go +++ b/models/snaps.go @@ -29,6 +29,7 @@ type Tick struct { IsTradable bool IsIndex bool + // Timestamp represents Exchange timestamp Timestamp Time LastTradeTime Time LastPrice float64 From 5bcf7adb6580ffba0312f4cc0b71dd10f059a83f Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Thu, 2 Sep 2021 18:42:05 +0530 Subject: [PATCH 047/103] bump: version const to v4.0.2 --- connect.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connect.go b/connect.go index f547c26..db7695c 100644 --- a/connect.go +++ b/connect.go @@ -25,7 +25,7 @@ type Client struct { const ( name string = "gokiteconnect" - version string = "3.0.0" + version string = "4.0.2" requestTimeout time.Duration = 7000 * time.Millisecond baseURI string = "https://api.kite.trade" loginURI string = "https://kite.trade/connect/login?api_key=%s&v=3" From c10e2019d277233958ce92199aa558ada7ab824b Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 27 Sep 2021 16:42:05 +0530 Subject: [PATCH 048/103] fix: handle price conversion for BCD segment (#68) --- ticker/ticker.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ticker/ticker.go b/ticker/ticker.go index 8817c40..1a0f57c 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -748,9 +748,13 @@ func parsePacket(b []byte) (models.Tick, error) { // convertPrice converts prices of stocks from paise to rupees // with varying decimals based on the segment. func convertPrice(seg uint32, val float64) float64 { - if seg == NseCD { + switch seg { + case NseCD: return val / 10000000.0 + case BseCD: + return val / 10000.0 + default: + return val / 100.0 } - - return val / 100.0 } + From ca4fdfb6b811a07c9e73bcc14be9d6771cc5bb98 Mon Sep 17 00:00:00 2001 From: Vishnu Sudhakaran Date: Mon, 27 Sep 2021 16:43:06 +0530 Subject: [PATCH 049/103] fix: MFSipParams SipType type fix (#69) Co-authored-by: Vishnu S --- mutualfunds.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mutualfunds.go b/mutualfunds.go index b6f92c7..44ad508 100644 --- a/mutualfunds.go +++ b/mutualfunds.go @@ -129,7 +129,7 @@ type MFSIPParams struct { InitialAmount float64 `json:"initial_amount" url:"initial_amount,omitempty"` TriggerPrice float64 `json:"trigger_price" url:"trigger_price,omitempty"` StepUp string `json:"step_up" url:"step_up,omitempty"` - SipType string `form:"sip_type,omitempty"` + SipType string `json:"sip_type" url:"sip_type,omitempty"` Tag string `json:"tag" url:"tag,omitempty"` } From acc6b64fb4a7f517ad2ab39286572dd0550b3e38 Mon Sep 17 00:00:00 2001 From: Vivek R Date: Thu, 30 Sep 2021 12:32:07 +0530 Subject: [PATCH 050/103] feat: add new margin fields - live_balance and opening_balance (#70) --- user.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/user.go b/user.go index d1c1e9d..aafba93 100644 --- a/user.go +++ b/user.go @@ -64,10 +64,12 @@ type Margins struct { // AvailableMargins represents the available margins from the margins response for a single segment. type AvailableMargins struct { - AdHocMargin float64 `json:"adhoc_margin"` - Cash float64 `json:"cash"` - Collateral float64 `json:"collateral"` - IntradayPayin float64 `json:"intraday_payin"` + AdHocMargin float64 `json:"adhoc_margin"` + Cash float64 `json:"cash"` + Collateral float64 `json:"collateral"` + IntradayPayin float64 `json:"intraday_payin"` + LiveBalance float64 `json:"live_balance"` + OpeningBalance float64 `json:"opening_balance"` } // UsedMargins represents the used margins from the margins response for a single segment. From d33d47334c1e1d6359c85433f063101f67992dac Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Mon, 4 Oct 2021 13:45:17 +0530 Subject: [PATCH 051/103] fix: update missing response fields for userprofile --- user.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/user.go b/user.go index aafba93..5242029 100644 --- a/user.go +++ b/user.go @@ -40,12 +40,12 @@ type UserMeta struct { // UserProfile represents a user's personal and financial profile. type UserProfile struct { + UserID string `json:"user_id"` UserName string `json:"user_name"` UserShortName string `json:"user_shortname"` AvatarURL string `json:"avatar_url"` UserType string `json:"user_type"` Email string `json:"email"` - Phone string `json:"phone"` Broker string `json:"broker"` Meta UserMeta `json:"meta"` Products []string `json:"products"` @@ -74,15 +74,17 @@ type AvailableMargins struct { // UsedMargins represents the used margins from the margins response for a single segment. type UsedMargins struct { - Debits float64 `json:"debits"` - Exposure float64 `json:"exposure"` - M2MRealised float64 `json:"m2m_realised"` - M2MUnrealised float64 `json:"m2m_unrealised"` - OptionPremium float64 `json:"option_premium"` - Payout float64 `json:"payout"` - Span float64 `json:"span"` - HoldingSales float64 `json:"holding_sales"` - Turnover float64 `json:"turnover"` + Debits float64 `json:"debits"` + Exposure float64 `json:"exposure"` + M2MRealised float64 `json:"m2m_realised"` + M2MUnrealised float64 `json:"m2m_unrealised"` + OptionPremium float64 `json:"option_premium"` + Payout float64 `json:"payout"` + Span float64 `json:"span"` + HoldingSales float64 `json:"holding_sales"` + Turnover float64 `json:"turnover"` + LiquidCollateral float64 `json:"liquid_collateral"` + StockCollateral float64 `json:"stock_collateral"` } // AllMargins contains both equity and commodity margins. From 0d6d0e4eb4e5523ac1a07dfa431d4a7a19a8ab7c Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Mon, 4 Oct 2021 17:01:15 +0530 Subject: [PATCH 052/103] fix: update ticker example with v4 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 23bd263..a2d24a8 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,8 @@ import ( "time" kiteconnect "github.com/zerodha/gokiteconnect/v4" - "github.com/zerodha/gokiteconnect/v4/ticker" + kitemodels "github.com/zerodha/gokiteconnect/v4/models" + kiteticker "github.com/zerodha/gokiteconnect/v4/ticker" ) var ( @@ -102,7 +103,7 @@ func onConnect() { } // Triggered when tick is recevived -func onTick(tick kiteticker.Tick) { +func onTick(tick kitemodels.Tick) { fmt.Println("Tick: ", tick) } From 82425c6fd6cd651eec11b72dc1cd03527399854d Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Mon, 4 Oct 2021 17:41:06 +0530 Subject: [PATCH 053/103] feat: add SetMode usage in ticker example --- examples/ticker/ticker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index f2b6e2a..eeb6164 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -35,6 +35,12 @@ func onConnect() { if err != nil { fmt.Println("err: ", err) } + // Set subscription mode for given list of tokens + // Default mode is Quote + err = ticker.SetMode(kiteticker.ModeFull, []uint32{53718535}) + if err != nil { + fmt.Println("err: ", err) + } } // Triggered when tick is recevived From 47e313e0a3a2cbeadfb20c3577ef29330039ba75 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 5 Oct 2021 11:51:12 +0530 Subject: [PATCH 054/103] feat: add delivery margin field --- user.go | 1 + 1 file changed, 1 insertion(+) diff --git a/user.go b/user.go index 5242029..981523b 100644 --- a/user.go +++ b/user.go @@ -85,6 +85,7 @@ type UsedMargins struct { Turnover float64 `json:"turnover"` LiquidCollateral float64 `json:"liquid_collateral"` StockCollateral float64 `json:"stock_collateral"` + Delivery float64 `json:"delivery"` } // AllMargins contains both equity and commodity margins. From 51592a6d01bd381151a37a86e8c8b25e0b3e112e Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 12 Oct 2021 18:51:22 +0530 Subject: [PATCH 055/103] fix: update holdings struct (#73) Add missing fields in holding struct --- connect.go | 1 + portfolio.go | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/connect.go b/connect.go index db7695c..0c768d5 100644 --- a/connect.go +++ b/connect.go @@ -74,6 +74,7 @@ const ( ExchangeNFO = "NFO" ExchangeBFO = "BFO" ExchangeCDS = "CDS" + ExchangeBCD = "BCD" // Margins segments MarginsEquity = "equity" diff --git a/portfolio.go b/portfolio.go index c66f1f2..9a3922c 100644 --- a/portfolio.go +++ b/portfolio.go @@ -6,6 +6,7 @@ import ( "net/url" "github.com/google/go-querystring/query" + "github.com/zerodha/gokiteconnect/v4/models" ) const ( @@ -26,13 +27,18 @@ type Holding struct { ISIN string `json:"isin"` Product string `json:"product"` - Price float64 `json:"price"` - Quantity int `json:"quantity"` - T1Quantity int `json:"t1_quantity"` - RealisedQuantity int `json:"realised_quantity"` - CollateralQuantity int `json:"collateral_quantity"` - CollateralType string `json:"collateral_type"` - + Price float64 `json:"price"` + UsedQuantity int `json:"used_quantity"` + Quantity int `json:"quantity"` + T1Quantity int `json:"t1_quantity"` + RealisedQuantity int `json:"realised_quantity"` + AuthorisedQuantity int `json:"authorised_quantity"` + AuthorisedDate models.Time `json:"authorised_date"` + OpeningQuantity int `json:"opening_quantity"` + CollateralQuantity int `json:"collateral_quantity"` + CollateralType string `json:"collateral_type"` + + Discrepancy bool `json:"discrepancy"` AveragePrice float64 `json:"average_price"` LastPrice float64 `json:"last_price"` ClosePrice float64 `json:"close_price"` From b2874ec775c186307a6453bf823d320d586e2212 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 17 Nov 2021 14:00:56 +0530 Subject: [PATCH 056/103] chore: bump mock_responses (#75) --- mock_responses | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_responses b/mock_responses index 96f362b..160358d 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 96f362befea388f63a378033733f4e816d9571da +Subproject commit 160358d324653835a1d22c8a41cb80d4bc960927 From f966e996d2ee1d5af224bf7f5d45d9b8efa7e15e Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Wed, 17 Nov 2021 16:12:12 +0530 Subject: [PATCH 057/103] feat: add unit tests for CancelOrder and SessionInvalidate (#74) --- connect_test.go | 3 ++- orders_test.go | 7 ++----- user_test.go | 8 ++++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/connect_test.go b/connect_test.go index b80e784..8aedc35 100644 --- a/connect_test.go +++ b/connect_test.go @@ -141,7 +141,7 @@ var MockResponders = [][]string{ // PUT endpoints []string{http.MethodPut, URIModifyMFSIP, "mf_sip_info.json"}, - []string{http.MethodPut, URIModifyOrder, "order_response.json"}, + []string{http.MethodPut, URIModifyOrder, "order_modify.json"}, []string{http.MethodPut, URIConvertPosition, "positions.json"}, []string{http.MethodPut, fmt.Sprintf(URIModifyGTT, 123), "gtt_modify_order.json"}, @@ -158,6 +158,7 @@ var MockResponders = [][]string{ []string{http.MethodDelete, URICancelOrder, "order_response.json"}, []string{http.MethodDelete, URICancelMFSIP, "mf_order_response.json"}, []string{http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, + []string{http.MethodDelete, URIUserSessionInvalidate, "session_logout.json"}, } // Test only function prefix with this diff --git a/orders_test.go b/orders_test.go index ee59808..9bfac85 100644 --- a/orders_test.go +++ b/orders_test.go @@ -123,11 +123,8 @@ func (ts *TestSuite) TestCancelOrder(t *testing.T) { parentOrderID := "test" orderResponse, err := ts.KiteConnect.CancelOrder("test", "test", &parentOrderID) - if err != nil { - t.Errorf("Error while placing order. %v", err) - } - if orderResponse.OrderID == "" { - t.Errorf("No order id returned. Error %v", err) + if err != nil || orderResponse.OrderID == "" { + t.Errorf("Error while placing cancel order. %v", err) } } diff --git a/user_test.go b/user_test.go index e7366de..3400dc8 100644 --- a/user_test.go +++ b/user_test.go @@ -35,3 +35,11 @@ func (ts *TestSuite) TestGetUserSegmentMargins(t *testing.T) { t.Errorf("Incorrect segment margin values.") } } + +func (ts *TestSuite) TestInvalidateAccessToken(t *testing.T) { + t.Parallel() + sessionLogout, err := ts.KiteConnect.InvalidateAccessToken() + if err != nil || !sessionLogout == true { + t.Errorf("Error while invalidating user session. Error: %v", err) + } +} From fdbe590bb5e13d8d3d879f3de397e5b6299f5427 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 21 Mar 2022 13:29:20 +0530 Subject: [PATCH 058/103] fix: ambigous user_id in json parsing (#77) --- .gitignore | 3 ++- user.go | 1 + user_test.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d162ba4..71eeca2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.chglog \ No newline at end of file +.chglog +.env \ No newline at end of file diff --git a/user.go b/user.go index 981523b..d58a7b0 100644 --- a/user.go +++ b/user.go @@ -14,6 +14,7 @@ type UserSession struct { UserProfile UserSessionTokens + UserID string `json:"user_id"` APIKey string `json:"api_key"` PublicToken string `json:"public_token"` LoginTime models.Time `json:"login_time"` diff --git a/user_test.go b/user_test.go index 3400dc8..8dd010c 100644 --- a/user_test.go +++ b/user_test.go @@ -7,7 +7,7 @@ import ( func (ts *TestSuite) TestGetUserProfile(t *testing.T) { t.Parallel() profile, err := ts.KiteConnect.GetUserProfile() - if err != nil || profile.Email == "" { + if err != nil || profile.Email == "" || profile.UserID == "" { t.Errorf("Error while reading user profile. Error: %v", err) } } From 7f5d702e0d774b6d90d16c8c8476fe4cc677b736 Mon Sep 17 00:00:00 2001 From: Avinash Utekar Date: Wed, 27 Apr 2022 10:04:03 +0530 Subject: [PATCH 059/103] fix: negative or zero reconnect delay on higher reconnects (#78) The reconnect delay is set to a negative or zero value after 34th attempt. This fix sets it to the max delay value in that case. --- ticker/ticker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ticker/ticker.go b/ticker/ticker.go index 1a0f57c..811374e 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -255,7 +255,7 @@ func (t *Ticker) ServeWithContext(ctx context.Context) { // If its a reconnect then wait exponentially based on reconnect attempt if t.reconnectAttempt > 0 { nextDelay := time.Duration(math.Pow(2, float64(t.reconnectAttempt))) * time.Second - if nextDelay > t.reconnectMaxDelay { + if nextDelay > t.reconnectMaxDelay || nextDelay <= 0 { nextDelay = t.reconnectMaxDelay } From 0542f8158cd558e70ff117ad08e300de7a155653 Mon Sep 17 00:00:00 2001 From: Rohan Date: Thu, 19 May 2022 17:00:55 +0530 Subject: [PATCH 060/103] feat: add support for iceberg and ttl orders --- connect.go | 2 ++ orders.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/connect.go b/connect.go index 0c768d5..2055af8 100644 --- a/connect.go +++ b/connect.go @@ -41,6 +41,7 @@ const ( VarietyAMO = "amo" VarietyBO = "bo" VarietyCO = "co" + VarietyIceberg = "iceberg" // Products ProductBO = "BO" @@ -58,6 +59,7 @@ const ( // Validities ValidityDay = "DAY" ValidityIOC = "IOC" + ValidityTTL = "TTL" // Position Type PositionTypeDay = "day" diff --git a/orders.go b/orders.go index dd2358e..12f2e97 100644 --- a/orders.go +++ b/orders.go @@ -33,6 +33,7 @@ type Order struct { OrderType string `json:"order_type"` TransactionType string `json:"transaction_type"` Validity string `json:"validity"` + ValidityTTL int `json:"validity_ttl"` Product string `json:"product"` Quantity float64 `json:"quantity"` DisclosedQuantity float64 `json:"disclosed_quantity"` @@ -44,6 +45,9 @@ type Order struct { PendingQuantity float64 `json:"pending_quantity"` CancelledQuantity float64 `json:"cancelled_quantity"` + IcebergLegs int `json:"iceberg_legs"` + IcebergQty int `json:"iceberg_quantity"` + Tag string `json:"tag"` Tags []string `json:"tags"` } From 831f06599d8840e18f65cc746fd8b44a0d1ef31e Mon Sep 17 00:00:00 2001 From: Rohan Date: Thu, 19 May 2022 17:38:52 +0530 Subject: [PATCH 061/103] feat: add iceberg + validity to order params --- orders.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/orders.go b/orders.go index 12f2e97..ed3cfc2 100644 --- a/orders.go +++ b/orders.go @@ -60,6 +60,7 @@ type OrderParams struct { Exchange string `url:"exchange,omitempty"` Tradingsymbol string `url:"tradingsymbol,omitempty"` Validity string `url:"validity,omitempty"` + ValidityTTL int `url:"validity_ttl,omitempty"` Product string `url:"product,omitempty"` OrderType string `url:"order_type,omitempty"` TransactionType string `url:"transaction_type,omitempty"` @@ -73,6 +74,9 @@ type OrderParams struct { Stoploss float64 `url:"stoploss,omitempty"` TrailingStoploss float64 `url:"trailing_stoploss,omitempty"` + IcebergLegs int `url:"iceberg_legs,omitempty"` + IcebergQty int `url:"iceberg_quantity,omitempty"` + Tag string `json:"tag" url:"tag,omitempty"` } From 12e187e902ba49a9879c3b3db8c432a0b63b8bc8 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Tue, 24 May 2022 12:09:00 +0530 Subject: [PATCH 062/103] chore: update test version matrix to 1.14->1.18 (#81) --- .github/workflows/go-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml index 0ecea89..36e17f8 100644 --- a/.github/workflows/go-test.yml +++ b/.github/workflows/go-test.yml @@ -13,7 +13,7 @@ jobs: ## this will contain a matrix of all of the combinations ## we wish to test again: matrix: - go-version: [1.13.x, 1.14.x, 1.15.x, 1.16.x] + go-version: [1.14.x, 1.15.x, 1.16.x, 1.17.x, 1.18.x] platform: [ubuntu-latest, macos-latest, windows-latest] ## Defines the platform for each test run From 871201cdab0c09db56e01794a23e27f2bb739d1f Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 24 May 2022 13:10:35 +0530 Subject: [PATCH 063/103] fix: Order Response struct for ice-berg orders --- orders.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/orders.go b/orders.go index ed3cfc2..95dbab8 100644 --- a/orders.go +++ b/orders.go @@ -45,9 +45,6 @@ type Order struct { PendingQuantity float64 `json:"pending_quantity"` CancelledQuantity float64 `json:"cancelled_quantity"` - IcebergLegs int `json:"iceberg_legs"` - IcebergQty int `json:"iceberg_quantity"` - Tag string `json:"tag"` Tags []string `json:"tags"` } From c721c035beed9a96c269e3052499592c064e9993 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 24 May 2022 14:18:31 +0530 Subject: [PATCH 064/103] chores: add ice-berg and TTL unit test cases --- connect_test.go | 4 ++-- mock_responses | 2 +- orders_test.go | 10 ++++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/connect_test.go b/connect_test.go index 8aedc35..387416a 100644 --- a/connect_test.go +++ b/connect_test.go @@ -148,7 +148,7 @@ var MockResponders = [][]string{ // POST endpoints []string{http.MethodPost, URIPlaceOrder, "order_response.json"}, []string{http.MethodPost, URIPlaceMFOrder, "order_response.json"}, - []string{http.MethodPost, URIPlaceMFSIP, "mf_order_response.json"}, + []string{http.MethodPost, URIPlaceMFSIP, "mf_sip_place.json"}, []string{http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, []string{http.MethodPost, URIOrderMargins, "order_margins.json"}, []string{http.MethodPost, URIBasketMargins, "basket_margins.json"}, @@ -156,7 +156,7 @@ var MockResponders = [][]string{ // DELETE endpoints []string{http.MethodDelete, URICancelOrder, "order_response.json"}, - []string{http.MethodDelete, URICancelMFSIP, "mf_order_response.json"}, + []string{http.MethodDelete, URICancelMFSIP, "mf_sip_cancel.json"}, []string{http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, []string{http.MethodDelete, URIUserSessionInvalidate, "session_logout.json"}, } diff --git a/mock_responses b/mock_responses index 160358d..5cbd680 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 160358d324653835a1d22c8a41cb80d4bc960927 +Subproject commit 5cbd68020068d3d12144814ebfab6db7ad79c015 diff --git a/orders_test.go b/orders_test.go index 9bfac85..668eae6 100644 --- a/orders_test.go +++ b/orders_test.go @@ -20,8 +20,14 @@ func (ts *TestSuite) TestGetOrders(t *testing.T) { }) t.Run("test tag parsing", func(t *testing.T) { require.Equal(t, "", orders[0].Tag) - require.Equal(t, "connect test order1", orders[3].Tag) - require.Equal(t, []string{"connect test order2", "XXXXX"}, orders[4].Tags) + require.Equal(t, "connect test order1", orders[1].Tag) + require.Equal(t, []string{"connect test order2", "XXXXX"}, orders[2].Tags) + }) + t.Run("test ice-berg and TTL orders", func(t *testing.T) { + require.Equal(t, "iceberg", orders[3].Variety) + require.Equal(t, "TTL", orders[3].Validity) + require.Equal(t, 200.0, orders[3].Meta["iceberg"].(map[string]interface{})["leg_quantity"]) + require.Equal(t, 1000.0, orders[3].Meta["iceberg"].(map[string]interface{})["total_quantity"]) }) } From bd657048067d18e0bf573a2ac88105e28c9fb21d Mon Sep 17 00:00:00 2001 From: Rohan Date: Thu, 26 May 2022 14:18:51 +0530 Subject: [PATCH 065/103] chore: improve ticker example with envVars --- examples/ticker/ticker.go | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index eeb6164..43631c4 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "os" + "strconv" "time" kiteconnect "github.com/zerodha/gokiteconnect/v4" @@ -9,9 +11,10 @@ import ( kiteticker "github.com/zerodha/gokiteconnect/v4/ticker" ) -const ( - apiKey string = "my_api_key" - apiSecret string = "my_api_secret" +var ( + apiKey string = getEnv("KITE_API_KEY", "my_api_key") + apiSecret string = getEnv("KITE_API_SECRET", "my_api_secret") + instToken int = getEnvInt("KITE_INSTRUMENT_TOKEN", 408065) ) var ( @@ -31,13 +34,14 @@ func onClose(code int, reason string) { // Triggered when connection is established and ready to send and accept data func onConnect() { fmt.Println("Connected") + fmt.Println("Subscribing to", instToken) err := ticker.Subscribe([]uint32{53718535}) if err != nil { fmt.Println("err: ", err) } // Set subscription mode for given list of tokens // Default mode is Quote - err = ticker.SetMode(kiteticker.ModeFull, []uint32{53718535}) + err = ticker.SetMode(kiteticker.ModeFull, []uint32{uint32(instToken)}) if err != nil { fmt.Println("err: ", err) } @@ -73,6 +77,7 @@ func main() { // Obtained request token after Kite Connect login flow // simulated here by scanning from stdin var requestToken string + fmt.Println("Enter request token:") fmt.Scanf("%s\n", &requestToken) // Get user details and access token @@ -97,3 +102,23 @@ func main() { // Start the connection ticker.Serve() } + +// getEnv returns the value of the environment variable provided. +func getEnv(key, fallback string) string { + if value, ok := os.LookupEnv(key); ok { + return value + } + return fallback +} + +// getEnvInt returns the value of the environment variable provided converted as int. +func getEnvInt(key string, fallback int) int { + if value, ok := os.LookupEnv(key); ok { + i, err := strconv.Atoi(value) + if err != nil { + return fallback + } + return i + } + return fallback +} From ed2d86f36b684ac777cfd887e0237bc278d3bf00 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Mon, 22 Aug 2022 14:51:38 +0530 Subject: [PATCH 066/103] chore: SetMode usage in README and update ticker example (#86) * chores: add SetMode usage in README ticker example * chores: convert instToken to uint32 --- README.md | 13 ++++++++++++- examples/ticker/ticker.go | 16 ++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a2d24a8..089e483 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,10 @@ var ( ticker *kiteticker.Ticker ) +var ( + instToken = []uint32{408065, 112129} +) + // Triggered when any error is raised func onError(err error) { fmt.Println("Error: ", err) @@ -96,10 +100,17 @@ func onClose(code int, reason string) { // Triggered when connection is established and ready to send and accept data func onConnect() { fmt.Println("Connected") - err := ticker.Subscribe([]uint32{53718535}) + err := ticker.Subscribe(instToken) if err != nil { fmt.Println("err: ", err) } + // Set subscription mode for the subscribed token + // Default mode is Quote + err = ticker.SetMode(kiteticker.ModeFull, instToken) + if err != nil { + fmt.Println("err: ", err) + } + } // Triggered when tick is recevived diff --git a/examples/ticker/ticker.go b/examples/ticker/ticker.go index 43631c4..c010c87 100644 --- a/examples/ticker/ticker.go +++ b/examples/ticker/ticker.go @@ -14,7 +14,7 @@ import ( var ( apiKey string = getEnv("KITE_API_KEY", "my_api_key") apiSecret string = getEnv("KITE_API_SECRET", "my_api_secret") - instToken int = getEnvInt("KITE_INSTRUMENT_TOKEN", 408065) + instToken uint32 = getEnvUint32("KITE_INSTRUMENT_TOKEN", 408065) ) var ( @@ -35,13 +35,13 @@ func onClose(code int, reason string) { func onConnect() { fmt.Println("Connected") fmt.Println("Subscribing to", instToken) - err := ticker.Subscribe([]uint32{53718535}) + err := ticker.Subscribe([]uint32{instToken}) if err != nil { fmt.Println("err: ", err) } // Set subscription mode for given list of tokens // Default mode is Quote - err = ticker.SetMode(kiteticker.ModeFull, []uint32{uint32(instToken)}) + err = ticker.SetMode(kiteticker.ModeFull, []uint32{instToken}) if err != nil { fmt.Println("err: ", err) } @@ -111,14 +111,14 @@ func getEnv(key, fallback string) string { return fallback } -// getEnvInt returns the value of the environment variable provided converted as int. -func getEnvInt(key string, fallback int) int { +// getEnvUint32 returns the value of the environment variable provided converted as Uint32. +func getEnvUint32(key string, fallback int) uint32 { if value, ok := os.LookupEnv(key); ok { i, err := strconv.Atoi(value) if err != nil { - return fallback + return uint32(fallback) } - return i + return uint32(i) } - return fallback + return uint32(fallback) } From 08b25bd9587c86c9465389bb5c1991106abd6153 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Thu, 25 Aug 2022 12:39:09 +0530 Subject: [PATCH 067/103] test: add test for null time (#87) --- models/time_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/time_test.go b/models/time_test.go index 228a98e..e6609dc 100644 --- a/models/time_test.go +++ b/models/time_test.go @@ -21,6 +21,7 @@ func TestCustomUnmarshalJSON(t *testing.T) { {"{\"date\":\"2006-01-02 15:04:05\"}", false}, {"{\"date\":\"2006-01-02T15:04:05-0700\"}", false}, {"{\"date\":\"2006-01-02T\"}", true}, + {"{\"date\":\"null\"}", true}, } for _, j := range testCases { From 4f5b2b37a93b163b7575dd66c5302a9cb318bbf4 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Wed, 7 Dec 2022 09:46:55 +0530 Subject: [PATCH 068/103] chore: update kiteconnect login URL (#89) --- connect.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/connect.go b/connect.go index 2055af8..a8207f6 100644 --- a/connect.go +++ b/connect.go @@ -28,7 +28,6 @@ const ( version string = "4.0.2" requestTimeout time.Duration = 7000 * time.Millisecond baseURI string = "https://api.kite.trade" - loginURI string = "https://kite.trade/connect/login?api_key=%s&v=3" kiteBaseURI string = "https://kite.zerodha.com" // Kite connect header version kiteHeaderVersion string = "3" @@ -190,7 +189,7 @@ func (c *Client) SetAccessToken(accessToken string) { // GetLoginURL gets Kite Connect login endpoint. func (c *Client) GetLoginURL() string { - return fmt.Sprintf(loginURI, c.apiKey) + return fmt.Sprintf("%s/connect/login?api_key=%s&v=%s", kiteBaseURI, c.apiKey, kiteHeaderVersion) } func (c *Client) doEnvelope(method, uri string, params url.Values, headers http.Header, v interface{}) error { From f8cc1367f6804032215e89481eba756da6a95a4b Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Thu, 22 Dec 2022 11:01:23 +0530 Subject: [PATCH 069/103] feat: add GetAuctionInstruments (#91) --- connect.go | 9 +++-- connect_test.go | 93 ++++++++++++++++++++++++----------------------- mock_responses | 2 +- portfolio.go | 33 +++++++++++++++++ portfolio_test.go | 16 ++++++++ 5 files changed, 102 insertions(+), 51 deletions(-) diff --git a/connect.go b/connect.go index a8207f6..ef9b5a7 100644 --- a/connect.go +++ b/connect.go @@ -104,10 +104,11 @@ const ( URIModifyOrder string = "/orders/%s/%s" // "/orders/{variety}/{order_id}" URICancelOrder string = "/orders/%s/%s" // "/orders/{variety}/{order_id}" - URIGetPositions string = "/portfolio/positions" - URIGetHoldings string = "/portfolio/holdings" - URIInitHoldingsAuth string = "/portfolio/holdings/authorise" - URIConvertPosition string = "/portfolio/positions" + URIGetPositions string = "/portfolio/positions" + URIGetHoldings string = "/portfolio/holdings" + URIInitHoldingsAuth string = "/portfolio/holdings/authorise" + URIAuctionInstruments string = "/portfolio/holdings/auctions" + URIConvertPosition string = "/portfolio/positions" URIOrderMargins string = "/margins/orders" URIBasketMargins string = "/margins/basket" diff --git a/connect_test.go b/connect_test.go index 387416a..bd8aae9 100644 --- a/connect_test.go +++ b/connect_test.go @@ -113,52 +113,53 @@ var MockResponders = [][]string{ // Array of [, , ] // GET endpoints - []string{http.MethodGet, URIUserProfile, "profile.json"}, - []string{http.MethodGet, URIUserMargins, "margins.json"}, - []string{http.MethodGet, URIUserMarginsSegment, "margins_equity.json"}, - []string{http.MethodGet, URIGetOrders, "orders.json"}, - []string{http.MethodGet, URIGetTrades, "trades.json"}, - []string{http.MethodGet, URIGetOrderHistory, "order_info.json"}, - []string{http.MethodGet, URIGetOrderTrades, "order_trades.json"}, - []string{http.MethodGet, URIGetPositions, "positions.json"}, - []string{http.MethodGet, URIGetHoldings, "holdings.json"}, - []string{http.MethodGet, URIGetMFOrders, "mf_orders.json"}, - []string{http.MethodGet, URIGetMFOrderInfo, "mf_orders_info.json"}, - []string{http.MethodGet, URIGetMFSIPs, "mf_sips.json"}, - []string{http.MethodGet, URIGetMFSIPInfo, "mf_sip_info.json"}, - []string{http.MethodGet, URIGetMFHoldings, "mf_holdings.json"}, - []string{http.MethodGet, fmt.Sprintf(URIGetGTT, 123), "gtt_get_order.json"}, - []string{http.MethodGet, URIGetGTTs, "gtt_get_orders.json"}, - []string{http.MethodGet, URIGetInstruments, "instruments_all.csv"}, - []string{http.MethodGet, URIGetMFInstruments, "mf_instruments.csv"}, - []string{http.MethodGet, uriGetInstrumentsExchangeTest, "instruments_nse.csv"}, - []string{http.MethodGet, uriGetHistoricalTest, "historical_minute.json"}, - []string{http.MethodGet, uriGetHistoricalWithOITest, "historical_oi.json"}, - []string{http.MethodGet, URIGetTriggerRange, "trigger_range.json"}, - []string{http.MethodGet, URIGetQuote, "quote.json"}, - []string{http.MethodGet, URIGetLTP, "ltp.json"}, - []string{http.MethodGet, URIGetOHLC, "ohlc.json"}, + {http.MethodGet, URIUserProfile, "profile.json"}, + {http.MethodGet, URIUserMargins, "margins.json"}, + {http.MethodGet, URIUserMarginsSegment, "margins_equity.json"}, + {http.MethodGet, URIGetOrders, "orders.json"}, + {http.MethodGet, URIGetTrades, "trades.json"}, + {http.MethodGet, URIGetOrderHistory, "order_info.json"}, + {http.MethodGet, URIGetOrderTrades, "order_trades.json"}, + {http.MethodGet, URIGetPositions, "positions.json"}, + {http.MethodGet, URIGetHoldings, "holdings.json"}, + {http.MethodGet, URIGetMFOrders, "mf_orders.json"}, + {http.MethodGet, URIGetMFOrderInfo, "mf_orders_info.json"}, + {http.MethodGet, URIGetMFSIPs, "mf_sips.json"}, + {http.MethodGet, URIGetMFSIPInfo, "mf_sip_info.json"}, + {http.MethodGet, URIGetMFHoldings, "mf_holdings.json"}, + {http.MethodGet, fmt.Sprintf(URIGetGTT, 123), "gtt_get_order.json"}, + {http.MethodGet, URIGetGTTs, "gtt_get_orders.json"}, + {http.MethodGet, URIGetInstruments, "instruments_all.csv"}, + {http.MethodGet, URIGetMFInstruments, "mf_instruments.csv"}, + {http.MethodGet, uriGetInstrumentsExchangeTest, "instruments_nse.csv"}, + {http.MethodGet, uriGetHistoricalTest, "historical_minute.json"}, + {http.MethodGet, uriGetHistoricalWithOITest, "historical_oi.json"}, + {http.MethodGet, URIGetTriggerRange, "trigger_range.json"}, + {http.MethodGet, URIGetQuote, "quote.json"}, + {http.MethodGet, URIGetLTP, "ltp.json"}, + {http.MethodGet, URIGetOHLC, "ohlc.json"}, + {http.MethodGet, URIAuctionInstruments, "auctions_list.json"}, // PUT endpoints - []string{http.MethodPut, URIModifyMFSIP, "mf_sip_info.json"}, - []string{http.MethodPut, URIModifyOrder, "order_modify.json"}, - []string{http.MethodPut, URIConvertPosition, "positions.json"}, - []string{http.MethodPut, fmt.Sprintf(URIModifyGTT, 123), "gtt_modify_order.json"}, + {http.MethodPut, URIModifyMFSIP, "mf_sip_info.json"}, + {http.MethodPut, URIModifyOrder, "order_modify.json"}, + {http.MethodPut, URIConvertPosition, "positions.json"}, + {http.MethodPut, fmt.Sprintf(URIModifyGTT, 123), "gtt_modify_order.json"}, // POST endpoints - []string{http.MethodPost, URIPlaceOrder, "order_response.json"}, - []string{http.MethodPost, URIPlaceMFOrder, "order_response.json"}, - []string{http.MethodPost, URIPlaceMFSIP, "mf_sip_place.json"}, - []string{http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, - []string{http.MethodPost, URIOrderMargins, "order_margins.json"}, - []string{http.MethodPost, URIBasketMargins, "basket_margins.json"}, - []string{http.MethodPost, URIInitHoldingsAuth, "holdings_auth.json"}, + {http.MethodPost, URIPlaceOrder, "order_response.json"}, + {http.MethodPost, URIPlaceMFOrder, "order_response.json"}, + {http.MethodPost, URIPlaceMFSIP, "mf_sip_place.json"}, + {http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, + {http.MethodPost, URIOrderMargins, "order_margins.json"}, + {http.MethodPost, URIBasketMargins, "basket_margins.json"}, + {http.MethodPost, URIInitHoldingsAuth, "holdings_auth.json"}, // DELETE endpoints - []string{http.MethodDelete, URICancelOrder, "order_response.json"}, - []string{http.MethodDelete, URICancelMFSIP, "mf_sip_cancel.json"}, - []string{http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, - []string{http.MethodDelete, URIUserSessionInvalidate, "session_logout.json"}, + {http.MethodDelete, URICancelOrder, "order_response.json"}, + {http.MethodDelete, URICancelMFSIP, "mf_sip_cancel.json"}, + {http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, + {http.MethodDelete, URIUserSessionInvalidate, "session_logout.json"}, } // Test only function prefix with this @@ -212,12 +213,12 @@ func (ts *TestSuite) TearDownAPITest() {} /* Run sets up the suite, runs its test cases and tears it down: - 1. Calls `ts.SetUpSuite` - 2. Seeks for any methods that have `Test` prefix, for each of them it: - a. Calls `SetUp` - b. Calls the test method itself - c. Calls `TearDown` - 3. Calls `ts.TearDownSuite` + 1. Calls `ts.SetUpSuite` + 2. Seeks for any methods that have `Test` prefix, for each of them it: + a. Calls `SetUp` + b. Calls the test method itself + c. Calls `TearDown` + 3. Calls `ts.TearDownSuite` */ func RunAPITests(t *testing.T, ts *TestSuite) { ts.SetupAPITestSuit() diff --git a/mock_responses b/mock_responses index 5cbd680..cce96db 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 5cbd68020068d3d12144814ebfab6db7ad79c015 +Subproject commit cce96db49cc12197b6849c07a4a9430833a0670b diff --git a/portfolio.go b/portfolio.go index 9a3922c..95683d8 100644 --- a/portfolio.go +++ b/portfolio.go @@ -106,6 +106,32 @@ type ConvertPositionParams struct { Quantity int `url:"quantity"` } +// AuctionInstrument represents the auction instrument available for a auction session. +type AuctionInstrument struct { + TradingSymbol string `json:"tradingsymbol"` + Exchange string `json:"exchange"` + InstrumentToken uint32 `json:"instrument_token"` + ISIN string `json:"isin"` + Product string `json:"product"` + Price float64 `json:"price"` + Quantity int `json:"quantity"` + T1Quantity int `json:"t1_quantity"` + RealisedQuantity int `json:"realised_quantity"` + AuthorisedQuantity int `json:"authorised_quantity"` + AuthorisedDate string `json:"authorised_date"` + OpeningQuantity int `json:"opening_quantity"` + CollateralQuantity int `json:"collateral_quantity"` + CollateralType string `json:"collateral_type"` + Discrepancy bool `json:"discrepancy"` + AveragePrice float64 `json:"average_price"` + LastPrice float64 `json:"last_price"` + ClosePrice float64 `json:"close_price"` + Pnl float64 `json:"pnl"` + DayChange float64 `json:"day_change"` + DayChangePercentage float64 `json:"day_change_percentage"` + AuctionNumber string `json:"auction_number"` +} + // GetHoldings gets a list of holdings. func (c *Client) GetHoldings() (Holdings, error) { var holdings Holdings @@ -113,6 +139,13 @@ func (c *Client) GetHoldings() (Holdings, error) { return holdings, err } +// GetAuctionInstruments retrieves list of available instruments for a auction session +func (c *Client) GetAuctionInstruments() ([]AuctionInstrument, error) { + var auctionInstruments []AuctionInstrument + err := c.doEnvelope(http.MethodGet, URIAuctionInstruments, nil, nil, &auctionInstruments) + return auctionInstruments, err +} + // GetPositions gets user positions. func (c *Client) GetPositions() (Positions, error) { var positions Positions diff --git a/portfolio_test.go b/portfolio_test.go index ff16811..4afbfdf 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -42,6 +42,22 @@ func (ts *TestSuite) TestGetHoldings(t *testing.T) { } } +func (ts *TestSuite) TestGetAuctionInstruments(t *testing.T) { + t.Parallel() + auctionIns, err := ts.KiteConnect.GetAuctionInstruments() + if err != nil { + t.Errorf("Error while fetching auction instrument : %v", err) + } + for _, ins := range auctionIns { + if ins.AuctionNumber == "" { + t.Errorf("Error while retrieving auction number from the auction instruments list : %v", err) + } + if ins.Quantity == 0 { + t.Errorf("Error while retrieving auction qty from the auction instruments list : %v", err) + } + } +} + func (ts *TestSuite) TestConvertPosition(t *testing.T) { t.Parallel() params := ConvertPositionParams{ From 978f71a9d43ac3f2ca180f93c4f0018518e33055 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Thu, 22 Dec 2022 13:06:20 +0530 Subject: [PATCH 070/103] feat: add auction fields & variety in place order --- connect.go | 1 + orders.go | 2 ++ orders_test.go | 1 + 3 files changed, 4 insertions(+) diff --git a/connect.go b/connect.go index ef9b5a7..f130e9f 100644 --- a/connect.go +++ b/connect.go @@ -41,6 +41,7 @@ const ( VarietyBO = "bo" VarietyCO = "co" VarietyIceberg = "iceberg" + VarietyAuction = "auction" // Products ProductBO = "BO" diff --git a/orders.go b/orders.go index 95dbab8..4e6149a 100644 --- a/orders.go +++ b/orders.go @@ -74,6 +74,8 @@ type OrderParams struct { IcebergLegs int `url:"iceberg_legs,omitempty"` IcebergQty int `url:"iceberg_quantity,omitempty"` + AuctionNumber int `url:"auction_number,omitempty"` + Tag string `json:"tag" url:"tag,omitempty"` } diff --git a/orders_test.go b/orders_test.go index 668eae6..41371cb 100644 --- a/orders_test.go +++ b/orders_test.go @@ -86,6 +86,7 @@ func (ts *TestSuite) TestPlaceOrder(t *testing.T) { Squareoff: 100, Stoploss: 100, TrailingStoploss: 100, + AuctionNumber: 7359, Tag: "test", } orderResponse, err := ts.KiteConnect.PlaceOrder("test", params) From 39bd8cd72373769d1690a62d1e6c4cd2198d82c4 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Thu, 22 Dec 2022 14:33:04 +0530 Subject: [PATCH 071/103] feat: add tests for all order varieties --- connect_test.go | 3 +++ orders_test.go | 71 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/connect_test.go b/connect_test.go index bd8aae9..c32f0c7 100644 --- a/connect_test.go +++ b/connect_test.go @@ -148,6 +148,9 @@ var MockResponders = [][]string{ // POST endpoints {http.MethodPost, URIPlaceOrder, "order_response.json"}, + {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "iceberg"), "order_response.json"}, + {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "co"), "order_response.json"}, + {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "auction"), "order_response.json"}, {http.MethodPost, URIPlaceMFOrder, "order_response.json"}, {http.MethodPost, URIPlaceMFSIP, "mf_sip_place.json"}, {http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, diff --git a/orders_test.go b/orders_test.go index 41371cb..676f3e1 100644 --- a/orders_test.go +++ b/orders_test.go @@ -86,7 +86,6 @@ func (ts *TestSuite) TestPlaceOrder(t *testing.T) { Squareoff: 100, Stoploss: 100, TrailingStoploss: 100, - AuctionNumber: 7359, Tag: "test", } orderResponse, err := ts.KiteConnect.PlaceOrder("test", params) @@ -98,6 +97,76 @@ func (ts *TestSuite) TestPlaceOrder(t *testing.T) { } } +func (ts *TestSuite) TestPlaceIceBergOrder(t *testing.T) { + t.Parallel() + params := OrderParams{ + Exchange: "test_iceberg", + Tradingsymbol: "test_iceberg", + Validity: "TTL", + Product: "test_iceberg", + OrderType: "test_iceberg", + TransactionType: "test_iceberg", + Quantity: 1000, + Price: 100, + IcebergLegs: 2, + IcebergQty: 500, + Tag: "test_iceberg", + } + orderResponse, err := ts.KiteConnect.PlaceOrder("iceberg", params) + if err != nil { + t.Errorf("Error while placing iceberg order. %v", err) + } + if orderResponse.OrderID == "" { + t.Errorf("No order id returned. Error %v", err) + } +} + +func (ts *TestSuite) TestPlaceCoOrder(t *testing.T) { + t.Parallel() + params := OrderParams{ + Exchange: "test_co", + Tradingsymbol: "test_co", + Validity: "test_co", + Product: "test_co", + OrderType: "test_co", + TransactionType: "test_co", + Quantity: 100, + Price: 101, + TriggerPrice: 100, + Tag: "test_co", + } + orderResponse, err := ts.KiteConnect.PlaceOrder("co", params) + if err != nil { + t.Errorf("Error while placing co order. %v", err) + } + if orderResponse.OrderID == "" { + t.Errorf("No order id returned. Error %v", err) + } +} + +func (ts *TestSuite) TestPlaceAuctionOrder(t *testing.T) { + t.Parallel() + params := OrderParams{ + Exchange: "test_auction", + Tradingsymbol: "test_auction", + Validity: "test_auction", + Product: "test_auction", + OrderType: "test_auction", + TransactionType: "test_auction", + Quantity: 100, + Price: 100, + AuctionNumber: 7359, + Tag: "test_auction", + } + orderResponse, err := ts.KiteConnect.PlaceOrder("auction", params) + if err != nil { + t.Errorf("Error while placing auction order. %v", err) + } + if orderResponse.OrderID == "" { + t.Errorf("No order id returned. Error %v", err) + } +} + func (ts *TestSuite) TestModifyOrder(t *testing.T) { t.Parallel() params := OrderParams{ From c7d61ddad9b5d865247959813d99f76c97a219b5 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Sat, 7 Jan 2023 13:35:11 +0530 Subject: [PATCH 072/103] feat: add charges,leverage and unit tests for order margins --- margins.go | 22 +++++++++++++++++++ margins_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++------- mock_responses | 2 +- 3 files changed, 72 insertions(+), 8 deletions(-) diff --git a/margins.go b/margins.go index f3d99be..859cade 100644 --- a/margins.go +++ b/margins.go @@ -39,9 +39,31 @@ type OrderMargins struct { Cash float64 `json:"cash"` VAR float64 `json:"var"` PNL PNL `json:"pnl"` + Leverage float64 `json:"leverage"` + Charges Charges `json:"charges"` Total float64 `json:"total"` } +// Charges represents breakdown of various charges that are applied to an order +type Charges struct { + TransactionTax float64 `json:"transaction_tax"` + TransactionTaxType string `json:"transaction_tax_type"` + ExchangeTurnoverCharge float64 `json:"exchange_turnover_charge"` + SEBITurnoverCharge float64 `json:"sebi_turnover_charge"` + Brokerage float64 `json:"brokerage"` + StampDuty float64 `json:"stamp_duty"` + GST GST `json:"gst"` + Total float64 `json:"total"` +} + +// GST represents the various GST charges +type GST struct { + IGST float64 `json:"igst"` + CGST float64 `json:"cgst"` + SGST float64 `json:"sgst"` + Total float64 `json:"total"` +} + // BasketMargins represents response from the Margin Calculator API for Basket orders type BasketMargins struct { Initial OrderMargins `json:"initial"` diff --git a/margins_test.go b/margins_test.go index 8964b41..43aea1c 100644 --- a/margins_test.go +++ b/margins_test.go @@ -17,20 +17,62 @@ func (ts *TestSuite) TestGetOrderMargins(t *testing.T) { TriggerPrice: 0, } - orderResponse, err := ts.KiteConnect.GetOrderMargins(GetMarginParams{ + compactOrderResp, err := ts.KiteConnect.GetOrderMargins(GetMarginParams{ OrderParams: []OrderMarginParam{params}, Compact: true, }) if err != nil { - t.Errorf("Error while getting order margins: %v", err) + t.Errorf("Error while getting compact order margins: %v", err) } - if len(orderResponse) != 1 { - t.Errorf("Incorrect response, expected len(orderResponse) to be 0, got: %v", len(orderResponse)) + if len(compactOrderResp) != 1 { + t.Errorf("Incorrect response length, expected len(compactOrderResp) to be 1, got: %v", len(compactOrderResp)) } - if orderResponse[0].Total != 961.45 { - t.Errorf("Incorrect total, expected 961.45, got: %v", orderResponse[0].Total) + if compactOrderResp[0].TradingSymbol != "INFY" { + t.Errorf("Incorrect tradingsymbol, expected INFY, got: %v", compactOrderResp[0].TradingSymbol) + } + + if compactOrderResp[0].Total == 0 { + t.Errorf("Incorrect compact total margins, got: %v", compactOrderResp[0].Total) + } + + // Detailed order margin tests include charges, leverage + detailOrderResp, err := ts.KiteConnect.GetOrderMargins(GetMarginParams{ + OrderParams: []OrderMarginParam{params}, + Compact: false, + }) + + if err != nil { + t.Errorf("Error while getting detailed order margins: %v", err) + } + + if detailOrderResp[0].Leverage != 1 { + t.Errorf("Incorrect leverage multiplier, expected 1x, got: %v", detailOrderResp[0].TradingSymbol) + } + + if len(detailOrderResp) != 1 { + t.Errorf("Incorrect response, expected len(detailOrderResp) to be 1, got: %v", len(detailOrderResp)) + } + + if detailOrderResp[0].Charges.TransactionTax == 0 { + t.Errorf("Incorrect TransactionTax in detailed order margins, got: %v", detailOrderResp[0].Charges.TransactionTax) + } + + if detailOrderResp[0].Charges.StampDuty == 0 { + t.Errorf("Incorrect StampDuty in detailed order margins, got: %v", detailOrderResp[0].Charges.StampDuty) + } + + if detailOrderResp[0].Charges.GST.Total == 0 { + t.Errorf("Incorrect GST in detailed order margins, got: %v", detailOrderResp[0].Charges.GST.Total) + } + + if detailOrderResp[0].Charges.Total == 0 { + t.Errorf("Incorrect charges total in detailed order margins, got: %v", detailOrderResp[0].Charges.Total) + } + + if detailOrderResp[0].Total == 0 { + t.Errorf("Incorrect total margin in detailed order margins, got: %v", detailOrderResp[0].Total) } } @@ -55,7 +97,7 @@ func (ts *TestSuite) TestGetBasketMargins(t *testing.T) { ConsiderPositions: true, }) if err != nil { - t.Errorf("Error while getting basket order margins: %v", err) + t.Errorf("Error while getting compact basket order margins: %v", err) } if len(orderResponseBasket.Orders) != 2 { diff --git a/mock_responses b/mock_responses index cce96db..02d0831 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit cce96db49cc12197b6849c07a4a9430833a0670b +Subproject commit 02d0831c44d30a9f4ac647a3a2c89b3c0279f317 From 4fe848f5d1cb26960ea0ee84677773c5854d8431 Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 13 Jun 2023 14:41:30 +0530 Subject: [PATCH 073/103] feat: include modified field in order response --- mock_responses | 2 +- orders.go | 5 ++++- orders_test.go | 15 ++++++++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/mock_responses b/mock_responses index 02d0831..4a069d1 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 02d0831c44d30a9f4ac647a3a2c89b3c0279f317 +Subproject commit 4a069d12778c226a6afaca205928dd391bde6ff5 diff --git a/orders.go b/orders.go index 4e6149a..508b7bf 100644 --- a/orders.go +++ b/orders.go @@ -24,6 +24,7 @@ type Order struct { ExchangeUpdateTimestamp models.Time `json:"exchange_update_timestamp"` ExchangeTimestamp models.Time `json:"exchange_timestamp"` Variety string `json:"variety"` + Modified bool `json:"modified"` Meta map[string]interface{} `json:"meta"` Exchange string `json:"exchange"` @@ -45,6 +46,8 @@ type Order struct { PendingQuantity float64 `json:"pending_quantity"` CancelledQuantity float64 `json:"cancelled_quantity"` + AuctionNumber string `json:"auction_number"` + Tag string `json:"tag"` Tags []string `json:"tags"` } @@ -74,7 +77,7 @@ type OrderParams struct { IcebergLegs int `url:"iceberg_legs,omitempty"` IcebergQty int `url:"iceberg_quantity,omitempty"` - AuctionNumber int `url:"auction_number,omitempty"` + AuctionNumber string `url:"auction_number,omitempty"` Tag string `json:"tag" url:"tag,omitempty"` } diff --git a/orders_test.go b/orders_test.go index 676f3e1..cd340b6 100644 --- a/orders_test.go +++ b/orders_test.go @@ -20,15 +20,21 @@ func (ts *TestSuite) TestGetOrders(t *testing.T) { }) t.Run("test tag parsing", func(t *testing.T) { require.Equal(t, "", orders[0].Tag) - require.Equal(t, "connect test order1", orders[1].Tag) - require.Equal(t, []string{"connect test order2", "XXXXX"}, orders[2].Tags) + require.Equal(t, "connect test order1", orders[4].Tag) + require.Equal(t, []string{"connect test order2", "XXXXX"}, orders[5].Tags) }) t.Run("test ice-berg and TTL orders", func(t *testing.T) { require.Equal(t, "iceberg", orders[3].Variety) + require.Equal(t, false, orders[3].Modified) require.Equal(t, "TTL", orders[3].Validity) require.Equal(t, 200.0, orders[3].Meta["iceberg"].(map[string]interface{})["leg_quantity"]) require.Equal(t, 1000.0, orders[3].Meta["iceberg"].(map[string]interface{})["total_quantity"]) }) + t.Run("test auction order", func(t *testing.T) { + require.Equal(t, "auction", orders[6].Variety) + require.Equal(t, "22", orders[6].AuctionNumber) + require.Equal(t, false, orders[6].Modified) + }) } func (ts *TestSuite) TestGetTrades(t *testing.T) { @@ -54,6 +60,9 @@ func (ts *TestSuite) TestGetOrderHistory(t *testing.T) { if order.OrderID == "" { t.Errorf("Error while fetching order id in order history. %v", err) } + if order.Modified { + t.Errorf("Error for not modified order. %v", err) + } } } @@ -155,7 +164,7 @@ func (ts *TestSuite) TestPlaceAuctionOrder(t *testing.T) { TransactionType: "test_auction", Quantity: 100, Price: 100, - AuctionNumber: 7359, + AuctionNumber: "7359", Tag: "test_auction", } orderResponse, err := ts.KiteConnect.PlaceOrder("auction", params) From afccd9c1d94484063ae1bcd5b9a6c80dd0e196a0 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 27 Jul 2023 17:18:10 +0530 Subject: [PATCH 074/103] feat: APIs for order charges --- connect.go | 1 + connect_test.go | 1 + margins.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ margins_test.go | 28 ++++++++++++++++++++++++++ mock_responses | 2 +- 5 files changed, 83 insertions(+), 1 deletion(-) diff --git a/connect.go b/connect.go index f130e9f..eeeea5e 100644 --- a/connect.go +++ b/connect.go @@ -113,6 +113,7 @@ const ( URIOrderMargins string = "/margins/orders" URIBasketMargins string = "/margins/basket" + URIOrderCharges string = "/charges/orders" // MF endpoints URIGetMFOrders string = "/mf/orders" diff --git a/connect_test.go b/connect_test.go index c32f0c7..af89948 100644 --- a/connect_test.go +++ b/connect_test.go @@ -157,6 +157,7 @@ var MockResponders = [][]string{ {http.MethodPost, URIOrderMargins, "order_margins.json"}, {http.MethodPost, URIBasketMargins, "basket_margins.json"}, {http.MethodPost, URIInitHoldingsAuth, "holdings_auth.json"}, + {http.MethodPost, URIOrderCharges, "virtual_contract_note.json"}, // DELETE endpoints {http.MethodDelete, URICancelOrder, "order_response.json"}, diff --git a/margins.go b/margins.go index 859cade..e91adad 100644 --- a/margins.go +++ b/margins.go @@ -19,6 +19,19 @@ type OrderMarginParam struct { TriggerPrice float64 `json:"trigger_price,omitempty"` } +// OrderMarginParam represents an order in the Margin Calculator API +type OrderChargesParam struct { + OrderID string `json:"order_id"` + Exchange string `json:"exchange"` + Tradingsymbol string `json:"tradingsymbol"` + TransactionType string `json:"transaction_type"` + Variety string `json:"variety"` + Product string `json:"product"` + OrderType string `json:"order_type"` + Quantity float64 `json:"quantity"` + AveragePrice float64 `json:"average_price"` +} + // PNL represents the PNL type PNL struct { Realised float64 `json:"realised"` @@ -44,6 +57,18 @@ type OrderMargins struct { Total float64 `json:"total"` } +type OrderCharges struct { + Exchange string `json:"exchange"` + Tradingsymbol string `json:"tradingsymbol"` + TransactionType string `json:"transaction_type"` + Variety string `json:"variety"` + Product string `json:"product"` + OrderType string `json:"order_type"` + Quantity float64 `json:"quantity"` + Price float64 `json:"price"` + Charges Charges `json:"charges"` +} + // Charges represents breakdown of various charges that are applied to an order type Charges struct { TransactionTax float64 `json:"transaction_tax"` @@ -82,6 +107,10 @@ type GetBasketParams struct { ConsiderPositions bool } +type GetChargesParams struct { + OrderParams []OrderChargesParam +} + func (c *Client) GetOrderMargins(marparam GetMarginParams) ([]OrderMargins, error) { body, err := json.Marshal(marparam.OrderParams) if err != nil { @@ -143,3 +172,26 @@ func (c *Client) GetBasketMargins(baskparam GetBasketParams) (BasketMargins, err return out, nil } + +func (c *Client) GetOrdersCharges(chargeParam GetChargesParams) ([]OrderCharges, error) { + body, err := json.Marshal(chargeParam.OrderParams) + if err != nil { + return []OrderCharges{}, err + } + + var headers http.Header = map[string][]string{} + headers.Add("Content-Type", "application/json") + + uri := URIOrderCharges + resp, err := c.doRaw(http.MethodPost, uri, body, headers) + if err != nil { + return []OrderCharges{}, err + } + + var out []OrderCharges + if err := readEnvelope(resp, &out); err != nil { + return []OrderCharges{}, err + } + + return out, nil +} diff --git a/margins_test.go b/margins_test.go index 43aea1c..28b8245 100644 --- a/margins_test.go +++ b/margins_test.go @@ -104,3 +104,31 @@ func (ts *TestSuite) TestGetBasketMargins(t *testing.T) { t.Errorf("Incorrect response, expected len(orderResponseBasket.Orders) to be 2, got: %v", len(orderResponseBasket.Orders)) } } + +func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { + t.Parallel() + + params := + OrderChargesParam{ + Exchange: "NSE", + Tradingsymbol: "INFY", + TransactionType: "BUY", + Variety: "regular", + Product: "CNC", + OrderType: "MARKET", + Quantity: 1, + AveragePrice: 10, + OrderID: "11111", + } + + orderResponseCharges, err := ts.KiteConnect.GetOrdersCharges(GetChargesParams{ + OrderParams: []OrderChargesParam{params}, + }) + if err != nil { + t.Errorf("Error while getting compact basket order margins: %v", err) + } + + if len(orderResponseCharges) != 1 { + t.Errorf("Incorrect response, expected len(orderResponseBasket.Orders) to be 2, got: %v", len(orderResponseCharges)) + } +} diff --git a/mock_responses b/mock_responses index 4a069d1..0dd520a 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 4a069d12778c226a6afaca205928dd391bde6ff5 +Subproject commit 0dd520a4b2d871d599920b0fbb7ba2c158499b93 From 6bce21f36e84e3856c5ede0894b9f3fbed1d0ddf Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 27 Jul 2023 17:21:25 +0530 Subject: [PATCH 075/103] chore: lint changes --- margins.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/margins.go b/margins.go index e91adad..abc1578 100644 --- a/margins.go +++ b/margins.go @@ -19,7 +19,7 @@ type OrderMarginParam struct { TriggerPrice float64 `json:"trigger_price,omitempty"` } -// OrderMarginParam represents an order in the Margin Calculator API +// OrderChargesParam represents an order in the Charges Calculator API type OrderChargesParam struct { OrderID string `json:"order_id"` Exchange string `json:"exchange"` @@ -57,6 +57,7 @@ type OrderMargins struct { Total float64 `json:"total"` } +// OrderCharges represent an item's response from the Charges calculator API type OrderCharges struct { Exchange string `json:"exchange"` Tradingsymbol string `json:"tradingsymbol"` From 84ababc55b831dd6321365289d41d1ce42351e7c Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 27 Jul 2023 17:22:33 +0530 Subject: [PATCH 076/103] chore: lint changes --- margins.go | 2 +- margins_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/margins.go b/margins.go index abc1578..d070e27 100644 --- a/margins.go +++ b/margins.go @@ -174,7 +174,7 @@ func (c *Client) GetBasketMargins(baskparam GetBasketParams) (BasketMargins, err return out, nil } -func (c *Client) GetOrdersCharges(chargeParam GetChargesParams) ([]OrderCharges, error) { +func (c *Client) GetOrderCharges(chargeParam GetChargesParams) ([]OrderCharges, error) { body, err := json.Marshal(chargeParam.OrderParams) if err != nil { return []OrderCharges{}, err diff --git a/margins_test.go b/margins_test.go index 28b8245..f8c1a9e 100644 --- a/margins_test.go +++ b/margins_test.go @@ -121,7 +121,7 @@ func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { OrderID: "11111", } - orderResponseCharges, err := ts.KiteConnect.GetOrdersCharges(GetChargesParams{ + orderResponseCharges, err := ts.KiteConnect.GetOrderCharges(GetChargesParams{ OrderParams: []OrderChargesParam{params}, }) if err != nil { From a881e5ccaa9f918cea9e9a1fbdf5821b0dbee685 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 27 Jul 2023 17:57:25 +0530 Subject: [PATCH 077/103] fix: add input testcase corresponding to mock response --- margins_test.go | 50 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/margins_test.go b/margins_test.go index f8c1a9e..bede83c 100644 --- a/margins_test.go +++ b/margins_test.go @@ -109,26 +109,50 @@ func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { t.Parallel() params := - OrderChargesParam{ - Exchange: "NSE", - Tradingsymbol: "INFY", - TransactionType: "BUY", - Variety: "regular", - Product: "CNC", - OrderType: "MARKET", - Quantity: 1, - AveragePrice: 10, - OrderID: "11111", + []OrderChargesParam{ + { + Exchange: "SBIN", + Tradingsymbol: "INFY", + TransactionType: "BUY", + Variety: "regular", + Product: "CNC", + OrderType: "MARKET", + Quantity: 1, + AveragePrice: 560, + OrderID: "11111", + }, + { + Exchange: "MCX", + Tradingsymbol: "GOLDPETAL23JULFUT", + TransactionType: "SELL", + Variety: "regular", + Product: "NRML", + OrderType: "LIMIT", + Quantity: 1, + AveragePrice: 5862, + OrderID: "11111", + }, + { + Exchange: "NFO", + Tradingsymbol: "NIFTY2371317900PE", + TransactionType: "BUY", + Variety: "regular", + Product: "NRML", + OrderType: "LIMIT", + Quantity: 100, + AveragePrice: 1.5, + OrderID: "11111", + }, } orderResponseCharges, err := ts.KiteConnect.GetOrderCharges(GetChargesParams{ - OrderParams: []OrderChargesParam{params}, + OrderParams: params, }) if err != nil { - t.Errorf("Error while getting compact basket order margins: %v", err) + t.Errorf("Error while getting order charges: %v", err) } if len(orderResponseCharges) != 1 { - t.Errorf("Incorrect response, expected len(orderResponseBasket.Orders) to be 2, got: %v", len(orderResponseCharges)) + t.Errorf("Incorrect response, expected len(orderResponseCharges) to be 3, got: %v", len(orderResponseCharges)) } } From b10c58a7740455512f5d805056a6d3a9170af507 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Thu, 27 Jul 2023 17:59:38 +0530 Subject: [PATCH 078/103] fix: add input testcase corresponding to mock response --- margins_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/margins_test.go b/margins_test.go index bede83c..38c8ba2 100644 --- a/margins_test.go +++ b/margins_test.go @@ -152,7 +152,7 @@ func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { t.Errorf("Error while getting order charges: %v", err) } - if len(orderResponseCharges) != 1 { + if len(orderResponseCharges) != 3 { t.Errorf("Incorrect response, expected len(orderResponseCharges) to be 3, got: %v", len(orderResponseCharges)) } } From fb2f9fba09c285f8f4de8b3958179f84b02d7793 Mon Sep 17 00:00:00 2001 From: Lakshay Kalbhor Date: Fri, 28 Jul 2023 11:22:35 +0530 Subject: [PATCH 079/103] fix: pass unique order_id in test cases --- margins_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/margins_test.go b/margins_test.go index 38c8ba2..e0e2a87 100644 --- a/margins_test.go +++ b/margins_test.go @@ -130,7 +130,7 @@ func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { OrderType: "LIMIT", Quantity: 1, AveragePrice: 5862, - OrderID: "11111", + OrderID: "22222", }, { Exchange: "NFO", @@ -141,7 +141,7 @@ func (ts *TestSuite) TestGetOrderCharges(t *testing.T) { OrderType: "LIMIT", Quantity: 100, AveragePrice: 1.5, - OrderID: "11111", + OrderID: "33333", }, } From f07f57d69eda6bd98cd0173c97688d8b99d982f5 Mon Sep 17 00:00:00 2001 From: Abhinand KR <43419808+abhinandkakkadi@users.noreply.github.com> Date: Thu, 31 Aug 2023 11:38:41 +0530 Subject: [PATCH 080/103] fix: synchronize access to lastPingTime in ticker struct (#99) * fix: Synchronize access to lastPingTime in Ticker struct * fix: Synchronize access to lastPingTime in Ticker struct second pass * updated lasPingTime visibility, gitignored .vscode/settings.json * update: updated as specified --- .gitignore | 3 ++- ticker/ticker.go | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 71eeca2..80d9a36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .chglog -.env \ No newline at end of file +.env +.vscode \ No newline at end of file diff --git a/ticker/ticker.go b/ticker/ticker.go index 811374e..23206e1 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -9,6 +9,7 @@ import ( "math" "net/url" "sync" + "sync/atomic" "time" "github.com/gorilla/websocket" @@ -28,7 +29,7 @@ type Ticker struct { url url.URL callbacks callbacks - lastPingTime time.Time + lastPingTime atomicTime autoReconnect bool reconnectMaxRetries int reconnectMaxDelay time.Duration @@ -41,6 +42,22 @@ type Ticker struct { cancel context.CancelFunc } +// atomicTime is wrapper over time.Time to safely access +// an updating timestamp concurrently. +type atomicTime struct { + v atomic.Value +} + +// Get returns the current timestamp. +func (b *atomicTime) Get() time.Time { + return b.v.Load().(time.Time) +} + +// Set sets the current timestamp. +func (b *atomicTime) Set(value time.Time) { + b.v.Store(value) +} + // callbacks represents callbacks available in ticker. type callbacks struct { onTick func(models.Tick) @@ -311,7 +328,7 @@ func (t *Ticker) ServeWithContext(ctx context.Context) { t.reconnectAttempt = 0 // Set current time as last ping time - t.lastPingTime = time.Now() + t.lastPingTime.Set(time.Now()) // Set on close handler t.Conn.SetCloseHandler(t.handleClose) @@ -339,6 +356,7 @@ func (t *Ticker) handleClose(code int, reason string) error { return nil } + // Trigger callback methods func (t *Ticker) triggerError(err error) { if t.callbacks.onError != nil { @@ -370,6 +388,7 @@ func (t *Ticker) triggerNoReconnect(attempt int) { } } + func (t *Ticker) triggerMessage(messageType int, message []byte) { if t.callbacks.onMessage != nil { t.callbacks.onMessage(messageType, message) @@ -401,7 +420,7 @@ func (t *Ticker) checkConnection(ctx context.Context, wg *sync.WaitGroup) { // If last ping time is greater then timeout interval then close the // existing connection and reconnect - if time.Since(t.lastPingTime) > dataTimeoutInterval { + if time.Since(t.lastPingTime.Get()) > dataTimeoutInterval { // Close the current connection without waiting for close frame if t.Conn != nil { t.Conn.Close() @@ -431,7 +450,7 @@ func (t *Ticker) readMessage(ctx context.Context, wg *sync.WaitGroup) { } // Update last ping time to check for connection - t.lastPingTime = time.Now() + t.lastPingTime.Set(time.Now()) // Trigger message. t.triggerMessage(mType, msg) From d36ecde7819232487ec5da39e8e98b126330f7a5 Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Tue, 21 Nov 2023 12:39:04 +0530 Subject: [PATCH 081/103] feat: Add Full User Profile --- connect.go | 1 + connect_test.go | 1 + user.go | 29 +++++++++++++++++++++++++++++ user_test.go | 8 ++++++++ 4 files changed, 39 insertions(+) diff --git a/connect.go b/connect.go index eeeea5e..87f63a5 100644 --- a/connect.go +++ b/connect.go @@ -94,6 +94,7 @@ const ( URIUserSessionInvalidate string = "/session/token" URIUserSessionRenew string = "/session/refresh_token" URIUserProfile string = "/user/profile" + URIFullUserProfile string = "/user/profile/full" URIUserMargins string = "/user/margins" URIUserMarginsSegment string = "/user/margins/%s" // "/user/margins/{segment}" diff --git a/connect_test.go b/connect_test.go index af89948..55251b3 100644 --- a/connect_test.go +++ b/connect_test.go @@ -114,6 +114,7 @@ var MockResponders = [][]string{ // GET endpoints {http.MethodGet, URIUserProfile, "profile.json"}, + {http.MethodGet, URIFullUserProfile, "full_profile.json"}, {http.MethodGet, URIUserMargins, "margins.json"}, {http.MethodGet, URIUserMarginsSegment, "margins_equity.json"}, {http.MethodGet, URIGetOrders, "orders.json"}, diff --git a/user.go b/user.go index d58a7b0..3c15190 100644 --- a/user.go +++ b/user.go @@ -54,6 +54,28 @@ type UserProfile struct { Exchanges []string `json:"exchanges"` } +type FullUserProfile struct { + UserID string `json:"user_id"` + UserName string `json:"user_name"` + AvatarURL string `json:"avatar_url"` + UserType string `json:"user_type"` + Email string `json:"email"` + Phone string `json:"phone"` + Broker string `json:"broker"` + TwoFAType string `json:"twofa_type"` + Banks []Bank `json:"bank_accounts"` + DPIDs []string `json:"dp_ids"` + Products []string `json:"products"` + OrderTypes []string `json:"order_types"` + Exchanges []string `json:"exchanges"` + Pan string `json:"pan"` + UserShortName string `json:"user_shortname"` + Tags []string `json:"tags"` + PasswordTimestamp string `json:"password_timestamp"` + TwoFATimestamp string `json:"twofa_timestamp"` + Meta UserMeta `json:"meta"` +} + // Margins represents the user margins for a segment. type Margins struct { Category string `json:"-"` @@ -178,6 +200,13 @@ func (c *Client) GetUserProfile() (UserProfile, error) { return userProfile, err } +// GetFullUserProfile gets full user profile. +func (c *Client) GetFullUserProfile() (FullUserProfile, error) { + var fUserProfile FullUserProfile + err := c.doEnvelope(http.MethodGet, URIFullUserProfile, nil, nil, &fUserProfile) + return fUserProfile, err +} + // GetUserMargins gets all user margins. func (c *Client) GetUserMargins() (AllMargins, error) { var allUserMargins AllMargins diff --git a/user_test.go b/user_test.go index 8dd010c..20a24c7 100644 --- a/user_test.go +++ b/user_test.go @@ -12,6 +12,14 @@ func (ts *TestSuite) TestGetUserProfile(t *testing.T) { } } +func (ts *TestSuite) TestGetFullUserProfile(t *testing.T) { + t.Parallel() + fullProfile, err := ts.KiteConnect.GetFullUserProfile() + if err != nil || fullProfile.Email == "" || fullProfile.UserID == "" { + t.Errorf("Error while reading full user profile. Error: %v", err) + } +} + func (ts *TestSuite) TestGetUserMargins(t *testing.T) { t.Parallel() margins, err := ts.KiteConnect.GetUserMargins() From 4ffcb439c90b5d28deaa548acb541c7841ca0ae3 Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Tue, 21 Nov 2023 12:50:42 +0530 Subject: [PATCH 082/103] feat: Update mock response for Full User Profile --- mock_responses | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_responses b/mock_responses index 0dd520a..b7aa6e9 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 0dd520a4b2d871d599920b0fbb7ba2c158499b93 +Subproject commit b7aa6e91c6f4d8388ccaf93070c7553baddd2b2a From b7590002402ed071f8bd0a20911a0f2bed1c99cb Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Tue, 21 Nov 2023 12:58:36 +0530 Subject: [PATCH 083/103] Add FullUserMeta for full user profile --- mock_responses | 2 +- user.go | 45 ++++++++++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/mock_responses b/mock_responses index b7aa6e9..7c3509d 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit b7aa6e91c6f4d8388ccaf93070c7553baddd2b2a +Subproject commit 7c3509d53b7b1d8ed73b5dfd8ecc8b1abf40ef1b diff --git a/user.go b/user.go index 3c15190..4cbed2f 100644 --- a/user.go +++ b/user.go @@ -39,6 +39,13 @@ type UserMeta struct { DematConsent string `json:"demat_consent"` } +// FullUserMeta contains full meta data of the user. +type FullUserMeta struct { + DematConsent string `json:"poa"` + Silo string `json:"silo"` + AccountBlocks []string `json:"account_blocks"` +} + // UserProfile represents a user's personal and financial profile. type UserProfile struct { UserID string `json:"user_id"` @@ -55,25 +62,25 @@ type UserProfile struct { } type FullUserProfile struct { - UserID string `json:"user_id"` - UserName string `json:"user_name"` - AvatarURL string `json:"avatar_url"` - UserType string `json:"user_type"` - Email string `json:"email"` - Phone string `json:"phone"` - Broker string `json:"broker"` - TwoFAType string `json:"twofa_type"` - Banks []Bank `json:"bank_accounts"` - DPIDs []string `json:"dp_ids"` - Products []string `json:"products"` - OrderTypes []string `json:"order_types"` - Exchanges []string `json:"exchanges"` - Pan string `json:"pan"` - UserShortName string `json:"user_shortname"` - Tags []string `json:"tags"` - PasswordTimestamp string `json:"password_timestamp"` - TwoFATimestamp string `json:"twofa_timestamp"` - Meta UserMeta `json:"meta"` + UserID string `json:"user_id"` + UserName string `json:"user_name"` + AvatarURL string `json:"avatar_url"` + UserType string `json:"user_type"` + Email string `json:"email"` + Phone string `json:"phone"` + Broker string `json:"broker"` + TwoFAType string `json:"twofa_type"` + Banks []Bank `json:"bank_accounts"` + DPIDs []string `json:"dp_ids"` + Products []string `json:"products"` + OrderTypes []string `json:"order_types"` + Exchanges []string `json:"exchanges"` + Pan string `json:"pan"` + UserShortName string `json:"user_shortname"` + Tags []string `json:"tags"` + PasswordTimestamp string `json:"password_timestamp"` + TwoFATimestamp string `json:"twofa_timestamp"` + Meta FullUserMeta `json:"meta"` } // Margins represents the user margins for a segment. From 1612a1adb9a3ff23494b002713d91b5a650d29e4 Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Tue, 21 Nov 2023 15:39:47 +0530 Subject: [PATCH 084/103] Make timestamps time object Use PAN instead of Pan in struct --- user.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user.go b/user.go index 4cbed2f..a696b0f 100644 --- a/user.go +++ b/user.go @@ -75,11 +75,11 @@ type FullUserProfile struct { Products []string `json:"products"` OrderTypes []string `json:"order_types"` Exchanges []string `json:"exchanges"` - Pan string `json:"pan"` + PAN string `json:"pan"` UserShortName string `json:"user_shortname"` Tags []string `json:"tags"` - PasswordTimestamp string `json:"password_timestamp"` - TwoFATimestamp string `json:"twofa_timestamp"` + PasswordTimestamp models.Time `json:"password_timestamp"` + TwoFATimestamp models.Time `json:"twofa_timestamp"` Meta FullUserMeta `json:"meta"` } From 970add147d89211b51f768d45726a4bda53d3e39 Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Tue, 21 Nov 2023 15:46:52 +0530 Subject: [PATCH 085/103] Fix tests hash --- mock_responses | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_responses b/mock_responses index 7c3509d..8afe0ed 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 7c3509d53b7b1d8ed73b5dfd8ecc8b1abf40ef1b +Subproject commit 8afe0ed9d1f0efbdf9e568859e32c33a26694aef From b92bf558b72ca98dfeb7ad39bb3cc4eff7b8e726 Mon Sep 17 00:00:00 2001 From: Jayanth Date: Mon, 29 Apr 2024 10:10:06 +0530 Subject: [PATCH 086/103] feat: allow setting product type for GTT orders --- gtt.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gtt.go b/gtt.go index c5f159e..524fefd 100644 --- a/gtt.go +++ b/gtt.go @@ -109,12 +109,17 @@ type GTTParams struct { Exchange string LastPrice float64 TransactionType string + Product string Trigger Trigger } func newGTT(o GTTParams) GTT { var orders Orders + if o.Product == "" { + o.Product = ProductCNC + } + for i := range o.Trigger.TriggerValues() { orders = append(orders, Order{ Exchange: o.Exchange, @@ -123,7 +128,7 @@ func newGTT(o GTTParams) GTT { Quantity: o.Trigger.Quantities()[i], Price: o.Trigger.LimitPrices()[i], OrderType: OrderTypeLimit, - Product: ProductCNC, + Product: o.Product, }) } return GTT{ From 06945e38f52d50148869e2486d36c36ca2f00e2c Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 29 May 2024 13:09:16 +0530 Subject: [PATCH 087/103] chore: update and fix broken go-test.yml (#105) * chore: update go-test.yml --- .github/workflows/go-test.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml index 36e17f8..9a97ff1 100644 --- a/.github/workflows/go-test.yml +++ b/.github/workflows/go-test.yml @@ -8,26 +8,22 @@ on: jobs: test: - ## We want to define a strategy for our job strategy: - ## this will contain a matrix of all of the combinations - ## we wish to test again: matrix: - go-version: [1.14.x, 1.15.x, 1.16.x, 1.17.x, 1.18.x] - platform: [ubuntu-latest, macos-latest, windows-latest] + go-version: ["1.18", "1.20", "1.21", "1.22"] + platform: [ubuntu-latest] - ## Defines the platform for each test run runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: submodules: true - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v5 with: - go-version: 1.15 - + go-version: ${{ matrix.go }} + check-latest: true - name: Run Go Test run: go test -v ./... From d1eafbfeefbaaeb55e40d7621ebd787d919361ef Mon Sep 17 00:00:00 2001 From: Kailash Nadh Date: Tue, 24 Dec 2024 16:00:35 +0530 Subject: [PATCH 088/103] Add `GetLoginURLWithparams()` to support `redir_params`. --- connect.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/connect.go b/connect.go index 87f63a5..23cb8c3 100644 --- a/connect.go +++ b/connect.go @@ -196,6 +196,12 @@ func (c *Client) GetLoginURL() string { return fmt.Sprintf("%s/connect/login?api_key=%s&v=%s", kiteBaseURI, c.apiKey, kiteHeaderVersion) } +// GetLoginURL gets Kite Connect login endpoint with redirect params appended. +func (c *Client) GetLoginURLWithparams(p url.Values) string { + return fmt.Sprintf("%s/connect/login?api_key=%s&v=%s&redirect_params=%s", + kiteBaseURI, c.apiKey, kiteHeaderVersion, url.QueryEscape(p.Encode())) +} + func (c *Client) doEnvelope(method, uri string, params url.Values, headers http.Header, v interface{}) error { if params == nil { params = url.Values{} From ac470f787ead617d9a7274a3a5bf6f4f03d3de7b Mon Sep 17 00:00:00 2001 From: Rakesh R Date: Tue, 17 Dec 2024 16:58:37 +0530 Subject: [PATCH 089/103] fix: genHolAuthURL auth URL and json tag --- portfolio.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/portfolio.go b/portfolio.go index 95683d8..e986020 100644 --- a/portfolio.go +++ b/portfolio.go @@ -192,7 +192,7 @@ type HoldingAuthParams struct { // HoldingsAuthParams represents the response from initiating holdings authorization type HoldingsAuthResp struct { RequestID string `json:"request_id"` - RedirectURL string + RedirectURL string `json:"redirect_url"` } // InitiateHoldingsAuth initiates the holdings authorization flow. It accepts an optional @@ -237,5 +237,5 @@ func (c *Client) InitiateHoldingsAuth(haps HoldingAuthParams) (HoldingsAuthResp, } func genHolAuthURL(apiKey, reqID string) string { - return kiteBaseURI + "/connect/portfolio/authorize/holdings/" + apiKey + "/" + reqID + return kiteBaseURI + "/connect/portfolio/authorise/holdings/" + apiKey + "/" + reqID } From 36d35f427ef34a34695ec79a7c9efe6ccdd88f44 Mon Sep 17 00:00:00 2001 From: Rakesh Ranjan Date: Fri, 17 Jan 2025 13:52:49 +0530 Subject: [PATCH 090/103] feat: add mtf in holdings and orders --- connect.go | 1 + mock_responses | 2 +- orders_test.go | 25 +++++++++++++++++++++++++ portfolio.go | 11 +++++++++++ portfolio_test.go | 7 +++++++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/connect.go b/connect.go index 23cb8c3..3dc64b9 100644 --- a/connect.go +++ b/connect.go @@ -49,6 +49,7 @@ const ( ProductMIS = "MIS" ProductCNC = "CNC" ProductNRML = "NRML" + ProductMTF = "MTF" // Order types OrderTypeMarket = "MARKET" diff --git a/mock_responses b/mock_responses index 8afe0ed..7508355 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 8afe0ed9d1f0efbdf9e568859e32c33a26694aef +Subproject commit 7508355ed065efe5304f8ef4b2d521b2e24b8a20 diff --git a/orders_test.go b/orders_test.go index cd340b6..b37018c 100644 --- a/orders_test.go +++ b/orders_test.go @@ -35,6 +35,9 @@ func (ts *TestSuite) TestGetOrders(t *testing.T) { require.Equal(t, "22", orders[6].AuctionNumber) require.Equal(t, false, orders[6].Modified) }) + t.Run("test mtf order", func(t *testing.T) { + require.Equal(t, "MTF", orders[7].Product) + }) } func (ts *TestSuite) TestGetTrades(t *testing.T) { @@ -176,6 +179,28 @@ func (ts *TestSuite) TestPlaceAuctionOrder(t *testing.T) { } } +func (ts *TestSuite) TestPlaceMTFOrder(t *testing.T) { + t.Parallel() + mtfParams := OrderParams{ + Exchange: "test_mtf", + Tradingsymbol: "test_mtf", + Validity: "test_mtf", + Product: ProductMTF, + OrderType: "test_mtf", + TransactionType: "test_mtf", + Quantity: 100, + Price: 100, + Tag: "test_mtf", + } + orderResponse, err := ts.KiteConnect.PlaceOrder("test", mtfParams) + if err != nil { + t.Errorf("Error while placing mtf order. %v", err) + } + if orderResponse.OrderID == "" { + t.Errorf("No order id returned for placing mtf order. Error %v", err) + } +} + func (ts *TestSuite) TestModifyOrder(t *testing.T) { t.Parallel() params := OrderParams{ diff --git a/portfolio.go b/portfolio.go index e986020..0c5a8ba 100644 --- a/portfolio.go +++ b/portfolio.go @@ -45,6 +45,17 @@ type Holding struct { PnL float64 `json:"pnl"` DayChange float64 `json:"day_change"` DayChangePercentage float64 `json:"day_change_percentage"` + + MTF MTFHolding `json:"mtf"` +} + +// MTFHolding represents the mtf details for a holding +type MTFHolding struct { + Quantity int `json:"quantity"` + UsedQuantity int `json:"used_quantity"` + AveragePrice float64 `json:"average_price"` + Value float64 `json:"value"` + InitialMargin float64 `json:"initial_margin"` } // Holdings is a list of holdings diff --git a/portfolio_test.go b/portfolio_test.go index 4afbfdf..120f886 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -40,6 +40,13 @@ func (ts *TestSuite) TestGetHoldings(t *testing.T) { t.Errorf("Error while fetching tradingsymbol in holdings. %v", err) } } + // MTF fields + if holdings[0].MTF.Quantity != 1000 { + t.Errorf("Error while fetching quantity in mtf holdings. %v", err) + } + if holdings[0].MTF.Value != 100000 { + t.Errorf("Error while fetching value in mtf holdings. %v", err) + } } func (ts *TestSuite) TestGetAuctionInstruments(t *testing.T) { From fd4c0d640f766fbfdd33b4720367b831025ced31 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Thu, 12 Jun 2025 03:37:40 +0530 Subject: [PATCH 091/103] feat: add support for setting custom app name in useragent --- connect.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/connect.go b/connect.go index 3dc64b9..b62f54b 100644 --- a/connect.go +++ b/connect.go @@ -20,12 +20,13 @@ type Client struct { accessToken string debug bool baseURI string + appName string httpClient HTTPClient } const ( name string = "gokiteconnect" - version string = "4.0.2" + version string = "4.x.x" requestTimeout time.Duration = 7000 * time.Millisecond baseURI string = "https://api.kite.trade" kiteBaseURI string = "https://kite.zerodha.com" @@ -203,6 +204,19 @@ func (c *Client) GetLoginURLWithparams(p url.Values) string { kiteBaseURI, c.apiKey, kiteHeaderVersion, url.QueryEscape(p.Encode())) } +// SetAppName sets the application name to the Kite Connect instance. It is used to +// identify the application making the API calls using the user agent. +func (c *Client) SetAppName(appName string) { + c.appName = appName +} + +func (c *Client) userAgent() string { + if c.appName != "" { + return fmt.Sprintf("%s/%s/%s", name, version, c.appName) + } + return fmt.Sprintf("%s/%s", name, version) +} + func (c *Client) doEnvelope(method, uri string, params url.Values, headers http.Header, v interface{}) error { if params == nil { params = url.Values{} @@ -215,7 +229,7 @@ func (c *Client) doEnvelope(method, uri string, params url.Values, headers http. // Add Kite Connect version to header headers.Add("X-Kite-Version", kiteHeaderVersion) - headers.Add("User-Agent", name+"/"+version) + headers.Add("User-Agent", c.userAgent()) if c.apiKey != "" && c.accessToken != "" { authHeader := fmt.Sprintf("token %s:%s", c.apiKey, c.accessToken) @@ -235,7 +249,7 @@ func (c *Client) do(method, uri string, params url.Values, headers http.Header) } headers.Add("X-Kite-Version", kiteHeaderVersion) - headers.Add("User-Agent", name+"/"+version) + headers.Add("User-Agent", c.userAgent()) if c.apiKey != "" && c.accessToken != "" { authHeader := fmt.Sprintf("token %s:%s", c.apiKey, c.accessToken) @@ -251,7 +265,7 @@ func (c *Client) doRaw(method, uri string, reqBody []byte, headers http.Header) } headers.Add("X-Kite-Version", kiteHeaderVersion) - headers.Add("User-Agent", name+"/"+version) + headers.Add("User-Agent", c.userAgent()) if c.apiKey != "" && c.accessToken != "" { authHeader := fmt.Sprintf("token %s:%s", c.apiKey, c.accessToken) From fe526ba94dd07e05c072635b39210126025dd6cf Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Thu, 12 Jun 2025 04:22:05 +0530 Subject: [PATCH 092/103] feat: implement Alerts API --- alerts.go | 290 ++++++++++++++++++++++++++++++++++++++++++++++++ alerts_test.go | 101 +++++++++++++++++ connect_test.go | 8 ++ mock_responses | 2 +- orders_test.go | 4 + 5 files changed, 404 insertions(+), 1 deletion(-) create mode 100644 alerts.go create mode 100644 alerts_test.go diff --git a/alerts.go b/alerts.go new file mode 100644 index 0000000..e0533e1 --- /dev/null +++ b/alerts.go @@ -0,0 +1,290 @@ +package kiteconnect + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + + "github.com/zerodha/gokiteconnect/v4/models" +) + +// URI constants for Alerts API +const ( + URIAlerts = "/alerts" + URIAlert = "/alerts/%s" + URIAlertHistory = "/alerts/%s/history" +) + +// AlertType represents the type of alert. +type AlertType string + +const ( + AlertTypeSimple AlertType = "simple" + AlertTypeATO AlertType = "ato" +) + +// AlertStatus represents the status of an alert. +type AlertStatus string + +const ( + AlertStatusEnabled AlertStatus = "enabled" + AlertStatusDisabled AlertStatus = "disabled" + AlertStatusDeleted AlertStatus = "deleted" +) + +// AlertOperator represents the comparison operator. +type AlertOperator string + +const ( + AlertOperatorLE AlertOperator = "<=" + AlertOperatorGE AlertOperator = ">=" + AlertOperatorLT AlertOperator = "<" + AlertOperatorGT AlertOperator = ">" + AlertOperatorEQ AlertOperator = "==" +) + +// Alert represents a market price alert. +type Alert struct { + Type AlertType `json:"type"` + UserID string `json:"user_id"` + UUID string `json:"uuid"` + Name string `json:"name"` + Status AlertStatus `json:"status"` + DisabledReason string `json:"disabled_reason"` + LHSAttribute string `json:"lhs_attribute"` + LHSExchange string `json:"lhs_exchange"` + LHSTradingSymbol string `json:"lhs_tradingsymbol"` + Operator AlertOperator `json:"operator"` + RHSType string `json:"rhs_type"` + RHSAttribute string `json:"rhs_attribute"` + RHSExchange string `json:"rhs_exchange"` + RHSTradingSymbol string `json:"rhs_tradingsymbol"` + RHSConstant float64 `json:"rhs_constant"` + AlertCount int `json:"alert_count"` + CreatedAt models.Time `json:"created_at"` + UpdatedAt models.Time `json:"updated_at"` + Basket *Basket `json:"basket,omitempty"` +} + +// AlertParams represents parameters for creating or modifying an alert. +type AlertParams struct { + Name string // required + Type AlertType // required + LHSExchange string // required + LHSTradingSymbol string // required + LHSAttribute string // required + Operator AlertOperator // required + RHSType string // required ("constant" or "instrument") + RHSConstant float64 // required if RHSType == "constant" + RHSExchange string // required if RHSType == "instrument" + RHSTradingSymbol string // required if RHSType == "instrument" + RHSAttribute string // required if RHSType == "instrument" + Basket *Basket // required if Type == AlertTypeATO +} + +// Basket represents the basket structure for ATO alerts. +type Basket struct { + Name string `json:"name"` + Type string `json:"type"` + Tags []string `json:"tags"` + Items []BasketItem `json:"items"` +} + +// BasketItem represents an item in the basket. +type BasketItem struct { + Type string `json:"type"` + TradingSymbol string `json:"tradingsymbol"` + Exchange string `json:"exchange"` + Weight int `json:"weight"` + Params AlertOrderParams `json:"params"` + ID int `json:"id,omitempty"` + InstrumentToken int `json:"instrument_token,omitempty"` +} + +// AlertOrderParams represents order parameters for a basket item in Alerts API. +type AlertOrderParams struct { + TransactionType string `json:"transaction_type"` + Product string `json:"product"` + OrderType string `json:"order_type"` + Validity string `json:"validity"` + ValidityTTL int `json:"validity_ttl"` + Quantity int `json:"quantity"` + Price float64 `json:"price"` + TriggerPrice float64 `json:"trigger_price"` + DisclosedQuantity int `json:"disclosed_quantity"` + LastPrice float64 `json:"last_price"` + Variety string `json:"variety"` + Tags []string `json:"tags"` + Squareoff float64 `json:"squareoff"` + Stoploss float64 `json:"stoploss"` + TrailingStoploss float64 `json:"trailing_stoploss"` + IcebergLegs int `json:"iceberg_legs"` + MarketProtection float64 `json:"market_protection"` + GTT *OrderGTTParams `json:"gtt,omitempty"` +} + +// OrderGTTParams represents GTT-specific params in order. +type OrderGTTParams struct { + Target float64 `json:"target"` + Stoploss float64 `json:"stoploss"` +} + +// AlertHistory represents a single alert trigger history entry. +type AlertHistory struct { + UUID string `json:"uuid"` + Type AlertType `json:"type"` + Meta []AlertHistoryMeta `json:"meta"` + Condition string `json:"condition"` + CreatedAt models.Time `json:"created_at"` + OrderMeta interface{} `json:"order_meta"` +} + +// AlertHistoryMeta represents meta info for alert history. +type AlertHistoryMeta struct { + InstrumentToken int `json:"instrument_token"` + TradingSymbol string `json:"tradingsymbol"` + Timestamp string `json:"timestamp"` + LastPrice float64 `json:"last_price"` + OHLC OHLC `json:"ohlc"` + NetChange float64 `json:"net_change"` + Exchange string `json:"exchange"` + LastTradeTime string `json:"last_trade_time"` + LastQuantity int `json:"last_quantity"` + BuyQuantity int `json:"buy_quantity"` + SellQuantity int `json:"sell_quantity"` + Volume int `json:"volume"` + VolumeTick int `json:"volume_tick"` + AveragePrice float64 `json:"average_price"` + OI int `json:"oi"` + OIDayHigh int `json:"oi_day_high"` + OIDayLow int `json:"oi_day_low"` + LowerCircuitLimit float64 `json:"lower_circuit_limit"` + UpperCircuitLimit float64 `json:"upper_circuit_limit"` +} + +// OHLC represents open-high-low-close data. +type OHLC struct { + Open float64 `json:"open"` + High float64 `json:"high"` + Low float64 `json:"low"` + Close float64 `json:"close"` +} + +// --- Method signatures --- + +// CreateAlert creates a new alert. +func (c *Client) CreateAlert(params AlertParams) (Alert, error) { + var ( + alert Alert + values = make(url.Values) + ) + + values.Set("name", params.Name) + values.Set("type", string(params.Type)) + values.Set("lhs_exchange", params.LHSExchange) + values.Set("lhs_tradingsymbol", params.LHSTradingSymbol) + values.Set("lhs_attribute", params.LHSAttribute) + values.Set("operator", string(params.Operator)) + values.Set("rhs_type", params.RHSType) + + if params.RHSType == "constant" { + values.Set("rhs_constant", fmt.Sprintf("%v", params.RHSConstant)) + } else if params.RHSType == "instrument" { + values.Set("rhs_exchange", params.RHSExchange) + values.Set("rhs_tradingsymbol", params.RHSTradingSymbol) + values.Set("rhs_attribute", params.RHSAttribute) + } + + if params.Type == AlertTypeATO && params.Basket != nil { + basketJSON, err := json.Marshal(params.Basket) + if err != nil { + return alert, fmt.Errorf("error marshaling basket: %v", err) + } + values.Set("basket", string(basketJSON)) + } + + err := c.doEnvelope(http.MethodPost, URIAlerts, values, nil, &alert) + return alert, err +} + +// GetAlerts retrieves all alerts for a user, with optional filters. +func (c *Client) GetAlerts(filters map[string]string) ([]Alert, error) { + var ( + alerts []Alert + params = url.Values{} + ) + for k, v := range filters { + params.Set(k, v) + } + err := c.doEnvelope(http.MethodGet, URIAlerts, params, nil, &alerts) + return alerts, err +} + +// GetAlert retrieves a specific alert by UUID. +func (c *Client) GetAlert(uuid string) (Alert, error) { + var alert Alert + err := c.doEnvelope(http.MethodGet, fmt.Sprintf(URIAlert, uuid), nil, nil, &alert) + return alert, err +} + +// ModifyAlert modifies an existing alert by UUID. +func (c *Client) ModifyAlert(uuid string, params AlertParams) (Alert, error) { + var ( + alert Alert + values = make(url.Values) + ) + + values.Set("name", params.Name) + values.Set("type", string(params.Type)) + values.Set("lhs_exchange", params.LHSExchange) + values.Set("lhs_tradingsymbol", params.LHSTradingSymbol) + values.Set("lhs_attribute", params.LHSAttribute) + values.Set("operator", string(params.Operator)) + values.Set("rhs_type", params.RHSType) + + if params.RHSType == "constant" { + values.Set("rhs_constant", fmt.Sprintf("%v", params.RHSConstant)) + } else if params.RHSType == "instrument" { + values.Set("rhs_exchange", params.RHSExchange) + values.Set("rhs_tradingsymbol", params.RHSTradingSymbol) + values.Set("rhs_attribute", params.RHSAttribute) + } + + if params.Type == AlertTypeATO && params.Basket != nil { + basketJSON, err := json.Marshal(params.Basket) + if err != nil { + return alert, fmt.Errorf("error marshaling basket: %v", err) + } + values.Set("basket", string(basketJSON)) + } + + err := c.doEnvelope(http.MethodPut, fmt.Sprintf(URIAlert, uuid), values, nil, &alert) + return alert, err +} + +// DeleteAlert deletes one or more alerts by UUID. +func (c *Client) DeleteAlert(uuids ...string) error { + if len(uuids) == 0 { + return fmt.Errorf("at least one uuid must be provided") + } + params := url.Values{} + for _, uuid := range uuids { + params.Add("uuid", uuid) + } + // The API returns {"status":"success","data":null} + var resp struct { + Status string `json:"status"` + Data interface{} `json:"data"` + } + deleteURL := URIAlerts + "?" + params.Encode() + err := c.doEnvelope(http.MethodDelete, deleteURL, nil, nil, &resp) + return err +} + +// GetAlertHistory retrieves the history of a specific alert. +func (c *Client) GetAlertHistory(uuid string) ([]AlertHistory, error) { + var history []AlertHistory + err := c.doEnvelope(http.MethodGet, fmt.Sprintf(URIAlertHistory, uuid), nil, nil, &history) + return history, err +} diff --git a/alerts_test.go b/alerts_test.go new file mode 100644 index 0000000..336e21d --- /dev/null +++ b/alerts_test.go @@ -0,0 +1,101 @@ +package kiteconnect + +import ( + "testing" +) + +const testUUID = "550e8400-e29b-41d4-a716-446655440000" + +func (ts *TestSuite) TestCreateAlert(t *testing.T) { + t.Parallel() + alert, err := ts.KiteConnect.CreateAlert(AlertParams{ + Name: "NIFTY 50", + Type: AlertTypeSimple, + LHSExchange: "INDICES", + LHSTradingSymbol: "NIFTY 50", + LHSAttribute: "LastTradedPrice", + Operator: AlertOperatorGE, + RHSType: "constant", + RHSConstant: 27000, + }) + if err != nil { + t.Errorf("Error while creating alert: %v", err) + } + if alert.Name != "NIFTY 50" || alert.LHSExchange != "INDICES" { + t.Errorf("Alert fields not parsed correctly: %+v", alert) + } +} + +func (ts *TestSuite) TestGetAlerts(t *testing.T) { + t.Parallel() + alerts, err := ts.KiteConnect.GetAlerts(nil) + if err != nil { + t.Errorf("Error while fetching alerts: %v", err) + } + if len(alerts) == 0 { + t.Errorf("No alerts returned") + } + if alerts[0].UUID == "" || alerts[0].Name == "" { + t.Errorf("Alert fields not parsed correctly: %+v", alerts[0]) + } +} + +func (ts *TestSuite) TestGetAlert(t *testing.T) { + t.Parallel() + alert, err := ts.KiteConnect.GetAlert(testUUID) + if err != nil { + t.Errorf("Error while fetching alert: %v", err) + } + if alert.UUID != testUUID { + t.Errorf("Alert UUID mismatch: got %s, want %s", alert.UUID, testUUID) + } + if alert.Name == "" { + t.Errorf("Alert fields not parsed correctly: %+v", alert) + } +} + +func (ts *TestSuite) TestModifyAlert(t *testing.T) { + t.Parallel() + alert, err := ts.KiteConnect.ModifyAlert(testUUID, AlertParams{ + Name: "NIFTY 50", + Type: AlertTypeSimple, + LHSExchange: "INDICES", + LHSTradingSymbol: "NIFTY 50", + LHSAttribute: "LastTradedPrice", + Operator: AlertOperatorGE, + RHSType: "constant", + RHSConstant: 27500, + }) + if err != nil { + t.Errorf("Error while modifying alert: %v", err) + } + if alert.UUID != testUUID { + t.Errorf("Alert UUID mismatch: got %s, want %s", alert.UUID, testUUID) + } + if alert.RHSConstant != 27500 { + t.Errorf("Alert RHSConstant not updated: got %v, want 27500", alert.RHSConstant) + } +} + +func (ts *TestSuite) TestDeleteAlert(t *testing.T) { + t.Parallel() + + err := ts.KiteConnect.DeleteAlert(testUUID) + if err != nil { + t.Errorf("Error while deleting alert: %v", err) + } +} + +func (ts *TestSuite) TestGetAlertHistory(t *testing.T) { + t.Parallel() + history, err := ts.KiteConnect.GetAlertHistory(testUUID) + if err != nil { + t.Errorf("Error while fetching alert history: %v", err) + } + if len(history) == 0 { + t.Errorf("No alert history returned") + } + if history[0].UUID != testUUID { + t.Errorf("Alert history UUID mismatch: got %s, want %s", history[0].UUID, testUUID) + } +} diff --git a/connect_test.go b/connect_test.go index 55251b3..5ab3483 100644 --- a/connect_test.go +++ b/connect_test.go @@ -165,6 +165,14 @@ var MockResponders = [][]string{ {http.MethodDelete, URICancelMFSIP, "mf_sip_cancel.json"}, {http.MethodDelete, fmt.Sprintf(URIDeleteGTT, 123), "gtt_modify_order.json"}, {http.MethodDelete, URIUserSessionInvalidate, "session_logout.json"}, + + // Alerts API + {http.MethodPost, URIAlerts, "alerts_create.json"}, + {http.MethodGet, URIAlerts, "alerts_get.json"}, + {http.MethodGet, fmt.Sprintf(URIAlert, testUUID), "alerts_get_one.json"}, + {http.MethodPut, fmt.Sprintf(URIAlert, testUUID), "alerts_modify.json"}, + {http.MethodDelete, URIAlerts, "alerts_delete.json"}, + {http.MethodGet, fmt.Sprintf(URIAlertHistory, testUUID), "alerts_history.json"}, } // Test only function prefix with this diff --git a/mock_responses b/mock_responses index 7508355..5f64ee6 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 7508355ed065efe5304f8ef4b2d521b2e24b8a20 +Subproject commit 5f64ee6ec641b073a2a49ace1ccf06a92b24f6de diff --git a/orders_test.go b/orders_test.go index b37018c..2913dde 100644 --- a/orders_test.go +++ b/orders_test.go @@ -259,6 +259,10 @@ func (ts *TestSuite) TestIssue64(t *testing.T) { } // Check if marshal followed by unmarshall correctly parses timestamps + if len(orders) == 0 { + t.Errorf("No orders returned, cannot test timestamp parsing") + return + } ord := orders[0] js, err := json.Marshal(ord) if err != nil { From b95c3bd10764c898b2d846b3ab33dd2fd47f6cdb Mon Sep 17 00:00:00 2001 From: ranjanrak Date: Thu, 12 Jun 2025 17:58:38 +0530 Subject: [PATCH 093/103] feat: add examples and rename DeleteAlerts --- alerts.go | 6 ++-- alerts_test.go | 4 +-- examples/connect/advanced/connect.go | 54 ++++++++++++++++++++++++++++ mock_responses | 2 +- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/alerts.go b/alerts.go index e0533e1..59536a2 100644 --- a/alerts.go +++ b/alerts.go @@ -171,8 +171,6 @@ type OHLC struct { Close float64 `json:"close"` } -// --- Method signatures --- - // CreateAlert creates a new alert. func (c *Client) CreateAlert(params AlertParams) (Alert, error) { var ( @@ -263,8 +261,8 @@ func (c *Client) ModifyAlert(uuid string, params AlertParams) (Alert, error) { return alert, err } -// DeleteAlert deletes one or more alerts by UUID. -func (c *Client) DeleteAlert(uuids ...string) error { +// DeleteAlerts deletes one or more alerts by UUID. +func (c *Client) DeleteAlerts(uuids ...string) error { if len(uuids) == 0 { return fmt.Errorf("at least one uuid must be provided") } diff --git a/alerts_test.go b/alerts_test.go index 336e21d..45e42f3 100644 --- a/alerts_test.go +++ b/alerts_test.go @@ -77,10 +77,10 @@ func (ts *TestSuite) TestModifyAlert(t *testing.T) { } } -func (ts *TestSuite) TestDeleteAlert(t *testing.T) { +func (ts *TestSuite) TestDeleteAlerts(t *testing.T) { t.Parallel() - err := ts.KiteConnect.DeleteAlert(testUUID) + err := ts.KiteConnect.DeleteAlerts(testUUID) if err != nil { t.Errorf("Error while deleting alert: %v", err) } diff --git a/examples/connect/advanced/connect.go b/examples/connect/advanced/connect.go index 0fbd265..5ee11df 100644 --- a/examples/connect/advanced/connect.go +++ b/examples/connect/advanced/connect.go @@ -54,4 +54,58 @@ func main() { fmt.Printf("Error getting margins: %v", err) } fmt.Println("margins: ", margins) + + // Alerts examples + // Create alert + alert, err := kc.CreateAlert(kiteconnect.AlertParams{ + Name: "NIFTY 50 Alert", + Type: kiteconnect.AlertTypeSimple, + LHSExchange: "INDICES", + LHSTradingSymbol: "NIFTY 50", + LHSAttribute: "LastTradedPrice", + Operator: kiteconnect.AlertOperatorGE, + RHSType: "constant", + RHSConstant: 27000, + }) + if err != nil { + log.Printf("Error creating alert: %v", err) + return + } + fmt.Printf("Created alert: %s (UUID: %s)\n", alert.Name, alert.UUID) + + // Get all alerts + alerts, err := kc.GetAlerts(nil) + if err != nil { + log.Printf("Error fetching alerts: %v", err) + return + } + fmt.Printf("Found %d alerts:\n", len(alerts)) + for _, a := range alerts { + fmt.Printf("- %s (UUID: %s, Status: %s)\n", a.Name, a.UUID, a.Status) + } + + // Modify an alert + modifiedAlert, err := kc.ModifyAlert(alerts[0].UUID, kiteconnect.AlertParams{ + Name: "Modified NIFTY 50 Alert", + Type: kiteconnect.AlertTypeSimple, + LHSExchange: "INDICES", + LHSTradingSymbol: "NIFTY 50", + LHSAttribute: "LastTradedPrice", + Operator: kiteconnect.AlertOperatorLE, + RHSType: "constant", + RHSConstant: 28000, + }) + if err != nil { + log.Printf("Error modifying alert: %v", err) + } else { + fmt.Printf("Modified alert: %s (New threshold: %v)\n", modifiedAlert.Name, modifiedAlert.RHSConstant) + } + + // Delete single alert + err = kc.DeleteAlerts(alerts[0].UUID) + if err != nil { + log.Printf("Error deleting alert: %v", err) + } else { + fmt.Println("Alert deleted successfully") + } } diff --git a/mock_responses b/mock_responses index 5f64ee6..8e78ad7 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 5f64ee6ec641b073a2a49ace1ccf06a92b24f6de +Subproject commit 8e78ad7625c8000f5ce60a93dd082402a18c1836 From a3a303930624b0d6c6652e325a94b2df8d423661 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 15 Sep 2025 15:44:02 +0530 Subject: [PATCH 094/103] feat: add GetHoldingsSummary and GetHoldingsCompact methods Add support for new portfolio holdings endpoints: - GetHoldingsSummary() - returns holdings summary with PnL metrics - GetHoldingsCompact() - returns compact holdings list Added corresponding struct types: - HoldingSummary - contains PnL and investment summary - HoldingCompact - single compact holding item - HoldingsCompact - slice of compact holdings Added URI constants: - URIGetHoldingsSummary = "/portfolio/holdings/summary" - URIGetHoldingsCompact = "/portfolio/holdings/compact" --- connect.go | 2 ++ portfolio.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/connect.go b/connect.go index b62f54b..c9c9eb6 100644 --- a/connect.go +++ b/connect.go @@ -110,6 +110,8 @@ const ( URIGetPositions string = "/portfolio/positions" URIGetHoldings string = "/portfolio/holdings" + URIGetHoldingsSummary string = "/portfolio/holdings/summary" + URIGetHoldingsCompact string = "/portfolio/holdings/compact" URIInitHoldingsAuth string = "/portfolio/holdings/authorise" URIAuctionInstruments string = "/portfolio/holdings/auctions" URIConvertPosition string = "/portfolio/positions" diff --git a/portfolio.go b/portfolio.go index 0c5a8ba..72b63a4 100644 --- a/portfolio.go +++ b/portfolio.go @@ -61,6 +61,32 @@ type MTFHolding struct { // Holdings is a list of holdings type Holdings []Holding +// HoldingCompact represents a single compact equity holding item in the API response +type HoldingCompact struct { + Exchange string `json:"exchange"` + Tradingsymbol string `json:"tradingsymbol"` + InstrumentToken uint32 `json:"instrument_token"` + + T1Quantity int `json:"t1_quantity"` + Quantity int `json:"quantity"` + + // Hidden field, it gets nulled while sending to the outside world. + Exchanges []string `json:"exchanges,omitempty"` +} + +// HoldingsCompact represents a list of compact Holding entries. +type HoldingsCompact []HoldingCompact + +// HoldingSummary represents a summary of all holdings. +type HoldingSummary struct { + TotalPnL float64 `json:"total_pnl"` + TotalPnLPercent float64 `json:"total_pnl_percent"` + TodayPnL float64 `json:"today_pnl"` + TodayPnLPercent float64 `json:"today_pnl_percent"` + InvestedAmount float64 `json:"invested_amount"` + CurrentValue float64 `json:"current_value"` +} + // Position represents an individual position response. type Position struct { Tradingsymbol string `json:"tradingsymbol"` @@ -150,6 +176,20 @@ func (c *Client) GetHoldings() (Holdings, error) { return holdings, err } +// GetHoldingsSummary gets a summary of holdings. +func (c *Client) GetHoldingsSummary() (HoldingSummary, error) { + var summary HoldingSummary + err := c.doEnvelope(http.MethodGet, URIGetHoldingsSummary, nil, nil, &summary) + return summary, err +} + +// GetHoldingsCompact gets a compact list of holdings. +func (c *Client) GetHoldingsCompact() (HoldingsCompact, error) { + var compact HoldingsCompact + err := c.doEnvelope(http.MethodGet, URIGetHoldingsCompact, nil, nil, &compact) + return compact, err +} + // GetAuctionInstruments retrieves list of available instruments for a auction session func (c *Client) GetAuctionInstruments() ([]AuctionInstrument, error) { var auctionInstruments []AuctionInstrument From 488934d1cc3a1c13d62b9ced5c1bdbf12608c350 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Mon, 15 Sep 2025 16:00:37 +0530 Subject: [PATCH 095/103] feat: add market protection field to OrderParams Import market protection changes from PR #122 - specifically adding the MarketProtection float64 field to the OrderParams struct to support market protection functionality in order placement. --- orders.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/orders.go b/orders.go index 508b7bf..e76b1aa 100644 --- a/orders.go +++ b/orders.go @@ -79,6 +79,8 @@ type OrderParams struct { AuctionNumber string `url:"auction_number,omitempty"` + MarketProtection float64 `url:"market_protection,omitempty"` + Tag string `json:"tag" url:"tag,omitempty"` } From 24652cbbe54194e02dd8afa15570ba6abbde65a7 Mon Sep 17 00:00:00 2001 From: ranjanrak Date: Thu, 18 Sep 2025 17:21:50 +0530 Subject: [PATCH 096/103] feat: add mocks and tests for holdings summary and compact --- connect_test.go | 2 + mock_responses | 2 +- portfolio_test.go | 104 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) diff --git a/connect_test.go b/connect_test.go index 5ab3483..6a643cc 100644 --- a/connect_test.go +++ b/connect_test.go @@ -123,6 +123,8 @@ var MockResponders = [][]string{ {http.MethodGet, URIGetOrderTrades, "order_trades.json"}, {http.MethodGet, URIGetPositions, "positions.json"}, {http.MethodGet, URIGetHoldings, "holdings.json"}, + {http.MethodGet, URIGetHoldingsSummary, "holdings_summary.json"}, + {http.MethodGet, URIGetHoldingsCompact, "holdings_compact.json"}, {http.MethodGet, URIGetMFOrders, "mf_orders.json"}, {http.MethodGet, URIGetMFOrderInfo, "mf_orders_info.json"}, {http.MethodGet, URIGetMFSIPs, "mf_sips.json"}, diff --git a/mock_responses b/mock_responses index 8e78ad7..1dbca5b 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 8e78ad7625c8000f5ce60a93dd082402a18c1836 +Subproject commit 1dbca5b01eb4c2a6e9b987f260970df5a167e841 diff --git a/portfolio_test.go b/portfolio_test.go index 120f886..4c0d8b5 100644 --- a/portfolio_test.go +++ b/portfolio_test.go @@ -82,6 +82,110 @@ func (ts *TestSuite) TestConvertPosition(t *testing.T) { } } +func (ts *TestSuite) TestGetHoldingsSummary(t *testing.T) { + t.Parallel() + summary, err := ts.KiteConnect.GetHoldingsSummary() + if err != nil { + t.Errorf("Error while fetching holdings summary. %v", err) + } + + // Verify fields are populated correctly based on mock data + if summary.TotalPnL == 0 { + t.Errorf("TotalPnL should not be zero in holdings summary") + } + if summary.TotalPnLPercent == 0 { + t.Errorf("TotalPnLPercent should not be zero in holdings summary") + } + if summary.InvestedAmount == 0 { + t.Errorf("InvestedAmount should not be zero in holdings summary") + } + if summary.CurrentValue == 0 { + t.Errorf("CurrentValue should not be zero in holdings summary") + } + + // Test specific values from mock response + if summary.TotalPnL != 6798.235950000001 { + t.Errorf("Expected TotalPnL to be 6798.235950000001, got %v", summary.TotalPnL) + } + if summary.TotalPnLPercent != 16.56312500412587 { + t.Errorf("Expected TotalPnLPercent to be 16.56312500412587, got %v", summary.TotalPnLPercent) + } + if summary.TodayPnL != -76.79999999999775 { + t.Errorf("Expected TodayPnL to be -76.79999999999775, got %v", summary.TodayPnL) + } + if summary.TodayPnLPercent != -0.16026898477945015 { + t.Errorf("Expected TodayPnLPercent to be -0.16026898477945015, got %v", summary.TodayPnLPercent) + } + if summary.InvestedAmount != 41044.40405 { + t.Errorf("Expected InvestedAmount to be 41044.40405, got %v", summary.InvestedAmount) + } + if summary.CurrentValue != 47842.64000000001 { + t.Errorf("Expected CurrentValue to be 47842.64000000001, got %v", summary.CurrentValue) + } +} + +func (ts *TestSuite) TestGetHoldingsCompact(t *testing.T) { + t.Parallel() + holdings, err := ts.KiteConnect.GetHoldingsCompact() + if err != nil { + t.Errorf("Error while fetching compact holdings. %v", err) + } + + // Verify we got holdings + if len(holdings) == 0 { + t.Errorf("Expected to receive compact holdings, got empty slice") + } + + // Test specific values from mock response + if len(holdings) != 21 { + t.Errorf("Expected 21 compact holdings, got %v", len(holdings)) + } + + // Test first holding + if holdings[0].Exchange != "NSE" { + t.Errorf("Expected first holding exchange to be NSE, got %v", holdings[0].Exchange) + } + if holdings[0].Tradingsymbol != "63MOONS" { + t.Errorf("Expected first holding tradingsymbol to be 63MOONS, got %v", holdings[0].Tradingsymbol) + } + if holdings[0].InstrumentToken != 3038209 { + t.Errorf("Expected first holding instrument token to be 3038209, got %v", holdings[0].InstrumentToken) + } + if holdings[0].Quantity != 1 { + t.Errorf("Expected first holding quantity to be 1, got %v", holdings[0].Quantity) + } + + // Test a BSE holding (index 7) + if holdings[7].Exchange != "BSE" { + t.Errorf("Expected holding[7] exchange to be BSE, got %v", holdings[7].Exchange) + } + if holdings[7].Tradingsymbol != "FEDERALBNK" { + t.Errorf("Expected holding[7] tradingsymbol to be FEDERALBNK, got %v", holdings[7].Tradingsymbol) + } + + // Test last holding + lastIdx := len(holdings) - 1 + if holdings[lastIdx].Tradingsymbol != "SBIN" { + t.Errorf("Expected last holding tradingsymbol to be SBIN, got %v", holdings[lastIdx].Tradingsymbol) + } + if holdings[lastIdx].Quantity != 32 { + t.Errorf("Expected last holding quantity to be 32, got %v", holdings[lastIdx].Quantity) + } + + // Verify all holdings have required fields + for i, holding := range holdings { + if holding.Exchange == "" { + t.Errorf("Holding at index %d has empty exchange", i) + } + if holding.Tradingsymbol == "" { + t.Errorf("Holding at index %d has empty tradingsymbol", i) + } + if holding.InstrumentToken == 0 { + t.Errorf("Holding at index %d has zero instrument token", i) + } + } +} + func (ts *TestSuite) TestInitiateHoldingsAuth(t *testing.T) { t.Parallel() params := HoldingAuthParams{ From eda2c3442812ab32c5b56858052158d4fee9be88 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 12:31:50 +0530 Subject: [PATCH 097/103] feat: add autoslice support for order placement Add Autoslice bool field to OrderParams for enabling auto-slicing of large orders into smaller child orders. Update OrderResponse to handle the new v2 autoslice response format: - Parent order_id at the top level - Children array with individual order_ids or errors for partial failures New types: - OrderChild: represents a child order (order_id or error) - OrderChildError: error details for failed child orders The response is backward compatible - regular (non-autoslice) orders continue to work with just the order_id field. Note: autoslice is only supported for order placement, not modification (confirmed by techsup team). Ref: API response format change effective 27th March 2026 --- .github/workflows/go-test.yml | 8 ++- connect_test.go | 1 + mock_responses | 2 +- orders.go | 23 +++++++- orders_test.go | 106 ++++++++++++++++++++++++++++++++++ 5 files changed, 136 insertions(+), 4 deletions(-) diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml index 9a97ff1..1cb615f 100644 --- a/.github/workflows/go-test.yml +++ b/.github/workflows/go-test.yml @@ -10,7 +10,7 @@ jobs: test: strategy: matrix: - go-version: ["1.18", "1.20", "1.21", "1.22"] + go-version: ["1.21", "1.22", "1.23", "1.24"] platform: [ubuntu-latest] runs-on: ${{ matrix.platform }} @@ -23,7 +23,11 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: ${{ matrix.go }} + go-version: ${{ matrix.go-version }} check-latest: true + + - name: Run Go Vet + run: go vet ./... + - name: Run Go Test run: go test -v ./... diff --git a/connect_test.go b/connect_test.go index 6a643cc..9c497d6 100644 --- a/connect_test.go +++ b/connect_test.go @@ -154,6 +154,7 @@ var MockResponders = [][]string{ {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "iceberg"), "order_response.json"}, {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "co"), "order_response.json"}, {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "auction"), "order_response.json"}, + {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "autoslice"), "autoslice_response.json"}, {http.MethodPost, URIPlaceMFOrder, "order_response.json"}, {http.MethodPost, URIPlaceMFSIP, "mf_sip_place.json"}, {http.MethodPost, URIPlaceGTT, "gtt_place_order.json"}, diff --git a/mock_responses b/mock_responses index 1dbca5b..74e80b5 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 1dbca5b01eb4c2a6e9b987f260970df5a167e841 +Subproject commit 74e80b519182f2fc24bc65d77dcef88939b33b7b diff --git a/orders.go b/orders.go index e76b1aa..bbee5e7 100644 --- a/orders.go +++ b/orders.go @@ -81,12 +81,33 @@ type OrderParams struct { MarketProtection float64 `url:"market_protection,omitempty"` + Autoslice bool `url:"autoslice,omitempty"` + Tag string `json:"tag" url:"tag,omitempty"` } // OrderResponse represents the order place success response. +// For autoslice orders, the response includes the parent order ID +// and a list of child orders in the Children field. type OrderResponse struct { - OrderID string `json:"order_id"` + OrderID string `json:"order_id"` + Children []OrderChild `json:"children,omitempty"` +} + +// OrderChild represents a child order in an autoslice order response. +// Each child is either a successfully placed order (OrderID is set) or +// a failed order (Error is set). +type OrderChild struct { + OrderID string `json:"order_id,omitempty"` + Error *OrderChildError `json:"error,omitempty"` +} + +// OrderChildError represents an error for a child order in an autoslice response. +type OrderChildError struct { + Code int `json:"code"` + ErrorType string `json:"error_type"` + Message string `json:"message"` + Data interface{} `json:"data"` } // Trade represents an individual trade response. diff --git a/orders_test.go b/orders_test.go index 2913dde..9647b9b 100644 --- a/orders_test.go +++ b/orders_test.go @@ -251,6 +251,112 @@ func (ts *TestSuite) TestExitOrder(t *testing.T) { } } +func TestAutosliceOrderResponse(t *testing.T) { + t.Parallel() + + t.Run("success response", func(t *testing.T) { + data := []byte(`{ + "order_id": "260318190751749", + "children": [ + {"order_id": "260318190751750"}, + {"order_id": "260318190751751"} + ] + }`) + var resp OrderResponse + err := json.Unmarshal(data, &resp) + require.NoError(t, err) + require.Equal(t, "260318190751749", resp.OrderID) + require.Len(t, resp.Children, 2) + require.Equal(t, "260318190751750", resp.Children[0].OrderID) + require.Equal(t, "260318190751751", resp.Children[1].OrderID) + require.Nil(t, resp.Children[0].Error) + }) + + t.Run("partial failure response", func(t *testing.T) { + data := []byte(`{ + "order_id": "2034173850391977984", + "children": [ + {"order_id": "2034173850391977985"}, + { + "error": { + "code": 400, + "error_type": "MarginException", + "message": "Insufficient funds. Required margin is 13751.67 but available margin is 13746.26.", + "data": null + } + } + ] + }`) + var resp OrderResponse + err := json.Unmarshal(data, &resp) + require.NoError(t, err) + require.Equal(t, "2034173850391977984", resp.OrderID) + require.Len(t, resp.Children, 2) + require.Equal(t, "2034173850391977985", resp.Children[0].OrderID) + require.Nil(t, resp.Children[0].Error) + require.NotNil(t, resp.Children[1].Error) + require.Equal(t, 400, resp.Children[1].Error.Code) + require.Equal(t, "MarginException", resp.Children[1].Error.ErrorType) + require.Contains(t, resp.Children[1].Error.Message, "Insufficient funds") + }) + + t.Run("regular order backward compat", func(t *testing.T) { + data := []byte(`{"order_id": "151220000000000"}`) + var resp OrderResponse + err := json.Unmarshal(data, &resp) + require.NoError(t, err) + require.Equal(t, "151220000000000", resp.OrderID) + require.Empty(t, resp.Children) + }) +} + +func (ts *TestSuite) TestPlaceAutosliceOrder(t *testing.T) { + t.Parallel() + params := OrderParams{ + Exchange: "NFO", + Tradingsymbol: "NIFTY26APRFUT", + Validity: "DAY", + Product: "NRML", + OrderType: "LIMIT", + TransactionType: "BUY", + Quantity: 1755, + Price: 22693, + Autoslice: true, + } + orderResponse, err := ts.KiteConnect.PlaceOrder("autoslice", params) + if err != nil { + t.Errorf("Error while placing autoslice order. %v", err) + } + if orderResponse.OrderID == "" { + t.Errorf("No parent order id returned. Error %v", err) + } + if len(orderResponse.Children) == 0 { + t.Errorf("No children returned for autoslice order") + } + // Check that at least one child has an order_id + hasOrderID := false + for _, child := range orderResponse.Children { + if child.OrderID != "" { + hasOrderID = true + } + } + if !hasOrderID { + t.Errorf("No child order IDs returned") + } + // Check that partial failure child has error + hasError := false + for _, child := range orderResponse.Children { + if child.Error != nil { + hasError = true + require.Equal(t, 400, child.Error.Code) + require.Equal(t, "MarginException", child.Error.ErrorType) + } + } + if !hasError { + t.Errorf("Expected at least one child error in mock response") + } +} + func (ts *TestSuite) TestIssue64(t *testing.T) { t.Parallel() orders, err := ts.KiteConnect.GetOrders() From cee890b1cb290e9de800cf0e09eb96734aa6b193 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 12:39:37 +0530 Subject: [PATCH 098/103] chore: fix CI and resolve go vet warnings - Fix matrix.go -> matrix.go-version (matrix was silently ignored) - Update Go versions from 1.18/1.20/1.21/1.22 to 1.21/1.22/1.23/1.24 - Add go vet step to CI pipeline - Fix unkeyed models.Time struct literals in market.go and ticker.go - Fix duplicate json:"user_id" tag in UserSession by removing UserSessionTokens embed and inlining AccessToken/RefreshToken fields (minor breaking change: session.UserSessionTokens no longer available) --- market.go | 2 +- mock_responses | 2 +- ticker/ticker.go | 6 +++--- user.go | 11 ++++++----- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/market.go b/market.go index e16ed13..9ebf9fc 100644 --- a/market.go +++ b/market.go @@ -238,7 +238,7 @@ func (c *Client) formatHistoricalData(inp historicalDataReceived) ([]HistoricalD } data = append(data, HistoricalData{ - Date: models.Time{d}, + Date: models.Time{Time: d}, Open: open, High: high, Low: low, diff --git a/mock_responses b/mock_responses index 74e80b5..c7a8123 160000 --- a/mock_responses +++ b/mock_responses @@ -1 +1 @@ -Subproject commit 74e80b519182f2fc24bc65d77dcef88939b33b7b +Subproject commit c7a81238f93b4057c07257823b1bfaf30cba9ae5 diff --git a/ticker/ticker.go b/ticker/ticker.go index 23206e1..a5e1d8a 100644 --- a/ticker/ticker.go +++ b/ticker/ticker.go @@ -694,7 +694,7 @@ func parsePacket(b []byte) (models.Tick, error) { // On mode full set timestamp if len(b) == modeFullIndexLength { tick.Mode = string(ModeFull) - tick.Timestamp = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[28:32])), 0)} + tick.Timestamp = models.Time{Time: time.Unix(int64(binary.BigEndian.Uint32(b[28:32])), 0)} } return tick, nil @@ -729,11 +729,11 @@ func parsePacket(b []byte) (models.Tick, error) { // Parse full mode. if len(b) == modeFullLength { tick.Mode = string(ModeFull) - tick.LastTradeTime = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[44:48])), 0)} + tick.LastTradeTime = models.Time{Time: time.Unix(int64(binary.BigEndian.Uint32(b[44:48])), 0)} tick.OI = binary.BigEndian.Uint32(b[48:52]) tick.OIDayHigh = binary.BigEndian.Uint32(b[52:56]) tick.OIDayLow = binary.BigEndian.Uint32(b[56:60]) - tick.Timestamp = models.Time{time.Unix(int64(binary.BigEndian.Uint32(b[60:64])), 0)} + tick.Timestamp = models.Time{Time: time.Unix(int64(binary.BigEndian.Uint32(b[60:64])), 0)} tick.NetChange = lastPrice - closePrice // Depth Information. diff --git a/user.go b/user.go index a696b0f..2aaa983 100644 --- a/user.go +++ b/user.go @@ -12,12 +12,13 @@ import ( // UserSession represents the response after a successful authentication. type UserSession struct { UserProfile - UserSessionTokens - UserID string `json:"user_id"` - APIKey string `json:"api_key"` - PublicToken string `json:"public_token"` - LoginTime models.Time `json:"login_time"` + UserID string `json:"user_id"` + APIKey string `json:"api_key"` + PublicToken string `json:"public_token"` + AccessToken string `json:"access_token"` + RefreshToken string `json:"refresh_token"` + LoginTime models.Time `json:"login_time"` } // UserSessionTokens represents response after renew access token. From 13a0a5bd1f5f87f1a8101a831e24d4eba80fa6d1 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 12:45:19 +0530 Subject: [PATCH 099/103] feat: add market_protection and guid to Order response struct These fields are present in the order response per the Kite Connect v3 API docs but were missing from the Go struct. --- orders.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/orders.go b/orders.go index bbee5e7..9f65547 100644 --- a/orders.go +++ b/orders.go @@ -46,10 +46,12 @@ type Order struct { PendingQuantity float64 `json:"pending_quantity"` CancelledQuantity float64 `json:"cancelled_quantity"` - AuctionNumber string `json:"auction_number"` + AuctionNumber string `json:"auction_number"` + MarketProtection float64 `json:"market_protection"` Tag string `json:"tag"` Tags []string `json:"tags"` + GUID string `json:"guid"` } // Orders is a list of orders. From 68cf7cadb3cd732aeac3ae7d6a27cb20e6164068 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 12:52:12 +0530 Subject: [PATCH 100/103] fix: use models.OHLC in alerts, add test clarification - Remove duplicate OHLC struct from alerts.go, use models.OHLC instead (models.OHLC has an extra InstrumentToken field with json:"-" so JSON deserialization is unaffected) - Add comment to TestPlaceAutosliceOrder clarifying that production usage is variety "regular" with Autoslice: true --- alerts.go | 10 +--------- connect.go | 2 +- orders_test.go | 3 +++ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/alerts.go b/alerts.go index 59536a2..bcd515e 100644 --- a/alerts.go +++ b/alerts.go @@ -146,7 +146,7 @@ type AlertHistoryMeta struct { TradingSymbol string `json:"tradingsymbol"` Timestamp string `json:"timestamp"` LastPrice float64 `json:"last_price"` - OHLC OHLC `json:"ohlc"` + OHLC models.OHLC `json:"ohlc"` NetChange float64 `json:"net_change"` Exchange string `json:"exchange"` LastTradeTime string `json:"last_trade_time"` @@ -163,14 +163,6 @@ type AlertHistoryMeta struct { UpperCircuitLimit float64 `json:"upper_circuit_limit"` } -// OHLC represents open-high-low-close data. -type OHLC struct { - Open float64 `json:"open"` - High float64 `json:"high"` - Low float64 `json:"low"` - Close float64 `json:"close"` -} - // CreateAlert creates a new alert. func (c *Client) CreateAlert(params AlertParams) (Alert, error) { var ( diff --git a/connect.go b/connect.go index c9c9eb6..23fb000 100644 --- a/connect.go +++ b/connect.go @@ -26,7 +26,7 @@ type Client struct { const ( name string = "gokiteconnect" - version string = "4.x.x" + version string = "4.4.x" requestTimeout time.Duration = 7000 * time.Millisecond baseURI string = "https://api.kite.trade" kiteBaseURI string = "https://kite.zerodha.com" diff --git a/orders_test.go b/orders_test.go index 9647b9b..d6a3d07 100644 --- a/orders_test.go +++ b/orders_test.go @@ -310,6 +310,9 @@ func TestAutosliceOrderResponse(t *testing.T) { }) } +// TestPlaceAutosliceOrder tests autoslice order placement and response parsing. +// Note: In production, autoslice orders use variety "regular" with Autoslice: true. +// The test uses variety "autoslice" only for mock routing purposes. func (ts *TestSuite) TestPlaceAutosliceOrder(t *testing.T) { t.Parallel() params := OrderParams{ From f328675d255ded66b1ed0118a86a24aa4947c0b2 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 12:54:42 +0530 Subject: [PATCH 101/103] refactor: upgrade httpmock and modernize test infrastructure Upgrade from gopkg.in/jarcoal/httpmock.v1 (2018) to github.com/jarcoal/httpmock v1.4.1. The old version had concurrency issues with responders (fixed in v1.0.6) causing flaky parallel tests. Test infrastructure changes: - Use httpmock.File() to load mock responses instead of manual ioutil.ReadFile (also removes deprecated ioutil usage) - Register NewNotFoundResponder(t.Fatal) to catch unmocked routes immediately instead of returning silent errors - Use t.Cleanup() for teardown instead of commented-out defer - Replace [][]string mock table with typed mockRoute struct - Use t.Fatal in TestGetOrders for defensive early exit - Remove unused SetupAPITest/TearDownAPITest per-test hooks - Pass *testing.T to SetupAPITestSuit for proper error reporting --- connect_test.go | 71 +++++++++++++++++++++---------------------------- go.mod | 2 +- go.sum | 9 ++++--- orders_test.go | 5 +++- 4 files changed, 41 insertions(+), 46 deletions(-) diff --git a/connect_test.go b/connect_test.go index 9c497d6..4872ab8 100644 --- a/connect_test.go +++ b/connect_test.go @@ -2,7 +2,6 @@ package kiteconnect import ( "fmt" - "io/ioutil" "net/http" "net/url" "path" @@ -12,7 +11,7 @@ import ( "testing" "time" - httpmock "gopkg.in/jarcoal/httpmock.v1" + "github.com/jarcoal/httpmock" ) const ( @@ -109,9 +108,14 @@ func TestClientSetters(t *testing.T) { // Following boiler plate is used to implement setup/teardown using Go subtests feature const mockBaseDir = "./mock_responses" -var MockResponders = [][]string{ - // Array of [, , ] +// mockRoute defines a mock HTTP endpoint with its method, URL pattern, and response file. +type mockRoute struct { + method string + route string + filePath string +} +var mockRoutes = []mockRoute{ // GET endpoints {http.MethodGet, URIUserProfile, "profile.json"}, {http.MethodGet, URIFullUserProfile, "full_profile.json"}, @@ -186,68 +190,53 @@ type TestSuite struct { KiteConnect *Client } -// Setup the API suit -func (ts *TestSuite) SetupAPITestSuit() { +// SetupAPITestSuit sets up the mock HTTP environment for the test suite. +func (ts *TestSuite) SetupAPITestSuit(t *testing.T) { ts.KiteConnect = New("test_api_key") httpmock.ActivateNonDefault(ts.KiteConnect.httpClient.GetClient().client) - for _, v := range MockResponders { - httpMethod := v[0] - route := v[1] - filePath := v[2] - - resp, err := ioutil.ReadFile(path.Join(mockBaseDir, filePath)) - if err != nil { - panic("Error while reading mock response: " + filePath) - } + // Compile the regex once for replacing URL variables. + re := regexp.MustCompile("%s") + for _, r := range mockRoutes { base, err := url.Parse(ts.KiteConnect.baseURI) if err != nil { - panic("Something went wrong") + t.Fatalf("Failed to parse base URI: %v", err) } + // Replace all url variables with string "test" - re := regexp.MustCompile("%s") - formattedRoute := re.ReplaceAllString(route, "test") + formattedRoute := re.ReplaceAllString(r.route, "test") base.Path = path.Join(base.Path, formattedRoute) - // fmt.Println(base.String()) - // endpoint := path.Join(ts.KiteConnect.baseURI, route) - httpmock.RegisterResponder(httpMethod, base.String(), httpmock.NewBytesResponder(200, resp)) + httpmock.RegisterResponder(r.method, base.String(), + httpmock.NewBytesResponder(200, httpmock.File(path.Join(mockBaseDir, r.filePath)).Bytes())) } + + // Catch any unregistered routes immediately instead of silently failing. + httpmock.RegisterNoResponder(httpmock.NewNotFoundResponder(t.Fatal)) } -// TearDown API suit +// TearDownAPITestSuit cleans up the mock HTTP environment. func (ts *TestSuite) TearDownAPITestSuit() { - // defer httpmock.DeactivateAndReset() + httpmock.DeactivateAndReset() } -// Individual test setup -func (ts *TestSuite) SetupAPITest() {} - -// Individual test teardown -func (ts *TestSuite) TearDownAPITest() {} - /* -Run sets up the suite, runs its test cases and tears it down: - 1. Calls `ts.SetUpSuite` - 2. Seeks for any methods that have `Test` prefix, for each of them it: - a. Calls `SetUp` - b. Calls the test method itself - c. Calls `TearDown` - 3. Calls `ts.TearDownSuite` +RunAPITests sets up the suite, runs its test cases and tears it down: + 1. Calls SetupAPITestSuit + 2. Seeks for any methods that have "Test" prefix, for each of them it + runs the test method as a subtest + 3. Calls TearDownAPITestSuit via t.Cleanup */ func RunAPITests(t *testing.T, ts *TestSuite) { - ts.SetupAPITestSuit() - defer ts.TearDownAPITestSuit() + ts.SetupAPITestSuit(t) + t.Cleanup(ts.TearDownAPITestSuit) suiteType := reflect.TypeOf(ts) for i := 0; i < suiteType.NumMethod(); i++ { m := suiteType.Method(i) if strings.HasPrefix(m.Name, suiteTestMethodPrefix) { t.Run(m.Name, func(t *testing.T) { - ts.SetupAPITest() - defer ts.TearDownAPITest() - in := []reflect.Value{reflect.ValueOf(ts), reflect.ValueOf(t)} m.Func.Call(in) }) diff --git a/go.mod b/go.mod index 0fedf28..9fba2a8 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,6 @@ require ( github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 github.com/google/go-querystring v1.0.0 github.com/gorilla/websocket v1.4.2 + github.com/jarcoal/httpmock v1.4.1 github.com/stretchr/testify v1.7.0 - gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 ) diff --git a/go.sum b/go.sum index ff68e5a..88f60d4 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,16 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36 h1:IlBbYij72r3CoD3fKTbP5jD0NJjrvemKsaxkW/QUdGE= github.com/gocarina/gocsv v0.0.0-20180809181117-b8c38cb1ba36/go.mod h1:/oj50ZdPq/cUjA02lMZhijk5kR31SEydKyqah1OgBuo= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/jarcoal/httpmock v1.4.1 h1:0Ju+VCFuARfFlhVXFc2HxlcQkfB+Xq12/EotHko+x2A= +github.com/jarcoal/httpmock v1.4.1/go.mod h1:ftW1xULwo+j0R0JJkJIIi7UKigZUXCLLanykgjwBXL0= +github.com/maxatome/go-testdeep v1.14.0 h1:rRlLv1+kI8eOI3OaBXZwb3O7xY3exRzdW5QyX48g9wI= +github.com/maxatome/go-testdeep v1.14.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -13,7 +18,5 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32 h1:30DLrQoRqdUHslVMzxuKUnY4GKJGk1/FJtKy3yx4TKE= -gopkg.in/jarcoal/httpmock.v1 v1.0.0-20180719183105-8007e27cdb32/go.mod h1:d3R+NllX3X5e0zlG1Rful3uLvsGC/Q3OHut5464DEQw= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/orders_test.go b/orders_test.go index d6a3d07..bc414b4 100644 --- a/orders_test.go +++ b/orders_test.go @@ -11,7 +11,10 @@ func (ts *TestSuite) TestGetOrders(t *testing.T) { t.Parallel() orders, err := ts.KiteConnect.GetOrders() if err != nil { - t.Errorf("Error while fetching orders. %v", err) + t.Fatalf("Error while fetching orders. %v", err) + } + if len(orders) == 0 { + t.Fatal("No orders returned") } t.Run("test empty/unparsed orders", func(t *testing.T) { for _, order := range orders { From eddc788a51dabed11b6314687d24b728b189a6a0 Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Wed, 25 Mar 2026 13:42:19 +0530 Subject: [PATCH 102/103] feat: add MarketProtectionAuto constant Add MarketProtectionAuto = -1 constant for automatic market protection. Users can pass this instead of the raw -1 value when placing MARKET or SL-M orders. --- connect.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/connect.go b/connect.go index 23fb000..581a11c 100644 --- a/connect.go +++ b/connect.go @@ -58,6 +58,9 @@ const ( OrderTypeSL = "SL" OrderTypeSLM = "SL-M" + // Market protection + MarketProtectionAuto = -1 + // Validities ValidityDay = "DAY" ValidityIOC = "IOC" From 636aaf2029bb72c9b1ed8b16918decd697de671c Mon Sep 17 00:00:00 2001 From: Rohan Verma Date: Sat, 28 Mar 2026 09:30:44 +0530 Subject: [PATCH 103/103] fix(auth): set access token on successful session exchange --- connect_test.go | 2 ++ user.go | 19 +++++++++++++++++-- user_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/connect_test.go b/connect_test.go index 4872ab8..0752f0d 100644 --- a/connect_test.go +++ b/connect_test.go @@ -154,6 +154,8 @@ var mockRoutes = []mockRoute{ {http.MethodPut, fmt.Sprintf(URIModifyGTT, 123), "gtt_modify_order.json"}, // POST endpoints + {http.MethodPost, URIUserSession, "generate_session.json"}, + {http.MethodPost, URIUserSessionRenew, "generate_session.json"}, {http.MethodPost, URIPlaceOrder, "order_response.json"}, {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "iceberg"), "order_response.json"}, {http.MethodPost, fmt.Sprintf(URIPlaceOrder, "co"), "order_response.json"}, diff --git a/user.go b/user.go index 2aaa983..dc1d944 100644 --- a/user.go +++ b/user.go @@ -19,6 +19,10 @@ type UserSession struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` LoginTime models.Time `json:"login_time"` + + // Deprecated: kept for backwards compatibility with v4.3.x and earlier, + // where UserSession embedded UserSessionTokens. + UserSessionTokens UserSessionTokens `json:"-"` } // UserSessionTokens represents response after renew access token. @@ -28,6 +32,14 @@ type UserSessionTokens struct { RefreshToken string `json:"refresh_token"` } +func (s *UserSession) syncLegacyTokens() { + s.UserSessionTokens = UserSessionTokens{ + UserID: s.UserID, + AccessToken: s.AccessToken, + RefreshToken: s.RefreshToken, + } +} + // Bank represents the details of a single bank account entry on a user's file. type Bank struct { Name string `json:"name"` @@ -143,9 +155,12 @@ func (c *Client) GenerateSession(requestToken string, apiSecret string) (UserSes var session UserSession err := c.doEnvelope(http.MethodPost, URIUserSession, params, nil, &session) + if err == nil { + session.syncLegacyTokens() + } // Set accessToken on successful session retrieve - if err != nil && session.AccessToken != "" { + if err == nil && session.AccessToken != "" { c.SetAccessToken(session.AccessToken) } @@ -189,7 +204,7 @@ func (c *Client) RenewAccessToken(refreshToken string, apiSecret string) (UserSe err := c.doEnvelope(http.MethodPost, URIUserSessionRenew, params, nil, &session) // Set accessToken on successful session retrieve - if err != nil && session.AccessToken != "" { + if err == nil && session.AccessToken != "" { c.SetAccessToken(session.AccessToken) } diff --git a/user_test.go b/user_test.go index 20a24c7..6fcd7d9 100644 --- a/user_test.go +++ b/user_test.go @@ -44,6 +44,44 @@ func (ts *TestSuite) TestGetUserSegmentMargins(t *testing.T) { } } +func (ts *TestSuite) TestGenerateSessionSetsAccessToken(t *testing.T) { + t.Parallel() + + session, err := ts.KiteConnect.GenerateSession("test_request_token", "test_api_secret") + if err != nil { + t.Fatalf("Error while generating user session. Error: %v", err) + } + + if session.AccessToken == "" { + t.Fatal("Expected access token in generated session") + } + + if ts.KiteConnect.accessToken != session.AccessToken { + t.Errorf("Expected client access token to be set to %q, got %q", session.AccessToken, ts.KiteConnect.accessToken) + } + + if session.UserSessionTokens.AccessToken != session.AccessToken { + t.Errorf("Expected deprecated UserSessionTokens.AccessToken to mirror session.AccessToken") + } +} + +func (ts *TestSuite) TestRenewAccessTokenSetsAccessToken(t *testing.T) { + t.Parallel() + + session, err := ts.KiteConnect.RenewAccessToken("test_refresh_token", "test_api_secret") + if err != nil { + t.Fatalf("Error while renewing access token. Error: %v", err) + } + + if session.AccessToken == "" { + t.Fatal("Expected access token in renewed session") + } + + if ts.KiteConnect.accessToken != session.AccessToken { + t.Errorf("Expected client access token to be set to %q, got %q", session.AccessToken, ts.KiteConnect.accessToken) + } +} + func (ts *TestSuite) TestInvalidateAccessToken(t *testing.T) { t.Parallel() sessionLogout, err := ts.KiteConnect.InvalidateAccessToken()