示例#1
0
def fill_depth(floor,
               upper,
               symbol,
               api_key,
               secret_key,
               digit=4,
               number=20,
               exchange=CgCoin()):
    """
    :param floor: 挂单数量下限
    :param upper: 挂单数量上限
    :param symbol: 交易对
    :param api_key:
    :param secret_key:
    :param number: 用于补单的触发条件
    :param exchange: 交易所
    :return:
    """
    exchange.auth(api_key, secret_key)
    now = str(datetime.datetime.now()).split('.')[0]
    data = get_data_from_cg(symbol)
    bids = data['bids']
    asks = data['asks']
    print('当前时间:%s,交易对:%s,买单深度:%s档,卖单深度:%s档' % (now, symbol, bids[0], asks[0]))
    if bids[0] <= number:
        for _ in range(10):
            rand = round(random.uniform(0.98, 0.999), 4)
            price = round(bids[1] * rand, digit)
            amount = round(random.uniform(floor, upper), 6)
            order_buy = exchange.create_order(symbol=symbol,
                                              side=1,
                                              type=1,
                                              price=price,
                                              amount=amount,
                                              source=3)
            print('挂单价格:%s,挂单数量:%s, 买单:%s' % (price, amount, order_buy))
    if asks[0] <= number:
        for _ in range(10):
            rand = round(random.uniform(1.001, 1.02), 4)
            price = round(asks[1] * rand, digit)
            amount = round(random.uniform(floor, upper), 6)
            order_sell = exchange.create_order(symbol=symbol,
                                               side=2,
                                               type=1,
                                               price=price,
                                               amount=amount,
                                               source=3)
            print('挂单价格:%s,挂单数量:%s, 卖单:%s' % (price, amount, order_sell))
    print()
    time.sleep(0.5)
示例#2
0
def user_balance(user, symbol, api_key, secret_key, exchange=CgCoin()):
    for _ in range(30):
        exchange.auth(api_key, secret_key)
        msg = dict(exchange.get_user_balance())
        # print(msg)
        if msg['status'] == 200:
            data = msg['data']
            data = pd.DataFrame(data)  # 转换成dataframe格式
            data = pd.DataFrame(data,
                                columns=['coin', 'amount',
                                         'available'])  # 对dataframe的行进行帅选、从新排序
            data.rename(columns={
                'coin': '货币',
                'amount': '总量',
                'available': '可用量'
            },
                        inplace=True)
            print('%s(%s)的资产为:' % (user, symbol))
            print(str(data) + '\n')
            break
        time.sleep(1)
示例#3
0
def refresh_quantity(api_key,
                     secret_key,
                     price_low,
                     price_high,
                     symbol='cgt_eth',
                     cg=CgCoin()):
    cg.auth(api_key, secret_key)
    differ = int(price_high * pow(10, 6) - price_low * pow(10, 6))
    for _ in range(differ):
        now = str(datetime.datetime.now()).split('.')[0]
        amount = round(random.uniform(700, 1000), 4)
        price_low = round(price_low + 0.000001, 6)
        print('当前时刻:%s, 挂单价格:%s, 挂单数量:%s' % (now, price_low, amount))
        buy_order = cg.create_order(symbol=symbol,
                                    side=1,
                                    type=1,
                                    price=price_low,
                                    amount=amount,
                                    source=3)  # 买单
        print(buy_order)
        print()
        time.sleep(2)
