Okx: Websocket order channel fixes (#1346)

* Okx: Fix WS order fields

* Fixes float64 with string annotation erroring on empty strings:
Okx Order Push Data error json: invalid use of ,string struct tag, trying to unmarshal "" into float64
Specifically this came from px field from a market order
* Switch to convert.StringToFloat64 instead of okxNumericalValue
* Fix typo in Notional* field names; Ironically prevented them from erroring

* Okx: Add tests for first order fields

* Okx: CID and maybe set WS order Filled time

* Tests: Set TestFixtureToDataHandler to t.Helper

* Orders: Add UnmarshalJSON to order.Side

* Okx: Fix FillTime not parsed for PendingOrder

* Okx: Switch to order.Side Unmarshal throughout

* Okx: Add Fee and FeeAsset to order processing

* Okx: Fix WS order.Detail amounts and Test

This fixes Amount vs QuoteAmount for market sells where tgtCcy is
quote_ccy

* Add comment to order.Side.UnmarshalJSON

* Okx: Replace PendingOrderItem Unmarshal with local types

* Okx: string type for WS order reduceOnly

Note: Not yet in unit tests, since it's not part of the spot tests I was
originally fixing. I'll circle back to adding full test support for
Reduce only and deleveraging positions.

* Okx: Fix TestOrderPushData Amount

We were expecting 0 when we're given a quoteAmount
In reality, we'll calculate the size from the price

* Okx: Fix order and remAmount in wsOrders

Improved handling for Float64 issues and boundaries when the order is
fully executed but not yet marked as Filled

* Fix ErrSideIsInvalid in tests
This commit is contained in:
Gareth Kirwan
2023-10-13 06:18:55 +02:00
committed by GitHub
parent 233a65a778
commit 8430509807
9 changed files with 201 additions and 183 deletions

View File

@@ -154,6 +154,7 @@ func ForceFileStandard(t *testing.T, pattern string) error {
// TestFixtureToDataHandler takes a new empty exchange and configures a new websocket handler for it, and squirts the json path contents to it
// It accepts a reader function, which is probably e.wsHandleData but could be anything
func TestFixtureToDataHandler(t *testing.T, seed, e exchange.IBotExchange, fixturePath string, reader func([]byte) error) {
t.Helper()
b := e.GetBase()
seedBase := seed.GetBase()