X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=market.py;h=1601e2dce82ec6d3e2b63624bd355755bd565b8e;hb=ecba11139e357567c46f7ba2a0cf8dbd98266fe8;hp=63eff5a87ea089c6043964a72e7af1257422ebe9;hpb=66c8b3dd07f4e45be2242d06f8f357adefeb2a4c;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git 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", }) +