def enable_dhcp_helper(self, network_id, network_rs=None): """Enable DHCP for a network that meets enabling criteria.""" if network_rs: network = dhcp.NetModel(self.conf.use_namespaces, network_rs) else: LOG.err("payload resource no network_rs") if network: self.configure_dhcp_for_network(network)
def public_request(self, method, api_url, **payload): """request public url""" r_url = cfg.get_cfg('base_url') + api_url try: r = requests.request(method, r_url, params=payload, timeout=20) r.raise_for_status() except requests.exceptions.HTTPError as err: log.err(err) log.err(r.text) if r.status_code == 200: return r.json()
def trade(self, pair, trade_type, price, amount, match_price): ##match_price mean limit(0) or market(1) try: if cfg.get_cfg_plat() == 'coinex': pass elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': return okb.trade(pair, trade_type, price, amount, match_price) else: pass except: log.err("Exception on sell!")
def sell_market(self, pair, price, amount): try: if cfg.get_cfg_plat() == 'coinex': return cet.sell_market(pair, amount, price) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on sell!")
def buy_limit(self, pair, price, amount): try: if cfg.get_cfg_plat() == 'coinex': return cet.buy_limit(pair, amount, price) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on buy!")
def get_future_position(self, pair): pos = defaultdict(lambda: None) try: if cfg.get_cfg_plat() == 'coinex': pass elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pos = okb.future_position(pair) else: pass except: log.err("Exception on get_future_position!") return pos
def get_user_info(self): info = defaultdict(lambda: None) try: if cfg.get_cfg_plat() == 'coinex': pass elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': info = okb.user_info() else: pass except: log.err("Exception on get_user_info!") return info
def list_orders(self, pair, *params): data = [] try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_unfinished_order_list(pair) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex' and len(params) == 2: data = okb.order_info(pair, *params) else: pass except: log.err("Exception on list_orders!") return data
def append(self, pos, withinfo = False): dt = self.dte.dateonly pv = pos.first_at_or_before(dt) try: sz = int(pv.size) self.size += sz self.traded += float(pv.book_cost_base) except: #TODO Log this error sz = '#NA' log.err("Position %s has not history at %s" % (pos,dt)) if withinfo: fund = pos.fund self.positions.append({'fund': fund.code, 'name': fund.description, 'size': sz})
def get_price_all(self): prices = [] data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_data_all() prices = data elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_price_all! data:%s" % data) return prices
def get_price_all(self): prices = [] data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_data_all() prices = data elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_price_all! data:%s"%data) return prices
def cancel_order(self, pair, id): try: if cfg.get_cfg_plat() == 'coinex': status = cet.cancel_order_list(pair, id) #print(status) if status != 'cancel': return False else: return True elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order pair:%s id:%d!" % (pair, id))
def cancel_order_all(self): try: if cfg.get_cfg_plat() == 'coinex': for i in self.get_all_pair(): status = self.cancel_order_pair(i) if status == False: log.err("Fail cancel order %s!" % i) return False return True elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order_all!")
def cancel_order_all(self): try: if cfg.get_cfg_plat() == 'coinex': for i in self.get_all_pair(): status = self.cancel_order_pair(i) if status == False: log.err("Fail cancel order %s!"%i) return False return True elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order_all!")
def append(self, pos, withinfo=False): dt = self.dte.dateonly pv = pos.first_at_or_before(dt) try: sz = int(pv.size) self.size += sz self.traded += float(pv.book_cost_base) except: #TODO Log this error sz = '#NA' log.err("Position %s has not history at %s" % (pos, dt)) if withinfo: fund = pos.fund self.positions.append({ 'fund': fund.code, 'name': fund.description, 'size': sz })
def cancel_order(self, pair, id): try: if cfg.get_cfg_plat() == 'coinex': status = cet.cancel_order_list(pair, id) #print(status) if status != 'cancel': return False else: return True elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order pair:%s id:%d!"%(pair, id))
def get_balance(self, symbol): balance = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.inquire_account_info()[symbol.upper()] balance['available'] = s2f(data['available']) balance['frozen'] = s2f(data['frozen']) balance['balance'] = data['available'] + data['frozen'] elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_balance! data:%s" % data) return balance
def get_last_price(self, pair): price = 0 data = None try: if cfg.get_cfg_plat() == 'coinex': data = s2f(cet.acquire_market_data(pair)) price = data['last'] elif cfg.get_cfg_plat() == 'fcoin': #data = ft.get_market_ticker(pair) pass elif cfg.get_cfg_plat() == 'okex': data = okb.ticker(pair) price = data['last'] else: pass except: log.err("Exception on get_last_price! data:%s" % data) return price
def get_last_price(self,pair): price = 0 data = None try: if cfg.get_cfg_plat() == 'coinex': data = s2f(cet.acquire_market_data(pair)) price = data['last'] elif cfg.get_cfg_plat() == 'fcoin': #data = ft.get_market_ticker(pair) pass elif cfg.get_cfg_plat() == 'okex': data = okb.ticker(pair) price = data['last'] else: pass except: log.err("Exception on get_last_price! data:%s"%data) return price
def get_depth(self, pair): depth = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_depth(pair) depth['buy'] = s2f(data.pop('bids')) depth['sell'] = s2f(data.pop('asks')) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': data = okb.depth(pair) depth['buy'] = data.pop('bids') depth['sell'] = data.pop('asks') else: pass except: log.err("Exception on %s get_depth! data:%s"%(pair,data)) return depth
def get_depth(self, pair): depth = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_depth(pair) depth['buy'] = s2f(data.pop('bids')) depth['sell'] = s2f(data.pop('asks')) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': data = okb.depth(pair) depth['buy'] = data.pop('bids') depth['sell'] = data.pop('asks') else: pass except: log.err("Exception on %s get_depth! data:%s" % (pair, data)) return depth
def get_balance(self, symbol): balance = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.inquire_account_info()[symbol.upper()] balance['available'] = s2f(data['available']) balance['frozen'] = s2f(data['frozen']) balance['balance'] = data['available'] + data['frozen'] elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_balance! data:%s"%data) return balance
def get_all_pair(self): pairs = [] data = None try: if cfg.get_cfg_plat() == 'coinex': if False: data = cet.acquire_market_list() pairs = [item.lower() for item in data] else: coin1 = [ 'btc', 'ltc', 'eth', 'etc', 'bch', 'btg', 'xrp', 'eos' ] coin2 = ['usdt'] for i in coin1: for j in coin2: if i == j: continue else: pairs.append(i + j) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': if cfg.is_future(): coin1 = [ 'btc', 'ltc', 'eth', 'etc', 'bch', 'btg', 'xrp', 'eos' ] coin2 = ['usd'] else: coin1 = ['btc', 'eth', 'etc', 'bch', 'ltc', 'okb'] coin2 = ['usdt', 'btc', 'eth', 'okb'] for i in coin1: for j in coin2: if i == j: continue else: pairs.append(i + "_" + j) else: pass except: log.err("Exception on get_all_pair! data:%s" % data) return pairs
def buy_order(self): pair = cfg.get_pair() percentage = cfg.get_cfg('buy_percentage') price_less = cfg.get_cfg('buy_price_less') buy_type = cfg.get_cfg('buy_type') price_decimal_limit = cfg.get_cfg('price_decimal_limit') amount_decimal_limit = cfg.get_cfg('amount_decimal_limit') amount_limit = cfg.get_cfg('amount_limit') price = digits(fwk.get_last_price(cfg.get_pair())*(1.0-price_less),price_decimal_limit) av = fwk.get_balance(cfg.get_coin2())['available'] amount = digits(av / price * percentage, amount_decimal_limit) if amount < amount_limit: log.err("Fail buy! amount=%f available=%f limit=%f"%(amount, av, amount_limit)) return log.info("creating buy order... pair:%s price:%f amount:%f"%(cfg.get_pair(), price, amount)) try: #fwk.buy(pair, price, amount, buy_type) log.info("success") except: log.err("Fail create buy order!")
def get_kline(self, pair, dtype, limit, since=0): kl = pd.DataFrame() data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_K_line_data(pair, dtype, limit) if len(data) > 0: for i in data: i.pop() ##remove the last market string kl = pd.DataFrame(s2f(data), columns=['t','o', 'c','h', 'l', 'v', 'a']) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': data = okb.kline(pair, dtype, limit, since) kl = pd.DataFrame(data, columns = ['t', 'o', 'h', 'l', 'c', 'v', 'a']) else: pass except: log.err("Exception on get_kline! data:%s"%data) return kl
def cancel_order_pair(self, pair): try: if cfg.get_cfg_plat() == 'coinex': order_list = self.list_orders(pair) #print(order_list) for i in range(len(order_list)): #print(order_list[i]['id']) status = self.cancel_order(pair, order_list[i]['id']) log.info(status) if status == False: log.err("Fail cancel order id:%d status:%s"%(i['id'], status)) return status elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order_pair!")
def signed_request(self, method, api_url, **payload): """request a signed url""" param = '' payload['access_id'] = cfg.get_cfg('id') payload['tonce'] = int(time.time()*1000) if payload: sort_pay = sorted(payload.items()) for k in sort_pay: param += '&' + str(k[0]) + '=' + str(k[1]) param = param.lstrip('&') sig_str = param + '&' + 'secret_key=' + cfg.get_cfg('secret_key') signature = self.get_signed_md5(sig_str) r_url = cfg.get_cfg('base_url') + api_url if method == 'GET' or method == 'DELETE': if param: r_url = r_url + '?' + param log.dbg(r_url) try: headers = cfg.get_cfg_header() headers['authorization'] = signature #log.dbg(headers) except: log.err("Fail load section from config file") return try: r = requests.request(method, r_url, headers = headers, json=payload,timeout=20) r.raise_for_status() except requests.exceptions.HTTPError as err: log.err(err) log.err(r.text) if r.status_code == 200: return r.json()
def cancel_order_pair(self, pair): try: if cfg.get_cfg_plat() == 'coinex': order_list = self.list_orders(pair) #print(order_list) for i in range(len(order_list)): #print(order_list[i]['id']) status = self.cancel_order(pair, order_list[i]['id']) log.info(status) if status == False: log.err("Fail cancel order id:%d status:%s" % (i['id'], status)) return status elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on cancel_order_pair!")
def get_balance_all(self): balance = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.inquire_account_info() for i in data.items(): balance[i[0]]['available'] = s2f(i[1]['available']) balance[i[0]]['frozen'] = s2f(i[1]['frozen']) balance[i[0]]['balance'] = s2f(i[1]['available']) + s2f(i[1]['frozen']) #print(balance) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_balance_all! data:%s"%data) return balance
def sell_order(self): percentage = cfg.get_cfg('sell_percentage') price_more = cfg.get_cfg('sell_price_more') sell_type = cfg.get_cfg('sell_type') price_decimal_limit = cfg.get_cfg('price_decimal_limit') amount_decimal_limit = cfg.get_cfg('amount_decimal_limit') amount_limit = cfg.get_cfg('amount_limit') price = digits(fwk.get_last_price(cfg.get_pair())*(1.0+price_more),price_decimal_limit) av = fwk.get_balance(cfg.get_coin1())['available'] amount = digits(av * percentage, amount_decimal_limit) if amount < amount_limit and av >= amount_limit: amount = amount_limit elif amount > av or av < amount_limit: log.err("Fail sell! amount=%f available=%f limit=%f"%(amount, av, amount_limit)) return log.info("going to create sell order... pair:%s price:%f amount:%f"%(cfg.get_pair(), price, amount)) try: #fwk.sell(pair, price, amount, sell_type) log.info("success") except: log.err("Fail create sell order!")
def get_balance_all(self): balance = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.inquire_account_info() for i in data.items(): balance[i[0]]['available'] = s2f(i[1]['available']) balance[i[0]]['frozen'] = s2f(i[1]['frozen']) balance[i[0]]['balance'] = s2f(i[1]['available']) + s2f( i[1]['frozen']) #print(balance) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': pass else: pass except: log.err("Exception on get_balance_all! data:%s" % data) return balance
def get_kline(self, pair, dtype, limit, since=0): kl = pd.DataFrame() data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_K_line_data(pair, dtype, limit) if len(data) > 0: for i in data: i.pop() ##remove the last market string kl = pd.DataFrame(s2f(data), columns=['t', 'o', 'c', 'h', 'l', 'v', 'a']) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': data = okb.kline(pair, dtype, limit, since) kl = pd.DataFrame(data, columns=['t', 'o', 'h', 'l', 'c', 'v', 'a']) else: pass except: log.err("Exception on get_kline! data:%s" % data) return kl
def get_all_pair(self): pairs = [] data = None try: if cfg.get_cfg_plat() == 'coinex': if False: data = cet.acquire_market_list() pairs = [item.lower() for item in data] else: coin1 = ['btc','ltc','eth','etc','bch','btg','xrp','eos'] coin2 = ['usdt'] for i in coin1: for j in coin2: if i == j: continue else: pairs.append(i+j) elif cfg.get_cfg_plat() == 'fcoin': pass elif cfg.get_cfg_plat() == 'okex': if cfg.is_future(): coin1 = ['btc','ltc','eth','etc','bch','btg','xrp','eos'] coin2 = ['usd'] else: coin1 = ['btc','eth','etc','bch','ltc','okb'] coin2 = ['usdt', 'btc', 'eth','okb'] for i in coin1: for j in coin2: if i == j: continue else: pairs.append(i+"_"+j) else: pass except: log.err("Exception on get_all_pair! data:%s"%data) return pairs
def get_price(self, pair): price = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_data(pair) #price['buy'] = s2f(data['buy']) #buy 1 #price['high'] = s2f(data['high']) #24H highest price #price['last'] = s2f(data['last']) #latest price #price['low'] = s2f(data['low']) #24H lowest price #price['sell'] = s2f(data['sell']) #sell 1 #price['vol'] = s2f(data['vol']) #24H volume price = s2f(data) elif cfg.get_cfg_plat() == 'fcoin': #data = ft.get_market_ticker(pair) pass elif cfg.get_cfg_plat() == 'okex': data = okb.ticker(pair) price = data else: pass except: log.err("Exception on get_price! data:%s" % data) return price
def get_price(self, pair): price = defaultdict(lambda: None) data = None try: if cfg.get_cfg_plat() == 'coinex': data = cet.acquire_market_data(pair) #price['buy'] = s2f(data['buy']) #buy 1 #price['high'] = s2f(data['high']) #24H highest price #price['last'] = s2f(data['last']) #latest price #price['low'] = s2f(data['low']) #24H lowest price #price['sell'] = s2f(data['sell']) #sell 1 #price['vol'] = s2f(data['vol']) #24H volume price = s2f(data) elif cfg.get_cfg_plat() == 'fcoin': #data = ft.get_market_ticker(pair) pass elif cfg.get_cfg_plat() == 'okex': data = okb.ticker(pair) price = data else: pass except: log.err("Exception on get_price! data:%s"%data) return price
def signed_request(self, method, api_url, **payload): """request a signed url""" param = '' payload['access_id'] = cfg.get_cfg('id') payload['tonce'] = int(time.time() * 1000) if payload: sort_pay = sorted(payload.items()) for k in sort_pay: param += '&' + str(k[0]) + '=' + str(k[1]) param = param.lstrip('&') sig_str = param + '&' + 'secret_key=' + cfg.get_cfg('secret_key') signature = self.get_signed_md5(sig_str) r_url = cfg.get_cfg('base_url') + api_url if method == 'GET' or method == 'DELETE': if param: r_url = r_url + '?' + param log.dbg(r_url) try: headers = cfg.get_cfg_header() headers['authorization'] = signature #log.dbg(headers) except: log.err("Fail load section from config file") return try: r = requests.request(method, r_url, headers=headers, json=payload, timeout=20) r.raise_for_status() except requests.exceptions.HTTPError as err: log.err(err) log.err(r.text) if r.status_code == 200: return r.json()
def sell_market(self, pair, price, amount): try: fwk.sell_market(pair, price, amount) #comment this for test except: log.err("exception sell market!")