mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-25 16:25:16 +00:00
doc: add more details to UserDataStream
This commit is contained in:
parent
d62a13a62f
commit
858339b761
|
@ -328,8 +328,63 @@ next available market price.
|
||||||
|
|
||||||
## UserDataStream
|
## UserDataStream
|
||||||
|
|
||||||
|
When you submit an order to the exchange, you might want to know when the order is filled or not, user data stream is
|
||||||
|
the real time notification let you receive the order update event.
|
||||||
|
|
||||||
|
To get the order update from the user data stream:
|
||||||
|
|
||||||
|
```go
|
||||||
|
session.UserDataStream.OnOrderUpdate(func(order types.Order) {
|
||||||
|
if order.Status == types.OrderStatusFilled {
|
||||||
|
log.Infof("your order is filled: %+v", order)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
However, order update only contains the status of the order, if you need to get the details of the trade execution,
|
||||||
|
you need the trade update event:
|
||||||
|
|
||||||
|
```go
|
||||||
|
session.UserDataStream.OnTrade(func(trade types.Trade) {
|
||||||
|
log.Infof("trade price %f, fee %f %s", trade.Price.Float64(), trade.Fee.Float64(), trade.FeeCurrency)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
To monitor your balance change, you can use the balance update event callback:
|
||||||
|
|
||||||
|
```go
|
||||||
|
session.UserDataStream.OnBalanceUpdate(func(balances types.BalanceMap) {
|
||||||
|
log.Infof("balance update: %+v", balances)
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that, as we mentioned above, the user data stream is a session-wide stream, that means you might receive the order update event for other strategies.
|
||||||
|
|
||||||
|
To prevent that, you need to manage your active order for your strategy:
|
||||||
|
|
||||||
|
```go
|
||||||
|
activeBook := bbgo.NewActiveOrderBook("BTCUSDT")
|
||||||
|
activeBook.Bind(session.UserDataStream)
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, when you create some orders, you can register your order to the active order book, so that it can manage the order
|
||||||
|
update:
|
||||||
|
|
||||||
|
```go
|
||||||
|
createdOrders, err := session.Exchange.SubmitOrders(ctx, types.SubmitOrder{
|
||||||
|
Symbol: "BTCUSDT",
|
||||||
|
Type: types.OrderTypeLimit,
|
||||||
|
Price: fixedpoint.NewFromFloat(18000.0),
|
||||||
|
Quantity: fixedpoint.NewFromFloat(1.0),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).Errorf("can not submit orders")
|
||||||
|
}
|
||||||
|
|
||||||
|
activeBook.Add(createdOrders...)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notification
|
||||||
|
|
||||||
|
|
||||||
## Handling Trades and Profit
|
## Handling Trades and Profit
|
||||||
|
|
Loading…
Reference in New Issue
Block a user