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:
Ryan O'Hara-Reid
2022-05-06 12:27:21 +10:00
committed by GitHub
parent d735effc8e
commit cdcc9630de
60 changed files with 1375 additions and 802 deletions

View File

@@ -5,7 +5,6 @@ import (
"errors"
"fmt"
"sort"
"strings"
"sync"
"time"
@@ -666,10 +665,12 @@ func (b *Bittrex) ConstructOrderDetail(orderData *OrderData) (order.Detail, erro
orderData.ID,
err)
}
orderType := order.Type(strings.ToUpper(orderData.Type))
orderType, err := order.StringToOrderType(orderData.Type)
if err != nil {
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
}
var orderStatus order.Status
switch orderData.Status {
case order.Open.String():
switch orderData.FillQuantity {
@@ -778,7 +779,8 @@ func (b *Bittrex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReque
resp := make([]order.Detail, 0, len(orderData))
for i := range orderData {
pair, err := currency.NewPairDelimiter(orderData[i].MarketSymbol,
var pair currency.Pair
pair, err = currency.NewPairDelimiter(orderData[i].MarketSymbol,
format.Delimiter)
if err != nil {
log.Errorf(log.ExchangeSys,
@@ -788,12 +790,17 @@ func (b *Bittrex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReque
orderData[i].ID,
err)
}
orderType := order.Type(strings.ToUpper(orderData[i].Type))
orderSide, err := order.StringToOrderSide(orderData[i].Direction)
var orderType order.Type
orderType, err = order.StringToOrderType(orderData[i].Type)
if err != nil {
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
}
var orderSide order.Side
orderSide, err = order.StringToOrderSide(orderData[i].Direction)
if err != nil {
log.Errorf(log.ExchangeSys, "GetActiveOrders - %s - cannot get order side - %s\n", b.Name, err.Error())
continue
}
resp = append(resp, order.Detail{
@@ -812,8 +819,11 @@ func (b *Bittrex) GetActiveOrders(ctx context.Context, req *order.GetOrdersReque
}
order.FilterOrdersByType(&resp, req.Type)
order.FilterOrdersByTimeRange(&resp, req.StartTime, req.EndTime)
order.FilterOrdersByCurrencies(&resp, req.Pairs)
err = order.FilterOrdersByTimeRange(&resp, req.StartTime, req.EndTime)
if err != nil {
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
}
order.FilterOrdersByPairs(&resp, req.Pairs)
b.WsSequenceOrders = sequence
return resp, nil
@@ -836,18 +846,21 @@ func (b *Bittrex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReque
var resp []order.Detail
for x := range req.Pairs {
formattedPair, err := b.FormatExchangeCurrency(req.Pairs[x], req.AssetType)
var formattedPair currency.Pair
formattedPair, err = b.FormatExchangeCurrency(req.Pairs[x], req.AssetType)
if err != nil {
return nil, err
}
orderData, err := b.GetOrderHistoryForCurrency(ctx, formattedPair.String())
var orderData []OrderData
orderData, err = b.GetOrderHistoryForCurrency(ctx, formattedPair.String())
if err != nil {
return nil, err
}
for i := range orderData {
pair, err := currency.NewPairDelimiter(orderData[i].MarketSymbol,
var pair currency.Pair
pair, err = currency.NewPairDelimiter(orderData[i].MarketSymbol,
format.Delimiter)
if err != nil {
log.Errorf(log.ExchangeSys,
@@ -857,17 +870,22 @@ func (b *Bittrex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReque
orderData[i].ID,
err)
}
orderType := order.Type(strings.ToUpper(orderData[i].Type))
var orderType order.Type
orderType, err = order.StringToOrderType(orderData[i].Type)
if err != nil {
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
}
orderSide, err := order.StringToOrderSide(orderData[i].Direction)
var orderSide order.Side
orderSide, err = order.StringToOrderSide(orderData[i].Direction)
if err != nil {
log.Errorf(log.ExchangeSys, "GetActiveOrders - %s - cannot get order side - %s\n", b.Name, err.Error())
continue
}
orderStatus, err := order.StringToOrderStatus(orderData[i].Status)
var orderStatus order.Status
orderStatus, err = order.StringToOrderStatus(orderData[i].Status)
if err != nil {
log.Errorf(log.ExchangeSys, "GetActiveOrders - %s - cannot get order status - %s\n", b.Name, err.Error())
continue
}
detail := order.Detail{
@@ -890,8 +908,11 @@ func (b *Bittrex) GetOrderHistory(ctx context.Context, req *order.GetOrdersReque
}
order.FilterOrdersByType(&resp, req.Type)
order.FilterOrdersByTimeRange(&resp, req.StartTime, req.EndTime)
order.FilterOrdersByCurrencies(&resp, req.Pairs)
err = order.FilterOrdersByTimeRange(&resp, req.StartTime, req.EndTime)
if err != nil {
log.Errorf(log.ExchangeSys, "%s %v", b.Name, err)
}
order.FilterOrdersByPairs(&resp, req.Pairs)
}
return resp, nil