]>
Commit | Line | Data |
---|---|---|
4c51aa71 | 1 | import ccxt |
5ab23e1c | 2 | import decimal |
4c51aa71 | 3 | |
5ab23e1c IB |
4 | def exchange_sum(self, *args): |
5 | return sum([arg for arg in args if isinstance(arg, (float, int, decimal.Decimal))]) | |
6 | ccxt.Exchange.sum = exchange_sum | |
7 | def poloniex_fetch_balance(self, params={}): | |
8 | self.load_markets() | |
9 | balances = self.privatePostReturnCompleteBalances(self.extend({ | |
10 | 'account': 'all', | |
11 | }, params)) | |
12 | result = {'info': balances} | |
13 | currencies = list(balances.keys()) | |
14 | for c in range(0, len(currencies)): | |
15 | id = currencies[c] | |
16 | balance = balances[id] | |
17 | currency = self.common_currency_code(id) | |
18 | account = { | |
19 | 'free': decimal.Decimal(balance['available']), | |
20 | 'used': decimal.Decimal(balance['onOrders']), | |
21 | 'total': decimal.Decimal(0.0), | |
22 | } | |
23 | account['total'] = self.sum(account['free'], account['used']) | |
24 | result[currency] = account | |
25 | return self.parse_balance(result) | |
26 | ccxt.poloniex.fetch_balance = poloniex_fetch_balance | |
27 | ||
ecba1113 IB |
28 | def poloniex_fetch_balance_per_type(self): |
29 | balances = self.privatePostReturnAvailableAccountBalances() | |
30 | result = {'info': balances} | |
31 | for key, balance in balances.items(): | |
32 | result[key] = {} | |
33 | for currency, amount in balance.items(): | |
34 | if currency not in result: | |
35 | result[currency] = {} | |
36 | result[currency][key] = decimal.Decimal(amount) | |
37 | result[key][currency] = decimal.Decimal(amount) | |
38 | return result | |
39 | ccxt.poloniex.fetch_balance_per_type = poloniex_fetch_balance_per_type | |
40 | ||
5ab23e1c IB |
41 | def poloniex_parse_ticker(self, ticker, market=None): |
42 | timestamp = self.milliseconds() | |
43 | symbol = None | |
44 | if market: | |
45 | symbol = market['symbol'] | |
46 | return { | |
47 | 'symbol': symbol, | |
48 | 'timestamp': timestamp, | |
49 | 'datetime': self.iso8601(timestamp), | |
50 | 'high': decimal.Decimal(ticker['high24hr']), | |
51 | 'low': decimal.Decimal(ticker['low24hr']), | |
52 | 'bid': decimal.Decimal(ticker['highestBid']), | |
53 | 'ask': decimal.Decimal(ticker['lowestAsk']), | |
54 | 'vwap': None, | |
55 | 'open': None, | |
56 | 'close': None, | |
57 | 'first': None, | |
58 | 'last': decimal.Decimal(ticker['last']), | |
59 | 'change': decimal.Decimal(ticker['percentChange']), | |
60 | 'percentage': None, | |
61 | 'average': None, | |
62 | 'baseVolume': decimal.Decimal(ticker['quoteVolume']), | |
63 | 'quoteVolume': decimal.Decimal(ticker['baseVolume']), | |
64 | 'info': ticker, | |
65 | } | |
66 | ccxt.poloniex.parse_ticker = poloniex_parse_ticker | |
ecba1113 IB |
67 | |
68 | def poloniex_create_margin_order(self, symbol, type, side, amount, price=None, lending_rate=None, params={}): | |
69 | if type == 'market': | |
70 | raise ccxt.ExchangeError(self.id + ' allows limit orders only') | |
71 | self.load_markets() | |
72 | method = 'privatePostMargin' + self.capitalize(side) | |
73 | market = self.market(symbol) | |
74 | price = float(price) | |
75 | amount = float(amount) | |
76 | if lending_rate is not None: | |
77 | params = self.extend({"lendingRate": lending_rate}, params) | |
78 | response = getattr(self, method)(self.extend({ | |
79 | 'currencyPair': market['id'], | |
80 | 'rate': self.price_to_precision(symbol, price), | |
81 | 'amount': self.amount_to_precision(symbol, amount), | |
82 | }, params)) | |
83 | timestamp = self.milliseconds() | |
84 | order = self.parse_order(self.extend({ | |
85 | 'timestamp': timestamp, | |
86 | 'status': 'open', | |
87 | 'type': type, | |
88 | 'side': side, | |
89 | 'price': price, | |
90 | 'amount': amount, | |
91 | }, response), market) | |
92 | id = order['id'] | |
93 | self.orders[id] = order | |
94 | return self.extend({'info': response}, order) | |
95 | ||
96 | def poloniex_create_order(self, symbol, type, side, amount, price=None, account="exchange", lending_rate=None, params={}): | |
97 | if account == "exchange": | |
98 | return self.create_exchange_order(symbol, type, side, amount, price=price, params=params) | |
99 | elif account == "margin": | |
100 | return self.create_margin_order(symbol, type, side, amount, price=price, lending_rate=lending_rate, params=params) | |
101 | else: | |
102 | raise NotImplementedError | |
103 | ccxt.poloniex.create_exchange_order = ccxt.poloniex.create_order | |
104 | ccxt.poloniex.create_order = poloniex_create_order | |
105 | ||
4c51aa71 IB |
106 | market = ccxt.poloniex({ |
107 | "apiKey": "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX", | |
108 | "secret": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", | |
109 | }) | |
ecba1113 | 110 |