+ def nonce(self):
+ """
+ Wrapped to allow nonce with other libraries
+ """
+ return self.nanoseconds()
+
+ def fetch_balance(self, params={}):
+ """
+ Wrapped to get decimals
+ """
+ self.load_markets()
+ balances = self.privatePostReturnCompleteBalances(self.extend({
+ 'account': 'all',
+ }, params))
+ result = {'info': balances}
+ currencies = list(balances.keys())
+ for c in range(0, len(currencies)):
+ id = currencies[c]
+ balance = balances[id]
+ currency = self.common_currency_code(id)
+ account = {
+ 'free': decimal.Decimal(balance['available']),
+ 'used': decimal.Decimal(balance['onOrders']),
+ 'total': decimal.Decimal(0.0),
+ }
+ account['total'] = self.sum(account['free'], account['used'])
+ result[currency] = account
+ return self.parse_balance(result)
+
+ def parse_ticker(self, ticker, market=None):
+ """
+ Wrapped to get decimals
+ """
+ timestamp = self.milliseconds()
+ symbol = None
+ if market:
+ symbol = market['symbol']
+ return {
+ 'symbol': symbol,
+ 'timestamp': timestamp,
+ 'datetime': self.iso8601(timestamp),
+ 'high': decimal.Decimal(ticker['high24hr']),
+ 'low': decimal.Decimal(ticker['low24hr']),
+ 'bid': decimal.Decimal(ticker['highestBid']),
+ 'ask': decimal.Decimal(ticker['lowestAsk']),
+ 'vwap': None,
+ 'open': None,
+ 'close': None,
+ 'first': None,
+ 'last': decimal.Decimal(ticker['last']),
+ 'change': decimal.Decimal(ticker['percentChange']),
+ 'percentage': None,
+ 'average': None,
+ 'baseVolume': decimal.Decimal(ticker['quoteVolume']),
+ 'quoteVolume': decimal.Decimal(ticker['baseVolume']),
+ 'info': ticker,
+ }
+
+ def create_order(self, symbol, type, side, amount, price=None, account="exchange", lending_rate=None, params={}):
+ """
+ Wrapped to handle margin and exchange accounts, and get decimals
+ """
+ if type == 'market':
+ raise ExchangeError(self.id + ' allows limit orders only')
+ self.load_markets()
+ if account == "exchange":
+ method = 'privatePost' + self.capitalize(side)
+ elif account == "margin":
+ method = 'privatePostMargin' + self.capitalize(side)
+ if lending_rate is not None:
+ params = self.extend({"lendingRate": lending_rate}, params)
+ else:
+ raise NotImplementedError
+ market = self.market(symbol)
+ response = getattr(self, method)(self.extend({
+ 'currencyPair': market['id'],
+ 'rate': self.price_to_precision(symbol, price),
+ 'amount': self.amount_to_precision(symbol, amount),
+ }, params))
+ timestamp = self.milliseconds()
+ order = self.parse_order(self.extend({
+ 'timestamp': timestamp,
+ 'status': 'open',
+ 'type': type,
+ 'side': side,
+ 'price': price,
+ 'amount': amount,
+ }, response), market)
+ id = order['id']
+ self.orders[id] = order
+ return self.extend({'info': response}, order)
+
+ def price_to_precision(self, symbol, price):
+ """
+ Wrapped to avoid float
+ """
+ return ('{:.' + str(self.markets[symbol]['precision']['price']) + 'f}').format(price).rstrip("0").rstrip(".")
+
+ def amount_to_precision(self, symbol, amount):
+ """
+ Wrapped to avoid float
+ """
+ return ('{:.' + str(self.markets[symbol]['precision']['amount']) + 'f}').format(amount).rstrip("0").rstrip(".")
+
+ def common_currency_code(self, currency):
+ """
+ Wrapped to avoid the currency translation
+ """
+ return currency
+
+ def currency_id(self, currency):
+ """
+ Wrapped to avoid the currency translation
+ """
+ return currency