Exemplo n.º 1
0
    def api_get(self, method, params={}):
        # 现货API
        if self.account:
            apikey, secretkey = get_account_key("okex", self.account)
        okcoinSpot = OKCoinSpot(okcoinRESTURL, apikey, secretkey)
        if method == "userinfo":
            api_do = "okcoinSpot.%s()" % (method)
            return eval(api_do)

        elif method in ["buy", "sell"]:
            return okcoinSpot.trade(params["symbol"],
                                    method,
                                    params["price"],
                                    params["amount"])
        elif method == "cancelOrder":
            return okcoinSpot.cancelOrder(params["symbol"],
                                          params["id"])

        elif method in ["order_info", "orders_info"]:
            return okcoinSpot.orderinfo(params["symbol"],
                                        params["id"])

        elif method == "ticker":
            return okcoinSpot.ticker(symbol=params["symbol"])

        elif method == "funds_transfer":
            return okcoinSpot.funds_transfer(params["amount"],params["From"],params["To"], params["symbol"])
        elif method == "withdraw":
            #tradepwd = get_tradepwd("okex", self.account)
            tradepwd="huangxinyu2"
            return okcoinSpot.withdraw(params["symbol"], params["address"],
            params["amount"], tradepwd,
            params["fee"],
            params["addr_tag"])
Exemplo n.º 2
0
    def api_get(self, method, params={}):
        # 现货API
        if self.account:
            apikey, secretkey = get_account_key("okex", self.account)
        okcoinSpot = OKCoinSpot(okcoinRESTURL, apikey, secretkey)
        if method == "userinfo":
            api_do = "okcoinSpot.%s()" % (method)
            return eval(api_do)

        elif method in ["buy", "sell"]:
            return okcoinSpot.trade(params["symbol"], method, params["price"],
                                    params["amount"])
        elif method == "cancelOrder":
            return okcoinSpot.cancelOrder(params["symbol"], params["id"])

        elif method in ["order_info", "orders_info"]:
            return okcoinSpot.orderinfo(params["symbol"], params["id"])

        elif method == "ticker":
            return okcoinSpot.ticker(symbol=params["symbol"])
        elif method == "funds_transfer":
            return okcoinSpot.funds_transfer(params["amount"],
                                             params["from"],
                                             params["to"],
                                             symbol=params["symbol"])
Exemplo n.º 3
0
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')

print u' 现货订单信息查询 '
print okcoinSpot.orderinfo('ltc_usd','18243644')

print u' 现货批量订单信息查询 '
print okcoinSpot.ordersinfo('ltc_usd','18243800,18243801,18243644','0')

print u' 现货历史订单信息查询 '
print okcoinSpot.orderHistory('ltc_usd','0','1','2')

print u' 期货行情信息'
print okcoinFuture.future_ticker('ltc_usd','this_week')

print u' 期货市场深度信息'
print okcoinFuture.future_depth('ltc_usd','this_week','6')
Exemplo n.º 4
0
Arquivo: test.py Projeto: ElevenL/rest
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)