def collect_okcoin(): # ------------------------------ # collect data from Okcoin API # ------------------------------ # API_KEY_OKCOIN='b4dd3278-df06-48af-8925-40120f46563b' # API_SECRET_OKCOIN='1F8A97B89F03A095238823CB1FAA3827' import sys sys.path.insert(0, '/Users/G_bgyl/si507/final_project/okcoin_lib') from OkcoinSpotAPI import OKCoinSpot from OkcoinFutureAPI import OKCoinFuture #初始化apikey,secretkey,url okcoinRESTURL = 'www.okcoin.com' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL, API_KEY_OKCOIN, API_SECRET_OKCOIN) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL, API_KEY_OKCOIN, API_SECRET_OKCOIN) # pprint.pprint (okcoinSpot.depth('btc_usd')) okcoin_depth = okcoinSpot.depth('btc_usd') # pprint.pprint(okcoin_depth) bids = [] for each_b in okcoin_depth['bids']: bids.append(['bids'] + each_b) asks = [] for each_a in okcoin_depth['bids']: asks.append(['asks'] + each_a) okcoin_data = bids + asks # print(len(okcoin_depth['bids']),len(okcoin_depth['asks']),len(okcoin_data)) return okcoin_data
apikey = 'a5f678c4-c234-4a17-a21a-ed218b6c7f51' secretkey = '5BE848BE3E6C300292F1F06C9DA00180' okcoinRESTURL = 'www.okex.com' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey) #print (u' 现货行情 ') #print (okcoinSpot.ticker('btc_usd')) #print (u' 现货深度 ') #print (okcoinSpot.depth('btc_usd')) eos_eth = okcoinSpot.depth('eos_eth') print('asks') print (eos_eth['asks']) print('bids') print (eos_eth['bids']) def save_mysql_get_depth(symbol): symbolname = symbol symbol = symbolname.replace('_', '') platForm = 'okex' filednames = ['symbol', 'platform', 'datetime', 'priceAverage', 'buyPrice', 'bNum', 'sellPrice', 'sNum', 'allInfo'] while(1): try: time.sleep(1.5)
#okcoinRESTURL = 'www.okcoin.com' #请求注意:国内账号需要 修改为 www.okcoin.cn okcoinRESTURL = 'www.okcoin.cn' #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) #期货API #okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey) #print (u' 现货行情 ') #print (u' 现货深度 ') while(True): ticker = float(okcoinSpot.ticker('btc_cny')['ticker']['last']) depth = okcoinSpot.depth('btc_cny&size=200&merge=1') #ticker = (depth['asks'][-1][0] - depth['bids'][0][0]) / 2.0 + depth['bids'][0][0] asks_volume = 0 bids_volume = 0 for item in depth['asks']: asks_volume += (item[0] - ticker) * item[1] for item in depth['bids']: bids_volume += (ticker - item[0]) * item[1] if(asks_volume > bids_volume): print 'Ask:%d\tBid:%d\tTicker:%.2f\tDown'%(asks_volume, bids_volume, ticker) else: print 'Ask:%d\tBid:%d\tTicker:%.2f\tUp'%(asks_volume, bids_volume, ticker)
#初始化apikey,secretkey,url apikey = 'XXXX' secretkey = 'XXXXX' okcoinRESTURL = 'www.okcoin.com' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey) print (u' 现货行情 ') print (okcoinSpot.ticker('btc_usd')) print (u' 现货深度 ') print (okcoinSpot.depth('btc_usd')) #print (u' 现货历史交易信息 ') #print (okcoinSpot.trades()) #print (u' 用户现货账户信息 ') #print (okcoinSpot.userinfo()) #print (u' 现货下单 ') #print (okcoinSpot.trade('ltc_usd','buy','0.1','0.2')) #print (u' 现货批量下单 ') #print (okcoinSpot.batchTrade('ltc_usd','buy','[{price:0.1,amount:0.2},{price:0.1,amount:0.2}]')) #print (u' 现货取消订单 ') #print (okcoinSpot.cancelOrder('ltc_usd','18243073'))
#初始化apikey,secretkey,url apikey = AK secretkey = AS okcoinRESTURL = 'www.okcoin.com' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey) print (u' 现货行情 ') print (okcoinSpot.ticker('btc_usd')) print (u' 现货深度 ') print (okcoinSpot.depth('btc_usd')) #print (u' 现货历史交易信息 ') #print (okcoinSpot.trades()) #print (u' 用户现货账户信息 ') #print (okcoinSpot.userinfo()) #print (u' 现货下单 ') #print (okcoinSpot.trade('ltc_usd','buy','0.1','0.2')) #print (u' 现货批量下单 ') #print (okcoinSpot.batchTrade('ltc_usd','buy','[{price:0.1,amount:0.2},{price:0.1,amount:0.2}]')) #print (u' 现货取消订单 ') #print (okcoinSpot.cancelOrder('ltc_usd','18243073'))
idkey = Column(Integer(), primary_key=True) buy1p = Column(Float()) buy1v = Column(Float()) sell1p = Column(Float()) sell1v = Column(Float()) count = Column(BIGINT()) Base.metadata.create_all(engine) print(engine.table_names()) count = 0 while True: Testa = okcoinSpot.klines('ltc_cny', '1min') Testticker = okcoinSpot.ticker('ltc_cny') Testdepth = okcoinSpot.depth('ltc_cny') session = DBSession() userkline = session.query(DataFresh).all() userticker = session.query(TickerFresh).all() userdepth = session.query(DepthFresh).all() count = count + 1 for i, j in enumerate(Testa): tmp_data = DataFresh(idkey=len(userkline) + i + 1, timemark=j[0], openprice=j[1], highprice=j[2], lowprice=j[3], closeprice=j[4], tradevol=j[5], count=count) session.add(tmp_data)
#初始化apikey,secretkey,url apikey = 'XXXXX' secretkey = 'XXXXXXXXXXXXXXXXXXXXXXX' okcoinRESTURL = 'www.okcoin.com' #请求注意:国际账号需要 修改为 www.okcoin.com 国内站账号需要修改为www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL,apikey,secretkey) print u' 现货行情 ' print okcoinSpot.ticker('btc_usd') print u' 现货深度 ' print okcoinSpot.depth('btc_usd') print u' 现货历史交易信息 ' print okcoinSpot.trades() print u' 用户现货账户信息 ' print okcoinSpot.userinfo() print u' 现货下单 ' print okcoinSpot.trade('ltc_usd','buy','0.1','0.2') print u' 现货批量下单 ' print okcoinSpot.batchTrade('ltc_usd','buy','[{price:0.1,amount:0.2},{price:0.1,amount:0.2}]') print u' 现货取消订单 ' print okcoinSpot.cancelOrder('ltc_usd','18243073')
class okex(): def __init__(self): ##初始化apikey,secretkey,url apikey = config.apikey secretkey = config.secretkey okcoinRESTURL = 'www.okex.com' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API self.okcoinSpot = OKCoinSpot(okcoinRESTURL,apikey,secretkey) # 期货API self.okcoinFuture = OKCoinFuture(okcoinRESTURL, apikey, secretkey) self.depth = {} def getTicker(self, symbol): return self.okcoinSpot.ticker(symbol)['ticker'] def getDepth(self, symbol): while(1): sleep(0.5) try: depth = self.okcoinSpot.depth(symbol) except Exception: pass DEPTH[symbol] = {'sell':{'price':depth['asks'][-1][0], 'amount':depth['asks'][-1][1]}, 'buy':{'price':depth['bids'][0][0], 'amount':depth['bids'][0][1]}} print(symbol) print(DEPTH) # return {'sell':{'price':depth['asks'][-1][0], 'amount':depth['asks'][-1][1]}, # 'buy':{'price':depth['bids'][0][0], 'amount':depth['bids'][0][1]}} def getBalance(self): ''' :return: ''' self.balance = {} info = json.loads(self.okcoinSpot.userinfo()) for symbol in info['info']['funds']['free'].keys(): self.balance[symbol] = float(info['info']['funds']['free'][symbol]) def trade(self, symbol, type, price, amount): ''' :param symbol: :param type: :param price: :param amount: :return: order_id ''' if price != '': logging.info('[order]' + symbol + '|' + type+ '|' + str(price) + '|' + str(amount)) rsp = json.loads(self.okcoinSpot.trade(symbol, type, price, amount)) if 'error_code' in rsp: if str(rsp['error_code']) != '1003': logging.info('[trade error]' + str(rsp['error_code'])) return False if rsp['result']: return rsp['order_id'] def getOrderInfo(self, symbol, order_id): ''' :param symbol: :param order_id: :return: order_status: -1:已撤销 0:未成交 1:部分成交 2:完全成交 3:撤单处理中 ''' rsp = json.loads(self.okcoinSpot.orderinfo(symbol, order_id)) if 'error_code' in rsp: logging.info('[getOrderInfo error]' + str(rsp['error_code'])) return False if rsp['result']: return int(rsp['orders'][0]['status']) else: return False def toBtc(self): self.getBalance() for symbol in self.balance.keys(): if symbol != 'usdt' and symbol != 'btc' and symbol != 'mtl' and self.balance[symbol] != 0: # print(symbol) if self.balance[symbol] != 0: tradeSymbol = symbol + '_btc' self.trade(tradeSymbol, 'sell_market', '', self.balance[symbol]) def cancelOrder(self, symbol, order_id): ''' :param symbol: :param order_id: :return: True or False ''' rsp = json.loads(self.okcoinSpot.cancelOrder(symbol, order_id)) if 'error_code' in rsp: logging.info('[cancelOrder error]' + str(rsp['error_code'])) return False return rsp['result'] def good_trade(self, symbols, Threshold=1.02): ''' :param symbols: such as [btc, eth, mco] :return: ''' symbol_1 = symbols[1] + '_' + symbols[0] symbol_2 = symbols[2] + '_' + symbols[0] symbol_3 = symbols[2] + '_' + symbols[1] t1 = self.getTicker(symbol_1) t2 = self.getTicker(symbol_2) t3 = self.getTicker(symbol_3) # print ('=======================================') # temp = (float(t2['sell']) / float(t3['buy'])) a1 = (float(t2['sell']) / float(t3['buy'])) / float(t1['buy']) a2 = (float(t1['sell']) * float(t3['sell'])) / float(t2['buy']) if a1 < Threshold: traderSymbol = [symbol_2, symbol_3, symbol_1] logging.debug('=======================================') logging.debug(a1) logging.debug('[trader] ' + symbols[0] + '--->' + symbols[2] + '--->' + symbols[1] + '--->' + symbols[0]) logging.debug(t1) logging.debug(t2) logging.debug(t3) elif a2 < Threshold: traderSymbol = [symbol_1, symbol_3, symbol_2] logging.debug('=======================================') logging.debug(a2) logging.debug('[trader] ' + symbols[0] + '--->' + symbols[1] + '--->' + symbols[2] + '--->' + symbols[0]) logging.debug(t1) logging.debug(t2) logging.debug(t3) else: pass def tradePolicy(self, symbols, initAmount=0.005, Threshold=1.02): ''' :param symbols: such as [btc, eth, mco] :return: ''' retry = 3 symbol_1 = symbols[1] + '_' + symbols[0] symbol_2 = symbols[2] + '_' + symbols[0] symbol_3 = symbols[2] + '_' + symbols[1] t1 = self.getDepth(symbol_1) t2 = self.getDepth(symbol_2) t3 = self.getDepth(symbol_3) a1 = (float(t2['sell']['price']) / float(t3['buy']['price'])) / float(t1['buy']['price']) a2 = (float(t1['sell']['price']) * float(t3['sell']['price'])) / float(t2['buy']['price']) # logging.debug(t1) if a1 < Threshold: if float(t2['sell']['amount']) < amount[symbol_2] or float(t3['buy']['amount']) < amount[symbol_3] or\ float(t1['buy']['amount']) < amount[symbol_1]: return logging.info('=========================================================') logging.debug(a1) traderSymbol = [symbol_2, symbol_3, symbol_1] logging.debug('[trader] ' + symbols[0] + '--->' + symbols[2] + '--->' + symbols[1] + '--->' + symbols[0]) logging.debug(t1) logging.debug(t2) logging.debug(t3) #step1 logging.info('[step1]') self.getBalance() self.toBtc() logging.info('[Balance]') logging.info(self.balance) amount1 = round((initAmount * 0.999) / float(t2['sell']['price']), 8) for i in range(retry): logging.info('[order]' + symbol_2 + '|buy|' + str(float(t2['sell']['price'])) + '|' + str(amount1)) orderId = self.trade(symbol_2, 'buy', float(t2['sell']['price']), amount1) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_2, orderId) if status != 2: print(status) sleep(0.5) status = self.getOrderInfo(symbol_2, orderId) if status != 2: print(status) self.cancelOrder(symbol_2, orderId) logging.info('[cancelOrder!]') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return #step2 logging.info('[step2]') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount2 = self.balance[symbols[2]] for i in range(retry): logging.info('[order]' + symbol_3 + '|sell|' + str(float(t3['buy']['price'])) + '|' + str(amount2)) orderId = self.trade(symbol_3, 'sell', float(t3['buy']['price']), amount2) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_3, orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbol_3, orderId) if status != 2: self.cancelOrder(symbol_3, orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return #step3 logging.info('[step3]') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount3 = self.balance[symbols[1]] for i in range(retry): logging.info('[order]' + symbol_1 + '|sell|' + str(float(t1['buy']['price'])) + '|' + str(amount3)) orderId = self.trade(symbol_1, 'sell', float(t1['buy']['price']), amount3) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_1, orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbol_1, orderId) if status != 2: self.cancelOrder(symbol_1, orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return elif a2 < Threshold: if float(t2['buy']['amount']) < amount[symbol_2] or float(t3['sell']['amount']) < amount[symbol_3] or\ float(t1['sell']['amount']) < amount[symbol_1]: return logging.info('=========================================================') logging.debug(a2) traderSymbol = [symbol_1, symbol_3, symbol_2] logging.debug('[trader] ' + symbols[0] + '--->' + symbols[1] + '--->' + symbols[2] + '--->' + symbols[0]) logging.debug(t1) logging.debug(t2) logging.debug(t3) # step1 logging.info('[step1]') self.getBalance() self.toBtc() logging.info('[Balance]') logging.info(self.balance) amount1 = round((initAmount * 0.999) / float(t1['sell']['price']), 8) for i in range(retry): logging.info('[order]' + symbol_1 + '|buy|' + str(float(t1['sell']['price'])) + '|' + str(amount1)) orderId = self.trade(symbol_1, 'buy', float(t1['sell']['price']), amount1) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_1, orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbol_1, orderId) if status != 2: self.cancelOrder(symbol_1, orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return # step2 logging.info('[step2]') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount2 = round((self.balance[symbols[1]] * 0.999) / float(t3['sell']['price']), 8) for i in range(retry): logging.info('[order]' + symbol_3 + '|buy|' + str(float(t3['sell']['price'])) + '|' + str(amount2)) orderId = self.trade(symbol_3, 'buy', float(t3['sell']['price']), amount2) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_3, orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbol_3, orderId) if status != 2: self.cancelOrder(symbol_3, orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return # step3 logging.info('[step3]') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount3 = self.balance[symbols[2]] for i in range(retry): logging.info('[order]' + symbol_2 + '|sell|' + str(float(t2['buy']['price'])) + '|' + str(amount3)) orderId = self.trade(symbol_2, 'sell', float(t2['buy']['price']), amount3) if orderId: break if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbol_2, orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbol_2, orderId) if status != 2: self.cancelOrder(symbol_2, orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return else: pass def getCoinList(self, symbols): coinList = [] for k in permutations(symbols, 2): tmp = ['btc', k[0], 'eth', k[1]] coinList.append(tmp) return coinList def getTradeSymbol(self, coinlist): ts =[] for c in coinlist: s = ['_'.join((c[1], c[0])), '_'.join((c[1], c[2])), '_'.join((c[3], c[2])), '_'.join((c[3], c[0]))] ts.append(s) return ts def getTradeAmount(self, symbols): print(self.depth) for s in symbols: if s not in self.depth: return 0 print('getTrade:') print(symbols) ss = (self.depth[symbols[1]]['buy']['price'] * self.depth[symbols[3]]['buy']['price']) / (self.depth[symbols[0]]['sell']['price'] * self.depth[symbols[2]]['sell']['price']) if ss > 0.90: # logging.debug('profit: %f' % ss) # logging.debug(symbols) # logging.debug(self.depth[symbols[0]]) # logging.debug(self.depth[symbols[1]]) # logging.debug(self.depth[symbols[2]]) # logging.debug(self.depth[symbols[3]]) amount = [] amount.append(self.depth[symbols[0]]['sell']['price'] * min(self.depth[symbols[0]]['sell']['amount'],self.depth[symbols[1]]['buy']['amount'])) amount.append(self.depth[symbols[3]]['buy']['price'] * min(self.depth[symbols[3]]['buy']['amount'],self.depth[symbols[2]]['sell']['amount'])) amount.sort() logging.debug('amount: %f' % amount[0]) if amount[0] > 0.0001: logging.debug('profit: %f' % ss) logging.debug(symbols) logging.debug(self.depth[symbols[0]]) logging.debug(self.depth[symbols[1]]) logging.debug(self.depth[symbols[2]]) logging.debug(self.depth[symbols[3]]) return amount[0] else: return 0 def doTrade(self, symbols, amount): if self.balance['btc'] < amount * 0.9: initamount = self.balance['btc'] * 0.99 else: initamount = amount * 0.9 logging.debug('step1') amount1 = round(initamount / self.depth[symbols[0]]['sell']['price'], 8) orderId = self.trade(symbols[0], 'buy', self.depth[symbols[0]]['sell']['price'], amount1) if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbols[0], orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbols[0], orderId) if status != 2: self.cancelOrder(symbols[0], orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return logging.debug('step2') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount2 = self.balance[symbols[1].split('_')[0]] orderId = self.trade(symbols[1], 'sell', self.depth[symbols[1]]['buy']['price'], amount2) if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbols[1], orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbols[1], orderId) if status != 2: self.cancelOrder(symbols[1], orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return logging.debug('step3') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount3 = round((self.balance[symbols[2].split('_')[1]] / self.depth[symbols[2]]['sell']['price']) * 0.998, 8) orderId = self.trade(symbols[2], 'buy', self.depth[symbols[2]]['sell']['price'], amount3) if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbols[2], orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbols[2], orderId) if status != 2: self.cancelOrder(symbols[2], orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return logging.debug('step4') self.getBalance() logging.info('[Balance]') logging.info(self.balance) amount4 = self.balance[symbols[3].split('_')[0]] orderId = self.trade(symbols[3], 'sell', self.depth[symbols[3]]['buy']['price'], amount4) if orderId: logging.info('[orderId]' + str(orderId)) status = self.getOrderInfo(symbols[3], orderId) if status != 2: sleep(0.5) status = self.getOrderInfo(symbols[3], orderId) if status != 2: self.cancelOrder(symbols[3], orderId) logging.info('cancelOrder!') return else: logging.info('[order succssed!]') else: logging.info('[order succssed!]') else: logging.info('[order failed!]') return def policy(self, allsymbol): coins = self.getCoinList(allsymbol) tradesymbol = self.getTradeSymbol(coins) while(1): for symbols in tradesymbol: # print(symbols) # self.toBtc() a = self.getTradeAmount(symbols) sleep(0.5)
class Ok_api: def __init__(self, mykey=None, mysecret=None): if mykey and mysecret: self.mykey,self.mysecret = mykey,mysecret else: filename = CURRENTURL+r'\key' with open(filename,'r',encoding='utf-8') as f: data = f.read() self.mykey,self.mysecret = data.split('\n') self.mykey = self.mykey.strip() self.mysecret = self.mysecret.strip() okcoinRESTURL = 'www.okb.com' # print(self.mykey,self.mysecret) self.okcoinSpot = OKCoinSpot(okcoinRESTURL,self.mykey,self.mysecret) def __api_public_call(self,path,params=''): headers = { 'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Maxthon/5.1.3.2000', } url = 'https://www.okb.com/api/v1/' + path + params req = urllib.request.Request(url,headers=headers) res = urllib.request.urlopen(req, timeout=10) doc = json.loads(res.read().decode('utf-8')) # .decode('gbk', 'ignore') return doc # try: # except Exception as ex: # print(sys.stderr, 'ok request public_ex: ', ex) # return None def trades(self,symbol='btc_usdt',since=0): ''' return (tid,symbol,date,price,amount,type) max_len 60 ''' data = self.okcoinSpot.trades(symbol,since) lst = [da['tid'] for da in data] return [(da['tid'],symbol,da['date'],da['price'],da['amount'],da['type']) for da in data[::-1]] # try: # except Exception as e: # # raise e # print('ok_api_ trades' ,e) # return [] def kline(self,symbol,type,size=500): ''' symbol type size since https://www.okb.com/api/v1/kline.do ''' path = 'kline.do?' params = "symbol=%s&type=%s&size=%s" %(symbol,type,size) obj = self.__api_public_call(path, params) return obj # try: # except Exception as ex: # print(sys.stderr, 'ok %s exception ,'%path,ex) # return None def depth(self,symbol = ''): data = self.okcoinSpot.depth(symbol) data =[data['asks'][::-1],data['bids']] return data def balance(self): data = self.okcoinSpot.userinfo() data_free = data['info']['funds']['free'] data_freezed = data['info']['funds']['freezed'] data = filter( lambda x:data_free[x] != '0',data_free) data_free = { da:data_free[da] for da in data_free if data_free[da] != '0'} data_freezed = { da:data_freezed[da] for da in data_freezed if data_freezed[da] != '0'} return data_free,data_freezed def order(self,symbol,price,amount,type): data = self.okcoinSpot.trade(symbol,price,amount,type) return data def deal_order_data(self,data,lst): resl = [] for da in data: d = {} for l in lst: if l == 'order_id': d['id'] = da[l] else: d[l] = da[l] resl.append(d) return resl def getOrder(self,id,symbol=None): ''' {'orders': [{'amount': 1, 'avg_price': 0, 'create_date': 1536112711000, 'deal_amount': 0, 'order_id': 864345207, 'orders_id': 864345207, 'price': 10.0, 'status': 0, 'symbol': 'eos_usdt', 'type': 'sell'}], 'result': True} ''' data = self.okcoinSpot.orderinfo(symbol,id) data = data['orders'] data = self.deal_order_data(data,['amount','price','deal_amount','avg_price','create_date','order_id','type']) [da.update({'deal_money':da['deal_amount']*da['avg_price']}) for da in data] if len(data) > 1: raise ValueError(data) return data[0] def unfinished_orders_list(self,symbol): '''{'currency_page': 1, 'orders': [{'amount': 1, 'avg_price': 0, 'create_date': 1536112711000, 'deal_amount': 0, 'order_id': 864345207, 'orders_id': 864345207, 'price': 10.0, 'status': 0, 'symbol': 'eos_usdt', 'type': 'sell'}], 'page_length': 200, 'result': True, 'total': 1} [{'amount': 1, 'avg_price': 0, 'create_date': 1536112711000, 'deal_amount': 0, 'deal_money': 0, 'order_id': 864345207, 'price': 10.0, 'type': 'sell'}] ''' data = self.okcoinSpot.orderHistory(symbol) if not data.get('orders'): return data data = data['orders'] data = self.deal_order_data(data,['amount','price','deal_amount','avg_price','create_date','order_id','type']) [da.update({'deal_money':da['deal_amount']*da['avg_price']}) for da in data] return data def cancelOrder(self,id,symbol): ''' {'orders': [{'amount': 1, 'avg_price': 0, 'create_date': 1536112711000, 'deal_amount': 0, 'order_id': 864345207, 'orders_id': 864345207, 'price': 10.0, 'status': 0, 'symbol': 'eos_usdt', 'type': 'sell'}], 'result': True} ''' data = self.okcoinSpot.ordersinfo(symbol,id) if data.get('result') == True: return True print(data) return False
#初始化apikey,secretkey,url apikey = 'XXXX' secretkey = 'XXXXX' okcoinRESTURL = 'www.okcoin.cn' #请求注意:国内账号需要 修改为 www.okcoin.cn #现货API okcoinSpot = OKCoinSpot(okcoinRESTURL, apikey, secretkey) #期货API okcoinFuture = OKCoinFuture(okcoinRESTURL, apikey, secretkey) print(u' 现货行情 ') print(okcoinSpot.ticker('etc_cny')) print(u' 现货深度 ') print(okcoinSpot.depth('etc_cny')) #print (u' 现货历史交易信息 ') #print (okcoinSpot.trades()) #print (u' 用户现货账户信息 ') #print (okcoinSpot.userinfo()) #print (u' 现货下单 ') #print (okcoinSpot.trade('ltc_usd','buy','0.1','0.2')) #print (u' 现货批量下单 ') #print (okcoinSpot.batchTrade('ltc_usd','buy','[{price:0.1,amount:0.2},{price:0.1,amount:0.2}]')) #print (u' 现货取消订单 ') #print (okcoinSpot.cancelOrder('ltc_usd','18243073'))