mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-25 16:25:16 +00:00
doc: update trade management and graceful shutdown
This commit is contained in:
parent
941e1bfb0c
commit
bfd64813f8
|
@ -328,6 +328,13 @@ next available market price.
|
|||
|
||||
## UserDataStream
|
||||
|
||||
UserDataStream is an authenticated connection to the crypto exchange. You can receive the following data type from the
|
||||
user data stream:
|
||||
|
||||
- OrderUpdate
|
||||
- TradeUpdate
|
||||
- BalanceUpdate
|
||||
|
||||
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.
|
||||
|
||||
|
@ -413,6 +420,41 @@ The above call will render the first format string with the given float number 1
|
|||
|
||||
## Handling Trades and Profit
|
||||
|
||||
In order to manage the trades and orders for each strategy, BBGO designed an order executor API that helps you collect
|
||||
the related trades and orders from the strategy, so trades from other strategies won't bother your logics.
|
||||
|
||||
To do that, you can use the *bbgo.GeneralOrderExecutor:
|
||||
|
||||
```go
|
||||
var profitStats = types.NewProfitStats(s.Market)
|
||||
var position = types.NewPositionFromMarket(s.Market)
|
||||
var tradeStats = &types.TradeStats{}
|
||||
orderExecutor := bbgo.NewGeneralOrderExecutor(session, s.Symbol, ID, instanceID, position)
|
||||
|
||||
// bind the trade events to update the profit stats
|
||||
orderExecutor.BindProfitStats(profitStats)
|
||||
|
||||
// bind the trade events to update the trade stats
|
||||
orderExecutor.BindTradeStats(tradeStats)
|
||||
orderExecutor.Bind()
|
||||
```
|
||||
|
||||
## Graceful Shutdown
|
||||
|
||||
When BBGO shuts down, you might want to clean up your open orders for your strategy, to do that, you can use the
|
||||
OnShutdown API to register your handler.
|
||||
|
||||
```go
|
||||
bbgo.OnShutdown(func(ctx context.Context, wg *sync.WaitGroup) {
|
||||
defer wg.Done()
|
||||
|
||||
_, _ = fmt.Fprintln(os.Stderr, s.TradeStats.String())
|
||||
if err := s.orderExecutor.GracefulCancel(ctx) ; err != nil {
|
||||
log.WithError(err).Error("graceful cancel order error")
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## Persistence
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user