bbgo: check closing flag to avoid double closing

This commit is contained in:
c9s 2022-09-19 13:23:23 +08:00
parent 05defc3aad
commit 1c23881da9
No known key found for this signature in database
GPG Key ID: 7385E7E464CB0A54

View File

@ -357,7 +357,13 @@ func (e *GeneralOrderExecutor) ClosePosition(ctx context.Context, percentage fix
return nil return nil
} }
if e.closing > 0 {
log.Errorf("position is already closing")
return nil
}
atomic.AddInt64(&e.closing, 1) atomic.AddInt64(&e.closing, 1)
defer atomic.StoreInt64(&e.closing, 0)
// check base balance and adjust the close position order // check base balance and adjust the close position order
if e.position.IsLong() { if e.position.IsLong() {
@ -367,6 +373,14 @@ func (e *GeneralOrderExecutor) ClosePosition(ctx context.Context, percentage fix
if submitOrder.Quantity.IsZero() { if submitOrder.Quantity.IsZero() {
return fmt.Errorf("insufficient base balance, can not sell: %+v", submitOrder) return fmt.Errorf("insufficient base balance, can not sell: %+v", submitOrder)
} }
} else if e.position.IsShort() {
// TODO: check quote balance here, we also need the current price to validate, need to design.
/*
if quoteBalance, ok := e.session.Account.Balance(e.position.Market.QuoteCurrency); ok {
// AdjustQuantityByMaxAmount(submitOrder.Quantity, quoteBalance.Available)
// submitOrder.Quantity = fixedpoint.Min(submitOrder.Quantity,)
}
*/
} }
tagStr := strings.Join(tags, ",") tagStr := strings.Join(tags, ",")