2021 lines
89 KiB
Go
2021 lines
89 KiB
Go
![]() |
package ccxt
|
||
|
|
||
|
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
||
|
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
||
|
|
||
|
type onetrading struct {
|
||
|
Exchange
|
||
|
|
||
|
}
|
||
|
|
||
|
func NewOnetradingCore() onetrading {
|
||
|
p := onetrading{}
|
||
|
setDefaults(&p)
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (this *onetrading) Describe() interface{} {
|
||
|
return this.DeepExtend(this.Exchange.Describe(), map[string]interface{} {
|
||
|
"id": "onetrading",
|
||
|
"name": "One Trading",
|
||
|
"countries": []interface{}{"AT"},
|
||
|
"rateLimit": 300,
|
||
|
"version": "v1",
|
||
|
"pro": true,
|
||
|
"has": map[string]interface{} {
|
||
|
"CORS": nil,
|
||
|
"spot": true,
|
||
|
"margin": false,
|
||
|
"swap": false,
|
||
|
"future": false,
|
||
|
"option": false,
|
||
|
"addMargin": false,
|
||
|
"cancelAllOrders": true,
|
||
|
"cancelOrder": true,
|
||
|
"cancelOrders": true,
|
||
|
"closeAllPositions": false,
|
||
|
"closePosition": false,
|
||
|
"createDepositAddress": false,
|
||
|
"createOrder": true,
|
||
|
"createReduceOnlyOrder": false,
|
||
|
"createStopLimitOrder": true,
|
||
|
"createStopMarketOrder": false,
|
||
|
"createStopOrder": true,
|
||
|
"fetchAccounts": false,
|
||
|
"fetchBalance": true,
|
||
|
"fetchBorrowRateHistories": false,
|
||
|
"fetchBorrowRateHistory": false,
|
||
|
"fetchClosedOrders": true,
|
||
|
"fetchCrossBorrowRate": false,
|
||
|
"fetchCrossBorrowRates": false,
|
||
|
"fetchCurrencies": true,
|
||
|
"fetchDeposit": false,
|
||
|
"fetchDepositAddress": false,
|
||
|
"fetchDepositAddresses": false,
|
||
|
"fetchDepositAddressesByNetwork": false,
|
||
|
"fetchDeposits": false,
|
||
|
"fetchDepositsWithdrawals": false,
|
||
|
"fetchFundingHistory": false,
|
||
|
"fetchFundingRate": false,
|
||
|
"fetchFundingRateHistory": false,
|
||
|
"fetchFundingRates": false,
|
||
|
"fetchIndexOHLCV": false,
|
||
|
"fetchIsolatedBorrowRate": false,
|
||
|
"fetchIsolatedBorrowRates": false,
|
||
|
"fetchLedger": false,
|
||
|
"fetchLeverage": false,
|
||
|
"fetchMarginMode": false,
|
||
|
"fetchMarkets": true,
|
||
|
"fetchMarkOHLCV": false,
|
||
|
"fetchMyTrades": true,
|
||
|
"fetchOHLCV": true,
|
||
|
"fetchOpenInterestHistory": false,
|
||
|
"fetchOpenOrders": true,
|
||
|
"fetchOrder": true,
|
||
|
"fetchOrderBook": true,
|
||
|
"fetchOrders": false,
|
||
|
"fetchOrderTrades": true,
|
||
|
"fetchPosition": false,
|
||
|
"fetchPositionHistory": false,
|
||
|
"fetchPositionMode": false,
|
||
|
"fetchPositions": false,
|
||
|
"fetchPositionsForSymbol": false,
|
||
|
"fetchPositionsHistory": false,
|
||
|
"fetchPositionsRisk": false,
|
||
|
"fetchPremiumIndexOHLCV": false,
|
||
|
"fetchTicker": true,
|
||
|
"fetchTickers": true,
|
||
|
"fetchTime": true,
|
||
|
"fetchTrades": false,
|
||
|
"fetchTradingFee": false,
|
||
|
"fetchTradingFees": true,
|
||
|
"fetchTransactionFee": false,
|
||
|
"fetchTransactionFees": false,
|
||
|
"fetchTransactions": false,
|
||
|
"fetchTransfer": false,
|
||
|
"fetchTransfers": false,
|
||
|
"fetchWithdrawal": false,
|
||
|
"fetchWithdrawals": false,
|
||
|
"reduceMargin": false,
|
||
|
"setLeverage": false,
|
||
|
"setMargin": false,
|
||
|
"setMarginMode": false,
|
||
|
"setPositionMode": false,
|
||
|
"transfer": false,
|
||
|
"withdraw": false,
|
||
|
},
|
||
|
"timeframes": map[string]interface{} {
|
||
|
"1m": "1/MINUTES",
|
||
|
"5m": "5/MINUTES",
|
||
|
"15m": "15/MINUTES",
|
||
|
"30m": "30/MINUTES",
|
||
|
"1h": "1/HOURS",
|
||
|
"4h": "4/HOURS",
|
||
|
"1d": "1/DAYS",
|
||
|
"1w": "1/WEEKS",
|
||
|
"1M": "1/MONTHS",
|
||
|
},
|
||
|
"urls": map[string]interface{} {
|
||
|
"logo": "https://github.com/ccxt/ccxt/assets/43336371/bdbc26fd-02f2-4ca7-9f1e-17333690bb1c",
|
||
|
"api": map[string]interface{} {
|
||
|
"public": "https://api.onetrading.com/fast",
|
||
|
"private": "https://api.onetrading.com/fast",
|
||
|
},
|
||
|
"www": "https://onetrading.com/",
|
||
|
"doc": []interface{}{"https://docs.onetrading.com"},
|
||
|
"fees": "https://onetrading.com/fees",
|
||
|
},
|
||
|
"api": map[string]interface{} {
|
||
|
"public": map[string]interface{} {
|
||
|
"get": []interface{}{"currencies", "candlesticks/{instrument_code}", "fees", "instruments", "order-book/{instrument_code}", "market-ticker", "market-ticker/{instrument_code}", "time"},
|
||
|
},
|
||
|
"private": map[string]interface{} {
|
||
|
"get": []interface{}{"account/balances", "account/fees", "account/orders", "account/orders/{order_id}", "account/orders/{order_id}/trades", "account/trades", "account/trades/{trade_id}"},
|
||
|
"post": []interface{}{"account/orders"},
|
||
|
"delete": []interface{}{"account/orders", "account/orders/{order_id}", "account/orders/client/{client_id}"},
|
||
|
},
|
||
|
},
|
||
|
"fees": map[string]interface{} {
|
||
|
"trading": map[string]interface{} {
|
||
|
"tierBased": true,
|
||
|
"percentage": true,
|
||
|
"taker": this.ParseNumber("0.0015"),
|
||
|
"maker": this.ParseNumber("0.001"),
|
||
|
"tiers": []interface{}{map[string]interface{} {
|
||
|
"taker": []interface{}{[]interface{}{this.ParseNumber("0"), this.ParseNumber("0.0015")}, []interface{}{this.ParseNumber("100"), this.ParseNumber("0.0013")}, []interface{}{this.ParseNumber("250"), this.ParseNumber("0.0013")}, []interface{}{this.ParseNumber("1000"), this.ParseNumber("0.001")}, []interface{}{this.ParseNumber("5000"), this.ParseNumber("0.0009")}, []interface{}{this.ParseNumber("10000"), this.ParseNumber("0.00075")}, []interface{}{this.ParseNumber("20000"), this.ParseNumber("0.00065")}},
|
||
|
"maker": []interface{}{[]interface{}{this.ParseNumber("0"), this.ParseNumber("0.001")}, []interface{}{this.ParseNumber("100"), this.ParseNumber("0.001")}, []interface{}{this.ParseNumber("250"), this.ParseNumber("0.0009")}, []interface{}{this.ParseNumber("1000"), this.ParseNumber("0.00075")}, []interface{}{this.ParseNumber("5000"), this.ParseNumber("0.0006")}, []interface{}{this.ParseNumber("10000"), this.ParseNumber("0.0005")}, []interface{}{this.ParseNumber("20000"), this.ParseNumber("0.0005")}},
|
||
|
}},
|
||
|
},
|
||
|
},
|
||
|
"requiredCredentials": map[string]interface{} {
|
||
|
"apiKey": true,
|
||
|
"secret": false,
|
||
|
},
|
||
|
"precisionMode": TICK_SIZE,
|
||
|
"exceptions": map[string]interface{} {
|
||
|
"exact": map[string]interface{} {
|
||
|
"INVALID_CLIENT_UUID": InvalidOrder,
|
||
|
"ORDER_NOT_FOUND": OrderNotFound,
|
||
|
"ONLY_ONE_ERC20_ADDRESS_ALLOWED": InvalidAddress,
|
||
|
"DEPOSIT_ADDRESS_NOT_USED": InvalidAddress,
|
||
|
"INVALID_CREDENTIALS": AuthenticationError,
|
||
|
"MISSING_CREDENTIALS": AuthenticationError,
|
||
|
"INVALID_APIKEY": AuthenticationError,
|
||
|
"INVALID_SCOPES": AuthenticationError,
|
||
|
"INVALID_SUBJECT": AuthenticationError,
|
||
|
"INVALID_ISSUER": AuthenticationError,
|
||
|
"INVALID_AUDIENCE": AuthenticationError,
|
||
|
"INVALID_DEVICE_ID": AuthenticationError,
|
||
|
"INVALID_IP_RESTRICTION": AuthenticationError,
|
||
|
"APIKEY_REVOKED": AuthenticationError,
|
||
|
"APIKEY_EXPIRED": AuthenticationError,
|
||
|
"SYNCHRONIZER_TOKEN_MISMATCH": AuthenticationError,
|
||
|
"SESSION_EXPIRED": AuthenticationError,
|
||
|
"INTERNAL_ERROR": AuthenticationError,
|
||
|
"CLIENT_IP_BLOCKED": PermissionDenied,
|
||
|
"MISSING_PERMISSION": PermissionDenied,
|
||
|
"ILLEGAL_CHARS": BadRequest,
|
||
|
"UNSUPPORTED_MEDIA_TYPE": BadRequest,
|
||
|
"ACCOUNT_HISTORY_TIME_RANGE_TOO_BIG": BadRequest,
|
||
|
"CANDLESTICKS_TIME_RANGE_TOO_BIG": BadRequest,
|
||
|
"INVALID_INSTRUMENT_CODE": BadRequest,
|
||
|
"INVALID_ORDER_TYPE": BadRequest,
|
||
|
"INVALID_UNIT": BadRequest,
|
||
|
"INVALID_PERIOD": BadRequest,
|
||
|
"INVALID_TIME": BadRequest,
|
||
|
"INVALID_DATE": BadRequest,
|
||
|
"INVALID_CURRENCY": BadRequest,
|
||
|
"INVALID_AMOUNT": BadRequest,
|
||
|
"INVALID_PRICE": BadRequest,
|
||
|
"INVALID_LIMIT": BadRequest,
|
||
|
"INVALID_QUERY": BadRequest,
|
||
|
"INVALID_CURSOR": BadRequest,
|
||
|
"INVALID_ACCOUNT_ID": BadRequest,
|
||
|
"INVALID_SIDE": InvalidOrder,
|
||
|
"INVALID_ACCOUNT_HISTORY_FROM_TIME": BadRequest,
|
||
|
"INVALID_ACCOUNT_HISTORY_MAX_PAGE_SIZE": BadRequest,
|
||
|
"INVALID_ACCOUNT_HISTORY_TIME_PERIOD": BadRequest,
|
||
|
"INVALID_ACCOUNT_HISTORY_TO_TIME": BadRequest,
|
||
|
"INVALID_CANDLESTICKS_GRANULARITY": BadRequest,
|
||
|
"INVALID_CANDLESTICKS_UNIT": BadRequest,
|
||
|
"INVALID_ORDER_BOOK_DEPTH": BadRequest,
|
||
|
"INVALID_ORDER_BOOK_LEVEL": BadRequest,
|
||
|
"INVALID_PAGE_CURSOR": BadRequest,
|
||
|
"INVALID_TIME_RANGE": BadRequest,
|
||
|
"INVALID_TRADE_ID": BadRequest,
|
||
|
"INVALID_UI_ACCOUNT_SETTINGS": BadRequest,
|
||
|
"NEGATIVE_AMOUNT": InvalidOrder,
|
||
|
"NEGATIVE_PRICE": InvalidOrder,
|
||
|
"MIN_SIZE_NOT_SATISFIED": InvalidOrder,
|
||
|
"BAD_AMOUNT_PRECISION": InvalidOrder,
|
||
|
"BAD_PRICE_PRECISION": InvalidOrder,
|
||
|
"BAD_TRIGGER_PRICE_PRECISION": InvalidOrder,
|
||
|
"MAX_OPEN_ORDERS_EXCEEDED": BadRequest,
|
||
|
"MISSING_PRICE": InvalidOrder,
|
||
|
"MISSING_ORDER_TYPE": InvalidOrder,
|
||
|
"MISSING_SIDE": InvalidOrder,
|
||
|
"MISSING_CANDLESTICKS_PERIOD_PARAM": ArgumentsRequired,
|
||
|
"MISSING_CANDLESTICKS_UNIT_PARAM": ArgumentsRequired,
|
||
|
"MISSING_FROM_PARAM": ArgumentsRequired,
|
||
|
"MISSING_INSTRUMENT_CODE": ArgumentsRequired,
|
||
|
"MISSING_ORDER_ID": InvalidOrder,
|
||
|
"MISSING_TO_PARAM": ArgumentsRequired,
|
||
|
"MISSING_TRADE_ID": ArgumentsRequired,
|
||
|
"INVALID_ORDER_ID": OrderNotFound,
|
||
|
"NOT_FOUND": OrderNotFound,
|
||
|
"INSUFFICIENT_LIQUIDITY": InsufficientFunds,
|
||
|
"INSUFFICIENT_FUNDS": InsufficientFunds,
|
||
|
"NO_TRADING": ExchangeNotAvailable,
|
||
|
"SERVICE_UNAVAILABLE": ExchangeNotAvailable,
|
||
|
"GATEWAY_TIMEOUT": ExchangeNotAvailable,
|
||
|
"RATELIMIT": DDoSProtection,
|
||
|
"CF_RATELIMIT": DDoSProtection,
|
||
|
"INTERNAL_SERVER_ERROR": ExchangeError,
|
||
|
},
|
||
|
"broad": map[string]interface{} {
|
||
|
"Order not found.": OrderNotFound,
|
||
|
},
|
||
|
},
|
||
|
"commonCurrencies": map[string]interface{} {
|
||
|
"MIOTA": "IOTA",
|
||
|
},
|
||
|
"options": map[string]interface{} {
|
||
|
"fetchTradingFees": map[string]interface{} {
|
||
|
"method": "fetchPrivateTradingFees",
|
||
|
},
|
||
|
"fiat": []interface{}{"EUR", "CHF"},
|
||
|
},
|
||
|
"features": map[string]interface{} {
|
||
|
"spot": map[string]interface{} {
|
||
|
"sandbox": false,
|
||
|
"createOrder": map[string]interface{} {
|
||
|
"marginMode": false,
|
||
|
"triggerPrice": false,
|
||
|
"triggerDirection": false,
|
||
|
"triggerPriceType": nil,
|
||
|
"stopLossPrice": false,
|
||
|
"takeProfitPrice": false,
|
||
|
"attachedStopLossTakeProfit": nil,
|
||
|
"timeInForce": map[string]interface{} {
|
||
|
"IOC": true,
|
||
|
"FOK": true,
|
||
|
"PO": true,
|
||
|
"GTD": false,
|
||
|
},
|
||
|
"hedged": false,
|
||
|
"trailing": false,
|
||
|
"leverage": false,
|
||
|
"marketBuyByCost": false,
|
||
|
"marketBuyRequiresPrice": false,
|
||
|
"selfTradePrevention": false,
|
||
|
"iceberg": false,
|
||
|
},
|
||
|
"createOrders": nil,
|
||
|
"fetchMyTrades": map[string]interface{} {
|
||
|
"marginMode": false,
|
||
|
"limit": 100,
|
||
|
"daysBack": 100000,
|
||
|
"untilDays": 100000,
|
||
|
"symbolRequired": false,
|
||
|
},
|
||
|
"fetchOrder": map[string]interface{} {
|
||
|
"marginMode": false,
|
||
|
"trigger": false,
|
||
|
"trailing": false,
|
||
|
"symbolRequired": false,
|
||
|
},
|
||
|
"fetchOpenOrders": map[string]interface{} {
|
||
|
"marginMode": false,
|
||
|
"limit": 100,
|
||
|
"trigger": false,
|
||
|
"trailing": false,
|
||
|
"symbolRequired": false,
|
||
|
},
|
||
|
"fetchOrders": nil,
|
||
|
"fetchClosedOrders": map[string]interface{} {
|
||
|
"marginMode": false,
|
||
|
"limit": 100,
|
||
|
"daysBack": 100000,
|
||
|
"daysBackCanceled": Divide(1, 12),
|
||
|
"untilDays": 100000,
|
||
|
"trigger": false,
|
||
|
"trailing": false,
|
||
|
"symbolRequired": false,
|
||
|
},
|
||
|
"fetchOHLCV": map[string]interface{} {
|
||
|
"limit": 5000,
|
||
|
},
|
||
|
},
|
||
|
"swap": map[string]interface{} {
|
||
|
"linear": nil,
|
||
|
"inverse": nil,
|
||
|
},
|
||
|
"future": map[string]interface{} {
|
||
|
"linear": nil,
|
||
|
"inverse": nil,
|
||
|
},
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchTime
|
||
|
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
||
|
* @see https://docs.onetrading.com/#time
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
||
|
*/
|
||
|
func (this *onetrading) FetchTime(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
response:= (<-this.PublicGetTime(params))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// {
|
||
|
// "iso": "2020-07-10T05:17:26.716Z",
|
||
|
// "epoch_millis": 1594358246716,
|
||
|
// }
|
||
|
//
|
||
|
ch <- this.SafeInteger(response, "epoch_millis")
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchCurrencies
|
||
|
* @description fetches all available currencies on an exchange
|
||
|
* @see https://docs.onetrading.com/#currencies
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} an associative dictionary of currencies
|
||
|
*/
|
||
|
func (this *onetrading) FetchCurrencies(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
response:= (<-this.PublicGetCurrencies(params))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// [
|
||
|
// {
|
||
|
// "code":"BEST",
|
||
|
// "precision":8
|
||
|
// }
|
||
|
// ]
|
||
|
//
|
||
|
var result interface{} = map[string]interface{} {}
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(response)); i++ {
|
||
|
var currency interface{} = GetValue(response, i)
|
||
|
var id interface{} = this.SafeString(currency, "code")
|
||
|
var code interface{} = this.SafeCurrencyCode(id)
|
||
|
AddElementToObject(result, code, map[string]interface{} {
|
||
|
"id": id,
|
||
|
"code": code,
|
||
|
"name": nil,
|
||
|
"info": currency,
|
||
|
"active": nil,
|
||
|
"fee": nil,
|
||
|
"precision": this.ParseNumber(this.ParsePrecision(this.SafeString(currency, "precision"))),
|
||
|
"withdraw": nil,
|
||
|
"deposit": nil,
|
||
|
"limits": map[string]interface{} {
|
||
|
"amount": map[string]interface{} {
|
||
|
"min": nil,
|
||
|
"max": nil,
|
||
|
},
|
||
|
"withdraw": map[string]interface{} {
|
||
|
"min": nil,
|
||
|
"max": nil,
|
||
|
},
|
||
|
},
|
||
|
"networks": map[string]interface{} {},
|
||
|
})
|
||
|
}
|
||
|
|
||
|
ch <- result
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchMarkets
|
||
|
* @description retrieves data on all markets for onetrading
|
||
|
* @see https://docs.onetrading.com/#instruments
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object[]} an array of objects representing market data
|
||
|
*/
|
||
|
func (this *onetrading) FetchMarkets(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
response:= (<-this.PublicGetInstruments(params))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// [
|
||
|
// {
|
||
|
// "state": "ACTIVE",
|
||
|
// "base": { code: "ETH", precision: 8 },
|
||
|
// "quote": { code: "CHF", precision: 2 },
|
||
|
// "amount_precision": 4,
|
||
|
// "market_precision": 2,
|
||
|
// "min_size": "10.0"
|
||
|
// }
|
||
|
// ]
|
||
|
//
|
||
|
ch <- this.ParseMarkets(response)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) ParseMarket(market interface{}) interface{} {
|
||
|
var baseAsset interface{} = this.SafeValue(market, "base", map[string]interface{} {})
|
||
|
var quoteAsset interface{} = this.SafeValue(market, "quote", map[string]interface{} {})
|
||
|
var baseId interface{} = this.SafeString(baseAsset, "code")
|
||
|
var quoteId interface{} = this.SafeString(quoteAsset, "code")
|
||
|
var id interface{} = Add(Add(baseId, "_"), quoteId)
|
||
|
var base interface{} = this.SafeCurrencyCode(baseId)
|
||
|
var quote interface{} = this.SafeCurrencyCode(quoteId)
|
||
|
var state interface{} = this.SafeString(market, "state")
|
||
|
return map[string]interface{} {
|
||
|
"id": id,
|
||
|
"symbol": Add(Add(base, "/"), quote),
|
||
|
"base": base,
|
||
|
"quote": quote,
|
||
|
"settle": nil,
|
||
|
"baseId": baseId,
|
||
|
"quoteId": quoteId,
|
||
|
"settleId": nil,
|
||
|
"type": "spot",
|
||
|
"spot": true,
|
||
|
"margin": false,
|
||
|
"swap": false,
|
||
|
"future": false,
|
||
|
"option": false,
|
||
|
"active": (IsEqual(state, "ACTIVE")),
|
||
|
"contract": false,
|
||
|
"linear": nil,
|
||
|
"inverse": nil,
|
||
|
"contractSize": nil,
|
||
|
"expiry": nil,
|
||
|
"expiryDatetime": nil,
|
||
|
"strike": nil,
|
||
|
"optionType": nil,
|
||
|
"precision": map[string]interface{} {
|
||
|
"amount": this.ParseNumber(this.ParsePrecision(this.SafeString(market, "amount_precision"))),
|
||
|
"price": this.ParseNumber(this.ParsePrecision(this.SafeString(market, "market_precision"))),
|
||
|
},
|
||
|
"limits": map[string]interface{} {
|
||
|
"leverage": map[string]interface{} {
|
||
|
"min": nil,
|
||
|
"max": nil,
|
||
|
},
|
||
|
"amount": map[string]interface{} {
|
||
|
"min": nil,
|
||
|
"max": nil,
|
||
|
},
|
||
|
"price": map[string]interface{} {
|
||
|
"min": nil,
|
||
|
"max": nil,
|
||
|
},
|
||
|
"cost": map[string]interface{} {
|
||
|
"min": this.SafeNumber(market, "min_size"),
|
||
|
"max": nil,
|
||
|
},
|
||
|
},
|
||
|
"created": nil,
|
||
|
"info": market,
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchTradingFees
|
||
|
* @description fetch the trading fees for multiple markets
|
||
|
* @see https://docs.onetrading.com/#fee-groups
|
||
|
* @see https://docs.onetrading.com/#fees
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
||
|
*/
|
||
|
func (this *onetrading) FetchTradingFees(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
var method interface{} = this.SafeString(params, "method")
|
||
|
params = this.Omit(params, "method")
|
||
|
if IsTrue(IsEqual(method, nil)) {
|
||
|
var options interface{} = this.SafeValue(this.Options, "fetchTradingFees", map[string]interface{} {})
|
||
|
method = this.SafeString(options, "method", "fetchPrivateTradingFees")
|
||
|
}
|
||
|
if IsTrue(IsEqual(method, "fetchPrivateTradingFees")) {
|
||
|
|
||
|
retRes53019 := (<-this.FetchPrivateTradingFees(params))
|
||
|
PanicOnError(retRes53019)
|
||
|
ch <- retRes53019
|
||
|
return nil
|
||
|
} else if IsTrue(IsEqual(method, "fetchPublicTradingFees")) {
|
||
|
|
||
|
retRes53219 := (<-this.FetchPublicTradingFees(params))
|
||
|
PanicOnError(retRes53219)
|
||
|
ch <- retRes53219
|
||
|
return nil
|
||
|
} else {
|
||
|
panic(NotSupported(Add(Add(Add(this.Id, " fetchTradingFees() does not support "), method), ", fetchPrivateTradingFees and fetchPublicTradingFees are supported")))
|
||
|
}
|
||
|
return nil
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) FetchPublicTradingFees(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes5398 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes5398)
|
||
|
|
||
|
response:= (<-this.PublicGetFees(params))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// [
|
||
|
// {
|
||
|
// "fee_group_id":"default",
|
||
|
// "display_text":"The standard fee plan.",
|
||
|
// "fee_tiers":[
|
||
|
// {"volume":"0.0","fee_group_id":"default","maker_fee":"0.1","taker_fee":"0.15"},
|
||
|
// {"volume":"100.0","fee_group_id":"default","maker_fee":"0.1","taker_fee":"0.13"},
|
||
|
// {"volume":"250.0","fee_group_id":"default","maker_fee":"0.09","taker_fee":"0.13"},
|
||
|
// {"volume":"1000.0","fee_group_id":"default","maker_fee":"0.075","taker_fee":"0.1"},
|
||
|
// {"volume":"5000.0","fee_group_id":"default","maker_fee":"0.06","taker_fee":"0.09"},
|
||
|
// {"volume":"10000.0","fee_group_id":"default","maker_fee":"0.05","taker_fee":"0.075"},
|
||
|
// {"volume":"20000.0","fee_group_id":"default","maker_fee":"0.05","taker_fee":"0.065"}
|
||
|
// ],
|
||
|
// "fee_discount_rate":"25.0",
|
||
|
// "minimum_price_value":"0.12"
|
||
|
// }
|
||
|
// ]
|
||
|
//
|
||
|
var first interface{} = this.SafeValue(response, 0, map[string]interface{} {})
|
||
|
var feeTiers interface{} = this.SafeValue(first, "fee_tiers")
|
||
|
var tiers interface{} = this.ParseFeeTiers(feeTiers)
|
||
|
var firstTier interface{} = this.SafeValue(feeTiers, 0, map[string]interface{} {})
|
||
|
var result interface{} = map[string]interface{} {}
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(this.Symbols)); i++ {
|
||
|
var symbol interface{} = GetValue(this.Symbols, i)
|
||
|
AddElementToObject(result, symbol, map[string]interface{} {
|
||
|
"info": first,
|
||
|
"symbol": symbol,
|
||
|
"maker": this.SafeNumber(firstTier, "maker_fee"),
|
||
|
"taker": this.SafeNumber(firstTier, "taker_fee"),
|
||
|
"percentage": true,
|
||
|
"tierBased": true,
|
||
|
"tiers": tiers,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
ch <- result
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) FetchPrivateTradingFees(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes5818 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes5818)
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountFees(params))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// {
|
||
|
// "account_id": "ed524d00-820a-11e9-8f1e-69602df16d85",
|
||
|
// "running_trading_volume": "0.0",
|
||
|
// "fee_group_id": "default",
|
||
|
// "collect_fees_in_best": false,
|
||
|
// "fee_discount_rate": "25.0",
|
||
|
// "minimum_price_value": "0.12",
|
||
|
// "fee_tiers": [
|
||
|
// { "volume": "0.0", "fee_group_id": "default", "maker_fee": "0.1", "taker_fee": "0.1" },
|
||
|
// { "volume": "100.0", "fee_group_id": "default", "maker_fee": "0.09", "taker_fee": "0.1" },
|
||
|
// { "volume": "250.0", "fee_group_id": "default", "maker_fee": "0.08", "taker_fee": "0.1" },
|
||
|
// { "volume": "1000.0", "fee_group_id": "default", "maker_fee": "0.07", "taker_fee": "0.09" },
|
||
|
// { "volume": "5000.0", "fee_group_id": "default", "maker_fee": "0.06", "taker_fee": "0.08" },
|
||
|
// { "volume": "10000.0", "fee_group_id": "default", "maker_fee": "0.05", "taker_fee": "0.07" },
|
||
|
// { "volume": "20000.0", "fee_group_id": "default", "maker_fee": "0.05", "taker_fee": "0.06" },
|
||
|
// { "volume": "50000.0", "fee_group_id": "default", "maker_fee": "0.05", "taker_fee": "0.05" }
|
||
|
// ],
|
||
|
// "active_fee_tier": { "volume": "0.0", "fee_group_id": "default", "maker_fee": "0.1", "taker_fee": "0.1" }
|
||
|
// }
|
||
|
//
|
||
|
var activeFeeTier interface{} = this.SafeValue(response, "active_fee_tier", map[string]interface{} {})
|
||
|
var makerFee interface{} = this.SafeString(activeFeeTier, "maker_fee")
|
||
|
var takerFee interface{} = this.SafeString(activeFeeTier, "taker_fee")
|
||
|
makerFee = Precise.StringDiv(makerFee, "100")
|
||
|
takerFee = Precise.StringDiv(takerFee, "100")
|
||
|
var feeTiers interface{} = this.SafeValue(response, "fee_tiers")
|
||
|
var result interface{} = map[string]interface{} {}
|
||
|
var tiers interface{} = this.ParseFeeTiers(feeTiers)
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(this.Symbols)); i++ {
|
||
|
var symbol interface{} = GetValue(this.Symbols, i)
|
||
|
AddElementToObject(result, symbol, map[string]interface{} {
|
||
|
"info": response,
|
||
|
"symbol": symbol,
|
||
|
"maker": this.ParseNumber(makerFee),
|
||
|
"taker": this.ParseNumber(takerFee),
|
||
|
"percentage": true,
|
||
|
"tierBased": true,
|
||
|
"tiers": tiers,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
ch <- result
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) ParseFeeTiers(feeTiers interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
market := GetArg(optionalArgs, 0, nil)
|
||
|
_ = market
|
||
|
var takerFees interface{} = []interface{}{}
|
||
|
var makerFees interface{} = []interface{}{}
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(feeTiers)); i++ {
|
||
|
var tier interface{} = GetValue(feeTiers, i)
|
||
|
var volume interface{} = this.SafeNumber(tier, "volume")
|
||
|
var taker interface{} = this.SafeString(tier, "taker_fee")
|
||
|
var maker interface{} = this.SafeString(tier, "maker_fee")
|
||
|
maker = Precise.StringDiv(maker, "100")
|
||
|
taker = Precise.StringDiv(taker, "100")
|
||
|
AppendToArray(&makerFees,[]interface{}{volume, this.ParseNumber(maker)})
|
||
|
AppendToArray(&takerFees,[]interface{}{volume, this.ParseNumber(taker)})
|
||
|
}
|
||
|
return map[string]interface{} {
|
||
|
"maker": makerFees,
|
||
|
"taker": takerFees,
|
||
|
}
|
||
|
}
|
||
|
func (this *onetrading) ParseTicker(ticker interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
//
|
||
|
// fetchTicker, fetchTickers
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "sequence":602562,
|
||
|
// "time":"2020-07-10T06:27:34.951Z",
|
||
|
// "state":"ACTIVE",
|
||
|
// "is_frozen":0,
|
||
|
// "quote_volume":"1695555.1783768",
|
||
|
// "base_volume":"205.67436",
|
||
|
// "last_price":"8143.91",
|
||
|
// "best_bid":"8143.71",
|
||
|
// "best_ask":"8156.9",
|
||
|
// "price_change":"-147.47",
|
||
|
// "price_change_percentage":"-1.78",
|
||
|
// "high":"8337.45",
|
||
|
// "low":"8110.0"
|
||
|
// }
|
||
|
//
|
||
|
market := GetArg(optionalArgs, 0, nil)
|
||
|
_ = market
|
||
|
var timestamp interface{} = this.Parse8601(this.SafeString(ticker, "time"))
|
||
|
var marketId interface{} = this.SafeString(ticker, "instrument_code")
|
||
|
var symbol interface{} = this.SafeSymbol(marketId, market, "_")
|
||
|
var last interface{} = this.SafeString(ticker, "last_price")
|
||
|
var percentage interface{} = this.SafeString(ticker, "price_change_percentage")
|
||
|
var change interface{} = this.SafeString(ticker, "price_change")
|
||
|
var baseVolume interface{} = this.SafeString(ticker, "base_volume")
|
||
|
var quoteVolume interface{} = this.SafeString(ticker, "quote_volume")
|
||
|
return this.SafeTicker(map[string]interface{} {
|
||
|
"symbol": symbol,
|
||
|
"timestamp": timestamp,
|
||
|
"datetime": this.Iso8601(timestamp),
|
||
|
"high": this.SafeString(ticker, "high"),
|
||
|
"low": this.SafeString(ticker, "low"),
|
||
|
"bid": this.SafeString(ticker, "best_bid"),
|
||
|
"bidVolume": nil,
|
||
|
"ask": this.SafeString(ticker, "best_ask"),
|
||
|
"askVolume": nil,
|
||
|
"vwap": nil,
|
||
|
"open": nil,
|
||
|
"close": last,
|
||
|
"last": last,
|
||
|
"previousClose": nil,
|
||
|
"change": change,
|
||
|
"percentage": percentage,
|
||
|
"average": nil,
|
||
|
"baseVolume": baseVolume,
|
||
|
"quoteVolume": quoteVolume,
|
||
|
"info": ticker,
|
||
|
}, market)
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchTicker
|
||
|
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
||
|
* @see https://docs.onetrading.com/#market-ticker-for-instrument
|
||
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchTicker(symbol interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes7098 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes7098)
|
||
|
var market interface{} = this.Market(symbol)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"instrument_code": GetValue(market, "id"),
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PublicGetMarketTickerInstrumentCode(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "sequence":602562,
|
||
|
// "time":"2020-07-10T06:27:34.951Z",
|
||
|
// "state":"ACTIVE",
|
||
|
// "is_frozen":0,
|
||
|
// "quote_volume":"1695555.1783768",
|
||
|
// "base_volume":"205.67436",
|
||
|
// "last_price":"8143.91",
|
||
|
// "best_bid":"8143.71",
|
||
|
// "best_ask":"8156.9",
|
||
|
// "price_change":"-147.47",
|
||
|
// "price_change_percentage":"-1.78",
|
||
|
// "high":"8337.45",
|
||
|
// "low":"8110.0"
|
||
|
// }
|
||
|
//
|
||
|
ch <- this.ParseTicker(response, market)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchTickers
|
||
|
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
||
|
* @see https://docs.onetrading.com/#market-ticker
|
||
|
* @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchTickers(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbols := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbols
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes7468 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes7468)
|
||
|
symbols = this.MarketSymbols(symbols)
|
||
|
|
||
|
response:= (<-this.PublicGetMarketTicker(params))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// [
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "sequence":602562,
|
||
|
// "time":"2020-07-10T06:27:34.951Z",
|
||
|
// "state":"ACTIVE",
|
||
|
// "is_frozen":0,
|
||
|
// "quote_volume":"1695555.1783768",
|
||
|
// "base_volume":"205.67436",
|
||
|
// "last_price":"8143.91",
|
||
|
// "best_bid":"8143.71",
|
||
|
// "best_ask":"8156.9",
|
||
|
// "price_change":"-147.47",
|
||
|
// "price_change_percentage":"-1.78",
|
||
|
// "high":"8337.45",
|
||
|
// "low":"8110.0"
|
||
|
// }
|
||
|
// ]
|
||
|
//
|
||
|
var result interface{} = map[string]interface{} {}
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(response)); i++ {
|
||
|
var ticker interface{} = this.ParseTicker(GetValue(response, i))
|
||
|
var symbol interface{} = GetValue(ticker, "symbol")
|
||
|
AddElementToObject(result, symbol, ticker)
|
||
|
}
|
||
|
|
||
|
ch <- this.FilterByArrayTickers(result, "symbol", symbols)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchOrderBook
|
||
|
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
||
|
* @see https://docs.onetrading.com/#order-book
|
||
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
||
|
* @param {int} [limit] the maximum amount of order book entries to return
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
||
|
*/
|
||
|
func (this *onetrading) FetchOrderBook(symbol interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
limit := GetArg(optionalArgs, 0, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes7898 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes7898)
|
||
|
var market interface{} = this.Market(symbol)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"instrument_code": GetValue(market, "id"),
|
||
|
}
|
||
|
if IsTrue(!IsEqual(limit, nil)) {
|
||
|
AddElementToObject(request, "depth", limit)
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PublicGetOrderBookInstrumentCode(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// level 1
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "time":"2020-07-10T07:39:06.343Z",
|
||
|
// "asks":{
|
||
|
// "value":{
|
||
|
// "price":"8145.29",
|
||
|
// "amount":"0.96538",
|
||
|
// "number_of_orders":1
|
||
|
// }
|
||
|
// },
|
||
|
// "bids":{
|
||
|
// "value":{
|
||
|
// "price":"8134.0",
|
||
|
// "amount":"1.5978",
|
||
|
// "number_of_orders":5
|
||
|
// }
|
||
|
// }
|
||
|
// }
|
||
|
//
|
||
|
// level 2
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR","time":"2020-07-10T07:36:43.538Z",
|
||
|
// "asks":[
|
||
|
// {"price":"8146.59","amount":"0.89691","number_of_orders":1},
|
||
|
// {"price":"8146.89","amount":"1.92062","number_of_orders":1},
|
||
|
// {"price":"8169.5","amount":"0.0663","number_of_orders":1},
|
||
|
// ],
|
||
|
// "bids":[
|
||
|
// {"price":"8143.49","amount":"0.01329","number_of_orders":1},
|
||
|
// {"price":"8137.01","amount":"5.34748","number_of_orders":1},
|
||
|
// {"price":"8137.0","amount":"2.0","number_of_orders":1},
|
||
|
// ]
|
||
|
// }
|
||
|
//
|
||
|
// level 3
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "time":"2020-07-10T07:32:31.525Z",
|
||
|
// "bids":[
|
||
|
// {"price":"8146.79","amount":"0.01537","order_id":"5d717da1-a8f4-422d-afcc-03cb6ab66825"},
|
||
|
// {"price":"8139.32","amount":"3.66009","order_id":"d0715c68-f28d-4cf1-a450-d56cf650e11c"},
|
||
|
// {"price":"8137.51","amount":"2.61049","order_id":"085fd6f4-e835-4ca5-9449-a8f165772e60"},
|
||
|
// ],
|
||
|
// "asks":[
|
||
|
// {"price":"8153.49","amount":"0.93384","order_id":"755d3aa3-42b5-46fa-903d-98f42e9ae6c4"},
|
||
|
// {"price":"8153.79","amount":"1.80456","order_id":"62034cf3-b70d-45ff-b285-ba6307941e7c"},
|
||
|
// {"price":"8167.9","amount":"0.0018","order_id":"036354e0-71cd-492f-94f2-01f7d4b66422"},
|
||
|
// ]
|
||
|
// }
|
||
|
//
|
||
|
var timestamp interface{} = this.Parse8601(this.SafeString(response, "time"))
|
||
|
|
||
|
ch <- this.ParseOrderBook(response, GetValue(market, "symbol"), timestamp, "bids", "asks", "price", "amount")
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) ParseOHLCV(ohlcv interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "granularity":{"unit":"HOURS","period":1},
|
||
|
// "high":"9252.65",
|
||
|
// "low":"9115.27",
|
||
|
// "open":"9250.0",
|
||
|
// "close":"9132.35",
|
||
|
// "total_amount":"33.85924",
|
||
|
// "volume":"311958.9635744",
|
||
|
// "time":"2020-05-08T22:59:59.999Z",
|
||
|
// "last_sequence":461123
|
||
|
// }
|
||
|
//
|
||
|
market := GetArg(optionalArgs, 0, nil)
|
||
|
_ = market
|
||
|
var granularity interface{} = this.SafeValue(ohlcv, "granularity")
|
||
|
var unit interface{} = this.SafeString(granularity, "unit")
|
||
|
var period interface{} = this.SafeString(granularity, "period")
|
||
|
var units interface{} = map[string]interface{} {
|
||
|
"MINUTES": "m",
|
||
|
"HOURS": "h",
|
||
|
"DAYS": "d",
|
||
|
"WEEKS": "w",
|
||
|
"MONTHS": "M",
|
||
|
}
|
||
|
var lowercaseUnit interface{} = this.SafeString(units, unit)
|
||
|
var timeframe interface{} = Add(period, lowercaseUnit)
|
||
|
var durationInSeconds interface{} = this.ParseTimeframe(timeframe)
|
||
|
var duration interface{} = Multiply(durationInSeconds, 1000)
|
||
|
var timestamp interface{} = this.Parse8601(this.SafeString(ohlcv, "time"))
|
||
|
var alignedTimestamp interface{} = Multiply(duration, this.ParseToInt(Divide(timestamp, duration)))
|
||
|
var options interface{} = this.SafeValue(this.Options, "fetchOHLCV", map[string]interface{} {})
|
||
|
var volumeField interface{} = this.SafeString(options, "volume", "total_amount")
|
||
|
return []interface{}{alignedTimestamp, this.SafeNumber(ohlcv, "open"), this.SafeNumber(ohlcv, "high"), this.SafeNumber(ohlcv, "low"), this.SafeNumber(ohlcv, "close"), this.SafeNumber(ohlcv, volumeField)}
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchOHLCV
|
||
|
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
||
|
* @see https://docs.onetrading.com/#candlesticks
|
||
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
||
|
* @param {string} timeframe the length of time each candle represents
|
||
|
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
||
|
* @param {int} [limit] the maximum amount of candles to fetch
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
||
|
*/
|
||
|
func (this *onetrading) FetchOHLCV(symbol interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
timeframe := GetArg(optionalArgs, 0, "1m")
|
||
|
_ = timeframe
|
||
|
since := GetArg(optionalArgs, 1, nil)
|
||
|
_ = since
|
||
|
limit := GetArg(optionalArgs, 2, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 3, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes9198 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes9198)
|
||
|
var market interface{} = this.Market(symbol)
|
||
|
var periodUnit interface{} = this.SafeString(this.Timeframes, timeframe)
|
||
|
periodunitVariable := Split(periodUnit, "/");
|
||
|
period := GetValue(periodunitVariable,0);
|
||
|
unit := GetValue(periodunitVariable,1)
|
||
|
var durationInSeconds interface{} = this.ParseTimeframe(timeframe)
|
||
|
var duration interface{} = Multiply(durationInSeconds, 1000)
|
||
|
if IsTrue(IsEqual(limit, nil)) {
|
||
|
limit = 1500
|
||
|
}
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"instrument_code": GetValue(market, "id"),
|
||
|
"period": period,
|
||
|
"unit": unit,
|
||
|
}
|
||
|
if IsTrue(IsEqual(since, nil)) {
|
||
|
var now interface{} = this.Milliseconds()
|
||
|
AddElementToObject(request, "to", this.Iso8601(now))
|
||
|
AddElementToObject(request, "from", this.Iso8601(Subtract(now, Multiply(limit, duration))))
|
||
|
} else {
|
||
|
AddElementToObject(request, "from", this.Iso8601(since))
|
||
|
AddElementToObject(request, "to", this.Iso8601(this.Sum(since, Multiply(limit, duration))))
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PublicGetCandlesticksInstrumentCode(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// [
|
||
|
// {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9252.65","low":"9115.27","open":"9250.0","close":"9132.35","total_amount":"33.85924","volume":"311958.9635744","time":"2020-05-08T22:59:59.999Z","last_sequence":461123},
|
||
|
// {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9162.49","low":"9040.0","open":"9132.53","close":"9083.69","total_amount":"26.19685","volume":"238553.7812365","time":"2020-05-08T23:59:59.999Z","last_sequence":461376},
|
||
|
// {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
|
||
|
// ]
|
||
|
//
|
||
|
var ohlcv interface{} = this.SafeList(response, "candlesticks")
|
||
|
|
||
|
ch <- this.ParseOHLCVs(ohlcv, market, timeframe, since, limit)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) ParseTrade(trade interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
//
|
||
|
// fetchTrades (public)
|
||
|
//
|
||
|
// {
|
||
|
// "instrument_code":"BTC_EUR",
|
||
|
// "price":"8137.28",
|
||
|
// "amount":"0.22269",
|
||
|
// "taker_side":"BUY",
|
||
|
// "volume":"1812.0908832",
|
||
|
// "time":"2020-07-10T14:44:32.299Z",
|
||
|
// "trade_timestamp":1594392272299,
|
||
|
// "sequence":603047
|
||
|
// }
|
||
|
//
|
||
|
// fetchMyTrades, fetchOrder, fetchOpenOrders, fetchClosedOrders trades (private)
|
||
|
//
|
||
|
// {
|
||
|
// "fee": {
|
||
|
// "fee_amount": "0.0014",
|
||
|
// "fee_currency": "BTC",
|
||
|
// "fee_percentage": "0.1",
|
||
|
// "fee_group_id": "default",
|
||
|
// "fee_type": "TAKER",
|
||
|
// "running_trading_volume": "0.0"
|
||
|
// },
|
||
|
// "trade": {
|
||
|
// "trade_id": "fdff2bcc-37d6-4a2d-92a5-46e09c868664",
|
||
|
// "order_id": "36bb2437-7402-4794-bf26-4bdf03526439",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "amount": "1.4",
|
||
|
// "side": "BUY",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "price": "7341.4",
|
||
|
// "time": "2019-09-27T15:05:32.564Z",
|
||
|
// "sequence": 48670
|
||
|
// }
|
||
|
// }
|
||
|
//
|
||
|
market := GetArg(optionalArgs, 0, nil)
|
||
|
_ = market
|
||
|
var feeInfo interface{} = this.SafeValue(trade, "fee", map[string]interface{} {})
|
||
|
trade = this.SafeValue(trade, "trade", trade)
|
||
|
var timestamp interface{} = this.SafeInteger(trade, "trade_timestamp")
|
||
|
if IsTrue(IsEqual(timestamp, nil)) {
|
||
|
timestamp = this.Parse8601(this.SafeString(trade, "time"))
|
||
|
}
|
||
|
var side interface{} = this.SafeStringLower2(trade, "side", "taker_side")
|
||
|
var priceString interface{} = this.SafeString(trade, "price")
|
||
|
var amountString interface{} = this.SafeString(trade, "amount")
|
||
|
var costString interface{} = this.SafeString(trade, "volume")
|
||
|
var marketId interface{} = this.SafeString(trade, "instrument_code")
|
||
|
var symbol interface{} = this.SafeSymbol(marketId, market, "_")
|
||
|
var feeCostString interface{} = this.SafeString(feeInfo, "fee_amount")
|
||
|
var takerOrMaker interface{} = nil
|
||
|
var fee interface{} = nil
|
||
|
if IsTrue(!IsEqual(feeCostString, nil)) {
|
||
|
var feeCurrencyId interface{} = this.SafeString(feeInfo, "fee_currency")
|
||
|
var feeCurrencyCode interface{} = this.SafeCurrencyCode(feeCurrencyId)
|
||
|
var feeRateString interface{} = this.SafeString(feeInfo, "fee_percentage")
|
||
|
fee = map[string]interface{} {
|
||
|
"cost": feeCostString,
|
||
|
"currency": feeCurrencyCode,
|
||
|
"rate": feeRateString,
|
||
|
}
|
||
|
takerOrMaker = this.SafeStringLower(feeInfo, "fee_type")
|
||
|
}
|
||
|
return this.SafeTrade(map[string]interface{} {
|
||
|
"id": this.SafeString2(trade, "trade_id", "sequence"),
|
||
|
"order": this.SafeString(trade, "order_id"),
|
||
|
"timestamp": timestamp,
|
||
|
"datetime": this.Iso8601(timestamp),
|
||
|
"symbol": symbol,
|
||
|
"type": nil,
|
||
|
"side": side,
|
||
|
"price": priceString,
|
||
|
"amount": amountString,
|
||
|
"cost": costString,
|
||
|
"takerOrMaker": takerOrMaker,
|
||
|
"fee": fee,
|
||
|
"info": trade,
|
||
|
}, market)
|
||
|
}
|
||
|
func (this *onetrading) ParseBalance(response interface{}) interface{} {
|
||
|
var balances interface{} = this.SafeValue(response, "balances", []interface{}{})
|
||
|
var result interface{} = map[string]interface{} {
|
||
|
"info": response,
|
||
|
}
|
||
|
for i := 0; IsLessThan(i, GetArrayLength(balances)); i++ {
|
||
|
var balance interface{} = GetValue(balances, i)
|
||
|
var currencyId interface{} = this.SafeString(balance, "currency_code")
|
||
|
var code interface{} = this.SafeCurrencyCode(currencyId)
|
||
|
var account interface{} = this.Account()
|
||
|
AddElementToObject(account, "free", this.SafeString(balance, "available"))
|
||
|
AddElementToObject(account, "used", this.SafeString(balance, "locked"))
|
||
|
AddElementToObject(result, code, account)
|
||
|
}
|
||
|
return this.SafeBalance(result)
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchBalance
|
||
|
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
||
|
* @see https://docs.onetrading.com/#balances
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchBalance(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
params := GetArg(optionalArgs, 0, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes10618 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes10618)
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountBalances(params))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// {
|
||
|
// "account_id":"4b95934f-55f1-460c-a525-bd5afc0cf071",
|
||
|
// "balances":[
|
||
|
// {
|
||
|
// "account_id":"4b95934f-55f1-460c-a525-bd5afc0cf071",
|
||
|
// "currency_code":"BTC",
|
||
|
// "change":"10.0",
|
||
|
// "available":"10.0",
|
||
|
// "locked":"0.0",
|
||
|
// "sequence":142135994,
|
||
|
// "time":"2020-07-01T10:57:32.959Z"
|
||
|
// }
|
||
|
// ]
|
||
|
// }
|
||
|
//
|
||
|
ch <- this.ParseBalance(response)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) ParseOrderStatus(status interface{}) interface{} {
|
||
|
var statuses interface{} = map[string]interface{} {
|
||
|
"FILLED": "open",
|
||
|
"FILLED_FULLY": "closed",
|
||
|
"FILLED_CLOSED": "canceled",
|
||
|
"FILLED_REJECTED": "rejected",
|
||
|
"OPEN": "open",
|
||
|
"REJECTED": "rejected",
|
||
|
"CLOSED": "canceled",
|
||
|
"FAILED": "failed",
|
||
|
"STOP_TRIGGERED": "triggered",
|
||
|
"DONE": "closed",
|
||
|
}
|
||
|
return this.SafeString(statuses, status, status)
|
||
|
}
|
||
|
func (this *onetrading) ParseOrder(order interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
//
|
||
|
// createOrder
|
||
|
//
|
||
|
// {
|
||
|
// "order_id": "d5492c24-2995-4c18-993a-5b8bf8fffc0d",
|
||
|
// "client_id": "d75fb03b-b599-49e9-b926-3f0b6d103206",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "time": "2019-08-01T08:00:44.026Z",
|
||
|
// "side": "BUY",
|
||
|
// "price": "5000",
|
||
|
// "amount": "1",
|
||
|
// "filled_amount": "0.5",
|
||
|
// "type": "LIMIT",
|
||
|
// "time_in_force": "GOOD_TILL_CANCELLED"
|
||
|
// }
|
||
|
//
|
||
|
// fetchOrder, fetchOpenOrders, fetchClosedOrders
|
||
|
//
|
||
|
// {
|
||
|
// "order": {
|
||
|
// "order_id": "66756a10-3e86-48f4-9678-b634c4b135b2",
|
||
|
// "account_id": "1eb2ad5d-55f1-40b5-bc92-7dc05869e905",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "amount": "1234.5678",
|
||
|
// "filled_amount": "1234.5678",
|
||
|
// "side": "BUY",
|
||
|
// "type": "LIMIT",
|
||
|
// "status": "OPEN",
|
||
|
// "sequence": 123456789,
|
||
|
// "price": "1234.5678",
|
||
|
// "average_price": "1234.5678",
|
||
|
// "reason": "INSUFFICIENT_FUNDS",
|
||
|
// "time": "2019-08-24T14:15:22Z",
|
||
|
// "time_in_force": "GOOD_TILL_CANCELLED",
|
||
|
// "time_last_updated": "2019-08-24T14:15:22Z",
|
||
|
// "expire_after": "2019-08-24T14:15:22Z",
|
||
|
// "is_post_only": false,
|
||
|
// "time_triggered": "2019-08-24T14:15:22Z",
|
||
|
// "trigger_price": "1234.5678"
|
||
|
// },
|
||
|
// "trades": [
|
||
|
// {
|
||
|
// "fee": {
|
||
|
// "fee_amount": "0.0014",
|
||
|
// "fee_currency": "BTC",
|
||
|
// "fee_percentage": "0.1",
|
||
|
// "fee_group_id": "default",
|
||
|
// "fee_type": "TAKER",
|
||
|
// "running_trading_volume": "0.0"
|
||
|
// },
|
||
|
// "trade": {
|
||
|
// "trade_id": "fdff2bcc-37d6-4a2d-92a5-46e09c868664",
|
||
|
// "order_id": "36bb2437-7402-4794-bf26-4bdf03526439",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "amount": "1.4",
|
||
|
// "side": "BUY",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "price": "7341.4",
|
||
|
// "time": "2019-09-27T15:05:32.564Z",
|
||
|
// "sequence": 48670
|
||
|
// }
|
||
|
// }
|
||
|
// ]
|
||
|
// }
|
||
|
//
|
||
|
market := GetArg(optionalArgs, 0, nil)
|
||
|
_ = market
|
||
|
var rawOrder interface{} = this.SafeValue(order, "order", order)
|
||
|
var id interface{} = this.SafeString(rawOrder, "order_id")
|
||
|
var clientOrderId interface{} = this.SafeString(rawOrder, "client_id")
|
||
|
var timestamp interface{} = this.Parse8601(this.SafeString(rawOrder, "time"))
|
||
|
var rawStatus interface{} = this.ParseOrderStatus(this.SafeString(rawOrder, "status"))
|
||
|
var status interface{} = this.ParseOrderStatus(rawStatus)
|
||
|
var marketId interface{} = this.SafeString(rawOrder, "instrument_code")
|
||
|
var symbol interface{} = this.SafeSymbol(marketId, market, "_")
|
||
|
var price interface{} = this.SafeString(rawOrder, "price")
|
||
|
var amount interface{} = this.SafeString(rawOrder, "amount")
|
||
|
var filled interface{} = this.SafeString(rawOrder, "filled_amount")
|
||
|
var side interface{} = this.SafeStringLower(rawOrder, "side")
|
||
|
var typeVar interface{} = this.SafeStringLower(rawOrder, "type")
|
||
|
var timeInForce interface{} = this.ParseTimeInForce(this.SafeString(rawOrder, "time_in_force"))
|
||
|
var postOnly interface{} = this.SafeValue(rawOrder, "is_post_only")
|
||
|
var rawTrades interface{} = this.SafeValue(order, "trades", []interface{}{})
|
||
|
return this.SafeOrder(map[string]interface{} {
|
||
|
"id": id,
|
||
|
"clientOrderId": clientOrderId,
|
||
|
"info": order,
|
||
|
"timestamp": timestamp,
|
||
|
"datetime": this.Iso8601(timestamp),
|
||
|
"lastTradeTimestamp": nil,
|
||
|
"symbol": symbol,
|
||
|
"type": this.ParseOrderType(typeVar),
|
||
|
"timeInForce": timeInForce,
|
||
|
"postOnly": postOnly,
|
||
|
"side": side,
|
||
|
"price": price,
|
||
|
"triggerPrice": this.SafeNumber(rawOrder, "trigger_price"),
|
||
|
"amount": amount,
|
||
|
"cost": nil,
|
||
|
"average": nil,
|
||
|
"filled": filled,
|
||
|
"remaining": nil,
|
||
|
"status": status,
|
||
|
"trades": rawTrades,
|
||
|
}, market)
|
||
|
}
|
||
|
func (this *onetrading) ParseOrderType(typeVar interface{}) interface{} {
|
||
|
var types interface{} = map[string]interface{} {
|
||
|
"booked": "limit",
|
||
|
}
|
||
|
return this.SafeString(types, typeVar, typeVar)
|
||
|
}
|
||
|
func (this *onetrading) ParseTimeInForce(timeInForce interface{}) interface{} {
|
||
|
var timeInForces interface{} = map[string]interface{} {
|
||
|
"GOOD_TILL_CANCELLED": "GTC",
|
||
|
"GOOD_TILL_TIME": "GTT",
|
||
|
"IMMEDIATE_OR_CANCELLED": "IOC",
|
||
|
"FILL_OR_KILL": "FOK",
|
||
|
}
|
||
|
return this.SafeString(timeInForces, timeInForce, timeInForce)
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#createOrder
|
||
|
* @description create a trade order
|
||
|
* @see https://docs.onetrading.com/#create-order
|
||
|
* @param {string} symbol unified symbol of the market to create an order in
|
||
|
* @param {string} type 'limit'
|
||
|
* @param {string} side 'buy' or 'sell'
|
||
|
* @param {float} amount how much of currency you want to trade in units of base currency
|
||
|
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @param {float} [params.triggerPrice] onetrading only does stop limit orders and does not do stop market
|
||
|
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) CreateOrder(symbol interface{}, typeVar interface{}, side interface{}, amount interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
price := GetArg(optionalArgs, 0, nil)
|
||
|
_ = price
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes12388 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes12388)
|
||
|
var market interface{} = this.Market(symbol)
|
||
|
var uppercaseType interface{} = ToUpper(typeVar)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"instrument_code": GetValue(market, "id"),
|
||
|
"type": uppercaseType,
|
||
|
"side": ToUpper(side),
|
||
|
"amount": this.AmountToPrecision(symbol, amount),
|
||
|
}
|
||
|
var priceIsRequired interface{} = false
|
||
|
if IsTrue(IsTrue(IsEqual(uppercaseType, "LIMIT")) || IsTrue(IsEqual(uppercaseType, "STOP"))) {
|
||
|
priceIsRequired = true
|
||
|
}
|
||
|
var triggerPrice interface{} = this.SafeNumberN(params, []interface{}{"triggerPrice", "trigger_price", "stopPrice"})
|
||
|
if IsTrue(!IsEqual(triggerPrice, nil)) {
|
||
|
if IsTrue(IsEqual(uppercaseType, "MARKET")) {
|
||
|
panic(BadRequest(Add(this.Id, " createOrder() cannot place stop market orders, only stop limit")))
|
||
|
}
|
||
|
AddElementToObject(request, "trigger_price", this.PriceToPrecision(symbol, triggerPrice))
|
||
|
AddElementToObject(request, "type", "STOP")
|
||
|
params = this.Omit(params, []interface{}{"triggerPrice", "trigger_price", "stopPrice"})
|
||
|
} else if IsTrue(IsEqual(uppercaseType, "STOP")) {
|
||
|
panic(ArgumentsRequired(Add(Add(Add(this.Id, " createOrder() requires a triggerPrice param for "), typeVar), " orders")))
|
||
|
}
|
||
|
if IsTrue(priceIsRequired) {
|
||
|
AddElementToObject(request, "price", this.PriceToPrecision(symbol, price))
|
||
|
}
|
||
|
var clientOrderId interface{} = this.SafeString2(params, "clientOrderId", "client_id")
|
||
|
if IsTrue(!IsEqual(clientOrderId, nil)) {
|
||
|
AddElementToObject(request, "client_id", clientOrderId)
|
||
|
params = this.Omit(params, []interface{}{"clientOrderId", "client_id"})
|
||
|
}
|
||
|
var timeInForce interface{} = this.SafeString2(params, "timeInForce", "time_in_force", "GOOD_TILL_CANCELLED")
|
||
|
params = this.Omit(params, "timeInForce")
|
||
|
AddElementToObject(request, "time_in_force", timeInForce)
|
||
|
|
||
|
response:= (<-this.PrivatePostAccountOrders(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// {
|
||
|
// "order_id": "d5492c24-2995-4c18-993a-5b8bf8fffc0d",
|
||
|
// "client_id": "d75fb03b-b599-49e9-b926-3f0b6d103206",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "time": "2019-08-01T08:00:44.026Z",
|
||
|
// "side": "BUY",
|
||
|
// "price": "5000",
|
||
|
// "amount": "1",
|
||
|
// "filled_amount": "0.5",
|
||
|
// "type": "LIMIT",
|
||
|
// "time_in_force": "GOOD_TILL_CANCELLED"
|
||
|
// }
|
||
|
//
|
||
|
ch <- this.ParseOrder(response, market)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#cancelOrder
|
||
|
* @description cancels an open order
|
||
|
* @see https://docs.onetrading.com/#close-order-by-order-id
|
||
|
* @param {string} id order id
|
||
|
* @param {string} symbol not used by bitmex cancelOrder ()
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) CancelOrder(id interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes13098 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes13098)
|
||
|
var clientOrderId interface{} = this.SafeString2(params, "clientOrderId", "client_id")
|
||
|
params = this.Omit(params, []interface{}{"clientOrderId", "client_id"})
|
||
|
var method interface{} = "privateDeleteAccountOrdersOrderId"
|
||
|
var request interface{} = map[string]interface{} {}
|
||
|
if IsTrue(!IsEqual(clientOrderId, nil)) {
|
||
|
method = "privateDeleteAccountOrdersClientClientId"
|
||
|
AddElementToObject(request, "client_id", clientOrderId)
|
||
|
} else {
|
||
|
AddElementToObject(request, "order_id", id)
|
||
|
}
|
||
|
var response interface{} = nil
|
||
|
if IsTrue(IsEqual(method, "privateDeleteAccountOrdersOrderId")) {
|
||
|
|
||
|
response = (<-this.PrivateDeleteAccountOrdersOrderId(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
} else {
|
||
|
|
||
|
response = (<-this.PrivateDeleteAccountOrdersClientClientId(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// responds with an empty body
|
||
|
//
|
||
|
ch <- this.ParseOrder(response)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#cancelAllOrders
|
||
|
* @description cancel all open orders
|
||
|
* @see https://docs.onetrading.com/#close-all-orders
|
||
|
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) CancelAllOrders(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes13428 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes13428)
|
||
|
var request interface{} = map[string]interface{} {}
|
||
|
if IsTrue(!IsEqual(symbol, nil)) {
|
||
|
var market interface{} = this.Market(symbol)
|
||
|
AddElementToObject(request, "instrument_code", GetValue(market, "id"))
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateDeleteAccountOrders(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// [
|
||
|
// "a10e9bd1-8f72-4cfe-9f1b-7f1c8a9bd8ee"
|
||
|
// ]
|
||
|
//
|
||
|
ch <- response
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#cancelOrders
|
||
|
* @description cancel multiple orders
|
||
|
* @see https://docs.onetrading.com/#close-all-orders
|
||
|
* @param {string[]} ids order ids
|
||
|
* @param {string} symbol unified market symbol, default is undefined
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) CancelOrders(ids interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes13688 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes13688)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"ids": Join(ids, ","),
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateDeleteAccountOrders(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// [
|
||
|
// "a10e9bd1-8f72-4cfe-9f1b-7f1c8a9bd8ee"
|
||
|
// ]
|
||
|
//
|
||
|
ch <- response
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchOrder
|
||
|
* @description fetches information on an order made by the user
|
||
|
* @see https://docs.onetrading.com/#get-order
|
||
|
* @param {string} id the order id
|
||
|
* @param {string} symbol not used by onetrading fetchOrder
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchOrder(id interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
params := GetArg(optionalArgs, 1, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes13928 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes13928)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"order_id": id,
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountOrdersOrderId(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
|
||
|
//
|
||
|
// {
|
||
|
// "order": {
|
||
|
// "order_id": "36bb2437-7402-4794-bf26-4bdf03526439",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "time_last_updated": "2019-09-27T15:05:35.096Z",
|
||
|
// "sequence": 48782,
|
||
|
// "price": "7349.2",
|
||
|
// "filled_amount": "100.0",
|
||
|
// "status": "FILLED_FULLY",
|
||
|
// "amount": "100.0",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "side": "BUY",
|
||
|
// "time": "2019-09-27T15:05:32.063Z",
|
||
|
// "type": "MARKET"
|
||
|
// },
|
||
|
// "trades": [
|
||
|
// {
|
||
|
// "fee": {
|
||
|
// "fee_amount": "0.0014",
|
||
|
// "fee_currency": "BTC",
|
||
|
// "fee_percentage": "0.1",
|
||
|
// "fee_group_id": "default",
|
||
|
// "fee_type": "TAKER",
|
||
|
// "running_trading_volume": "0.0"
|
||
|
// },
|
||
|
// "trade": {
|
||
|
// "trade_id": "fdff2bcc-37d6-4a2d-92a5-46e09c868664",
|
||
|
// "order_id": "36bb2437-7402-4794-bf26-4bdf03526439",
|
||
|
// "account_id": "a4c699f6-338d-4a26-941f-8f9853bfc4b9",
|
||
|
// "amount": "1.4",
|
||
|
// "side": "BUY",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "price": "7341.4",
|
||
|
// "time": "2019-09-27T15:05:32.564Z",
|
||
|
// "sequence": 48670
|
||
|
// }
|
||
|
// }
|
||
|
// ]
|
||
|
// }
|
||
|
//
|
||
|
ch <- this.ParseOrder(response)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchOpenOrders
|
||
|
* @description fetch all unfilled currently open orders
|
||
|
* @see https://docs.onetrading.com/#get-orders
|
||
|
* @param {string} symbol unified market symbol
|
||
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
||
|
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchOpenOrders(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
since := GetArg(optionalArgs, 1, nil)
|
||
|
_ = since
|
||
|
limit := GetArg(optionalArgs, 2, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 3, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes14538 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes14538)
|
||
|
var request interface{} = map[string]interface{} {}
|
||
|
var market interface{} = nil
|
||
|
if IsTrue(!IsEqual(symbol, nil)) {
|
||
|
market = this.Market(symbol)
|
||
|
AddElementToObject(request, "instrument_code", GetValue(market, "id"))
|
||
|
}
|
||
|
if IsTrue(!IsEqual(since, nil)) {
|
||
|
var to interface{} = this.SafeString(params, "to")
|
||
|
if IsTrue(IsEqual(to, nil)) {
|
||
|
panic(ArgumentsRequired(Add(this.Id, " fetchOpenOrders() requires a \"to\" iso8601 string param with the since argument is specified, max range is 100 days")))
|
||
|
}
|
||
|
AddElementToObject(request, "from", this.Iso8601(since))
|
||
|
}
|
||
|
if IsTrue(!IsEqual(limit, nil)) {
|
||
|
AddElementToObject(request, "max_page_size", limit)
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountOrders(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// {
|
||
|
// "order_history": [
|
||
|
// {
|
||
|
// "order": {
|
||
|
// "trigger_price": "12089.88",
|
||
|
// "order_id": "d453ca12-c650-46dd-9dee-66910d96bfc0",
|
||
|
// "account_id": "ef3a5f4c-cfcd-415e-ba89-5a9abf47b28a",
|
||
|
// "instrument_code": "BTC_USDT",
|
||
|
// "time": "2019-08-23T10:02:31.663Z",
|
||
|
// "side": "SELL",
|
||
|
// "price": "10159.76",
|
||
|
// "average_price": "10159.76",
|
||
|
// "amount": "0.2",
|
||
|
// "filled_amount": "0.2",
|
||
|
// "type": "STOP",
|
||
|
// "sequence": 8,
|
||
|
// "status": "FILLED_FULLY"
|
||
|
// },
|
||
|
// "trades": [
|
||
|
// {
|
||
|
// "fee": {
|
||
|
// "fee_amount": "0.4188869",
|
||
|
// "fee_currency": "USDT",
|
||
|
// "fee_percentage": "0.1",
|
||
|
// "fee_group_id": "default",
|
||
|
// "fee_type": "TAKER",
|
||
|
// "running_trading_volume": "0.0"
|
||
|
// },
|
||
|
// "trade": {
|
||
|
// "trade_id": "ec82896f-fd1b-4cbb-89df-a9da85ccbb4b",
|
||
|
// "order_id": "d453ca12-c650-46dd-9dee-66910d96bfc0",
|
||
|
// "account_id": "ef3a5f4c-cfcd-415e-ba89-5a9abf47b28a",
|
||
|
// "amount": "0.2",
|
||
|
// "side": "SELL",
|
||
|
// "instrument_code": "BTC_USDT",
|
||
|
// "price": "10159.76",
|
||
|
// "time": "2019-08-23T10:02:32.663Z",
|
||
|
// "sequence": 9
|
||
|
// }
|
||
|
// }
|
||
|
// ]
|
||
|
// },
|
||
|
// {
|
||
|
// "order": {
|
||
|
// "order_id": "5151a99e-f414-418f-8cf1-2568d0a63ea5",
|
||
|
// "account_id": "ef3a5f4c-cfcd-415e-ba89-5a9abf47b28a",
|
||
|
// "instrument_code": "BTC_USDT",
|
||
|
// "time": "2019-08-23T10:01:36.773Z",
|
||
|
// "side": "SELL",
|
||
|
// "price": "12289.88",
|
||
|
// "amount": "0.5",
|
||
|
// "filled_amount": "0.0",
|
||
|
// "type": "LIMIT",
|
||
|
// "sequence": 7,
|
||
|
// "status": "OPEN"
|
||
|
// },
|
||
|
// "trades": []
|
||
|
// },
|
||
|
// {
|
||
|
// "order": {
|
||
|
// "order_id": "ac80d857-75e1-4733-9070-fd4288395fdc",
|
||
|
// "account_id": "ef3a5f4c-cfcd-415e-ba89-5a9abf47b28a",
|
||
|
// "instrument_code": "BTC_USDT",
|
||
|
// "time": "2019-08-23T10:01:25.031Z",
|
||
|
// "side": "SELL",
|
||
|
// "price": "11089.88",
|
||
|
// "amount": "0.1",
|
||
|
// "filled_amount": "0.0",
|
||
|
// "type": "LIMIT",
|
||
|
// "sequence": 6,
|
||
|
// "status": "OPEN"
|
||
|
// },
|
||
|
// "trades": []
|
||
|
// }
|
||
|
// ],
|
||
|
// "max_page_size": 100
|
||
|
// }
|
||
|
//
|
||
|
var orderHistory interface{} = this.SafeList(response, "order_history", []interface{}{})
|
||
|
|
||
|
ch <- this.ParseOrders(orderHistory, market, since, limit)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchClosedOrders
|
||
|
* @description fetches information on multiple closed orders made by the user
|
||
|
* @see https://docs.onetrading.com/#get-orders
|
||
|
* @param {string} symbol unified market symbol of the market orders were made in
|
||
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
||
|
* @param {int} [limit] the maximum number of order structures to retrieve
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchClosedOrders(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
since := GetArg(optionalArgs, 1, nil)
|
||
|
_ = since
|
||
|
limit := GetArg(optionalArgs, 2, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 3, map[string]interface{} {})
|
||
|
_ = params
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"with_cancelled_and_rejected": true,
|
||
|
}
|
||
|
|
||
|
retRes157815 := (<-this.FetchOpenOrders(symbol, since, limit, this.Extend(request, params)))
|
||
|
PanicOnError(retRes157815)
|
||
|
ch <- retRes157815
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchOrderTrades
|
||
|
* @description fetch all the trades made from a single order
|
||
|
* @see https://docs.onetrading.com/#trades-for-order
|
||
|
* @param {string} id order id
|
||
|
* @param {string} symbol unified market symbol
|
||
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
||
|
* @param {int} [limit] the maximum number of trades to retrieve
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchOrderTrades(id interface{}, optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
since := GetArg(optionalArgs, 1, nil)
|
||
|
_ = since
|
||
|
limit := GetArg(optionalArgs, 2, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 3, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes15948 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes15948)
|
||
|
var request interface{} = map[string]interface{} {
|
||
|
"order_id": id,
|
||
|
}
|
||
|
if IsTrue(!IsEqual(limit, nil)) {
|
||
|
AddElementToObject(request, "max_page_size", limit)
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountOrdersOrderIdTrades(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// {
|
||
|
// "trade_history": [
|
||
|
// {
|
||
|
// "trade": {
|
||
|
// "trade_id": "2b42efcd-d5b7-4a56-8e12-b69ffd68c5ef",
|
||
|
// "order_id": "66756a10-3e86-48f4-9678-b634c4b135b2",
|
||
|
// "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
|
||
|
// "amount": "1234.5678",
|
||
|
// "side": "BUY",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "price": "1234.5678",
|
||
|
// "time": "2019-08-24T14:15:22Z",
|
||
|
// "price_tick_sequence": 0,
|
||
|
// "sequence": 123456789
|
||
|
// },
|
||
|
// "fee": {
|
||
|
// "fee_amount": "1234.5678",
|
||
|
// "fee_percentage": "1234.5678",
|
||
|
// "fee_group_id": "default",
|
||
|
// "running_trading_volume": "1234.5678",
|
||
|
// "fee_currency": "BTC",
|
||
|
// "fee_type": "TAKER"
|
||
|
// }
|
||
|
// }
|
||
|
// ],
|
||
|
// "max_page_size": 0,
|
||
|
// "cursor": "string"
|
||
|
// }
|
||
|
//
|
||
|
var tradeHistory interface{} = this.SafeValue(response, "trade_history", []interface{}{})
|
||
|
var market interface{} = nil
|
||
|
if IsTrue(!IsEqual(symbol, nil)) {
|
||
|
market = this.Market(symbol)
|
||
|
}
|
||
|
|
||
|
ch <- this.ParseTrades(tradeHistory, market, since, limit)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
/**
|
||
|
* @method
|
||
|
* @name onetrading#fetchMyTrades
|
||
|
* @description fetch all trades made by the user
|
||
|
* @see https://docs.onetrading.com/#all-trades
|
||
|
* @param {string} symbol unified market symbol
|
||
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
||
|
* @param {int} [limit] the maximum number of trades structures to retrieve
|
||
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
||
|
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
||
|
*/
|
||
|
func (this *onetrading) FetchMyTrades(optionalArgs ...interface{}) <- chan interface{} {
|
||
|
ch := make(chan interface{})
|
||
|
go func() interface{} {
|
||
|
defer close(ch)
|
||
|
defer ReturnPanicError(ch)
|
||
|
symbol := GetArg(optionalArgs, 0, nil)
|
||
|
_ = symbol
|
||
|
since := GetArg(optionalArgs, 1, nil)
|
||
|
_ = since
|
||
|
limit := GetArg(optionalArgs, 2, nil)
|
||
|
_ = limit
|
||
|
params := GetArg(optionalArgs, 3, map[string]interface{} {})
|
||
|
_ = params
|
||
|
|
||
|
retRes16548 := (<-this.LoadMarkets())
|
||
|
PanicOnError(retRes16548)
|
||
|
var request interface{} = map[string]interface{} {}
|
||
|
var market interface{} = nil
|
||
|
if IsTrue(!IsEqual(symbol, nil)) {
|
||
|
market = this.Market(symbol)
|
||
|
AddElementToObject(request, "instrument_code", GetValue(market, "id"))
|
||
|
}
|
||
|
if IsTrue(!IsEqual(since, nil)) {
|
||
|
var to interface{} = this.SafeString(params, "to")
|
||
|
if IsTrue(IsEqual(to, nil)) {
|
||
|
panic(ArgumentsRequired(Add(this.Id, " fetchMyTrades() requires a \"to\" iso8601 string param with the since argument is specified, max range is 100 days")))
|
||
|
}
|
||
|
AddElementToObject(request, "from", this.Iso8601(since))
|
||
|
}
|
||
|
if IsTrue(!IsEqual(limit, nil)) {
|
||
|
AddElementToObject(request, "max_page_size", limit)
|
||
|
}
|
||
|
|
||
|
response:= (<-this.PrivateGetAccountTrades(this.Extend(request, params)))
|
||
|
PanicOnError(response)
|
||
|
//
|
||
|
// {
|
||
|
// "trade_history": [
|
||
|
// {
|
||
|
// "trade": {
|
||
|
// "trade_id": "2b42efcd-d5b7-4a56-8e12-b69ffd68c5ef",
|
||
|
// "order_id": "66756a10-3e86-48f4-9678-b634c4b135b2",
|
||
|
// "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
|
||
|
// "amount": "1234.5678",
|
||
|
// "side": "BUY",
|
||
|
// "instrument_code": "BTC_EUR",
|
||
|
// "price": "1234.5678",
|
||
|
// "time": "2019-08-24T14:15:22Z",
|
||
|
// "price_tick_sequence": 0,
|
||
|
// "sequence": 123456789
|
||
|
// },
|
||
|
// "fee": {
|
||
|
// "fee_amount": "1234.5678",
|
||
|
// "fee_percentage": "1234.5678",
|
||
|
// "fee_group_id": "default",
|
||
|
// "running_trading_volume": "1234.5678",
|
||
|
// "fee_currency": "BTC",
|
||
|
// "fee_type": "TAKER"
|
||
|
// }
|
||
|
// }
|
||
|
// ],
|
||
|
// "max_page_size": 0,
|
||
|
// "cursor": "string"
|
||
|
// }
|
||
|
//
|
||
|
var tradeHistory interface{} = this.SafeList(response, "trade_history", []interface{}{})
|
||
|
|
||
|
ch <- this.ParseTrades(tradeHistory, market, since, limit)
|
||
|
return nil
|
||
|
|
||
|
}()
|
||
|
return ch
|
||
|
}
|
||
|
func (this *onetrading) Sign(path interface{}, optionalArgs ...interface{}) interface{} {
|
||
|
api := GetArg(optionalArgs, 0, "public")
|
||
|
_ = api
|
||
|
method := GetArg(optionalArgs, 1, "GET")
|
||
|
_ = method
|
||
|
params := GetArg(optionalArgs, 2, map[string]interface{} {})
|
||
|
_ = params
|
||
|
headers := GetArg(optionalArgs, 3, nil)
|
||
|
_ = headers
|
||
|
body := GetArg(optionalArgs, 4, nil)
|
||
|
_ = body
|
||
|
var url interface{} = Add(Add(Add(Add(GetValue(GetValue(this.Urls, "api"), api), "/"), this.Version), "/"), this.ImplodeParams(path, params))
|
||
|
var query interface{} = this.Omit(params, this.ExtractParams(path))
|
||
|
if IsTrue(IsEqual(api, "public")) {
|
||
|
if IsTrue(GetArrayLength(ObjectKeys(query))) {
|
||
|
url = Add(url, Add("?", this.Urlencode(query)))
|
||
|
}
|
||
|
} else if IsTrue(IsEqual(api, "private")) {
|
||
|
this.CheckRequiredCredentials()
|
||
|
headers = map[string]interface{} {
|
||
|
"Accept": "application/json",
|
||
|
"Authorization": Add("Bearer ", this.ApiKey),
|
||
|
}
|
||
|
if IsTrue(IsEqual(method, "POST")) {
|
||
|
body = this.Json(query)
|
||
|
AddElementToObject(headers, "Content-Type", "application/json")
|
||
|
} else {
|
||
|
if IsTrue(GetArrayLength(ObjectKeys(query))) {
|
||
|
url = Add(url, Add("?", this.Urlencode(query)))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return map[string]interface{} {
|
||
|
"url": url,
|
||
|
"method": method,
|
||
|
"body": body,
|
||
|
"headers": headers,
|
||
|
}
|
||
|
}
|
||
|
func (this *onetrading) HandleErrors(code interface{}, reason interface{}, url interface{}, method interface{}, headers interface{}, body interface{}, response interface{}, requestHeaders interface{}, requestBody interface{}) interface{} {
|
||
|
if IsTrue(IsEqual(response, nil)) {
|
||
|
return nil
|
||
|
}
|
||
|
//
|
||
|
// {"error":"MISSING_FROM_PARAM"}
|
||
|
// {"error":"MISSING_TO_PARAM"}
|
||
|
// {"error":"CANDLESTICKS_TIME_RANGE_TOO_BIG"}
|
||
|
//
|
||
|
var message interface{} = this.SafeString(response, "error")
|
||
|
if IsTrue(!IsEqual(message, nil)) {
|
||
|
var feedback interface{} = Add(Add(this.Id, " "), body)
|
||
|
this.ThrowExactlyMatchedException(GetValue(this.Exceptions, "exact"), message, feedback)
|
||
|
this.ThrowBroadlyMatchedException(GetValue(this.Exceptions, "broad"), message, feedback)
|
||
|
panic(ExchangeError(feedback))
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
|
||
|
func (this *onetrading) Init(userConfig map[string]interface{}) {
|
||
|
this.Exchange = Exchange{}
|
||
|
this.Exchange.InitParent(userConfig, this.Describe().(map[string]interface{}), this)
|
||
|
this.Exchange.DerivedExchange = this
|
||
|
}
|