def refresh_quantity(api_key, secret_key, symbol='cgt_eth', cg=CgCoin()):
    cg.auth(api_key, secret_key)
    now = str(datetime.datetime.now()).split('.')[0]
    bid, ask = get_bid_and_ask_from_cg()
    print('当前时刻:%s, 买一价:%s, 卖一价:%s' % (now, bid, ask))
    for _ in range(200):
        price = round(random.uniform(float(bid), float(ask)), 6)
        if float(bid) < price < float(ask):
            break
    if float(bid) < price < float(ask):
        amount = round(random.uniform(200000, 260000), 4)
        print('成交价:%s, 成交量:%s' % (price, amount))
        sell_order = cg.create_order(symbol=symbol,
                                     side=2,
                                     type=1,
                                     price=price,
                                     amount=amount,
                                     source=3)  # 卖单
        print('卖单:', sell_order)
        if sell_order['status'] == 200:
            order_id = sell_order['data']
            buy_order = cg.create_order(symbol=symbol,
                                        side=1,
                                        type=1,
                                        price=price,
                                        amount=amount,
                                        source=3)  # 买单
            print('买单:', buy_order)
            if buy_order['status'] != 200:
                for _ in range(3):
                    cancel_order = cg.cancel(order_id)
                    print('撤单:', cancel_order)
                    if cancel_order['status'] == 200:
                        break
    else:
        print('价差过小')
    print()
def repeal_bid(symbol, api_key, secret_key, num=25):
    """
    :param num: 限制数量,表示还剩多少的挂单
    :param symbol: 交易对
    :param api_key:
    :param secret_key:
    :return:
    """
    exchange = CgCoin()
    exchange.auth(api_key, secret_key)
    try:
        while True:
            # state : [int] 订单状态 0.正常 1.已完成 2.已撤销 3.部分成交 4.部分成交已撤销 5.撤销中 -1.获取历史成交
            order_info = exchange.get_order_list(symbol=symbol,
                                                 state=0,
                                                 page=0,
                                                 size=1000)  # 可能会报签名错误
            if order_info['status'] == 200:
                break
        order_df = pd.DataFrame(
            order_info['data']
            ['list'])  # 取order_info['data']['list']的信息,并将其转换成DataFrame格式
        # "side" : 交易方向 1.买入 2.卖出
        orders = order_df[order_df['side'] == 1]  # 筛选买单深度列表
        orders = orders.sort_values(by='price', ascending=False)  # 对买单按价格排降序
        orders = orders.drop_duplicates(subset='price', keep='first')  # 价格去重
        # counter = orders.count()['id']  # 数量
        # print(counter)
        ids = orders['id'][num:]  # 买单的所有ID
        if list(ids):
            print('需要撤销的买单ID:', '\n', ids)
            for id in ids:
                for _ in range(5):
                    order = exchange.cancel(id)
                    print('(%s)撤买单:%s - %s' % (symbol, id, order))
                    if order['status'] == 200:
                        break
            time.sleep(0.5)
        else:
            print('暂无撤销的卖单!')
    except Exception as error:
        print('错误:', error)
