deposit2transfer: check transfer amount before transfering

This commit is contained in:
c9s 2024-11-04 17:34:56 +08:00
parent c3b058ce38
commit d0a7e6b740
No known key found for this signature in database
GPG Key ID: 7385E7E464CB0A54

View File

@ -46,6 +46,7 @@ type Strategy struct {
Assets []string `json:"assets"`
Interval types.Duration `json:"interval"`
TransferDelay types.Duration `json:"transferDelay"`
marginTransferService marginTransferService
depositHistoryService types.ExchangeTransferService
@ -70,6 +71,14 @@ func (s *Strategy) Defaults() error {
s.Interval = types.Duration(5 * time.Minute)
}
if s.TransferDelay == 0 {
s.TransferDelay = types.Duration(3 * time.Second)
}
return nil
}
func (s *Strategy) Initialize() error {
if s.logger == nil {
s.logger = log.Dup()
}
@ -144,6 +153,13 @@ func (s *Strategy) checkDeposits(ctx context.Context) {
if len(succeededDeposits) == 0 {
logger.Debugf("no %s deposit found", asset)
continue
} else {
logger.Infof("found %d %s deposits", len(succeededDeposits), asset)
}
if s.TransferDelay > 0 {
logger.Infof("delaying transfer for %s...", s.TransferDelay.Duration())
time.Sleep(s.TransferDelay.Duration())
}
for _, d := range succeededDeposits {
@ -168,12 +184,20 @@ func (s *Strategy) checkDeposits(ctx context.Context) {
continue
}
if bal, ok := account.Balance(d.Asset); ok {
bal, ok := account.Balance(d.Asset)
if ok {
logger.Infof("spot account balance %s: %+v", d.Asset, bal)
amount = fixedpoint.Min(bal.Available, amount)
} else {
logger.Errorf("unexpected error: %s balance not found", d.Asset)
}
if amount.IsZero() || amount.Sign() < 0 {
bbgo.Notify("Found succeeded deposit %s %s, but the balance %s %s is insufficient, skip transferring",
d.Amount.String(), d.Asset,
bal.Available.String(), bal.Currency)
continue
}
}
bbgo.Notify("Found succeeded deposit %s %s, transferring %s %s into the margin account",