def get_candle_data(curr_target, date_start, date_end, period): polo = Poloniex.get_instance() ##print "Adding ", curr_target, " candle data between: ", timestamp_to_date(date_start), " ---- ", timestamp_to_date(date_end) ##configuration curr_ref = "USDT" ##curr_target = "BTC" ##start = 1451606400 ## Jan 01 2016 ##end = 1459468800## Apr 1 2016 ##start = 1459468800## Apr 1 2016 ##end = 1467331200 ## july 01 2016 ##start = 1467331200 ## july 01 2016 ##end = 1475280000## oct 01 2016 ##start = 1475280000 ## aug 8 2016 ##end = 9999999999 ## present ##period = 14400 ## in seconds ##table_name = CandleTable.calc_table_name(curr_ref, curr_target, start, end, period) table_name = "CANDLE_" + curr_ref + "_" + curr_target + "_" + str( period) if not DBManager.exists_table(table_name): ct = CandleTable(curr_ref, curr_target, date_start, date_end, period, table_name) ct.save() print("Populating table: " + table_name + " ...") curr_pair = curr_ref + "_" + curr_target data = polo.api_query( "returnChartData", { 'currencyPair': curr_pair, 'start': date_start, 'end': date_end, 'period': period }) cp = CandleParser(table_name, data)
def get_bottom_ask(self, curr_pair, prev_order=None): asks_result = Poloniex.get_instance().returnOrderBook( curr_pair)["asks"] if asks_result is None: print("API query error unable to get bottom ask") return self.get_bottom_ask(curr_pair, prev_order) else: if prev_order == None: return float(asks_result[0][0]) - OrderMaker.TINY_AMT else: if float( asks_result[0][0] ) == prev_order.rate: ##if prevorder is already bottom ask return float(asks_result[1][0]) - OrderMaker.TINY_AMT else: bits_below_my_order = 0 i = 0 while (float(asks_result[i][0]) < prev_order.rate) and ( bits_below_my_order < prev_order.amount * 0.25): ##print asks[i][0], "at", asks[i][1] bits_below_my_order += float(asks_result[i][1]) i += 1 ##if there is a substantial amount of bits priced under my prev_order, return bottom ask ##else return prev order rate if bits_below_my_order > prev_order.amount * 0.25: return float(asks_result[0][0]) - OrderMaker.TINY_AMT else: return prev_order.rate
def get_top_bid(self, curr_pair, prev_order=None): bids_result = Poloniex.get_instance().returnOrderBook( curr_pair)["bids"] if bids_result is None: print("API query error unable to get top bid") return self.get_top_bid(curr_pair, prev_order) else: if prev_order == None: return float(bids_result[0][0]) + OrderMaker.TINY_AMT else: if float( bids_result[0] [0]) == prev_order.rate: ##if prevorder is already top bid return float(bids_result[1][0]) + OrderMaker.TINY_AMT else: bits_above_my_order = 0 i = 0 while (float(bids_result[i][0]) > prev_order.rate) and ( bits_above_my_order < prev_order.amount * 0.25): bits_above_my_order += float(bids_result[i][1]) i += 1 ##if there is a substantial amount of bits priced over my prev_order, return top bid ##else return prev order rate if bits_above_my_order > prev_order.amount * 0.25: return float(bids_result[0][0]) + OrderMaker.TINY_AMT else: return prev_order.rate
def get_spread(curr_pair): orders_result = Poloniex.get_instance().returnOrderBook(curr_pair) if orders_result is None: print("API query error unable to get spread") return self.get_spread(curr_pair) else: bids = orders_result["bids"] asks = orders_result["asks"] return (float(bids[0][0]), float(asks[0][0]))
def get_last_trade_rate(curr_pair, date): trades_result = Poloniex.get_instance().returnMarketTradeHistory( curr_pair) if trades_result is None: print("API query error unable to get trades") return self.get_last_trade_rate(curr_pair, date) else: for i in range(len(trades_result)): ##print(t) if createTimeStamp(trades_result[i]['date']) < date: rate = float(trades_result[i]['rate']) return rate
def get_instant_rate_ask(self, curr_pair, money): bids_result = Poloniex.get_instance().returnOrderBook( curr_pair)["bids"] if bids_result is None: print("API query error unable to get instant ask") return self.get_instant_rate_ask(curr_pair, money) else: i = 0 for a in bids_result: rate = float(a[0]) amount = float(a[1]) money_to_get = rate * amount money -= money_to_get if money < 0: return rate
def get_instant_rate_bid(self, curr_pair, money): asks_result = Poloniex.get_instance().returnOrderBook( curr_pair)["asks"] if asks_result is None: print("API query error unable to get instant bid") return self.get_instant_rate_bid(curr_pair, money) else: i = 0 for a in asks_result: rate = float(a[0]) amount = float(a[1]) money_to_spend = rate * amount money -= money_to_spend if money < 0: return rate
def polo_update(self): polo = Poloniex.get_instance() polo_data = polo.api_query("returnOpenOrders", {'currencyPair': self.curr_pair}) if polo_data is None: print("API error unable to polo_update order") else: found = False for d in polo_data: if d['orderNumber'] == self.id: found = True self.amount = float(d['amount']) self.update() if not found: self.drop() self.table_name = Order.ORDER_FILLED self.date_filled = time() self.save()
def __init__(self): self.sym_infos = {} self.polo = Poloniex.get_instance() for s in self.SYMS: si = SymInfo(s) self.sym_infos[s] = si
def __init__(self, order_updater, scheduler): self.polo = Poloniex.get_instance() self.order_updater = order_updater self.scheduler = scheduler