diff options
Diffstat (limited to 'market.py')
-rw-r--r-- | market.py | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -25,6 +25,19 @@ def poloniex_fetch_balance(self, params={}): | |||
25 | return self.parse_balance(result) | 25 | return self.parse_balance(result) |
26 | ccxt.poloniex.fetch_balance = poloniex_fetch_balance | 26 | ccxt.poloniex.fetch_balance = poloniex_fetch_balance |
27 | 27 | ||
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 | |||
28 | def poloniex_parse_ticker(self, ticker, market=None): | 41 | def poloniex_parse_ticker(self, ticker, market=None): |
29 | timestamp = self.milliseconds() | 42 | timestamp = self.milliseconds() |
30 | symbol = None | 43 | symbol = None |
@@ -51,7 +64,47 @@ def poloniex_parse_ticker(self, ticker, market=None): | |||
51 | 'info': ticker, | 64 | 'info': ticker, |
52 | } | 65 | } |
53 | ccxt.poloniex.parse_ticker = poloniex_parse_ticker | 66 | ccxt.poloniex.parse_ticker = poloniex_parse_ticker |
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 | |||
54 | market = ccxt.poloniex({ | 106 | market = ccxt.poloniex({ |
55 | "apiKey": "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX", | 107 | "apiKey": "XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX", |
56 | "secret": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", | 108 | "secret": "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", |
57 | }) | 109 | }) |
110 | |||