mirror of
https://github.com/c9s/bbgo.git
synced 2024-09-20 08:11:08 +00:00
max: parse and convert trade update
This commit is contained in:
parent
822e4c2703
commit
366036a35b
|
@ -108,6 +108,8 @@ type TradeUpdate struct {
|
|||
Timestamp int64 `json:"T"`
|
||||
|
||||
OrderID uint64 `json:"oi"`
|
||||
|
||||
Maker bool `json:"m"`
|
||||
}
|
||||
|
||||
func parseTradeUpdate(v *fastjson.Value) TradeUpdate {
|
||||
|
@ -121,6 +123,7 @@ func parseTradeUpdate(v *fastjson.Value) TradeUpdate {
|
|||
FeeCurrency: string(v.GetStringBytes("fc")),
|
||||
Timestamp: v.GetInt64("T"),
|
||||
OrderID: v.GetUint64("oi"),
|
||||
Maker: v.GetBool("m"),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ package max
|
|||
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
max "github.com/c9s/bbgo/pkg/exchange/max/maxapi"
|
||||
"github.com/c9s/bbgo/pkg/types"
|
||||
|
@ -26,6 +28,20 @@ func NewStream(key, secret string) *Stream {
|
|||
logger.Infof("M: %s", message)
|
||||
})
|
||||
|
||||
// wss.OnTradeEvent(func(e max.PublicTradeEvent) { })
|
||||
|
||||
wss.OnTradeUpdateEvent(func(e max.TradeUpdateEvent) {
|
||||
for _, tradeUpdate := range e.Trades {
|
||||
trade, err := convertWebSocketTrade(tradeUpdate)
|
||||
if err != nil {
|
||||
log.WithError(err).Error("websocket trade update convert error")
|
||||
return
|
||||
}
|
||||
|
||||
stream.EmitTrade(*trade)
|
||||
}
|
||||
})
|
||||
|
||||
wss.OnBookEvent(func(e max.BookEvent) {
|
||||
newbook, err := e.OrderBook()
|
||||
if err != nil {
|
||||
|
@ -83,3 +99,43 @@ func (s *Stream) Connect(ctx context.Context) error {
|
|||
func (s *Stream) Close() error {
|
||||
return s.websocketService.Close()
|
||||
}
|
||||
|
||||
func convertWebSocketTrade(t max.TradeUpdate) (*types.Trade, error) {
|
||||
// skip trade ID that is the same. however this should not happen
|
||||
var side = toGlobalSideType(t.Side)
|
||||
|
||||
// trade time
|
||||
mts := time.Unix(0, t.Timestamp*int64(time.Millisecond))
|
||||
|
||||
price, err := strconv.ParseFloat(t.Price, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
quantity, err := strconv.ParseFloat(t.Volume, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
quoteQuantity := price * quantity
|
||||
|
||||
fee, err := strconv.ParseFloat(t.Fee, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &types.Trade{
|
||||
ID: int64(t.ID),
|
||||
Price: price,
|
||||
Symbol: toGlobalSymbol(t.Market),
|
||||
Exchange: "max",
|
||||
Quantity: quantity,
|
||||
Side: side,
|
||||
IsBuyer: side == "bid",
|
||||
IsMaker: t.Maker,
|
||||
Fee: fee,
|
||||
FeeCurrency: toGlobalCurrency(t.FeeCurrency),
|
||||
QuoteQuantity: quoteQuantity,
|
||||
Time: mts,
|
||||
}, nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user