mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-31 23:16:54 +00:00
orders: Add derive modify struct method from order.Detail (#948)
* orders: Add derive modify struct method to order.Detail and then subsequent method to derive and standardize response details * exchanges: call modify method in wrappers * linter: fixes * engine/wsroutineman: remove print summary * glorious: nits, removed modifyOrder functionality for Bithumb. There are not docs to support this. * Update exchanges/order/orders.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -242,26 +242,18 @@ func (d *Detail) UpdateOrderFromDetail(m *Detail) {
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateOrderFromModify Will update an order detail (used in order management)
|
||||
// UpdateOrderFromModifyResponse Will update an order detail (used in order management)
|
||||
// by comparing passed in and existing values
|
||||
func (d *Detail) UpdateOrderFromModify(m *Modify) {
|
||||
func (d *Detail) UpdateOrderFromModifyResponse(m *ModifyResponse) {
|
||||
var updated bool
|
||||
if m.ID != "" && d.ID != m.ID {
|
||||
d.ID = m.ID
|
||||
if m.OrderID != "" && d.ID != m.OrderID {
|
||||
d.ID = m.OrderID
|
||||
updated = true
|
||||
}
|
||||
if d.ImmediateOrCancel != m.ImmediateOrCancel {
|
||||
d.ImmediateOrCancel = m.ImmediateOrCancel
|
||||
updated = true
|
||||
}
|
||||
if d.HiddenOrder != m.HiddenOrder {
|
||||
d.HiddenOrder = m.HiddenOrder
|
||||
updated = true
|
||||
}
|
||||
if d.FillOrKill != m.FillOrKill {
|
||||
d.FillOrKill = m.FillOrKill
|
||||
updated = true
|
||||
}
|
||||
if m.Price > 0 && m.Price != d.Price {
|
||||
d.Price = m.Price
|
||||
updated = true
|
||||
@@ -270,34 +262,10 @@ func (d *Detail) UpdateOrderFromModify(m *Modify) {
|
||||
d.Amount = m.Amount
|
||||
updated = true
|
||||
}
|
||||
if m.LimitPriceUpper > 0 && m.LimitPriceUpper != d.LimitPriceUpper {
|
||||
d.LimitPriceUpper = m.LimitPriceUpper
|
||||
updated = true
|
||||
}
|
||||
if m.LimitPriceLower > 0 && m.LimitPriceLower != d.LimitPriceLower {
|
||||
d.LimitPriceLower = m.LimitPriceLower
|
||||
updated = true
|
||||
}
|
||||
if m.TriggerPrice > 0 && m.TriggerPrice != d.TriggerPrice {
|
||||
d.TriggerPrice = m.TriggerPrice
|
||||
updated = true
|
||||
}
|
||||
if m.QuoteAmount > 0 && m.QuoteAmount != d.QuoteAmount {
|
||||
d.QuoteAmount = m.QuoteAmount
|
||||
updated = true
|
||||
}
|
||||
if m.ExecutedAmount > 0 && m.ExecutedAmount != d.ExecutedAmount {
|
||||
d.ExecutedAmount = m.ExecutedAmount
|
||||
updated = true
|
||||
}
|
||||
if m.Fee > 0 && m.Fee != d.Fee {
|
||||
d.Fee = m.Fee
|
||||
updated = true
|
||||
}
|
||||
if m.AccountID != "" && m.AccountID != d.AccountID {
|
||||
d.AccountID = m.AccountID
|
||||
updated = true
|
||||
}
|
||||
if m.PostOnly != d.PostOnly {
|
||||
d.PostOnly = m.PostOnly
|
||||
updated = true
|
||||
@@ -308,18 +276,6 @@ func (d *Detail) UpdateOrderFromModify(m *Modify) {
|
||||
d.Pair = m.Pair
|
||||
updated = true
|
||||
}
|
||||
if m.Leverage != 0 && m.Leverage != d.Leverage {
|
||||
d.Leverage = m.Leverage
|
||||
updated = true
|
||||
}
|
||||
if m.ClientID != "" && m.ClientID != d.ClientID {
|
||||
d.ClientID = m.ClientID
|
||||
updated = true
|
||||
}
|
||||
if m.WalletAddress != "" && m.WalletAddress != d.WalletAddress {
|
||||
d.WalletAddress = m.WalletAddress
|
||||
updated = true
|
||||
}
|
||||
if m.Type != UnknownType && m.Type != d.Type {
|
||||
d.Type = m.Type
|
||||
updated = true
|
||||
@@ -336,52 +292,6 @@ func (d *Detail) UpdateOrderFromModify(m *Modify) {
|
||||
d.AssetType = m.AssetType
|
||||
updated = true
|
||||
}
|
||||
for x := range m.Trades {
|
||||
var found bool
|
||||
for y := range d.Trades {
|
||||
if d.Trades[y].TID != m.Trades[x].TID {
|
||||
continue
|
||||
}
|
||||
found = true
|
||||
if d.Trades[y].Fee != m.Trades[x].Fee {
|
||||
d.Trades[y].Fee = m.Trades[x].Fee
|
||||
updated = true
|
||||
}
|
||||
if m.Trades[x].Price != 0 && d.Trades[y].Price != m.Trades[x].Price {
|
||||
d.Trades[y].Price = m.Trades[x].Price
|
||||
updated = true
|
||||
}
|
||||
if d.Trades[y].Side != m.Trades[x].Side {
|
||||
d.Trades[y].Side = m.Trades[x].Side
|
||||
updated = true
|
||||
}
|
||||
if d.Trades[y].Type != m.Trades[x].Type {
|
||||
d.Trades[y].Type = m.Trades[x].Type
|
||||
updated = true
|
||||
}
|
||||
if d.Trades[y].Description != m.Trades[x].Description {
|
||||
d.Trades[y].Description = m.Trades[x].Description
|
||||
updated = true
|
||||
}
|
||||
if m.Trades[x].Amount != 0 && d.Trades[y].Amount != m.Trades[x].Amount {
|
||||
d.Trades[y].Amount = m.Trades[x].Amount
|
||||
updated = true
|
||||
}
|
||||
if d.Trades[y].Timestamp != m.Trades[x].Timestamp {
|
||||
d.Trades[y].Timestamp = m.Trades[x].Timestamp
|
||||
updated = true
|
||||
}
|
||||
if d.Trades[y].IsMaker != m.Trades[x].IsMaker {
|
||||
d.Trades[y].IsMaker = m.Trades[x].IsMaker
|
||||
updated = true
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
d.Trades = append(d.Trades, m.Trades[x])
|
||||
updated = true
|
||||
}
|
||||
m.RemainingAmount -= m.Trades[x].Amount
|
||||
}
|
||||
if m.RemainingAmount > 0 && m.RemainingAmount != d.RemainingAmount {
|
||||
d.RemainingAmount = m.RemainingAmount
|
||||
updated = true
|
||||
@@ -494,6 +404,47 @@ func CopyPointerOrderSlice(old []*Detail) []*Detail {
|
||||
return copySlice
|
||||
}
|
||||
|
||||
// DeriveModify populates a modify struct by the managed order details. Note:
|
||||
// Price, Amount, Trigger price and order execution bools need to be changed
|
||||
// in scope. This only derives identifiers for ease.
|
||||
func (d *Detail) DeriveModify() (*Modify, error) {
|
||||
if d == nil {
|
||||
return nil, errOrderDetailIsNil
|
||||
}
|
||||
return &Modify{
|
||||
Exchange: d.Exchange,
|
||||
ID: d.ID,
|
||||
ClientOrderID: d.ClientOrderID,
|
||||
Type: d.Type,
|
||||
Side: d.Side,
|
||||
AssetType: d.AssetType,
|
||||
Pair: d.Pair,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeriveModifyResponse populates a modify response with its identifiers for
|
||||
// cross exchange standard. NOTE: New OrderID and/or ClientOrderID plus any
|
||||
// changes *might* need to be populated in scope.
|
||||
func (m *Modify) DeriveModifyResponse() (*ModifyResponse, error) {
|
||||
if m == nil {
|
||||
return nil, errOrderDetailIsNil
|
||||
}
|
||||
return &ModifyResponse{
|
||||
Exchange: m.Exchange,
|
||||
OrderID: m.ID,
|
||||
ClientOrderID: m.ClientOrderID,
|
||||
Type: m.Type,
|
||||
Side: m.Side,
|
||||
AssetType: m.AssetType,
|
||||
Pair: m.Pair,
|
||||
ImmediateOrCancel: m.ImmediateOrCancel,
|
||||
PostOnly: m.PostOnly,
|
||||
Price: m.Price,
|
||||
Amount: m.Amount,
|
||||
TriggerPrice: m.TriggerPrice,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeriveCancel populates a cancel struct by the managed order details
|
||||
func (d *Detail) DeriveCancel() (*Cancel, error) {
|
||||
if d == nil {
|
||||
|
||||
Reference in New Issue
Block a user