mirror of
https://github.com/c9s/bbgo.git
synced 2024-09-20 16:21:09 +00:00
ftx : fix #334 rate limit
This commit is contained in:
parent
b71d0f5b6e
commit
5259bba5fe
|
@ -3,6 +3,7 @@ package ftx
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"golang.org/x/time/rate"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
|
@ -23,6 +24,9 @@ const (
|
||||||
|
|
||||||
var logger = logrus.WithField("exchange", "ftx")
|
var logger = logrus.WithField("exchange", "ftx")
|
||||||
|
|
||||||
|
// POST https://ftx.com/api/orders 429, Success: false, err: Do not send more than 2 orders on this market per 200ms
|
||||||
|
var requestLimit = rate.NewLimiter(rate.Every(220*time.Millisecond), 2)
|
||||||
|
|
||||||
//go:generate go run generate_symbol_map.go
|
//go:generate go run generate_symbol_map.go
|
||||||
|
|
||||||
type Exchange struct {
|
type Exchange struct {
|
||||||
|
@ -338,6 +342,9 @@ func (e *Exchange) SubmitOrders(ctx context.Context, orders ...types.SubmitOrder
|
||||||
if so.TimeInForce != "GTC" && so.TimeInForce != "" {
|
if so.TimeInForce != "GTC" && so.TimeInForce != "" {
|
||||||
return createdOrders, fmt.Errorf("unsupported TimeInForce %s. only support GTC", so.TimeInForce)
|
return createdOrders, fmt.Errorf("unsupported TimeInForce %s. only support GTC", so.TimeInForce)
|
||||||
}
|
}
|
||||||
|
if err := requestLimit.Wait(ctx); err != nil {
|
||||||
|
logrus.WithError(err).Error("rate limit error")
|
||||||
|
}
|
||||||
or, err := e.newRest().PlaceOrder(ctx, PlaceOrderPayload{
|
or, err := e.newRest().PlaceOrder(ctx, PlaceOrderPayload{
|
||||||
Market: toLocalSymbol(TrimUpperString(so.Symbol)),
|
Market: toLocalSymbol(TrimUpperString(so.Symbol)),
|
||||||
Side: TrimLowerString(string(so.Side)),
|
Side: TrimLowerString(string(so.Side)),
|
||||||
|
@ -437,6 +444,9 @@ func sortByCreatedASC(orders []order) {
|
||||||
func (e *Exchange) CancelOrders(ctx context.Context, orders ...types.Order) error {
|
func (e *Exchange) CancelOrders(ctx context.Context, orders ...types.Order) error {
|
||||||
for _, o := range orders {
|
for _, o := range orders {
|
||||||
rest := e.newRest()
|
rest := e.newRest()
|
||||||
|
if err := requestLimit.Wait(ctx); err != nil {
|
||||||
|
logrus.WithError(err).Error("rate limit error")
|
||||||
|
}
|
||||||
if len(o.ClientOrderID) > 0 {
|
if len(o.ClientOrderID) > 0 {
|
||||||
if _, err := rest.CancelOrderByClientID(ctx, o.ClientOrderID); err != nil {
|
if _, err := rest.CancelOrderByClientID(ctx, o.ClientOrderID); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue
Block a user