74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
|
|
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
|
|||
|
|
}
|