def getTradeHistory(pair, connection = None, count = None): '''Retrieve the trade history for the given pair. Returns a list of Trade instances. If count is not None, it should be an integer, and specifies the number of items from the trade history that will be processed and returned.''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() history = connection.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] # Limit the number of items returned if requested. if count is not None: history = history[:count] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def tradeHistory(self, from_number=None, count_number=None, from_id=None, end_id=None, order=None, since=None, end=None, pair=None, connection=None): params = {"method": "TradeHistory"} setHistoryParams(params, from_number, count_number, from_id, end_id, order, since, end) if pair is not None: common.validatePair(pair) params["pair"] = pair orders = self._post(params, connection) result = [] for k, v in orders.items(): result.append(TradeHistoryItem(k, v)) return result
def getTradeHistory(pair, connection=None, start_tid=None, count=None, error_handler=None): """ Retrieve the trade history for the given pair. Returns a list of Trade instances. If count is not None, it should be an integer, and specifies the number of items from the trade history that will be processed and returned. """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() if start_tid is None: result = connection.makeJSONRequest("/api/1/trade/%s" % pair, method="GET") else: result = connection.makeJSONRequest("/api/1/trade/%s/%d" % (pair, start_tid), method="GET") result = common.validateResponse(result, error_handler=error_handler) history = result[u"data"] if type(history) is not list: raise Exception("The response does not contain a history list.") result = [] # Limit the number of items returned if requested. if count is not None: history = history[:count] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def orderList(self, from_number=None, count_number=None, from_id=None, end_id=None, order=None, since=None, end=None, pair=None, active=None, connection=None): params = {"method": "OrderList"} setHistoryParams(params, from_number, count_number, from_id, end_id, order, since, end) if pair is not None: common.validatePair(pair) params["pair"] = pair if active is not None: if active not in (0, 1, True, False): raise Exception("Unexpected active parameter: %r" % active) params["active"] = int(active) orders = self._post(params, connection) result = [] for k, v in orders.items(): result.append(OrderItem(k, v)) return result
def getTradeHistory(pair, connection=None, count=None): '''Retrieve the trade history for the given pair. Returns a list of Trade instances. If count is not None, it should be an integer, and specifies the number of items from the trade history that will be processed and returned.''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() history = connection.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] # Limit the number of items returned if requested. if count is not None: history = history[:count] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def trade(self, pair, trade_type, rate, amount): common.validatePair(pair) if trade_type not in ("buy", "sell"): raise Exception("Unrecognized trade type: %r" % trade_type) params = {"method":"Trade", "pair":pair, "type":trade_type, "rate":common.formatCurrency(rate, pair), "amount":common.formatCurrency(amount, pair)} return TradeResult(self._post(params))
def trade(self, pair, trade_type, rate, amount, connection=None): common.validatePair(pair) if trade_type not in ("buy", "sell"): raise Exception("Unrecognized trade type: %r" % trade_type) params = { "method": "Trade", "pair": pair, "type": trade_type, "rate": common.formatCurrency(rate, pair), "amount": common.formatCurrency(amount, pair) } return TradeResult(self._post(params, connection))
def trade(self, pair, trade_type, rate, amount): common.validatePair(pair) if trade_type not in ("buy", "sell"): raise Exception("Unrecognized trade type: %r" % trade_type) maxdigits = common.max_digits.get(pair) params = {"method":"Trade", "pair":pair, "type":trade_type, "rate":common.formatCurrency(rate, maxdigits), "amount":common.formatCurrency(amount, maxdigits)} return TradeResult(self._post(params))
def getTicker(pair, connection=None): '''Retrieve the ticker for the given pair. Returns a Ticker instance.''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() response = connection.makeJSONRequest("/api/2/%s/ticker" % pair) if type(response) is not dict: raise Exception("The response is a %r, not a dict." % type(response)) return Ticker(**response[u'ticker'])
def activeOrders(self, pair=None, connection=None): params = {"method": "ActiveOrders"} if pair is not None: common.validatePair(pair) params["pair"] = pair orders = self._post(params, connection) result = [] for k, v in orders.items(): result.append(OrderItem(k, v)) return result
def getHistory(pair, connection=None, error_handler=None): """ Retrieve the last 80 trade history for the given pair (oon BTER) """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() depth = common.validateResponse(connection.makeJSONRequest('/api/1/trade/%s' % pair, method='GET'), error_handler=error_handler) if error_handler is not None: print "ERROR: " + error_handler
def getTradeHistory(pair): """Retrieve the trade history for the given pair. Returns a list of Trade instances.""" common.validatePair(pair) history = common.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def getTradeHistory(pair): '''Retrieve the trade history for the given pair. Returns a list of Trade instances.''' common.validatePair(pair) history = common.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] for h in history: t = Trade(**h) t.pair = pair result.append(t) return result
def getDepth(pair): '''Retrieve the depth for the given pair. Returns a tuple (asks, bids); each of these is a list of (price, volume) tuples.''' common.validatePair(pair) depth = common.makeJSONRequest("/api/2/%s/depth" % pair) if type(depth) is not dict: raise Exception("The response is not a dict.") asks = depth.get(u'asks') if type(asks) is not list: raise Exception("The response does not contain an asks list.") bids = depth.get(u'bids') if type(bids) is not list: raise Exception("The response does not contain a bids list.") return asks, bids
def getDepth(pair): """Retrieve the depth for the given pair. Returns a tuple (asks, bids); each of these is a list of (price, volume) tuples.""" common.validatePair(pair) depth = common.makeJSONRequest("/api/2/%s/depth" % pair) if type(depth) is not dict: raise Exception("The response is not a dict.") asks = depth.get(u"asks") if type(asks) is not list: raise Exception("The response does not contain an asks list.") bids = depth.get(u"bids") if type(bids) is not list: raise Exception("The response does not contain a bids list.") return asks, bids
def tradeHistory(self, from_number = None, count_number = None, from_id = None, end_id = None, order = None, since = None, end = None, pair = None): params = {"method":"TradeHistory"} setHistoryParams(params, from_number, count_number, from_id, end_id, order, since, end) if pair is not None: common.validatePair(pair) params["pair"] = pair orders = self._post(params) result = [] for k, v in orders.items(): result.append(TradeHistoryItem(k, v)) return result
def getTradeFee(pair, connection=None): ''' Retrieve the fee (in percent) associated with trades for a given pair. ''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() fees = connection.makeJSONRequest("/api/2/%s/fee" % pair) if type(fees) is not dict: raise Exception("The response is not a dict.") trade_fee = fees.get(u'trade') if type(trade_fee) is not decimal.Decimal: raise Exception("The response does not contain a trade fee") return trade_fee
def getTradeHistory(pair): '''Retrieve the trade history for the given pair. Returns a list of Trade instances.''' common.validatePair(pair) history = common.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] for h in history: t = Trade() for s in Trade.__slots__: u = unicode(s) setattr(t, u, h.get(u)) t.date = datetime.datetime.fromtimestamp(t.date) result.append(t) return result
def getTradeHistory(pair, connection = None): '''Retrieve the trade history for the given pair. Returns a list of Trade instances.''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() history = connection.makeJSONRequest("/api/2/%s/trades" % pair) if type(history) is not list: raise Exception("The response is a %r, not a list." % type(history)) result = [] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def getTicker(pair, connection=None, error_handler=None): """ Retrieve the ticker """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() depth = common.validateResponse(connection.makeJSONRequest('/api/1/ticker/%s' % pair, method='GET'), error_handler=error_handler) buy = depth.get(u'buy') # asks = depth.get(u'asks') # if type(asks) is not list: # raise Exception("The response does not contain an asks list.") # bids = depth.get(u'bids') # if type(bids) is not list: # raise Exception("The response does not contain a bids list.") # if len(asks) > 0: # ask_prices, ask_sizes = zip(*asks) # ask_prices = [decimal.Decimal(p) for p in ask_prices] # ask_sizes = [decimal.Decimal(s) for s in ask_sizes] # asks = zip(ask_prices, ask_sizes) # else: # asks = [] # if len(bids) > 0: # bid_prices, bid_sizes = zip(*bids) # bid_prices = [decimal.Decimal(p) for p in bid_prices] # bid_sizes = [decimal.Decimal(s) for s in bid_sizes] # bids = zip(bid_prices, bid_sizes) # else: # bids = [] return buy
def getTradeHistory(pair, connection=None, start_tid=None, count=None, error_handler=None): """ Retrieve the trade history for the given pair. Returns a list of Trade instances. If count is not None, it should be an integer, and specifies the number of items from the trade history that will be processed and returned. """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() if start_tid is None: result = connection.makeJSONRequest('/api/1/trade/%s' % pair, method='GET') else: result = connection.makeJSONRequest('/api/1/trade/%s/%d' % (pair, start_tid), method='GET') result = common.validateResponse(result, error_handler=error_handler) history = result[u'data'] if type(history) is not list: raise Exception('The response does not contain a history list.') result = [] # Limit the number of items returned if requested. if count is not None: history = history[:count] for h in history: h["pair"] = pair t = Trade(**h) result.append(t) return result
def getDepth(pair, connection = None): '''Retrieve the depth for the given pair. Returns a tuple (asks, bids); each of these is a list of (price, volume) tuples.''' common.validatePair(pair) if connection is None: connection = common.BTCEConnection() depth = connection.makeJSONRequest("/api/2/%s/depth" % pair) if type(depth) is not dict: raise Exception("The response is not a dict.") asks = depth.get(u'asks') if type(asks) is not list: raise Exception("The response does not contain an asks list.") bids = depth.get(u'bids') if type(bids) is not list: raise Exception("The response does not contain a bids list.") return asks, bids
def getDepth(pair, connection=None, error_handler=None): """ Retrieve the depth for the given pair. Returns a tuple (asks, bids); each of these is a list of (price, volume) tuples. """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() depth = common.validateResponse(connection.makeJSONRequest( '/api/1/depth/%s' % pair, method='GET'), error_handler=error_handler) asks = depth.get(u'asks') if type(asks) is not list: raise Exception("The response does not contain an asks list.") bids = depth.get(u'bids') if type(bids) is not list: raise Exception("The response does not contain a bids list.") if len(asks) > 0: ask_prices, ask_sizes = zip(*asks) ask_prices = [decimal.Decimal(p) for p in ask_prices] ask_sizes = [decimal.Decimal(s) for s in ask_sizes] asks = zip(ask_prices, ask_sizes) else: asks = [] if len(bids) > 0: bid_prices, bid_sizes = zip(*bids) bid_prices = [decimal.Decimal(p) for p in bid_prices] bid_sizes = [decimal.Decimal(s) for s in bid_sizes] bids = zip(bid_prices, bid_sizes) else: bids = [] return asks, bids
def getDepth(pair, connection=None, error_handler=None): """ Retrieve the depth for the given pair. Returns a tuple (asks, bids); each of these is a list of (price, volume) tuples. """ common.validatePair(pair) if connection is None: connection = common.BTERConnection() depth = common.validateResponse( connection.makeJSONRequest("/api/1/depth/%s" % pair, method="GET"), error_handler=error_handler ) asks = depth.get(u"asks") if type(asks) is not list: raise Exception("The response does not contain an asks list.") bids = depth.get(u"bids") if type(bids) is not list: raise Exception("The response does not contain a bids list.") if len(asks) > 0: ask_prices, ask_sizes = zip(*asks) ask_prices = [decimal.Decimal(p) for p in ask_prices] ask_sizes = [decimal.Decimal(s) for s in ask_sizes] asks = zip(ask_prices, ask_sizes) else: asks = [] if len(bids) > 0: bid_prices, bid_sizes = zip(*bids) bid_prices = [decimal.Decimal(p) for p in bid_prices] bid_sizes = [decimal.Decimal(s) for s in bid_sizes] bids = zip(bid_prices, bid_sizes) else: bids = [] return asks, bids
def orderList(self, from_number = None, count_number = None, from_id = None, end_id = None, order = None, since = None, end = None, pair = None, active = None): params = {"method":"OrderList"} setHistoryParams(params, from_number, count_number, from_id, end_id, order, since, end) if pair is not None: common.validatePair(pair) params["pair"] = pair if active is not None: if active not in (0, 1, True, False): raise Exception("Unexpected active parameter: %r" % active) params["active"] = int(active) orders = self._post(params) result = [] for k, v in orders.items(): result.append(OrderItem(k, v)) return result
def placeOrder(self, pair, trade_type, rate, amount, connection=None, update_delay=None, error_handler=None): common.validatePair(pair) if trade_type.lower() not in ("buy", "sell"): if trade_type.lower() == 'bid': trade_type = 'buy' elif trade_type.lower() == 'ask': trade_type = 'sell' else: raise Exception("Unrecognized trade type: %r" % trade_type) params = {"pair": pair, "type": trade_type.upper(), "rate": common.formatCurrency(rate, pair, 'price'), "amount": common.formatCurrency(amount, pair, 'amount')} order = OrderItem(self._post('placeorder', params=params, connection=connection, error_handler=error_handler).get(u'order_id'), initial_params=params, date=now()) if update_delay is not None: time.sleep(update_delay) order = self.getOrderStatus(order.order_id, connection=None) return order
def placeOrder(self, pair, trade_type, rate, amount, connection=None, update_delay=None, error_handler=None): common.validatePair(pair) if trade_type.lower() not in ("buy", "sell"): if trade_type.lower() == 'bid': trade_type = 'buy' elif trade_type.lower() == 'ask': trade_type = 'sell' else: raise Exception("Unrecognized trade type: %r" % trade_type) params = { "pair": pair, "type": trade_type.upper(), "rate": common.formatCurrency(rate, pair, 'price'), "amount": common.formatCurrency(amount, pair, 'amount') } order = OrderItem(self._post( 'placeorder', params=params, connection=connection, error_handler=error_handler).get(u'order_id'), initial_params=params, date=now()) if update_delay is not None: time.sleep(update_delay) order = self.getOrderStatus(order.order_id, connection=None) return order
def getTickerInfo(pair): common.validatePair(pair) connection = common.BTCEConnection() ticker = connection.makeJSONRequest("/api/2/%s/ticker" % pair) return ticker["ticker"]
def __init__(self, pairs=common.all_pairs): for pair in pairs: common.validatePair(pair) self._pairs = pairs self._all = self._pairs == common.all_pairs