78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package trade
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"git.apinb.com/bsm-sdk/core/utils"
|
|
"git.apinb.com/quant/strategy/types"
|
|
)
|
|
|
|
const (
|
|
MaxKlinesFetch = 500
|
|
)
|
|
|
|
func (bn *BinanceClient) FetchKlines(symbol, interval string, limit int, debug bool) ([]*types.KLine, []float64, error) {
|
|
if limit > MaxKlinesFetch {
|
|
limit = MaxKlinesFetch
|
|
}
|
|
ctx := context.Background()
|
|
klines, err := bn.Futures.NewKlinesService().Symbol(symbol).Interval(interval).Limit(limit).Do(ctx)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if debug {
|
|
fmt.Println("FetchKlines:", symbol, interval, limit)
|
|
}
|
|
k := make([]*types.KLine, 0)
|
|
closes := make([]float64, len(klines))
|
|
for i, val := range klines {
|
|
|
|
c := utils.String2Float64(val.Close)
|
|
closes[i] = c
|
|
k = append(k, &types.KLine{
|
|
Timestamp: val.OpenTime,
|
|
Open: utils.String2Float64(val.Open),
|
|
High: utils.String2Float64(val.High),
|
|
Low: utils.String2Float64(val.Low),
|
|
Close: c,
|
|
Volume: utils.String2Float64(val.QuoteAssetVolume),
|
|
})
|
|
|
|
if debug {
|
|
fmt.Println(time.Unix(val.OpenTime/1000, 0).Format(time.DateTime), val.Open, val.High, val.Low, val.Close, val.Volume)
|
|
}
|
|
}
|
|
if len(k) == 0 {
|
|
return nil, nil, errors.New("no klines")
|
|
}
|
|
|
|
return k, closes, nil
|
|
}
|
|
|
|
func (bn *BinanceClient) FetchSymbolsPrice() (map[string]float64, error) {
|
|
ctx := context.Background()
|
|
prices, err := bn.Futures.NewListPricesService().Do(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
priceMap := make(map[string]float64)
|
|
for _, p := range prices {
|
|
priceMap[p.Symbol] = utils.String2Float64(p.Price)
|
|
}
|
|
|
|
return priceMap, nil
|
|
}
|
|
|
|
func (bn *BinanceClient) BookTicker(symbol string) (bidPrice, askPrice string, err error) {
|
|
res, err := bn.Futures.NewListBookTickersService().Symbol(symbol).Do(context.Background())
|
|
if len(res) == 0 || err != nil {
|
|
return "", "", errors.New("BookTicker: No Data")
|
|
}
|
|
|
|
return res[0].BidPrice, res[0].AskPrice, nil
|
|
}
|