Files
nofx/provider/coinank/kline.go
2025-12-25 14:24:35 +08:00

64 lines
1.7 KiB
Go

package coinank
import (
"context"
"encoding/json"
"nofx/provider/coinank/coinank_enum"
"strconv"
)
// Kline get kline data ,startTime and size is optional
func (c *CoinankClient) Kline(ctx context.Context, symbol string, exchange coinank_enum.Exchange,
startTime int64, endTime int64,
size int, interval coinank_enum.Interval) ([]KlineResult, error) {
paramsMap := make(map[string]string, 6)
paramsMap["symbol"] = symbol
paramsMap["exchange"] = string(exchange)
if startTime > 0 {
paramsMap["startTime"] = strconv.FormatInt(startTime, 10)
}
paramsMap["endTime"] = strconv.FormatInt(endTime, 10)
if size <= 0 {
size = 10
}
paramsMap["size"] = strconv.Itoa(size)
paramsMap["interval"] = string(interval)
resp, err := c.Get(ctx, "/api/kline/lists", paramsMap)
if err != nil {
return nil, err
}
var result CoinankResponse[[][]float64]
err = json.Unmarshal([]byte(resp), &result)
if err != nil {
return nil, err
}
if !result.Success {
return nil, HttpError
}
klines := make([]KlineResult, len(result.Data))
for i, k := range result.Data {
klines[i].StartTime = int64(k[0] + 0.001)
klines[i].EndTime = int64(k[1] + 0.001)
klines[i].Open = k[2]
klines[i].Close = k[3]
klines[i].High = k[4]
klines[i].Low = k[5]
klines[i].Volume = k[6]
klines[i].Quantity = k[7]
klines[i].Count = k[8]
}
return klines, nil
}
type KlineResult struct {
StartTime int64 `json:"startTime"`
EndTime int64 `json:"endTime"`
Open float64 `json:"open"`
Close float64 `json:"close"`
High float64 `json:"high"`
Low float64 `json:"low"`
Volume float64 `json:"volume"`
Quantity float64 `json:"quantity"`
Count float64 `json:"count"`
}