From c328e232787f2140014a49163fc85639605f5614 Mon Sep 17 00:00:00 2001 From: wqqqqqq Date: Tue, 23 Dec 2025 00:06:14 +0800 Subject: [PATCH] feat: implement coinank openapi netPositions interface (#1258) - implement Net long & Net short interface --- provider/coinank/net_positions.go | 46 ++++++++++++++++++++++++++ provider/coinank/net_positions_test.go | 25 ++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 provider/coinank/net_positions.go create mode 100644 provider/coinank/net_positions_test.go diff --git a/provider/coinank/net_positions.go b/provider/coinank/net_positions.go new file mode 100644 index 00000000..50da0901 --- /dev/null +++ b/provider/coinank/net_positions.go @@ -0,0 +1,46 @@ +package coinank + +import ( + "context" + "encoding/json" + "nofx/provider/coinank/coinank_enum" + "strconv" +) + +// NetPositions Net long & Net short +func (c *CoinankClient) NetPositions(ctx context.Context, exchange coinank_enum.Exchange, + symbol string, interval coinank_enum.Interval, endTime int64, size int) ([]NetPositionsResponse, error) { + paramsMap := make(map[string]string, 5) + paramsMap["exchange"] = string(exchange) + paramsMap["symbol"] = symbol + paramsMap["interval"] = string(interval) + paramsMap["endTime"] = strconv.FormatInt(endTime, 10) + if size < 1 { + size = 10 + } + paramsMap["size"] = strconv.Itoa(size) + resp, err := c.Get(ctx, "/api/netPositions/getNetPositions", paramsMap) + if err != nil { + return nil, err + } + var result CoinankResponse[[]NetPositionsResponse] + err = json.Unmarshal([]byte(resp), &result) + if err != nil { + return nil, err + } + if !result.Success { + return nil, HttpError + } + return result.Data, nil +} + +type NetPositionsResponse struct { + Begin int64 `json:"begin"` // begin timestamp + Interval string `json:"interval"` + NetLongsHigh int `json:"netLongsHigh"` // net long high + NetLongsClose int `json:"netLongsClose"` // net long close + NetLongsLow int `json:"netLongsLow"` // net long close + NetShortsClose int `json:"netShortsClose"` // net short close + NetShortsHigh int `json:"netShortsHigh"` // net short high + NetShortsLow int `json:"netShortsLow"` // net short low +} diff --git a/provider/coinank/net_positions_test.go b/provider/coinank/net_positions_test.go new file mode 100644 index 00000000..2cc3cc0d --- /dev/null +++ b/provider/coinank/net_positions_test.go @@ -0,0 +1,25 @@ +package coinank + +import ( + "context" + "encoding/json" + "nofx/provider/coinank/coinank_enum" + "testing" + "time" +) + +func TestNetPositions(t *testing.T) { + client := NewCoinankClient(coinank_enum.MainUrl, TestApikey) + resp, err := client.NetPositions(context.TODO(), coinank_enum.Binance, "BTCUSDT", coinank_enum.Hour1, time.Now().UnixMilli(), 10) + if err != nil { + t.Fatal(err) + } + if resp[0].Begin <= 0 { + t.Errorf("begin timestamp error") + } + res, err := json.Marshal(resp) + if err != nil { + t.Error(err) + } + t.Logf("%s", res) +}