mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-24 15:55:14 +00:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
|
package dca2
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
|
||
|
"github.com/c9s/bbgo/pkg/exchange/retry"
|
||
|
"github.com/c9s/bbgo/pkg/strategy/common"
|
||
|
"github.com/c9s/bbgo/pkg/util"
|
||
|
)
|
||
|
|
||
|
func (s *Strategy) recoverPeriodically(ctx context.Context) {
|
||
|
s.logger.Info("[DCA] monitor and recover periodically")
|
||
|
interval := util.MillisecondsJitter(10*time.Minute, 5*60*1000)
|
||
|
ticker := time.NewTicker(interval)
|
||
|
defer ticker.Stop()
|
||
|
|
||
|
for {
|
||
|
select {
|
||
|
case <-ctx.Done():
|
||
|
return
|
||
|
case <-ticker.C:
|
||
|
if err := s.recoverActiveOrders(ctx); err != nil {
|
||
|
s.logger.WithError(err).Warn(err, "failed to recover active orders")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Strategy) recoverActiveOrders(ctx context.Context) error {
|
||
|
openOrders, err := retry.QueryOpenOrdersUntilSuccessfulLite(ctx, s.ExchangeSession.Exchange, s.Symbol)
|
||
|
if err != nil {
|
||
|
s.logger.WithError(err).Warn("failed to query open orders")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
activeOrders := s.OrderExecutor.ActiveMakerOrders().Orders()
|
||
|
|
||
|
// update num of open orders metrics
|
||
|
if metricsNumOfOpenOrders != nil {
|
||
|
metricsNumOfOpenOrders.With(baseLabels).Set(float64(len(openOrders)))
|
||
|
}
|
||
|
|
||
|
// update num of active orders metrics
|
||
|
if metricsNumOfActiveOrders != nil {
|
||
|
metricsNumOfActiveOrders.With(baseLabels).Set(float64(len(activeOrders)))
|
||
|
}
|
||
|
|
||
|
opts := common.SyncActiveOrdersOpts{
|
||
|
Logger: s.logger,
|
||
|
Exchange: s.ExchangeSession.Exchange,
|
||
|
ActiveOrderBook: s.OrderExecutor.ActiveMakerOrders(),
|
||
|
OpenOrders: openOrders,
|
||
|
}
|
||
|
|
||
|
return common.SyncActiveOrders(ctx, opts)
|
||
|
}
|