async def repeal_orders(side, symbol, api_key, secret_key, num=25):
    """
    :param side: "side" : 控制交易方向 1.买入 2.卖出
    :param symbol: 交易对
    :param api_key:
    :param secret_key:
    :param num: 用于控制触发撤单的数目
    :return:
    """
    exchange = CgCoin()
    exchange.auth(api_key, secret_key)
    try:
        for _ in range(10):
            # state : [int] 订单状态 0.正常 1.已完成 2.已撤销 3.部分成交 4.部分成交已撤销 5.撤销中 -1.获取历史成交
            info = exchange.get_order_list(symbol=symbol,
                                           state=0,
                                           page=0,
                                           size=30000)  # 可能会报签名错误
            if info['status'] == 200:
                break
            print(info)
        data = pd.DataFrame(
            info['data']
            ['list'])  # 取order_info['data']['list']的信息,并将其转换成DataFrame格式
        await asyncio.sleep(1)

        # "side" : 交易方向 1.买入 2.卖出
        if side == 1:
            msg = data[data['side'] == 1]  # 筛选买单深度列表信息
            orders = pd.DataFrame(
                msg, columns=['price', 'amount',
                              'id'])  # 过滤信息,只看'price', 'amount', 'id'这三列
            orders = orders.sort_values(by='price',
                                        ascending=False)  # 对买单按价格排降序
            orders_dup = orders.drop_duplicates(subset='price',
                                                keep='first')  # 价格去重,重复元素保留第一个
            counter_1 = orders_dup.count()['id']  # 数量
            print('%s买单深度:%s档' % (symbol, counter_1))
            if counter_1 >= num:
                all_orders = orders.append(orders_dup.head(num))
                all_orders = all_orders.sort_values(by='price',
                                                    ascending=False)  # 排降序
                _orders = all_orders.drop_duplicates(
                    subset=['id'],
                    keep=False)  # _orders为orders与orders_dup.head(num)的差集
                buy_ids = _orders['id']  # 卖单的所有ID
                print('需要撤销的买单ID:', '\n', buy_ids)
                for id in buy_ids:
                    await asyncio.sleep(1)
                    for _ in range(5):
                        order = exchange.cancel(id)
                        print('(%10s)撤买单:%s - %s' % (symbol, id, order))
                        if order['status'] == 200:
                            break
                    # time.sleep(1)
            else:
                print('%s暂无撤销的买单!' % symbol)

        elif side == 2:
            msg = data[data['side'] == 2]  # 筛选买单深度列表信息
            orders = pd.DataFrame(
                msg, columns=['price', 'amount',
                              'id'])  # 过滤信息,只看'price', 'amount', 'id'这三列
            orders = orders.sort_values(by='price')  # 对卖单按价格排升序
            orders_dup = orders.drop_duplicates(subset='price',
                                                keep='first')  # 价格去重,重复元素保留第一个
            counter_2 = orders_dup.count()['id']  # 数量
            print('%s卖单深度:%s档' % (symbol, counter_2))
            if counter_2 >= num:
                all_orders = orders.append(orders_dup.head(num))
                all_orders = all_orders.sort_values(by='price')
                _orders = all_orders.drop_duplicates(
                    subset=['id'],
                    keep=False)  # _orders为orders与orders_dup.head(num)的差集
                sell_ids = _orders['id']  # 卖单的所有ID
                print('需要撤销的卖单ID:', '\n', sell_ids)
                for id in sell_ids:
                    await asyncio.sleep(1)
                    for _ in range(5):
                        order = exchange.cancel(id)
                        print('(%10s)撤卖单:%s - %s' % (symbol, id, order))
                        if order['status'] == 200:
                            break
                    # time.sleep(1)
            else:
                print('%s暂无撤销的卖单!' % symbol)

        else:
            print('传参错误, "side"控制交易方向:  1.买入 2.卖出')

        print(
            '*******************************************************************'
        )
    except Exception as error:
        print('错误:', error)
示例#7
0
    time.sleep(0.5)


if __name__ == '__main__':
    fill_depth(0.1, 0.3, 'xeth_usdt', '', '', digit=2)
    fill_depth(0.03, 0.08, 'xbtc_usdt', '', '', digit=2)
    fill_depth(3, 10, 'xeos_usdt', '', '', digit=4)
    fill_depth(6, 10, 'xxrp_usdt', '', '', digit=4)
    # https: // demo.i.cg.net
    fill_depth(0.1,
               0.3,
               'xeth_usdt',
               '',
               '',
               digit=2,
               exchange=CgCoin(base_url='https://demo.i.cg.net'))
    fill_depth(0.03,
               0.08,
               'xbtc_usdt',
               '',
               '',
               digit=2,
               exchange=CgCoin(base_url='https://demo.i.cg.net'))
    fill_depth(0.12, 0.15, 'eth_usdt', '', '')
    # fill_depth(1, 3, 'cgt_eth', '', '', digit=6)
    fill_depth(5, 20, 'xrp_usdt', '', '')

    fill_depth(0.002, 0.003, 'btc_usdt', '', '')

    fill_depth(0.002, 0.003, 'eth_btc', '', '', digit=8)