From e13a1faa5de3974fd6fcf6649a3425015e7b0b1c Mon Sep 17 00:00:00 2001 From: Duc Bui Date: Tue, 20 Aug 2024 10:42:13 +0700 Subject: [PATCH 1/2] Include greeks fields in the API reponses + Update module paths --- README.md | 10 +++++----- api_account_management.go | 2 +- api_authentication.go | 2 +- api_market.go | 2 +- api_session_management.go | 2 +- api_subscription_management.go | 2 +- api_supporting.go | 2 +- api_trading.go | 2 +- api_wallet.go | 2 +- client.go | 2 +- client_test.go | 2 +- go.mod | 2 +- go.sum | 30 ++++++++---------------------- models/get_order_book_response.go | 7 +++++++ models/ticker_notification.go | 7 +++++++ subscriptions.go | 2 +- 16 files changed, 39 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 68e911d..2ceae19 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ V2 API Documentation: https://docs.deribit.com/v2/ package main import ( - "github.com/frankrap/deribit-api" - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api" + "github.com/coinhako/deribit-api/models" "log" ) @@ -84,7 +84,7 @@ func main() { // Subscribe client.On("announcements", func(e *models.AnnouncementsNotification) { - + }) client.On("book.ETH-PERPETUAL.100.1.100ms", func(e *models.OrderBookGroupNotification) { @@ -141,7 +141,7 @@ func main() { client.On("user.trades.future.BTC.100ms", func(e *models.UserTradesNotification) { }) - + client.Subscribe([]string{ //"announcements", //"book.BTC-PERPETUAL.none.10.100ms", // none/1,2,5,10,25,100,250 @@ -168,4 +168,4 @@ func main() { <- forever } -``` \ No newline at end of file +``` diff --git a/api_account_management.go b/api_account_management.go index fd4a1b1..4f3c3a6 100644 --- a/api_account_management.go +++ b/api_account_management.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) GetAnnouncements() (result []models.Announcement, err error) { err = c.Call("public/get_announcements", nil, &result) diff --git a/api_authentication.go b/api_authentication.go index aed6842..e887bc6 100644 --- a/api_authentication.go +++ b/api_authentication.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) Auth(apiKey string, secretKey string) (err error) { params := models.ClientCredentialsParams{ diff --git a/api_market.go b/api_market.go index 78c2cac..e70e359 100644 --- a/api_market.go +++ b/api_market.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) GetBookSummaryByCurrency(params *models.GetBookSummaryByCurrencyParams) (result []models.BookSummary, err error) { err = c.Call("public/get_book_summary_by_currency", params, &result) diff --git a/api_session_management.go b/api_session_management.go index d0a15f2..5c07ef3 100644 --- a/api_session_management.go +++ b/api_session_management.go @@ -1,7 +1,7 @@ package deribit import ( - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api/models" ) func (c *Client) SetHeartbeat(params *models.SetHeartbeatParams) (result string, err error) { diff --git a/api_subscription_management.go b/api_subscription_management.go index 3ac0b20..197be8a 100644 --- a/api_subscription_management.go +++ b/api_subscription_management.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) PublicSubscribe(params *models.SubscribeParams) (result models.SubscribeResponse, err error) { err = c.Call("public/subscribe", params, &result) diff --git a/api_supporting.go b/api_supporting.go index b76df43..ad23aba 100644 --- a/api_supporting.go +++ b/api_supporting.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) GetTime() (result int64, err error) { err = c.Call("public/get_time", nil, &result) diff --git a/api_trading.go b/api_trading.go index d367516..afe0f93 100644 --- a/api_trading.go +++ b/api_trading.go @@ -1,7 +1,7 @@ package deribit import ( - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api/models" ) func (c *Client) Buy(params *models.BuyParams) (result models.BuyResponse, err error) { diff --git a/api_wallet.go b/api_wallet.go index f847f2b..2a979e4 100644 --- a/api_wallet.go +++ b/api_wallet.go @@ -1,6 +1,6 @@ package deribit -import "github.com/frankrap/deribit-api/models" +import "github.com/coinhako/deribit-api/models" func (c *Client) CancelTransferByID(params *models.CancelTransferByIDParams) (result models.Transfer, err error) { err = c.Call("private/cancel_transfer_by_id", params, &result) diff --git a/client.go b/client.go index c19bab3..13cbf15 100644 --- a/client.go +++ b/client.go @@ -6,7 +6,7 @@ import ( "errors" "fmt" "github.com/chuckpreslar/emission" - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api/models" "github.com/sourcegraph/jsonrpc2" "log" "net/http" diff --git a/client_test.go b/client_test.go index d33088f..10978b8 100644 --- a/client_test.go +++ b/client_test.go @@ -2,7 +2,7 @@ package deribit import ( "encoding/json" - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api/models" "github.com/stretchr/testify/assert" "testing" ) diff --git a/go.mod b/go.mod index df58ad5..77f4b15 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/frankrap/deribit-api +module github.com/coinhako/deribit-api go 1.13 diff --git a/go.sum b/go.sum index 549bcaf..df15d2a 100644 --- a/go.sum +++ b/go.sum @@ -3,55 +3,41 @@ github.com/chuckpreslar/emission v0.0.0-20170206194824-a7ddd980baf9/go.mod h1:2w 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/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/klauspost/compress v1.10.0 h1:92XGj1AcYzA6UrVdd4qIIBrT8OroryvRvdmg/IfmC7Y= -github.com/klauspost/compress v1.10.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.3 h1:OP96hzwJVBIHYU52pVTI6CczrxPvrGfgqF9N5eTO0Q8= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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/sourcegraph/jsonrpc2 v0.0.0-20190106185902-35a74f039c6a h1:jTZwOlrDhmk4Ez2vhWh7kA0eKUahp1lCO2uyM4fi/Qk= -github.com/sourcegraph/jsonrpc2 v0.0.0-20190106185902-35a74f039c6a/go.mod h1:eESpbCslcLDs8j2D7IEdGVgul7xuk9odqDTaor30IUU= github.com/sourcegraph/jsonrpc2 v0.0.0-20191222043438-96c4efab7ee2 h1:5VGNYxMxzZ8Jb2bARgVl1DNg8vpcd9S8b4MbbjWQ8/w= github.com/sourcegraph/jsonrpc2 v0.0.0-20191222043438-96c4efab7ee2/go.mod h1:ZafdZgk/axhT1cvZAPOhw+95nz2I/Ra5qMlU4gTRwIo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/sumorf/deribit-api v0.0.0-20191024014042-05ddd1385bf2/go.mod h1:5bdqVP0ePpCpfy1whSPwvUTwwWyXBjLjD87s3iq3QK4= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -nhooyr.io/websocket v1.7.2 h1:aIkwzOCACzgKF5DMqGA9pvJoJCiP0GsBeomGWVexRTc= -nhooyr.io/websocket v1.7.2/go.mod h1:FyTYp9aYEPchTiPpXj2mOOnHJ49S35YStWZCjotwizg= -nhooyr.io/websocket v1.8.4 h1:P43INlkmY2eCxLvHeiMFK/ROUiOm0NdzRGGDtURbe58= -nhooyr.io/websocket v1.8.4/go.mod h1:LiqdCg1Cu7TPWxEvPjPa0TGYxCsy4pHNTN9gGluwBpQ= nhooyr.io/websocket v1.8.5 h1:DCqbsbyRh43Ky0pWkdbWXF6z6MS2W8LqJ4ym3F+fw3I= nhooyr.io/websocket v1.8.5/go.mod h1:szdAKb/TINbpD/bAZy4Ydj5xgVo2BOLNPIi/mcAOGrU= diff --git a/models/get_order_book_response.go b/models/get_order_book_response.go index 901f752..db72d93 100644 --- a/models/get_order_book_response.go +++ b/models/get_order_book_response.go @@ -7,6 +7,13 @@ type GetOrderBookResponse struct { Low float64 `json:"low"` High float64 `json:"high"` } `json:"stats"` + Greeks struct { + Delta float64 `json:"delta"` + Gamma float64 `json:"gamma"` + Theta float64 `json:"theta"` + Vega float64 `json:"vega"` + Rho float64 `json:"rho"` + } `json:"greeks"` State string `json:"state"` SettlementPrice float64 `json:"settlement_price"` OpenInterest float64 `json:"open_interest"` diff --git a/models/ticker_notification.go b/models/ticker_notification.go index b0dffb8..cbaf593 100644 --- a/models/ticker_notification.go +++ b/models/ticker_notification.go @@ -7,6 +7,13 @@ type TickerNotification struct { Low float64 `json:"low"` High float64 `json:"high"` } `json:"stats"` + Greeks struct { + Delta float64 `json:"delta"` + Gamma float64 `json:"gamma"` + Theta float64 `json:"theta"` + Vega float64 `json:"vega"` + Rho float64 `json:"rho"` + } `json:"greeks"` State string `json:"state"` SettlementPrice float64 `json:"settlement_price"` OpenInterest float64 `json:"open_interest"` diff --git a/subscriptions.go b/subscriptions.go index 65d974d..f2885a9 100644 --- a/subscriptions.go +++ b/subscriptions.go @@ -1,7 +1,7 @@ package deribit import ( - "github.com/frankrap/deribit-api/models" + "github.com/coinhako/deribit-api/models" "github.com/json-iterator/go" "log" "strings" From 7ec431f1d52b8d207ae9e4b362d90c52e97422dc Mon Sep 17 00:00:00 2001 From: Duc Bui Date: Wed, 13 Nov 2024 12:24:50 +0700 Subject: [PATCH 2/2] Clear subscriptions when reconnect --- client.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/client.go b/client.go index 13cbf15..f98c4f0 100644 --- a/client.go +++ b/client.go @@ -5,15 +5,17 @@ import ( "encoding/json" "errors" "fmt" - "github.com/chuckpreslar/emission" - "github.com/coinhako/deribit-api/models" - "github.com/sourcegraph/jsonrpc2" "log" "net/http" - "nhooyr.io/websocket" "strings" "sync" "time" + + "github.com/chuckpreslar/emission" + "github.com/sourcegraph/jsonrpc2" + "nhooyr.io/websocket" + + "github.com/coinhako/deribit-api/models" ) const ( @@ -25,9 +27,7 @@ const ( MaxTryTimes = 10000 ) -var ( - ErrAuthenticationIsRequired = errors.New("authentication is required") -) +var ErrAuthenticationIsRequired = errors.New("authentication is required") // Event is wrapper of received event type Event struct { @@ -147,6 +147,7 @@ func (c *Client) subscribe(channels []string) { func (c *Client) start() error { c.setIsConnected(false) c.subscriptionsMap = make(map[string]struct{}) + c.subscriptions = make([]string, 0) c.conn = nil c.rpcConn = nil c.heartCancel = make(chan struct{}) @@ -219,13 +220,13 @@ func (c *Client) Call(method string, params interface{}, result interface{}) (er // Handle implements jsonrpc2.Handler func (c *Client) Handle(ctx context.Context, conn *jsonrpc2.Conn, req *jsonrpc2.Request) { - //log.Printf("Handle %v", req.Method) + // log.Printf("Handle %v", req.Method) if req.Method == "subscription" { // update events if req.Params != nil && len(*req.Params) > 0 { var event Event if err := json.Unmarshal(*req.Params, &event); err != nil { - //c.setError(err) + // c.setError(err) return } c.subscriptionsProcess(&event) @@ -261,7 +262,7 @@ func (c *Client) reconnect() { func (c *Client) connect() (*websocket.Conn, *http.Response, error) { ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) - //defer cancel() + // defer cancel() conn, resp, err := websocket.Dial(ctx, c.addr, &websocket.DialOptions{}) if err == nil { conn.SetReadLimit(32768 * 64)