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 bitteam struct { Exchange } func NewBitteamCore() bitteam { p := bitteam{} setDefaults(&p) return p } func (this *bitteam) Describe() interface{} { return this.DeepExtend(this.Exchange.Describe(), map[string]interface{} { "id": "bitteam", "name": "BIT.TEAM", "countries": []interface{}{"UK"}, "version": "v2.0.6", "rateLimit": 1, "certified": false, "pro": false, "has": map[string]interface{} { "CORS": nil, "spot": true, "margin": false, "swap": false, "future": false, "option": false, "addMargin": false, "borrowMargin": false, "cancelAllOrders": true, "cancelOrder": true, "cancelOrders": false, "createDepositAddress": false, "createOrder": true, "createPostOnlyOrder": false, "createReduceOnlyOrder": false, "createStopLimitOrder": false, "createStopMarketOrder": false, "createStopOrder": false, "deposit": false, "editOrder": false, "fetchAccounts": false, "fetchBalance": true, "fetchBidsAsks": false, "fetchBorrowInterest": false, "fetchBorrowRateHistories": false, "fetchBorrowRateHistory": false, "fetchCanceledOrders": true, "fetchClosedOrder": false, "fetchClosedOrders": true, "fetchCrossBorrowRate": false, "fetchCrossBorrowRates": false, "fetchCurrencies": true, "fetchDeposit": false, "fetchDepositAddress": false, "fetchDepositAddresses": false, "fetchDepositAddressesByNetwork": false, "fetchDeposits": false, "fetchDepositsWithdrawals": true, "fetchDepositWithdrawFee": false, "fetchDepositWithdrawFees": false, "fetchFundingHistory": false, "fetchFundingRate": false, "fetchFundingRateHistory": false, "fetchFundingRates": false, "fetchIndexOHLCV": false, "fetchIsolatedBorrowRate": false, "fetchIsolatedBorrowRates": false, "fetchL3OrderBook": false, "fetchLedger": false, "fetchLeverage": false, "fetchLeverageTiers": false, "fetchMarketLeverageTiers": false, "fetchMarkets": true, "fetchMarkOHLCV": false, "fetchMyTrades": true, "fetchOHLCV": true, "fetchOpenInterestHistory": false, "fetchOpenOrder": false, "fetchOpenOrders": true, "fetchOrder": true, "fetchOrderBook": true, "fetchOrderBooks": false, "fetchOrders": true, "fetchOrderTrades": false, "fetchPosition": false, "fetchPositionHistory": false, "fetchPositionMode": false, "fetchPositions": false, "fetchPositionsForSymbol": false, "fetchPositionsHistory": false, "fetchPositionsRisk": false, "fetchPremiumIndexOHLCV": false, "fetchStatus": false, "fetchTicker": true, "fetchTickers": true, "fetchTime": false, "fetchTrades": true, "fetchTradingFee": false, "fetchTradingFees": false, "fetchTradingLimits": false, "fetchTransactionFee": false, "fetchTransactionFees": false, "fetchTransactions": true, "fetchTransfers": false, "fetchWithdrawal": false, "fetchWithdrawals": false, "fetchWithdrawalWhitelist": false, "reduceMargin": false, "repayMargin": false, "setLeverage": false, "setMargin": false, "setMarginMode": false, "setPositionMode": false, "signIn": false, "transfer": false, "withdraw": false, "ws": false, }, "timeframes": map[string]interface{} { "1m": "1", "5m": "5", "15m": "15", "1h": "60", "1d": "1D", }, "urls": map[string]interface{} { "logo": "https://github.com/user-attachments/assets/b41b5e0d-98e5-4bd3-8a6e-aeb230a4a135", "api": map[string]interface{} { "history": "https://history.bit.team", "public": "https://bit.team", "private": "https://bit.team", }, "www": "https://bit.team/", "referral": "https://bit.team/auth/sign-up?ref=bitboy2023", "doc": []interface{}{"https://bit.team/trade/api/documentation"}, }, "api": map[string]interface{} { "history": map[string]interface{} { "get": map[string]interface{} { "api/tw/history/{pairName}/{resolution}": 1, }, }, "public": map[string]interface{} { "get": map[string]interface{} { "trade/api/asset": 1, "trade/api/currencies": 1, "trade/api/orderbooks/{symbol}": 1, "trade/api/orders": 1, "trade/api/pair/{name}": 1, "trade/api/pairs": 1, "trade/api/pairs/precisions": 1, "trade/api/rates": 1, "trade/api/trade/{id}": 1, "trade/api/trades": 1, "trade/api/ccxt/pairs": 1, "trade/api/cmc/assets": 1, "trade/api/cmc/orderbook/{pair}": 1, "trade/api/cmc/summary": 1, "trade/api/cmc/ticker": 1, "trade/api/cmc/trades/{pair}": 1, }, }, "private": map[string]interface{} { "get": map[string]interface{} { "trade/api/ccxt/balance": 1, "trade/api/ccxt/order/{id}": 1, "trade/api/ccxt/ordersOfUser": 1, "trade/api/ccxt/tradesOfUser": 1, "trade/api/transactionsOfUser": 1, }, "post": map[string]interface{} { "trade/api/ccxt/cancel-all-order": 1, "trade/api/ccxt/cancelorder": 1, "trade/api/ccxt/ordercreate": 1, }, }, }, "fees": map[string]interface{} { "trading": map[string]interface{} { "feeSide": "get", "tierBased": false, "percentage": true, "taker": this.ParseNumber("0.002"), "maker": this.ParseNumber("0.002"), }, }, "precisionMode": TICK_SIZE, "options": map[string]interface{} { "networksById": map[string]interface{} { "Ethereum": "ERC20", "ethereum": "ERC20", "Tron": "TRC20", "tron": "TRC20", "Binance": "BSC", "binance": "BSC", "Binance Smart Chain": "BSC", "bscscan": "BSC", "Bitcoin": "BTC", "bitcoin": "BTC", "Litecoin": "LTC", "litecoin": "LTC", "Polygon": "POLYGON", "polygon": "POLYGON", "PRIZM": "PRIZM", "Decimal": "Decimal", "ufobject": "ufobject", "tonchain": "tonchain", }, "currenciesValuedInUsd": map[string]interface{} { "USDT": true, "BUSD": true, }, }, "features": map[string]interface{} { "spot": map[string]interface{} { "sandbox": false, "createOrder": map[string]interface{} { "marginMode": false, "triggerPrice": false, "triggerPriceType": nil, "triggerDirection": nil, "stopLossPrice": false, "takeProfitPrice": false, "attachedStopLossTakeProfit": nil, "timeInForce": map[string]interface{} { "IOC": false, "FOK": false, "PO": false, "GTD": false, }, "hedged": false, "trailing": false, "leverage": false, "marketBuyRequiresPrice": false, "marketBuyByCost": 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": map[string]interface{} { "marginMode": true, "limit": 100, "daysBack": nil, "untilDays": nil, "trigger": false, "trailing": false, "symbolRequired": false, }, "fetchClosedOrders": map[string]interface{} { "marginMode": false, "limit": 100, "daysBack": nil, "daysBackCanceled": nil, "untilDays": nil, "trigger": false, "trailing": false, "symbolRequired": false, }, "fetchOHLCV": map[string]interface{} { "limit": 1000, }, }, "swap": map[string]interface{} { "linear": nil, "inverse": nil, }, "future": map[string]interface{} { "linear": nil, "inverse": nil, }, }, "exceptions": map[string]interface{} { "exact": map[string]interface{} { "400002": BadSymbol, "401000": AuthenticationError, "403002": BadRequest, "404200": BadSymbol, }, "broad": map[string]interface{} { "is not allowed": BadRequest, "Insufficient funds": InsufficientFunds, "Invalid request params input": BadRequest, "must be a number": BadRequest, "must be a string": BadRequest, "must be of type": BadRequest, "must be one of": BadRequest, "Order not found": OrderNotFound, "Pair with pair name": BadSymbol, "pairName": BadSymbol, "Service Unavailable": ExchangeNotAvailable, "Symbol ": BadSymbol, }, }, }) } /** * @method * @name bitteam#fetchMarkets * @description retrieves data on all markets for bitteam * @see https://bit.team/trade/api/documentation#/CCXT/getTradeApiCcxtPairs * @param {object} [params] extra parameters specific to the exchange api endpoint * @returns {object[]} an array of objects representing market data */ func (this *bitteam) 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.PublicGetTradeApiCcxtPairs(params)) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 28, // "pairs": [ // { // "id": 2, // "name": "eth_usdt", // "baseAssetId": 2, // "quoteAssetId": 3, // "fullName": "ETH USDT", // "description": "ETH USDT", // "lastBuy": 1964.665001, // "lastSell": 1959.835005, // "lastPrice": 1964.665001, // "change24": 1.41, // "volume24": 28.22627543, // "volume24USD": 55662.35636401598, // "active": true, // "baseStep": 8, // "quoteStep": 6, // "status": 1, // "settings": { // "limit_usd": "0.1", // "price_max": "10000000000000", // "price_min": "1", // "price_tick": "1", // "pricescale": 10000, // "lot_size_max": "1000000000000000", // "lot_size_min": "1", // "lot_size_tick": "1", // "price_view_min": 6, // "default_slippage": 10, // "lot_size_view_min": 6 // }, // "updateId": "50620", // "timeStart": "2021-01-28T09:19:30.706Z", // "makerFee": 200, // "takerFee": 200, // "quoteVolume24": 54921.93404134529, // "lowPrice24": 1919.355, // "highPrice24": 1971.204995 // }, // { // "id": 27, // "name": "ltc_usdt", // "baseAssetId": 13, // "quoteAssetId": 3, // "fullName": "LTC USDT", // "description": "This is LTC USDT", // "lastBuy": 53.14, // "lastSell": 53.58, // "lastPrice": 53.58, // "change24": -6.72, // "volume24": 0, // "volume24USD": null, // "active": true, // "baseStep": 8, // "quoteStep": 6, // "status": 0, // "settings": { // "limit_usd": "0.1", // "price_max": "1000000000000", // "price_min": "1", // "price_tick": "1", // "pricescale": 10000, // "lot_size_max": "1000000000000", // "lot_size_min": "1", // "lot_size_tick": "1", // "price_view_min": 6, // "default_slippage": 10, // "lot_size_view_min": 6 // }, // "updateId": "30", // "timeStart": "2021-10-13T12:11:05.359Z", // "makerFee": 200, // "takerFee": 200, // "quoteVolume24": 0, // "lowPrice24": null, // "highPrice24": null // } // ] // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var markets interface{} = this.SafeValue(result, "pairs", []interface{}{}) ch <- this.ParseMarkets(markets) return nil }() return ch } func (this *bitteam) ParseMarket(market interface{}) interface{} { var id interface{} = this.SafeString(market, "name") var numericId interface{} = this.SafeInteger(market, "id") var parts interface{} = Split(id, "_") var baseId interface{} = this.SafeString(parts, 0) var quoteId interface{} = this.SafeString(parts, 1) var base interface{} = this.SafeCurrencyCode(baseId) var quote interface{} = this.SafeCurrencyCode(quoteId) var active interface{} = this.SafeValue(market, "active") var timeStart interface{} = this.SafeString(market, "timeStart") var created interface{} = this.Parse8601(timeStart) var minCost interface{} = nil var currenciesValuedInUsd interface{} = this.SafeValue(this.Options, "currenciesValuedInUsd", map[string]interface{} {}) var quoteInUsd interface{} = this.SafeBool(currenciesValuedInUsd, quote, false) if IsTrue(quoteInUsd) { var settings interface{} = this.SafeValue(market, "settings", map[string]interface{} {}) minCost = this.SafeNumber(settings, "limit_usd") } return this.SafeMarketStructure(map[string]interface{} { "id": id, "numericId": numericId, "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": 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, "baseStep"))), "price": this.ParseNumber(this.ParsePrecision(this.SafeString(market, "quoteStep"))), }, "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": minCost, "max": nil, }, }, "created": created, "info": market, }) } /** * @method * @name bitteam#fetchCurrencies * @description fetches all available currencies on an exchange * @see https://bit.team/trade/api/documentation#/PUBLIC/getTradeApiCurrencies * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} an associative dictionary of currencies */ func (this *bitteam) 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.PublicGetTradeApiCurrencies(params)) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 24, // "currencies": [ // { // "txLimits": { // "minDeposit": "0.0001", // "minWithdraw": "0.02", // "maxWithdraw": "10000", // "withdrawCommissionPercentage": "NaN", // "withdrawCommissionFixed": "0.005" // }, // "id": 2, // "status": 1, // "symbol": "eth", // "title": "Ethereum", // "logoURL": "https://ethereum.org/static/6b935ac0e6194247347855dc3d328e83/34ca5/eth-diamond-black.png", // "isDiscount": false, // "address": "https://ethereum.org/", // "description": "Ethereum ETH", // "decimals": 18, // "blockChain": "Ethereum", // "precision": 8, // "currentRate": null, // "active": true, // "timeStart": "2021-01-28T08:57:41.719Z", // "type": "crypto", // "typeNetwork": "internalGW", // "idSorting": 2, // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // } // ] // }, // { // "txLimits": { // "minDeposit": "0.001", // "minWithdraw": "1", // "maxWithdraw": "100000", // "withdrawCommissionPercentage": "NaN", // "withdrawCommissionFixed": { // "Tron": "2", // "Binance": "2", // "Ethereum": "20" // } // }, // "id": 3, // "status": 1, // "symbol": "usdt", // "title": "Tether USD", // "logoURL": "https://cryptologos.cc/logos/tether-usdt-logo.png?v=010", // "isDiscount": false, // "address": "https://tether.to/", // "description": "Tether USD", // "decimals": 6, // "blockChain": "", // "precision": 6, // "currentRate": null, // "active": true, // "timeStart": "2021-01-28T09:04:17.170Z", // "type": "crypto", // "typeNetwork": "internalGW", // "idSorting": 0, // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // }, // { // "tx": "https://tronscan.org/#/transaction/", // "address": "https://tronscan.org/#/address/", // "blockChain": "Tron" // }, // { // "tx": "https://bscscan.com/tx/", // "address": "https://bscscan.com/address/", // "blockChain": "Binance" // } // ] // } // ] // } // } // var responseResult interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var currencies interface{} = this.SafeValue(responseResult, "currencies", []interface{}{}) // usding another endpoint to fetch statuses of deposits and withdrawals statusesResponse:= (<-this.PublicGetTradeApiCmcAssets()) PanicOnError(statusesResponse) // // { // "ZNX": { // "name": "ZeNeX Coin", // "unified_cryptoasset_id": 30, // "withdrawStatus": true, // "depositStatus": true, // "min_withdraw": 0.00001, // "max_withdraw": 10000 // }, // "USDT": { // "name": "Tether USD", // "unified_cryptoasset_id": 3, // "withdrawStatus": true, // "depositStatus": true, // "min_withdraw": 1, // "max_withdraw": 100000 // }, // } // statusesResponse = this.IndexBy(statusesResponse, "unified_cryptoasset_id") var result interface{} = map[string]interface{} {} for i := 0; IsLessThan(i, GetArrayLength(currencies)); i++ { var currency interface{} = GetValue(currencies, i) var id interface{} = this.SafeString(currency, "symbol") var numericId interface{} = this.SafeInteger(currency, "id") var code interface{} = this.SafeCurrencyCode(id) var active interface{} = this.SafeBool(currency, "active", false) var precision interface{} = this.ParseNumber(this.ParsePrecision(this.SafeString(currency, "precision"))) var txLimits interface{} = this.SafeValue(currency, "txLimits", map[string]interface{} {}) var minWithdraw interface{} = this.SafeString(txLimits, "minWithdraw") var maxWithdraw interface{} = this.SafeString(txLimits, "maxWithdraw") var minDeposit interface{} = this.SafeString(txLimits, "minDeposit") var fee interface{} = nil var withdrawCommissionFixed interface{} = this.SafeValue(txLimits, "withdrawCommissionFixed", map[string]interface{} {}) var feesByNetworkId interface{} = map[string]interface{} {} var blockChain interface{} = this.SafeString(currency, "blockChain") // if only one blockChain if IsTrue(IsTrue((!IsEqual(blockChain, nil))) && IsTrue((!IsEqual(blockChain, "")))) { fee = this.ParseNumber(withdrawCommissionFixed) AddElementToObject(feesByNetworkId, blockChain, fee) } else { feesByNetworkId = withdrawCommissionFixed } var statuses interface{} = this.SafeValue(statusesResponse, numericId, map[string]interface{} {}) var deposit interface{} = this.SafeValue(statuses, "depositStatus") var withdraw interface{} = this.SafeValue(statuses, "withdrawStatus") var networkIds interface{} = ObjectKeys(feesByNetworkId) var networks interface{} = map[string]interface{} {} var networkPrecision interface{} = this.ParseNumber(this.ParsePrecision(this.SafeString(currency, "decimals"))) for j := 0; IsLessThan(j, GetArrayLength(networkIds)); j++ { var networkId interface{} = GetValue(networkIds, j) var networkCode interface{} = this.NetworkIdToCode(networkId, code) var networkFee interface{} = this.SafeNumber(feesByNetworkId, networkId) AddElementToObject(networks, networkCode, map[string]interface{} { "id": networkId, "network": networkCode, "deposit": deposit, "withdraw": withdraw, "active": active, "fee": networkFee, "precision": networkPrecision, "limits": map[string]interface{} { "amount": map[string]interface{} { "min": nil, "max": nil, }, "withdraw": map[string]interface{} { "min": this.ParseNumber(minWithdraw), "max": this.ParseNumber(maxWithdraw), }, "deposit": map[string]interface{} { "min": this.ParseNumber(minDeposit), "max": nil, }, }, "info": currency, }) } AddElementToObject(result, code, map[string]interface{} { "id": id, "numericId": numericId, "code": code, "name": code, "info": currency, "active": active, "deposit": deposit, "withdraw": withdraw, "fee": fee, "precision": precision, "limits": map[string]interface{} { "amount": map[string]interface{} { "min": nil, "max": nil, }, "withdraw": map[string]interface{} { "min": this.ParseNumber(minWithdraw), "max": this.ParseNumber(maxWithdraw), }, "deposit": map[string]interface{} { "min": this.ParseNumber(minDeposit), "max": nil, }, }, "networks": networks, }) } ch <- result return nil }() return ch } /** * @method * @name bitteam#fetchOHLCV * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market * @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 bitteam api endpoint * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume */ func (this *bitteam) 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 retRes7228 := (<-this.LoadMarkets()) PanicOnError(retRes7228) var market interface{} = this.Market(symbol) var resolution interface{} = this.SafeString(this.Timeframes, timeframe, timeframe) var request interface{} = map[string]interface{} { "pairName": GetValue(market, "id"), "resolution": resolution, } response:= (<-this.HistoryGetApiTwHistoryPairNameResolution(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 364, // "data": [ // { // "t": 1669593600, // "o": 16211.259266, // "h": 16476.985001, // "l": 16023.714999, // "c": 16430.636894, // "v": 2.60150368999999 // }, // { // "t": 1669680000, // "o": 16430.636894, // "h": 17065.229582, // "l": 16346.114155, // "c": 16882.297736, // "v": 3.0872548400000115 // }, // ... // ] // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var data interface{} = this.SafeList(result, "data", []interface{}{}) ch <- this.ParseOHLCVs(data, market, timeframe, since, limit) return nil }() return ch } func (this *bitteam) ParseOHLCV(ohlcv interface{}, optionalArgs ...interface{}) interface{} { // // { // "t": 1669680000, // "o": 16430.636894, // "h": 17065.229582, // "l": 16346.114155, // "c": 16882.297736, // "v": 3.0872548400000115 // }, // market := GetArg(optionalArgs, 0, nil) _ = market return []interface{}{this.SafeTimestamp(ohlcv, "t"), this.SafeNumber(ohlcv, "o"), this.SafeNumber(ohlcv, "h"), this.SafeNumber(ohlcv, "l"), this.SafeNumber(ohlcv, "c"), this.SafeNumber(ohlcv, "v")} } /** * @method * @name bitteam#fetchOrderBook * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data * @see https://bit.team/trade/api/documentation#/CMC/getTradeApiCmcOrderbookPair * @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 (default 100, max 200) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} A dictionary of [order book structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure} indexed by market symbols */ func (this *bitteam) 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 retRes7948 := (<-this.LoadMarkets()) PanicOnError(retRes7948) var market interface{} = this.Market(symbol) var request interface{} = map[string]interface{} { "pair": GetValue(market, "id"), } response:= (<-this.PublicGetTradeApiCmcOrderbookPair(this.Extend(request, params))) PanicOnError(response) // // { // "timestamp": 1701166703285, // "bids": [ // [ // 2019.334988, // 0.09048525 // ], // [ // 1999.860002, // 0.0225 // ], // ... // ], // "asks": [ // [ // 2019.334995, // 0.00899078 // ], // [ // 2019.335013, // 0.09833052 // ], // ... // ] // } // var timestamp interface{} = this.SafeInteger(response, "timestamp") var orderbook interface{} = this.ParseOrderBook(response, symbol, timestamp) ch <- orderbook return nil }() return ch } /** * @method * @name bitteam#fetchOrders * @description fetches information on multiple orders made by the user * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtOrdersofuser * @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 orde structures to retrieve (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @param {string} [params.type] the status of the order - 'active', 'closed', 'cancelled', 'all', 'history' (default 'all') * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) FetchOrders(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 retRes8458 := (<-this.LoadMarkets()) PanicOnError(retRes8458) var typeVar interface{} = this.SafeString(params, "type", "all") var request interface{} = map[string]interface{} { "type": typeVar, } var market interface{} = nil if IsTrue(!IsEqual(symbol, nil)) { market = this.Market(symbol) AddElementToObject(request, "pair", GetValue(market, "id")) } if IsTrue(!IsEqual(limit, nil)) { AddElementToObject(request, "limit", limit) } response:= (<-this.PrivateGetTradeApiCcxtOrdersOfUser(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 3, // "orders": [ // { // "id": 106733026, // "orderId": null, // "userId": 21639, // "pair": "btc_usdt", // "pairId": 22, // "quantity": "0.00001", // "price": "40", // "executedPrice": "0", // "fee": null, // "orderCid": null, // "executed": "0", // "expires": null, // "baseDecimals": 8, // "quoteDecimals": 6, // "timestamp": 1700594804, // "status": "inactive", // "side": "buy", // "type": "limit", // "createdAt": "2023-11-21T19:26:43.868Z", // "updatedAt": "2023-11-21T19:26:43.868Z" // }, // { // "id": 106733308, // "orderId": "13074362", // "userId": 21639, // "pair": "btc_usdt", // "pairId": 22, // "quantity": "0.00001", // "price": "50000", // "executedPrice": "37017.495008", // "fee": { // "amount": "0.00000002", // "symbol": "btc", // "userId": 21639, // "decimals": 8, // "symbolId": 11 // }, // "orderCid": null, // "executed": "0.00001", // "expires": null, // "baseDecimals": 8, // "quoteDecimals": 6, // "timestamp": 1700594959, // "status": "executed", // "side": "buy", // "type": "limit", // "createdAt": "2023-11-21T19:29:19.946Z", // "updatedAt": "2023-11-21T19:29:19.946Z" // }, // { // "id": 106734455, // "orderId": "13248984", // "userId": 21639, // "pair": "eth_usdt", // "pairId": 2, // "quantity": "0.001", // "price": "1750", // "executedPrice": "0", // "fee": null, // "orderCid": null, // "executed": "0", // "expires": null, // "baseDecimals": 18, // "quoteDecimals": 6, // "timestamp": 1700595523, // "status": "accepted", // "side": "buy", // "type": "limit", // "createdAt": "2023-11-21T19:38:43.530Z", // "updatedAt": "2023-11-21T19:38:43.530Z" // } // ] // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var orders interface{} = this.SafeList(result, "orders", []interface{}{}) ch <- this.ParseOrders(orders, market, since, limit) return nil }() return ch } /** * @method * @name bitteam#fetchOrder * @description fetches information on an order * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtOrderId * @param {int|string} id order id * @param {string} symbol not used by bitteam fetchOrder () * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes9578 := (<-this.LoadMarkets()) PanicOnError(retRes9578) var request interface{} = map[string]interface{} { "id": id, } var market interface{} = nil if IsTrue(!IsEqual(symbol, nil)) { market = this.Market(symbol) } response:= (<-this.PrivateGetTradeApiCcxtOrderId(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "id": 106494347, // "orderId": "13214332", // "userId": 15912, // "pair": "eth_usdt", // "pairId": 2, // "quantity": "0.00448598", // "price": "2015.644995", // "executedPrice": "2015.644995", // "fee": { // "amount": "0", // "symbol": "eth", // "userId": 15912, // "decimals": 18, // "symbolId": 2, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "orderCid": null, // "executed": "0.00448598", // "expires": null, // "baseDecimals": 18, // "quoteDecimals": 6, // "timestamp": 1700470476, // "status": "executed", // "side": "buy", // "type": "limit", // "stopPrice": null, // "slippage": null // } // } // var result interface{} = this.SafeDict(response, "result") ch <- this.ParseOrder(result, market) return nil }() return ch } /** * @method * @name bitteam#fetchOpenOrders * @description fetch all unfilled currently open orders * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtOrdersofuser * @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 order structures to retrieve (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes10198 := (<-this.LoadMarkets()) PanicOnError(retRes10198) var request interface{} = map[string]interface{} { "type": "active", } retRes102315 := (<-this.FetchOrders(symbol, since, limit, this.Extend(request, params))) PanicOnError(retRes102315) ch <- retRes102315 return nil }() return ch } /** * @method * @name bitteam#fetchClosedOrders * @description fetches information on multiple closed orders made by the user * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtOrdersofuser * @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 closed order structures to retrieve (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes10388 := (<-this.LoadMarkets()) PanicOnError(retRes10388) var request interface{} = map[string]interface{} { "type": "closed", } retRes104215 := (<-this.FetchOrders(symbol, since, limit, this.Extend(request, params))) PanicOnError(retRes104215) ch <- retRes104215 return nil }() return ch } /** * @method * @name bitteam#fetchCanceledOrders * @description fetches information on multiple canceled orders made by the user * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtOrdersofuser * @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 canceled order structures to retrieve (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) FetchCanceledOrders(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 retRes10578 := (<-this.LoadMarkets()) PanicOnError(retRes10578) var request interface{} = map[string]interface{} { "type": "cancelled", } retRes106115 := (<-this.FetchOrders(symbol, since, limit, this.Extend(request, params))) PanicOnError(retRes106115) ch <- retRes106115 return nil }() return ch } /** * @method * @name bitteam#createOrder * @description create a trade order * @see https://bit.team/trade/api/documentation#/PRIVATE/postTradeApiCcxtOrdercreate * @param {string} symbol unified symbol of the market to create an order in * @param {string} type 'market' or '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 bitteam api endpoint * @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes10788 := (<-this.LoadMarkets()) PanicOnError(retRes10788) var market interface{} = this.Market(symbol) var request interface{} = map[string]interface{} { "pairId": ToString(GetValue(market, "numericId")), "type": typeVar, "side": side, "amount": this.AmountToPrecision(symbol, amount), } if IsTrue(IsEqual(typeVar, "limit")) { if IsTrue(IsEqual(price, nil)) { panic(ArgumentsRequired(Add(Add(Add(this.Id, " createOrder() requires a price argument for a "), typeVar), " order"))) } else { AddElementToObject(request, "price", this.PriceToPrecision(symbol, price)) } } response:= (<-this.PrivatePostTradeApiCcxtOrdercreate(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "id": 106733308, // "userId": 21639, // "quantity": "0.00001", // "pair": "btc_usdt", // "side": "buy", // "price": "50000", // "executed": "0", // "executedPrice": "0", // "status": "created", // "baseDecimals": 8, // "quoteDecimals": 6, // "pairId": 22, // "type": "limit", // "stopPrice": null, // "slippage": null, // "timestamp": "1700594959" // } // } // var order interface{} = this.SafeDict(response, "result", map[string]interface{} {}) ch <- this.ParseOrder(order, market) return nil }() return ch } /** * @method * @name bitteam#cancelOrder * @description cancels an open order * @see https://bit.team/trade/api/documentation#/PRIVATE/postTradeApiCcxtCancelorder * @param {string} id order id * @param {string} symbol not used by bitteam cancelOrder () * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes11328 := (<-this.LoadMarkets()) PanicOnError(retRes11328) var request interface{} = map[string]interface{} { "id": id, } response:= (<-this.PrivatePostTradeApiCcxtCancelorder(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "message": "The request to cancel your order was received" // } // } // var result interface{} = this.SafeDict(response, "result", map[string]interface{} {}) ch <- this.ParseOrder(result) return nil }() return ch } /** * @method * @name bitteam#cancelAllOrders * @description cancel open orders of market * @see https://bit.team/trade/api/documentation#/PRIVATE/postTradeApiCcxtCancelallorder * @param {string} symbol unified market symbol * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure} */ func (this *bitteam) 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 retRes11598 := (<-this.LoadMarkets()) PanicOnError(retRes11598) var market interface{} = nil var request interface{} = map[string]interface{} {} if IsTrue(!IsEqual(symbol, nil)) { market = this.Market(symbol) AddElementToObject(request, "pairId", ToString(GetValue(market, "numericId"))) } else { AddElementToObject(request, "pairId", "0") // '0' for all markets } response:= (<-this.PrivatePostTradeApiCcxtCancelAllOrder(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "message":"The request to cancel all your orders was received" // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var orders interface{} = []interface{}{result} ch <- this.ParseOrders(orders, market) return nil }() return ch } func (this *bitteam) ParseOrder(order interface{}, optionalArgs ...interface{}) interface{} { // // fetchOrders // { // "id": 106733308, // "orderId": "13074362", // "userId": 21639, // "pair": "btc_usdt", // "pairId": 22, // "quantity": "0.00001", // "price": "50000", // "executedPrice": "37017.495008", // "fee": { // "amount": "0.00000002", // "symbol": "btc", // "userId": 21639, // "decimals": 8, // "symbolId": 11 // }, // "orderCid": null, // "executed": "0.00001", // "expires": null, // "baseDecimals": 8, // "quoteDecimals": 6, // "timestamp": 1700594959, // "status": "executed", // "side": "buy", // "type": "limit", // "createdAt": "2023-11-21T19:29:19.946Z", // "updatedAt": "2023-11-21T19:29:19.946Z" // }, // // fetchOrder // { // "id": 106494347, // "orderId": "13214332", // "userId": 15912, // "pair": "eth_usdt", // "pairId": 2, // "quantity": "0.00448598", // "price": "2015.644995", // "executedPrice": "2015.644995", // "fee": { // "amount": "0", // "symbol": "eth", // "userId": 15912, // "decimals": 18, // "symbolId": 2, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "orderCid": null, // "executed": "0.00448598", // "expires": null, // "baseDecimals": 18, // "quoteDecimals": 6, // "timestamp": 1700470476, // "status": "executed", // "side": "buy", // "type": "limit", // "stopPrice": null, // "slippage": null // } // // createOrder // { // "id": 106733308, // "userId": 21639, // "quantity": "0.00001", // "pair": "btc_usdt", // "side": "buy", // "price": "50000", // "executed": "0", // "executedPrice": "0", // "status": "created", // "baseDecimals": 8, // "quoteDecimals": 6, // "pairId": 22, // "type": "limit", // "stopPrice": null, // "slippage": null, // "timestamp": "1700594959" // } // market := GetArg(optionalArgs, 0, nil) _ = market var id interface{} = this.SafeString(order, "id") var marketId interface{} = this.SafeString(order, "pair") market = this.SafeMarket(marketId, market) var clientOrderId interface{} = this.SafeString(order, "orderCid") var timestamp interface{} = nil var createdAt interface{} = this.SafeString(order, "createdAt") if IsTrue(!IsEqual(createdAt, nil)) { timestamp = this.Parse8601(createdAt) } else { timestamp = this.SafeTimestamp(order, "timestamp") } var updatedAt interface{} = this.SafeString(order, "updatedAt") var lastUpdateTimestamp interface{} = this.Parse8601(updatedAt) var status interface{} = this.ParseOrderStatus(this.SafeString(order, "status")) var typeVar interface{} = this.ParseOrderType(this.SafeString(order, "type")) var side interface{} = this.SafeString(order, "side") var feeRaw interface{} = this.SafeValue(order, "fee") var price interface{} = this.SafeString(order, "price") var amount interface{} = this.SafeString(order, "quantity") var filled interface{} = this.SafeString(order, "executed") var fee interface{} = nil if IsTrue(!IsEqual(feeRaw, nil)) { var feeCost interface{} = this.SafeString(feeRaw, "amount") var feeCurrencyId interface{} = this.SafeString(feeRaw, "symbol") fee = map[string]interface{} { "currency": this.SafeCurrencyCode(feeCurrencyId), "cost": feeCost, "rate": nil, } } return this.SafeOrder(map[string]interface{} { "id": id, "clientOrderId": clientOrderId, "timestamp": timestamp, "datetime": this.Iso8601(timestamp), "lastTradeTimestamp": nil, "lastUpdateTimestamp": lastUpdateTimestamp, "status": status, "symbol": GetValue(market, "symbol"), "type": typeVar, "timeInForce": "GTC", "side": side, "price": price, "triggerPrice": this.SafeString(order, "stopPrice"), "average": nil, "amount": amount, "cost": nil, "filled": filled, "remaining": nil, "fee": fee, "trades": nil, "info": order, "postOnly": false, }, market) } func (this *bitteam) ParseOrderStatus(status interface{}) interface{} { var statuses interface{} = map[string]interface{} { "accepted": "open", "executed": "closed", "cancelled": "canceled", "partiallyCancelled": "canceled", "delete": "rejected", "inactive": "rejected", "executing": "open", "created": "open", } return this.SafeString(statuses, status, status) } func (this *bitteam) ParseOrderType(status interface{}) interface{} { var statuses interface{} = map[string]interface{} { "market": "market", "limit": "limit", } return this.SafeString(statuses, status, status) } func (this *bitteam) ParseValueToPricision(valueObject interface{}, valueKey interface{}, preciseObject interface{}, precisionKey interface{}) interface{} { var valueRawString interface{} = this.SafeString(valueObject, valueKey) var precisionRawString interface{} = this.SafeString(preciseObject, precisionKey) if IsTrue(IsTrue(IsEqual(valueRawString, nil)) || IsTrue(IsEqual(precisionRawString, nil))) { return nil } var precisionString interface{} = this.ParsePrecision(precisionRawString) return Precise.StringMul(valueRawString, precisionString) } /** * @method * @name bitteam#fetchTickers * @description fetches price tickers for multiple markets, statistical calculations with the information calculated over the past 24 hours each market * @see https://bit.team/trade/api/documentation#/CMC/getTradeApiCmcSummary * @param {string[]|undefined} 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 bitteam api endpoint * @returns {object} a dictionary of [ticker structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure} */ func (this *bitteam) 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 retRes13668 := (<-this.LoadMarkets()) PanicOnError(retRes13668) response:= (<-this.PublicGetTradeApiCmcSummary()) PanicOnError(response) // // [ // { // "trading_pairs": "BTC_USDT", // "base_currency": "BTC", // "quote_currency": "USDT", // "last_price": 37669.955001, // "lowest_ask": 37670.055, // "highest_bid": 37669.955, // "base_volume": 6.81156888, // "quote_volume": 257400.516878529, // "price_change_percent_24h": -0.29, // "highest_price_24h": 38389.994463, // "lowest_price_24h": 37574.894999 // }, // { // "trading_pairs": "BNB_USDT", // "base_currency": "BNB", // "quote_currency": "USDT", // "last_price": 233.525142, // "lowest_ask": 233.675, // "highest_bid": 233.425, // "base_volume": 245.0199339, // "quote_volume": 57356.91823827642, // "price_change_percent_24h": -0.32, // "highest_price_24h": 236.171123, // "lowest_price_24h": 231.634637 // }, // ... // ] // var tickers interface{} = []interface{}{} if !IsTrue(IsArray(response)) { response = []interface{}{} } for i := 0; IsLessThan(i, GetArrayLength(response)); i++ { var rawTicker interface{} = GetValue(response, i) var ticker interface{} = this.ParseTicker(rawTicker) AppendToArray(&tickers,ticker) } ch <- this.FilterByArrayTickers(tickers, "symbol", symbols) return nil }() return ch } /** * @method * @name bitteam#fetchTicker * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market * @see https://bit.team/trade/api/documentation#/PUBLIC/getTradeApiPairName * @param {string} symbol unified symbol of the market to fetch the ticker for * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} a [ticker structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure} */ func (this *bitteam) 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 retRes14218 := (<-this.LoadMarkets()) PanicOnError(retRes14218) var market interface{} = this.Market(symbol) var request interface{} = map[string]interface{} { "name": GetValue(market, "id"), } response:= (<-this.PublicGetTradeApiPairName(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "pair": { // "id": 2, // "name": "eth_usdt", // "baseAssetId": 2, // "quoteAssetId": 3, // "fullName": "ETH USDT", // "description": "ETH USDT", // "lastBuy": "1976.715012", // "lastSell": "1971.995006", // "lastPrice": "1976.715012", // "change24": "1.02", // "volume24": 24.0796457, // "volume24USD": 44282.347995912205, // "active": true, // "baseStep": 8, // "quoteStep": 6, // "status": 1, // "settings": { // "limit_usd": "0.1", // "price_max": "10000000000000", // "price_min": "1", // "price_tick": "1", // "pricescale": 10000, // "lot_size_max": "1000000000000000", // "lot_size_min": "1", // "lot_size_tick": "1", // "price_view_min": 6, // "default_slippage": 10, // "lot_size_view_min": 6 // }, // "asks": [ // { // "price": "1976.405003", // "quantity": "0.0051171", // "amount": "10.1134620408513" // }, // { // "price": "1976.405013", // "quantity": "0.09001559", // "amount": "177.90726332415267" // }, // { // "price": "2010.704988", // "quantity": "0.00127892", // "amount": "2.57153082325296" // } // ], // "bids": [ // { // "price": "1976.404988", // "quantity": "0.09875861", // "amount": "195.18700941194668" // }, // { // "price": "1905.472973", // "quantity": "0.00263591", // "amount": "5.02265526426043" // }, // { // "price": "1904.274973", // "quantity": "0.09425304", // "amount": "179.48370520116792" // } // ], // "updateId": "78", // "timeStart": "2021-01-28T09:19:30.706Z", // "makerFee": 200, // "takerFee": 200, // "quoteVolume24": 49125.1374009045, // "lowPrice24": 1966.704999, // "highPrice24": 2080.354997, // "baseCurrency": { // "id": 2, // "status": 1, // "symbol": "eth", // "title": "Ethereum", // "logoURL": "https://ethereum.org/static/6b935ac0e6194247347855dc3d328e83/34ca5/eth-diamond-black.png", // "isDiscount": false, // "address": "https://ethereum.org/", // "description": "Ethereum ETH", // "decimals": 18, // "blockChain": "Ethereum", // "precision": 8, // "currentRate": null, // "active": true, // "timeStart": "2021-01-28T08:57:41.719Z", // "txLimits": { // "minDeposit": "100000000000000", // "maxWithdraw": "10000000000000000000000", // "minWithdraw": "20000000000000000", // "withdrawCommissionFixed": "5000000000000000", // "withdrawCommissionPercentage": "NaN" // }, // "type": "crypto", // "typeNetwork": "internalGW", // "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMTVDMCA2LjcxNTczIDYuNzE1NzMgMCAxNSAwVjBDMjMuMjg0MyAwIDMwIDYuNzE1NzMgMzAgMTVWMTVDMzAgMjMuMjg0MyAyMy4yODQzIDMwIDE1IDMwVjMwQzYuNzE1NzMgMzAgMCAyMy4yODQzIDAgMTVWMTVaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNMTQuOTU1NyAxOS45NzM5TDkgMTYuMzUwOUwxNC45NTIxIDI1TDIwLjkxMDkgMTYuMzUwOUwxNC45NTIxIDE5Ljk3MzlIMTQuOTU1N1pNMTUuMDQ0MyA1TDkuMDkwOTUgMTUuMTg1M0wxNS4wNDQzIDE4LjgxNDZMMjEgMTUuMTg5MUwxNS4wNDQzIDVaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", // "idSorting": 2, // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // } // ], // "clientTxLimits": { // "minDeposit": "0.0001", // "minWithdraw": "0.02", // "maxWithdraw": "10000", // "withdrawCommissionPercentage": "NaN", // "withdrawCommissionFixed": "0.005" // } // }, // "quoteCurrency": { // "id": 3, // "status": 1, // "symbol": "usdt", // "title": "Tether USD", // "logoURL": "https://cryptologos.cc/logos/tether-usdt-logo.png?v=010", // "isDiscount": false, // "address": "https://tether.to/", // "description": "Tether USD", // "decimals": 6, // "blockChain": "", // "precision": 6, // "currentRate": null, // "active": true, // "timeStart": "2021-01-28T09:04:17.170Z", // "txLimits": { // "minDeposit": "1000", // "maxWithdraw": "100000000000", // "minWithdraw": "1000000", // "withdrawCommissionFixed": { // "Tron": "2000000", // "Binance": "2000000000000000000", // "Ethereum": "20000000" // }, // "withdrawCommissionPercentage": "NaN" // }, // "type": "crypto", // "typeNetwork": "internalGW", // "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMTVDMCA2LjcxNTczIDYuNzE1NzMgMCAxNSAwVjBDMjMuMjg0MyAwIDMwIDYuNzE1NzMgMzAgMTVWMTVDMzAgMjMuMjg0MyAyMy4yODQzIDMwIDE1IDMwVjMwQzYuNzE1NzMgMzAgMCAyMy4yODQzIDAgMTVWMTVaIiBmaWxsPSIjNkZBNjg4Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjMgN0g3VjExSDEzVjEyLjA2MkM4Ljk5MjAyIDEyLjMxNDYgNiAxMy4zMTAyIDYgMTQuNUM2IDE1LjY4OTggOC45OTIwMiAxNi42ODU0IDEzIDE2LjkzOFYyM0gxN1YxNi45MzhDMjEuMDA4IDE2LjY4NTQgMjQgMTUuNjg5OCAyNCAxNC41QzI0IDEzLjMxMDIgMjEuMDA4IDEyLjMxNDYgMTcgMTIuMDYyVjExSDIzVjdaTTcuNSAxNC41QzcuNSAxMy40NjA2IDkuMzMzMzMgMTIuMzY4IDEzIDEyLjA3NTZWMTUuNUgxN1YxMi4wNzU5QzIwLjkzODQgMTIuMzkyNyAyMi41IDEzLjYzMzkgMjIuNSAxNC41QzIyLjUgMTUuMzIyIDIwLjAwMDggMTUuODA2MSAxNyAxNS45NTI1QzE1LjcwODIgMTYuMDQ2MiAxMy43OTUxIDE1Ljk4MjYgMTMgMTUuOTM5MUM5Ljk5OTIxIDE1Ljc1NTkgNy41IDE1LjE4MDkgNy41IDE0LjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", // "idSorting": 0, // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // }, // { // "tx": "https://tronscan.org/#/transaction/", // "address": "https://tronscan.org/#/address/", // "blockChain": "Tron" // }, // { // "tx": "https://bscscan.com/tx/", // "address": "https://bscscan.com/address/", // "blockChain": "Binance" // } // ], // "clientTxLimits": { // "minDeposit": "0.001", // "minWithdraw": "1", // "maxWithdraw": "100000", // "withdrawCommissionPercentage": "NaN", // "withdrawCommissionFixed": { // "Tron": "2", // "Binance": "2", // "Ethereum": "20" // } // } // }, // "quantities": { // "asks": "5.58760757", // "bids": "2226.98663823032198" // } // } // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var pair interface{} = this.SafeDict(result, "pair", map[string]interface{} {}) ch <- this.ParseTicker(pair, market) return nil }() return ch } func (this *bitteam) ParseTicker(ticker interface{}, optionalArgs ...interface{}) interface{} { // // fetchTicker // { // "id": 2, // "name": "eth_usdt", // "baseAssetId": 2, // "quoteAssetId": 3, // "fullName": "ETH USDT", // "description": "ETH USDT", // "lastBuy": "1976.715012", // "lastSell": "1971.995006", // "lastPrice": "1976.715012", // "change24": "1.02", // "volume24": 24.0796457, // "volume24USD": 44282.347995912205, // "active": true, // "baseStep": 8, // "quoteStep": 6, // "status": 1, // "asks": [ // { // "price": "1976.405003", // "quantity": "0.0051171", // "amount": "10.1134620408513" // }, // { // "price": "1976.405013", // "quantity": "0.09001559", // "amount": "177.90726332415267" // }, // { // "price": "2010.704988", // "quantity": "0.00127892", // "amount": "2.57153082325296" // } // ... // ], // "bids": [ // { // "price": "1976.404988", // "quantity": "0.09875861", // "amount": "195.18700941194668" // }, // { // "price": "1905.472973", // "quantity": "0.00263591", // "amount": "5.02265526426043" // }, // { // "price": "1904.274973", // "quantity": "0.09425304", // "amount": "179.48370520116792" // } // ... // ], // "updateId": "78", // "timeStart": "2021-01-28T09:19:30.706Z", // "makerFee": 200, // "takerFee": 200, // "quoteVolume24": 49125.1374009045, // "lowPrice24": 1966.704999, // "highPrice24": 2080.354997, // ... // } // // fetchTickers // { // "trading_pairs": "BTC_USDT", // "base_currency": "BTC", // "quote_currency": "USDT", // "last_price": 37669.955001, // "lowest_ask": 37670.055, // "highest_bid": 37669.955, // "base_volume": 6.81156888, // "quote_volume": 257400.516878529, // "price_change_percent_24h": -0.29, // "highest_price_24h": 38389.994463, // "lowest_price_24h": 37574.894999 // } market := GetArg(optionalArgs, 0, nil) _ = market var marketId interface{} = this.SafeStringLower(ticker, "trading_pairs") market = this.SafeMarket(marketId, market) var bestBidPrice interface{} = nil var bestAskPrice interface{} = nil var bestBidVolume interface{} = nil var bestAskVolume interface{} = nil var bids interface{} = this.SafeValue(ticker, "bids") var asks interface{} = this.SafeValue(ticker, "asks") if IsTrue(IsTrue(IsTrue(IsTrue((!IsEqual(bids, nil))) && IsTrue((IsArray(bids)))) && IsTrue((!IsEqual(asks, nil)))) && IsTrue((IsArray(asks)))) { var bestBid interface{} = this.SafeValue(bids, 0, map[string]interface{} {}) bestBidPrice = this.SafeString(bestBid, "price") bestBidVolume = this.SafeString(bestBid, "quantity") var bestAsk interface{} = this.SafeValue(asks, 0, map[string]interface{} {}) bestAskPrice = this.SafeString(bestAsk, "price") bestAskVolume = this.SafeString(bestAsk, "quantity") } else { bestBidPrice = this.SafeString(ticker, "highest_bid") bestAskPrice = this.SafeString(ticker, "lowest_ask") } var baseVolume interface{} = this.SafeString2(ticker, "volume24", "base_volume") var quoteVolume interface{} = this.SafeString2(ticker, "quoteVolume24", "quote_volume") var high interface{} = this.SafeString2(ticker, "highPrice24", "highest_price_24h") var low interface{} = this.SafeString2(ticker, "lowPrice24", "lowest_price_24h") var close interface{} = this.SafeString2(ticker, "lastPrice", "last_price") var changePcnt interface{} = this.SafeString2(ticker, "change24", "price_change_percent_24h") return this.SafeTicker(map[string]interface{} { "symbol": GetValue(market, "symbol"), "timestamp": nil, "datetime": nil, "open": nil, "high": high, "low": low, "close": close, "bid": bestBidPrice, "bidVolume": bestBidVolume, "ask": bestAskPrice, "askVolume": bestAskVolume, "vwap": nil, "previousClose": nil, "change": nil, "percentage": changePcnt, "average": nil, "baseVolume": baseVolume, "quoteVolume": quoteVolume, "info": ticker, }, market) } /** * @method * @name bitteam#fetchTrades * @description get the list of most recent trades for a particular symbol * @see https://bit.team/trade/api/documentation#/CMC/getTradeApiCmcTradesPair * @param {string} symbol unified symbol of the market to fetch trades for * @param {int} [since] timestamp in ms of the earliest trade to fetch * @param {int} [limit] the maximum amount of trades to fetch * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#public-trades} */ func (this *bitteam) FetchTrades(symbol interface{}, optionalArgs ...interface{}) <- chan interface{} { ch := make(chan interface{}) go func() interface{} { defer close(ch) defer ReturnPanicError(ch) since := GetArg(optionalArgs, 0, nil) _ = since limit := GetArg(optionalArgs, 1, nil) _ = limit params := GetArg(optionalArgs, 2, map[string]interface{} {}) _ = params retRes17558 := (<-this.LoadMarkets()) PanicOnError(retRes17558) var market interface{} = this.Market(symbol) var request interface{} = map[string]interface{} { "pair": GetValue(market, "id"), } response:= (<-this.PublicGetTradeApiCmcTradesPair(this.Extend(request, params))) PanicOnError(response) // // [ // { // "trade_id": 34970337, // "price": 37769.994793, // "base_volume": 0.00119062, // "quote_volume": 44.96971120044166, // "timestamp": 1700827234000, // "type": "buy" // }, // { // "trade_id": 34970347, // "price": 37769.634497, // "base_volume": 0.00104009, // "quote_volume": 39.28381914398473, // "timestamp": 1700827248000, // "type": "buy" // }, // ... // ] // ch <- this.ParseTrades(response, market, since, limit) return nil }() return ch } /** * @method * @name bitteam#fetchMyTrades * @description fetch all trades made by the user * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtTradesofuser * @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 (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure} */ func (this *bitteam) 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 retRes17978 := (<-this.LoadMarkets()) PanicOnError(retRes17978) var request interface{} = map[string]interface{} {} var market interface{} = nil if IsTrue(!IsEqual(symbol, nil)) { market = this.Market(symbol) AddElementToObject(request, "pairId", GetValue(market, "numericId")) } if IsTrue(!IsEqual(limit, nil)) { AddElementToObject(request, "limit", limit) } response:= (<-this.PrivateGetTradeApiCcxtTradesOfUser(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 3, // "trades": [ // { // "id": 34880724, // "tradeId": "4368041", // "makerOrderId": 106742914, // "takerOrderId": 106761614, // "pairId": 2, // "quantity": "0.00955449", // "price": "1993.674994", // "isBuyerMaker": true, // "baseDecimals": 18, // "quoteDecimals": 6, // "side": "sell", // "timestamp": 1700615250, // "rewarded": true, // "makerUserId": 21639, // "takerUserId": 15913, // "baseCurrencyId": 2, // "quoteCurrencyId": 3, // "feeMaker": { // "amount": "0.0000191", // "symbol": "eth", // "userId": 21639, // "decimals": 18, // "symbolId": 2 // }, // "feeTaker": { // "amount": "0", // "symbol": "usdt", // "userId": 15913, // "decimals": 6, // "symbolId": 3, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "pair": "eth_usdt", // "createdAt": "2023-11-22T01:07:30.593Z", // "updatedAt": "2023-11-22T01:10:00.117Z", // "isCurrentSide": "maker" // }, // { // "id": 34875793, // "tradeId": "4368010", // "makerOrderId": 106742914, // "takerOrderId": 106745926, // "pairId": 2, // "quantity": "0.0027193", // "price": "1993.674994", // "isBuyerMaker": true, // "baseDecimals": 18, // "quoteDecimals": 6, // "side": "sell", // "timestamp": 1700602983, // "rewarded": true, // "makerUserId": 21639, // "takerUserId": 15912, // "baseCurrencyId": 2, // "quoteCurrencyId": 3, // "feeMaker": { // "amount": "0.00000543", // "symbol": "eth", // "userId": 21639, // "decimals": 18, // "symbolId": 2 // }, // "feeTaker": { // "amount": "0", // "symbol": "usdt", // "userId": 15912, // "decimals": 6, // "symbolId": 3, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "pair": "eth_usdt", // "createdAt": "2023-11-21T21:43:02.758Z", // "updatedAt": "2023-11-21T21:45:00.147Z", // "isCurrentSide": "maker" // }, // { // "id": 34871727, // "tradeId": "3441840", // "makerOrderId": 106733299, // "takerOrderId": 106733308, // "pairId": 22, // "quantity": "0.00001", // "price": "37017.495008", // "isBuyerMaker": false, // "baseDecimals": 8, // "quoteDecimals": 6, // "side": "buy", // "timestamp": 1700594960, // "rewarded": true, // "makerUserId": 15909, // "takerUserId": 21639, // "baseCurrencyId": 11, // "quoteCurrencyId": 3, // "feeMaker": { // "amount": "0", // "symbol": "usdt", // "userId": 15909, // "decimals": 6, // "symbolId": 3, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "feeTaker": { // "amount": "0.00000002", // "symbol": "btc", // "userId": 21639, // "decimals": 8, // "symbolId": 11 // }, // "pair": "btc_usdt", // "createdAt": "2023-11-21T19:29:20.092Z", // "updatedAt": "2023-11-21T19:30:00.159Z" // "isCurrentSide": "taker" // } // ] // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var trades interface{} = this.SafeList(result, "trades", []interface{}{}) ch <- this.ParseTrades(trades, market, since, limit) return nil }() return ch } func (this *bitteam) ParseTrade(trade interface{}, optionalArgs ...interface{}) interface{} { // // fetchTrades // { // "trade_id": 34970337, // "price": 37769.994793, // "base_volume": 0.00119062, // "quote_volume": 44.96971120044166, // "timestamp": 1700827234000, // "type": "buy" // }, // // fetchMyTrades // { // "id": 34875793, // "tradeId": "4368010", // "makerOrderId": 106742914, // "takerOrderId": 106745926, // "pairId": 2, // "quantity": "0.0027193", // "price": "1993.674994", // "isBuyerMaker": true, // "baseDecimals": 18, // "quoteDecimals": 6, // "side": "sell", // "timestamp": 1700602983, // "rewarded": true, // "makerUserId": 21639, // "takerUserId": 15912, // "baseCurrencyId": 2, // "quoteCurrencyId": 3, // "feeMaker": { // "amount": "0.00000543", // "symbol": "eth", // "userId": 21639, // "decimals": 18, // "symbolId": 2 // }, // "feeTaker": { // "amount": "0", // "symbol": "usdt", // "userId": 15912, // "decimals": 6, // "symbolId": 3, // "discountAmount": "0", // "discountSymbol": "btt", // "discountDecimals": 18, // "discountSymbolId": 5 // }, // "pair": "eth_usdt", // "createdAt": "2023-11-21T21:43:02.758Z", // "updatedAt": "2023-11-21T21:45:00.147Z", // "isCurrentSide": "maker" // } // market := GetArg(optionalArgs, 0, nil) _ = market var marketId interface{} = this.SafeString(trade, "pair") market = this.SafeMarket(marketId, market) var symbol interface{} = GetValue(market, "symbol") var id interface{} = this.SafeString2(trade, "id", "trade_id") var price interface{} = this.SafeString(trade, "price") var amount interface{} = this.SafeString2(trade, "quantity", "base_volume") var cost interface{} = this.SafeString(trade, "quote_volume") var takerOrMaker interface{} = this.SafeString(trade, "isCurrentSide") var timestamp interface{} = this.SafeString(trade, "timestamp") if IsTrue(!IsEqual(takerOrMaker, nil)) { timestamp = Precise.StringMul(timestamp, "1000") } // the exchange returns the side of the taker var side interface{} = this.SafeString2(trade, "side", "type") var feeInfo interface{} = nil var order interface{} = nil if IsTrue(IsEqual(takerOrMaker, "maker")) { if IsTrue(IsEqual(side, "sell")) { side = "buy" } else if IsTrue(IsEqual(side, "buy")) { side = "sell" } order = this.SafeString(trade, "makerOrderId") feeInfo = this.SafeValue(trade, "feeMaker", map[string]interface{} {}) } else if IsTrue(IsEqual(takerOrMaker, "taker")) { order = this.SafeString(trade, "takerOrderId") feeInfo = this.SafeValue(trade, "feeTaker", map[string]interface{} {}) } var feeCurrencyId interface{} = this.SafeString(feeInfo, "symbol") var feeCost interface{} = this.SafeString(feeInfo, "amount") var fee interface{} = map[string]interface{} { "currency": this.SafeCurrencyCode(feeCurrencyId), "cost": feeCost, } var intTs interface{} = this.ParseToInt(timestamp) return this.SafeTrade(map[string]interface{} { "id": id, "order": order, "timestamp": intTs, "datetime": this.Iso8601(intTs), "symbol": symbol, "type": nil, "side": side, "takerOrMaker": takerOrMaker, "price": price, "amount": amount, "cost": cost, "fee": fee, "info": trade, }, market) } /** * @method * @name betteam#fetchBalance * @description query for balance and get the amount of funds available for trading or funds locked in orders * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiCcxtBalance * @param {object} [params] extra parameters specific to the betteam api endpoint * @returns {object} a [balance structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#balance-structure} */ func (this *bitteam) 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 retRes20628 := (<-this.LoadMarkets()) PanicOnError(retRes20628) response:= (<-this.PrivateGetTradeApiCcxtBalance(params)) PanicOnError(response) ch <- this.ParseBalance(response) return nil }() return ch } func (this *bitteam) ParseBalance(response interface{}) interface{} { // // { // "ok": true, // "result": { // "free": { // "USDT": "0", // "DEL": "0", // "BTC": "0", // ... // }, // "used": { // "USDT": "0", // "DEL": "0", // "BTC": "0", // ... // }, // "total": { // "USDT": "0", // "DEL": "0", // "BTC": "0", // ... // }, // "USDT": { // "free": "0", // "used": "0", // "total": "0", // }, // "DEL": { // "free": "0", // "used": "0", // "total": "0", // }, // "BTC": { // "free": "0", // "used": "0", // "total": "0", // } // ... // } // } // var timestamp interface{} = this.Milliseconds() var balance interface{} = map[string]interface{} { "info": response, "timestamp": timestamp, "datetime": this.Iso8601(timestamp), } var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var balanceByCurrencies interface{} = this.Omit(result, []interface{}{"free", "used", "total"}) var rawCurrencyIds interface{} = ObjectKeys(balanceByCurrencies) for i := 0; IsLessThan(i, GetArrayLength(rawCurrencyIds)); i++ { var rawCurrencyId interface{} = GetValue(rawCurrencyIds, i) var currencyBalance interface{} = this.SafeValue(result, rawCurrencyId) var free interface{} = this.SafeString(currencyBalance, "free") var used interface{} = this.SafeString(currencyBalance, "used") var total interface{} = this.SafeString(currencyBalance, "total") var currencyCode interface{} = this.SafeCurrencyCode(ToLower(rawCurrencyId)) AddElementToObject(balance, currencyCode, map[string]interface{} { "free": free, "used": used, "total": total, }) } return this.SafeBalance(balance) } /** * @method * @name bitteam#fetchDepositsWithdrawals * @description fetch history of deposits and withdrawals from external wallets and between CoinList Pro trading account and CoinList wallet * @see https://bit.team/trade/api/documentation#/PRIVATE/getTradeApiTransactionsofuser * @param {string} [code] unified currency code for the currency of the deposit/withdrawals * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal * @param {int} [limit] max number of deposit/withdrawals to return (default 10) * @param {object} [params] extra parameters specific to the bitteam api endpoint * @returns {object} a list of [transaction structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#transaction-structure} */ func (this *bitteam) FetchDepositsWithdrawals(optionalArgs ...interface{}) <- chan interface{} { ch := make(chan interface{}) go func() interface{} { defer close(ch) defer ReturnPanicError(ch) code := GetArg(optionalArgs, 0, nil) _ = code since := GetArg(optionalArgs, 1, nil) _ = since limit := GetArg(optionalArgs, 2, nil) _ = limit params := GetArg(optionalArgs, 3, map[string]interface{} {}) _ = params retRes21468 := (<-this.LoadMarkets()) PanicOnError(retRes21468) var currency interface{} = nil var request interface{} = map[string]interface{} {} if IsTrue(!IsEqual(code, nil)) { currency = this.Currency(code) AddElementToObject(request, "currency", GetValue(currency, "numericId")) } if IsTrue(!IsEqual(limit, nil)) { AddElementToObject(request, "limit", limit) } response:= (<-this.PrivateGetTradeApiTransactionsOfUser(this.Extend(request, params))) PanicOnError(response) // // { // "ok": true, // "result": { // "count": 2, // "transactions": [ // { // "id": 1329686, // "orderId": "2f060ad5-30f7-4f2b-ac5f-1bb8f5fd34dc", // "transactionCoreId": "561863", // "userId": 21639, // "recipient": "0x9050dfA063D1bE7cA711c750b18D51fDD13e90Ee", // "sender": "0x6894a93B6fea044584649278621723cac51443Cd", // "symbolId": 2, // "CommissionId": 17571, // "amount": "44000000000000000", // "params": {}, // "reason": null, // "timestamp": 1700715341743, // "status": "approving", // "statusDescription": null, // "type": "withdraw", // "message": null, // "blockChain": "", // "before": null, // "after": null, // "currency": { // "symbol": "eth", // "decimals": 18, // "blockChain": "Ethereum", // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // } // ] // } // }, // { // "id": 1329229, // "orderId": null, // "transactionCoreId": "561418", // "userId": 21639, // "recipient": "0x7d6a797f2406e06b2f9b41d067df324affa315dd", // "sender": null, // "symbolId": 3, // "CommissionId": null, // "amount": "100000000", // "params": { // "tx_id": "0x2253823c828d838acd983fe6a348fb0e034efe3874b081871d8b80da76ec758b" // }, // "reason": null, // "timestamp": 1700594180417, // "status": "success", // "statusDescription": null, // "type": "deposit", // "message": null, // "blockChain": "Ethereum", // "before": 0, // "after": 100000000, // "currency": { // "symbol": "usdt", // "decimals": 6, // "blockChain": "", // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // }, // { // "tx": "https://tronscan.org/#/transaction/", // "address": "https://tronscan.org/#/address/", // "blockChain": "Tron" // }, // { // "tx": "https://bscscan.com/tx/", // "address": "https://bscscan.com/address/", // "blockChain": "Binance" // } // ] // } // } // ] // } // } // var result interface{} = this.SafeValue(response, "result", map[string]interface{} {}) var transactions interface{} = this.SafeList(result, "transactions", []interface{}{}) ch <- this.ParseTransactions(transactions, currency, since, limit) return nil }() return ch } func (this *bitteam) ParseTransaction(transaction interface{}, optionalArgs ...interface{}) interface{} { // // { // "id": 1329229, // "orderId": null, // "transactionCoreId": "561418", // "userId": 21639, // "recipient": "0x7d6a797f2406e06b2f9b41d067df324affa315dd", // "sender": null, // "symbolId": 3, // "CommissionId": null, // "amount": "100000000", // "params": { // "tx_id": "0x2253823c828d838acd983fe6a348fb0e034efe3874b081871d8b80da76ec758b" // }, // "reason": null, // "timestamp": 1700594180417, // "status": "success", // "statusDescription": null, // "type": "deposit", // "message": null, // "blockChain": "Ethereum", // "before": 0, // "after": 100000000, // "currency": { // "symbol": "usdt", // "decimals": 6, // "blockChain": "", // "links": [ // { // "tx": "https://etherscan.io/tx/", // "address": "https://etherscan.io/address/", // "blockChain": "Ethereum" // }, // { // "tx": "https://tronscan.org/#/transaction/", // "address": "https://tronscan.org/#/address/", // "blockChain": "Tron" // }, // { // "tx": "https://bscscan.com/tx/", // "address": "https://bscscan.com/address/", // "blockChain": "Binance" // } // ] // } // } // currency := GetArg(optionalArgs, 0, nil) _ = currency var currencyObject interface{} = this.SafeValue(transaction, "currency") var currencyId interface{} = this.SafeString(currencyObject, "symbol") var code interface{} = this.SafeCurrencyCode(currencyId, currency) var id interface{} = this.SafeString(transaction, "id") var params interface{} = this.SafeValue(transaction, "params") var txid interface{} = this.SafeString(params, "tx_id") var timestamp interface{} = this.SafeInteger(transaction, "timestamp") var networkId interface{} = this.SafeString(transaction, "blockChain") if IsTrue(IsEqual(networkId, nil)) { var links interface{} = this.SafeValue(currencyObject, "links", []interface{}{}) var blockChain interface{} = this.SafeValue(links, 0, map[string]interface{} {}) networkId = this.SafeString(blockChain, "blockChain") } var addressFrom interface{} = this.SafeString(transaction, "sender") var addressTo interface{} = this.SafeString(transaction, "recipient") var tag interface{} = this.SafeString(transaction, "message") var typeVar interface{} = this.ParseTransactionType(this.SafeString(transaction, "type")) var amount interface{} = this.ParseValueToPricision(transaction, "amount", currencyObject, "decimals") var status interface{} = this.ParseTransactionStatus(this.SafeValue(transaction, "status")) return map[string]interface{} { "info": transaction, "id": id, "txid": txid, "timestamp": timestamp, "datetime": this.Iso8601(timestamp), "network": this.NetworkIdToCode(networkId), "addressFrom": addressFrom, "address": nil, "addressTo": addressTo, "tagFrom": nil, "tag": tag, "tagTo": nil, "type": typeVar, "amount": this.ParseNumber(amount), "currency": code, "status": status, "updated": nil, "fee": nil, "comment": this.SafeString(transaction, "description"), "internal": false, } } func (this *bitteam) ParseTransactionType(typeVar interface{}) interface{} { var types interface{} = map[string]interface{} { "deposit": "deposit", "withdraw": "withdrawal", } return this.SafeString(types, typeVar, typeVar) } func (this *bitteam) ParseTransactionStatus(status interface{}) interface{} { var statuses interface{} = map[string]interface{} { "approving": "pending", "success": "ok", } return this.SafeString(statuses, status, status) } func (this *bitteam) 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 request interface{} = this.Omit(params, this.ExtractParams(path)) var endpoint interface{} = Add("/", this.ImplodeParams(path, params)) var url interface{} = Add(GetValue(GetValue(this.Urls, "api"), api), endpoint) var query interface{} = this.Urlencode(request) if IsTrue(IsEqual(api, "private")) { this.CheckRequiredCredentials() if IsTrue(IsEqual(method, "POST")) { body = this.Json(request) } else if IsTrue(!IsEqual(GetArrayLength(query), 0)) { url = Add(url, Add("?", query)) } var auth interface{} = Add(Add(this.ApiKey, ":"), this.Secret) var auth64 interface{} = this.StringToBase64(auth) var signature interface{} = Add("Basic ", auth64) headers = map[string]interface{} { "Authorization": signature, "Content-Type": "application/json", } } else if IsTrue(!IsEqual(GetArrayLength(query), 0)) { url = Add(url, Add("?", query)) } return map[string]interface{} { "url": url, "method": method, "body": body, "headers": headers, } } func (this *bitteam) 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 } if IsTrue(!IsEqual(code, 200)) { if IsTrue(IsEqual(code, 404)) { if IsTrue(IsTrue((IsGreaterThanOrEqual(GetIndexOf(url, "/ccxt/order/"), 0))) && IsTrue((IsEqual(method, "GET")))) { var parts interface{} = Split(url, "/order/") var orderId interface{} = this.SafeString(parts, 1) panic(OrderNotFound(Add(Add(Add(this.Id, " order "), orderId), " not found"))) } if IsTrue(IsGreaterThanOrEqual(GetIndexOf(url, "/cmc/orderbook/"), 0)) { var parts interface{} = Split(url, "/cmc/orderbook/") var symbolId interface{} = this.SafeString(parts, 1) panic(BadSymbol(Add(Add(Add(this.Id, " symbolId "), symbolId), " not found"))) } } var feedback interface{} = Add(Add(this.Id, " "), body) var message interface{} = this.SafeString(response, "message") var responseCode interface{} = this.SafeString(response, "code") this.ThrowBroadlyMatchedException(GetValue(this.Exceptions, "broad"), message, feedback) this.ThrowExactlyMatchedException(GetValue(this.Exceptions, "exact"), responseCode, feedback) panic(ExchangeError(feedback)) } return nil } func (this *bitteam) Init(userConfig map[string]interface{}) { this.Exchange = Exchange{} this.Exchange.InitParent(userConfig, this.Describe().(map[string]interface{}), this) this.Exchange.DerivedExchange = this }