Implementation of Exchange GetOrder through GRPC for Coinbase (#453)

* fix 440: SubmitOrder and CB-ACCESS-TIMESTAMP value

* removed gctcli executable and added it to gitignore

* implemented GetOrderInfo

* getOrder also has trades attached to an order

* getOrder also has trades attached to an order

* fix 440: SubmitOrder and CB-ACCESS-TIMESTAMP value

* removed gctcli executable and added it to gitignore

* fix 440: SubmitOrder and CB-ACCESS-TIMESTAMP value

* removed gctcli executable and added it to gitignore

* minor

* go lint fixes

* removed clutter

* fixed Amount, Executed Amount, Remaining Amount

* removed default value declarations

* removed useless nil chceck

* iteration rewritten go style from java style

* returning error if GetFills fails

* returning error if GetOrderInfo fails

* ExecutedAmont value is FilledSize

* added TODO to fix asset type

* chnages after merging #446

* range without copy value, using index

* removed useless slice initialisation

* couple of nits from code review

* fix indentation

* Update rpc.proto

Fixes indentation

Co-authored-by: Adrian Gallagher <thrasher@addictionsoftware.com>
This commit is contained in:
Adrian Gallagher
2020-03-05 10:19:58 +11:00
committed by GitHub
parent 97b71dd9bd
commit 3fae5a0924
7 changed files with 722 additions and 453 deletions

View File

@@ -454,8 +454,65 @@ func (c *CoinbasePro) CancelAllOrders(_ *order.Cancel) (order.CancelAllResponse,
// GetOrderInfo returns information on a current open order
func (c *CoinbasePro) GetOrderInfo(orderID string) (order.Detail, error) {
var orderDetail order.Detail
return orderDetail, common.ErrNotYetImplemented
genOrderDetail, errGo := c.GetOrder(orderID)
if errGo != nil {
return order.Detail{}, fmt.Errorf("error retrieving order %s : %s", orderID, errGo)
}
od, errOd := time.Parse(time.RFC3339, genOrderDetail.DoneAt)
if errOd != nil {
return order.Detail{}, fmt.Errorf("error parsing order done at time: %s", errOd)
}
os, errOs := order.StringToOrderStatus(genOrderDetail.Status)
if errOs != nil {
return order.Detail{}, fmt.Errorf("error parsing order status: %s", errOs)
}
tt, errOt := order.StringToOrderType(genOrderDetail.Type)
if errOt != nil {
return order.Detail{}, fmt.Errorf("error parsing order type: %s", errOt)
}
ss, errOss := order.StringToOrderSide(genOrderDetail.Side)
if errOss != nil {
return order.Detail{}, fmt.Errorf("error parsing order side: %s", errOss)
}
response := order.Detail{
Exchange: c.GetName(),
ID: genOrderDetail.ID,
Pair: currency.NewPairDelimiter(genOrderDetail.ProductID, "-"),
Side: ss,
Type: tt,
Date: od,
Status: os,
Price: genOrderDetail.Price,
Amount: genOrderDetail.Size,
ExecutedAmount: genOrderDetail.FilledSize,
RemainingAmount: genOrderDetail.Size - genOrderDetail.FilledSize,
Fee: genOrderDetail.FillFees,
}
fillResponse, errGF := c.GetFills(orderID, genOrderDetail.ProductID)
if errGF != nil {
return response, fmt.Errorf("error retrieving the order fills: %s", errGF)
}
for i := range fillResponse {
trSi, errTSi := order.StringToOrderSide(fillResponse[i].Side)
if errTSi != nil {
return response, fmt.Errorf("error parsing order Side: %s", errTSi)
}
td, errTd := time.Parse(time.RFC3339, fillResponse[i].CreatedAt)
if errTd != nil {
return response, fmt.Errorf("error parsing trade created time: %s", errTd)
}
response.Trades = append(response.Trades, order.TradeHistory{
Timestamp: td,
TID: string(fillResponse[i].TradeID),
Price: fillResponse[i].Price,
Amount: fillResponse[i].Size,
Exchange: c.GetName(),
Type: tt,
Side: trSi,
Fee: fillResponse[i].Fee,
})
}
return response, nil
}
// GetDepositAddress returns a deposit address for a specified currency

View File

@@ -206,6 +206,7 @@ const (
Expired Status = "EXPIRED"
Hidden Status = "HIDDEN"
UnknownStatus Status = "UNKNOWN"
Open Status = "OPEN"
)
// Type enforces a standard for order types across the code base

View File

@@ -615,6 +615,8 @@ func StringToOrderStatus(status string) (Status, error) {
case strings.EqualFold(status, PartiallyCancelled.String()),
strings.EqualFold(status, "partially cancelled"):
return PartiallyCancelled, nil
case strings.EqualFold(status, Open.String()):
return Open, nil
case strings.EqualFold(status, Cancelled.String()):
return Cancelled, nil
case strings.EqualFold(status, PendingCancel.String()),