From ecba11139e357567c46f7ba2a0cf8dbd98266fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 26 Jan 2018 00:10:03 +0100 Subject: Add first steps for margin trading --- market.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'market.py') diff --git a/market.py b/market.py index 63eff5a..1601e2d 100644 --- a/market.py +++ b/market.py @@ -25,6 +25,19 @@ def poloniex_fetch_balance(self, params={}): return self.parse_balance(result) ccxt.poloniex.fetch_balance = poloniex_fetch_balance +def poloniex_fetch_balance_per_type(self): + balances = self.privatePostReturnAvailableAccountBalances() + result = {'info': balances} + for key, balance in balances.items(): + result[key] = {} + for currency, amount in balance.items(): + if currency not in result: + result[currency] = {} + result[currency][key] = decimal.Decimal(amount) + result[key][currency] = decimal.Decimal(amount) + return result +ccxt.poloniex.fetch_balance_per_type = poloniex_fetch_balance_per_type + def poloniex_parse_ticker(self, ticker, market=None): timestamp = self.milliseconds() symbol = None @@ -51,7 +64,47 @@ def poloniex_parse_ticker(self, ticker, market=None): 'info': ticker, } ccxt.poloniex.parse_ticker = poloniex_parse_ticker + +def poloniex_create_margin_order(self, symbol, type, side, amount, price=None, lending_rate=None, params={}): + if type == 'market': + raise ccxt.ExchangeError(self.id + ' allows limit orders only') + self.load_markets() + method = 'privatePostMargin' + self.capitalize(side) + market = self.market(symbol) + price = float(price) + amount = float(amount) + if lending_rate is not None: + params = self.extend({"lendingRate": lending_rate}, params) + 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 poloniex_create_order(self, symbol, type, side, amount, price=None, account="exchange", lending_rate=None, params={}): + if account == "exchange": + return self.create_exchange_order(symbol, type, side, amount, price=price, params=params) + elif account == "margin": + return self.create_margin_order(symbol, type, side, amount, price=price, lending_rate=lending_rate, params=params) + else: + raise NotImplementedError +ccxt.poloniex.create_exchange_order = ccxt.poloniex.create_order +ccxt.poloniex.create_order = poloniex_create_order + market = ccxt.poloniex({ "apiKey": "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX", "secret": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", }) + -- cgit v1.2.3