mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
Merge pull request #1405 from c9s/chiahung/grid2/use-rest-quote
FIX: [grid2] use rest quote to place the last order when opening grid
This commit is contained in:
commit
75b8be5e17
|
@ -1362,7 +1362,11 @@ func (s *Strategy) generateGridOrders(totalQuote, totalBase, lastPrice fixedpoin
|
||||||
ClientOrderID: s.newClientOrderID(),
|
ClientOrderID: s.newClientOrderID(),
|
||||||
})
|
})
|
||||||
quoteQuantity := quantity.Mul(nextPrice)
|
quoteQuantity := quantity.Mul(nextPrice)
|
||||||
usedQuote = usedQuote.Add(quoteQuantity)
|
|
||||||
|
// because the precision issue, we need to round up quote quantity and add it into used quote
|
||||||
|
// e.g. quote we calculate : 8888.85, but it may lock 8888.9 due to their precision.
|
||||||
|
roundUpQuoteQuantity := quoteQuantity.Round(s.Market.PricePrecision, fixedpoint.Up)
|
||||||
|
usedQuote = usedQuote.Add(roundUpQuoteQuantity)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if price spread is not enabled, and we have already placed a sell order index on the top of this price,
|
// if price spread is not enabled, and we have already placed a sell order index on the top of this price,
|
||||||
|
@ -1378,9 +1382,19 @@ func (s *Strategy) generateGridOrders(totalQuote, totalBase, lastPrice fixedpoin
|
||||||
|
|
||||||
quoteQuantity := quantity.Mul(price)
|
quoteQuantity := quantity.Mul(price)
|
||||||
|
|
||||||
if usedQuote.Add(quoteQuantity).Compare(totalQuote) > 0 {
|
// because the precision issue, we need to round up quote quantity and add it into used quote
|
||||||
s.logger.Warnf("used quote %f > total quote %f, this should not happen", usedQuote.Add(quoteQuantity).Float64(), totalQuote.Float64())
|
// e.g. quote we calculate : 8888.85, but it may lock 8888.9 due to their precision.
|
||||||
continue
|
roundUpQuoteQuantity := quoteQuantity.Round(s.Market.PricePrecision, fixedpoint.Up)
|
||||||
|
if usedQuote.Add(roundUpQuoteQuantity).Compare(totalQuote) > 0 {
|
||||||
|
if i > 0 {
|
||||||
|
return nil, fmt.Errorf("used quote %f > total quote %f, this should not happen", usedQuote.Add(quoteQuantity).Float64(), totalQuote.Float64())
|
||||||
|
} else {
|
||||||
|
restQuote := totalQuote.Sub(usedQuote)
|
||||||
|
quantity = restQuote.Div(price).Round(s.Market.VolumePrecision, fixedpoint.Down)
|
||||||
|
if s.Market.MinQuantity.Compare(quantity) > 0 {
|
||||||
|
return nil, fmt.Errorf("the round down quantity (%s) is less than min quantity (%s), we cannot place this order", quantity, s.Market.MinQuantity)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
submitOrders = append(submitOrders, types.SubmitOrder{
|
submitOrders = append(submitOrders, types.SubmitOrder{
|
||||||
|
@ -1395,7 +1409,7 @@ func (s *Strategy) generateGridOrders(totalQuote, totalBase, lastPrice fixedpoin
|
||||||
GroupID: s.OrderGroupID,
|
GroupID: s.OrderGroupID,
|
||||||
ClientOrderID: s.newClientOrderID(),
|
ClientOrderID: s.newClientOrderID(),
|
||||||
})
|
})
|
||||||
usedQuote = usedQuote.Add(quoteQuantity)
|
usedQuote = usedQuote.Add(roundUpQuoteQuantity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ type BacktestStream struct {
|
||||||
func (s *BacktestStream) Connect(ctx context.Context) error {
|
func (s *BacktestStream) Connect(ctx context.Context) error {
|
||||||
s.EmitConnect()
|
s.EmitConnect()
|
||||||
s.EmitStart()
|
s.EmitStart()
|
||||||
|
s.EmitAuth()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user