Skip to content

Commit 64b4f8e

Browse files
authored
Merge pull request #1960 from c9s/c9s/xgap/improve-bitget-force
2 parents fe469fe + 09b7c72 commit 64b4f8e

File tree

3 files changed

+70
-16
lines changed

3 files changed

+70
-16
lines changed

pkg/exchange/bitget/bitgetapi/v2/place_order_request_requestgen.go

Lines changed: 35 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/exchange/bitget/exchange.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,27 @@ func (e *Exchange) SubmitOrder(ctx context.Context, order types.SubmitOrder) (cr
319319
return nil, fmt.Errorf("time-in-force %s not supported", order.TimeInForce)
320320
}
321321

322+
// bitget's "force" field is mandatory, so we need to set it.
322323
switch order.Type {
323324
case types.OrderTypeLimitMaker:
324325
req.Force(v2.OrderForcePostOnly)
325-
default:
326+
case types.OrderTypeMarket:
327+
// From the doc: It is invalid when orderType is market)
326328
req.Force(v2.OrderForceGTC)
329+
default:
330+
if len(order.TimeInForce) != 0 {
331+
switch order.TimeInForce {
332+
case types.TimeInForceGTC:
333+
req.Force(v2.OrderForceGTC)
334+
case types.TimeInForceIOC:
335+
req.Force(v2.OrderForceIOC)
336+
case types.TimeInForceFOK:
337+
req.Force(v2.OrderForceFOK)
338+
}
339+
} else {
340+
// set default force to GTC
341+
req.Force(v2.OrderForceGTC)
342+
}
327343
}
328344

329345
// set price

pkg/strategy/xgap/strategy.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,13 @@ func (s *Strategy) CrossRun(ctx context.Context, _ bbgo.OrderExecutionRouter, se
234234
func (s *Strategy) makeSpread(ctx context.Context, bestBid, bestAsk types.PriceVolume) error {
235235
orderForms := []types.SubmitOrder{
236236
{
237-
Symbol: s.Symbol,
238-
Side: types.SideTypeSell,
239-
Type: types.OrderTypeLimit,
240-
Quantity: fixedpoint.Max(bestBid.Volume, s.tradingMarket.MinQuantity),
241-
Price: bestBid.Price,
242-
Market: s.tradingMarket,
237+
Symbol: s.Symbol,
238+
Side: types.SideTypeSell,
239+
Type: types.OrderTypeLimit,
240+
Quantity: fixedpoint.Max(bestBid.Volume, s.tradingMarket.MinQuantity),
241+
Price: bestBid.Price,
242+
Market: s.tradingMarket,
243+
TimeInForce: types.TimeInForceIOC,
243244
},
244245
}
245246
log.Infof("make spread order forms: %+v", orderForms)
@@ -402,12 +403,13 @@ func (s *Strategy) placeOrders(ctx context.Context) {
402403
Market: s.tradingMarket,
403404
},
404405
{
405-
Symbol: s.Symbol,
406-
Side: types.SideTypeSell,
407-
Type: types.OrderTypeLimit,
408-
Quantity: quantity,
409-
Price: price,
410-
Market: s.tradingMarket,
406+
Symbol: s.Symbol,
407+
Side: types.SideTypeSell,
408+
Type: types.OrderTypeLimit,
409+
Quantity: quantity,
410+
Price: price,
411+
Market: s.tradingMarket,
412+
TimeInForce: types.TimeInForceIOC,
411413
},
412414
}
413415
log.Infof("order forms: %+v", orderForms)
@@ -423,6 +425,10 @@ func (s *Strategy) placeOrders(ctx context.Context) {
423425
}
424426

425427
time.Sleep(time.Second)
428+
429+
if err := s.OrderExecutor.GracefulCancel(ctx); err != nil {
430+
log.WithError(err).Warnf("cancel order error")
431+
}
426432
}
427433

428434
func (s *Strategy) cancelOrders(ctx context.Context) {

0 commit comments

Comments
 (0)