示例#1
0
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
示例#2
0
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)
示例#3
0
文件: Client.py 项目: binbinxm/rest
#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)
示例#4
0
#初始化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'))
示例#5
0
#初始化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'))
示例#6
0
    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)
示例#7
0
文件: Client.py 项目: citysir/fundc
#初始化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')
示例#8
0
文件: test.py 项目: 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)
示例#9
0
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
示例#10
0
#初始化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'))