Files
coin/market/kline.go
2026-01-09 15:48:31 +08:00

74 lines
1.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package market
import (
"encoding/json"
"errors"
"strconv"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/quant/strategy/types"
)
var (
KlineUrl = "http://market.senlin.ai/ticker/klines"
)
func FetchKlines(symbol, interval string, limit int) ([]*types.KLine, []float64, error) {
url := KlineUrl + "?symbol=" + symbol + "&interval=" + interval + "&limit=" + strconv.Itoa(limit)
body, err := utils.HttpGet(url)
if err != nil {
return nil, nil, err
}
var data []*types.KLine
err = json.Unmarshal(body, &data)
if err != nil {
return nil, nil, err
}
if len(data) < 1 {
return nil, nil, errors.New("no data")
}
var closes []float64
for _, kline := range data {
closes = append(closes, kline.Close)
}
return data, closes, nil
}
// 获取最后两个K线
// 返回上一个K线, 当前K线, 错误
func GetLastKline(symbol, interval string) (*types.KLine, *types.KLine, error) {
url := KlineUrl + "?symbol=" + symbol + "&interval=" + interval + "&limit=2"
body, err := utils.HttpGet(url)
if err != nil {
return nil, nil, err
}
var data []*types.KLine
err = json.Unmarshal(body, &data)
if err != nil {
return nil, nil, err
}
if len(data) < 2 {
return nil, nil, errors.New("no data")
}
data[1].PriceRate = (data[1].Close - data[1].Open) / data[1].Open
data[0].PriceRate = (data[0].Close - data[0].Open) / data[0].Open
return data[0], data[1], nil
}
func UnmarshalKline(body string) (*types.KLine, error) {
var data types.KLine
err := json.Unmarshal([]byte(body), &data)
if err != nil {
return nil, err
}
return &data, nil
}