mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-02 15:10:46 +00:00
order: slight optimizations (#917)
* order: slight optimizations * orders: add benchmarks, small optimize and change order side to uin8 for comparitive optimizations. * orders: continue to convert string type -> uint * orders/backtester: interim move type to orders package, later can expand or deprecate. * orders: handle errors * orders: optimize filters and remove error returns when its clearly not needed * orders: remove log call * backtester: zero value check * orders/futures: zero value -> flag * linter: fix * linter: more fixes * linters: rides again * glorious: nits * common: Add zero value unix check for time values; also addresses glorious nits * glorious scott: nits Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
This commit is contained in:
@@ -1174,6 +1174,22 @@ func TestCurrencyNormalization(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetOrderType(t *testing.T) {
|
||||
t.Parallel()
|
||||
if _, err := b.getOrderType(0); !errors.Is(err, order.ErrTypeIsInvalid) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, order.ErrTypeIsInvalid)
|
||||
}
|
||||
|
||||
o, err := b.getOrderType(1)
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
|
||||
}
|
||||
|
||||
if o != order.Market {
|
||||
t.Fatal("unexpected value")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetActionFromString(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := b.GetActionFromString("meow")
|
||||
|
||||
@@ -767,16 +767,16 @@ func (b *Bitmex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReques
|
||||
|
||||
orders := make([]order.Detail, len(resp))
|
||||
for i := range resp {
|
||||
orderSide := orderSideMap[resp[i].Side]
|
||||
orderStatus, err := order.StringToOrderStatus(resp[i].OrdStatus)
|
||||
var orderStatus order.Status
|
||||
orderStatus, err = order.StringToOrderStatus(resp[i].OrdStatus)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
orderType := orderTypeMap[resp[i].OrdType]
|
||||
if orderType == "" {
|
||||
orderType = order.UnknownType
|
||||
var oType order.Type
|
||||
oType, err = b.getOrderType(resp[i].OrdType)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
|
||||
orderDetail := order.Detail{
|
||||
Date: resp[i].Timestamp,
|
||||
Price: resp[i].Price,
|
||||
@@ -785,9 +785,9 @@ func (b *Bitmex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReques
|
||||
RemainingAmount: resp[i].LeavesQty,
|
||||
Exchange: b.Name,
|
||||
ID: resp[i].OrderID,
|
||||
Side: orderSide,
|
||||
Side: orderSideMap[resp[i].Side],
|
||||
Status: orderStatus,
|
||||
Type: orderType,
|
||||
Type: oType,
|
||||
Pair: currency.NewPairWithDelimiter(resp[i].Symbol,
|
||||
resp[i].SettlCurrency,
|
||||
format.Delimiter),
|
||||
@@ -798,8 +798,11 @@ func (b *Bitmex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReques
|
||||
|
||||
order.FilterOrdersBySide(&orders, req.Side)
|
||||
order.FilterOrdersByType(&orders, req.Type)
|
||||
order.FilterOrdersByTimeRange(&orders, req.StartTime, req.EndTime)
|
||||
order.FilterOrdersByCurrencies(&orders, req.Pairs)
|
||||
err = order.FilterOrdersByTimeRange(&orders, req.StartTime, req.EndTime)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
order.FilterOrdersByPairs(&orders, req.Pairs)
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
@@ -825,16 +828,20 @@ func (b *Bitmex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReques
|
||||
orders := make([]order.Detail, len(resp))
|
||||
for i := range resp {
|
||||
orderSide := orderSideMap[resp[i].Side]
|
||||
orderStatus, err := order.StringToOrderStatus(resp[i].OrdStatus)
|
||||
var orderStatus order.Status
|
||||
orderStatus, err = order.StringToOrderStatus(resp[i].OrdStatus)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
orderType := orderTypeMap[resp[i].OrdType]
|
||||
if orderType == "" {
|
||||
orderType = order.UnknownType
|
||||
}
|
||||
|
||||
pair := currency.NewPairWithDelimiter(resp[i].Symbol, resp[i].SettlCurrency, format.Delimiter)
|
||||
|
||||
var oType order.Type
|
||||
oType, err = b.getOrderType(resp[i].OrdType)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
|
||||
orderDetail := order.Detail{
|
||||
Price: resp[i].Price,
|
||||
AverageExecutedPrice: resp[i].AvgPx,
|
||||
@@ -847,7 +854,7 @@ func (b *Bitmex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReques
|
||||
ID: resp[i].OrderID,
|
||||
Side: orderSide,
|
||||
Status: orderStatus,
|
||||
Type: orderType,
|
||||
Type: oType,
|
||||
Pair: pair,
|
||||
}
|
||||
orderDetail.InferCostsAndTimes()
|
||||
@@ -857,8 +864,11 @@ func (b *Bitmex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReques
|
||||
|
||||
order.FilterOrdersBySide(&orders, req.Side)
|
||||
order.FilterOrdersByType(&orders, req.Type)
|
||||
order.FilterOrdersByTimeRange(&orders, req.StartTime, req.EndTime)
|
||||
order.FilterOrdersByCurrencies(&orders, req.Pairs)
|
||||
err = order.FilterOrdersByTimeRange(&orders, req.StartTime, req.EndTime)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
|
||||
}
|
||||
order.FilterOrdersByPairs(&orders, req.Pairs)
|
||||
return orders, nil
|
||||
}
|
||||
|
||||
@@ -883,3 +893,12 @@ func (b *Bitmex) GetHistoricCandles(ctx context.Context, pair currency.Pair, a a
|
||||
func (b *Bitmex) GetHistoricCandlesExtended(ctx context.Context, pair currency.Pair, a asset.Item, start, end time.Time, interval kline.Interval) (kline.Item, error) {
|
||||
return kline.Item{}, common.ErrFunctionNotSupported
|
||||
}
|
||||
|
||||
// getOrderType derives an order type from bitmex int representation
|
||||
func (b *Bitmex) getOrderType(id int64) (order.Type, error) {
|
||||
o, ok := orderTypeMap[id]
|
||||
if !ok {
|
||||
return order.UnknownType, fmt.Errorf("unhandled order type for '%d': %w", id, order.ErrTypeIsInvalid)
|
||||
}
|
||||
return o, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user