Ejemplo n.º 1
0
def QA_fetch_huobi_kline_subscription(symbol, start_time, end_time, frequency,
                                      callback_save_data_func):
    """
    Get the symbol‘s candlestick data by subscription
    """
    def print_timestamp(ts_epoch):
        return '{}({})'.format(
            QA_util_timestamp_to_str(ts_epoch)[2:16], ts_epoch)

    reqParams = {}
    reqParams['from'] = end_time - FREQUENCY_SHIFTING[frequency]
    reqParams['to'] = end_time
    if (reqParams['to'] > QA_util_datetime_to_Unix_timestamp()):
        # 出现“未来”时间,一般是默认时区设置错误造成的
        raise Exception(
            'A unexpected \'Future\' timestamp got, Please check self.missing_data_list_func param \'tzlocalize\' set'
        )

    data = []
    requested_counter = 1
    sub_client = QA_Fetch_Huobi(
        callback_save_data_func=callback_save_data_func,
        find_missing_kline_func=QA_util_find_missing_kline)
    while (reqParams['to'] > start_time):
        if (reqParams['to'] > QA_util_datetime_to_Unix_timestamp()):
            # 出现“未来”时间,一般是默认时区设置错误造成的
            raise Exception(
                'A unexpected \'Future\' timestamp got, Please check self.missing_data_list_func param \'tzlocalize\' set'
            )
        retries = 1
        while (retries != 0):
            try:
                frame = sub_client.run_request_historical_kline(
                    symbol, frequency, reqParams['from'], reqParams['to'],
                    requested_counter)
                if (frame is None):
                    # 火币网的 WebSocket 接口机制很奇特,返回len(data)==0
                    # 就说明已经超越这个交易对的上架时间,不再有更多数据了。
                    # 当前 Symbol Klines 抓取已经结束了
                    return None
                else:
                    retries = 0
            except Exception:
                retries = retries + 1
                if (retries % 6 == 0):
                    print(ILOVECHINA)
                print("Retry request_historical_kline #{}".format(retries - 1))
                time.sleep(0.5)
            if (retries == 0):
                # 等待3秒,请求下一个时间段的批量K线数据
                reqParams['to'] = reqParams['from'] - 1
                reqParams[
                    'from'] = reqParams['from'] - FREQUENCY_SHIFTING[frequency]
                requested_counter = requested_counter + 1
                # 这一步冗余,如果是开启实时抓取会自动被 WebSocket.on_messgae_callback 事件处理函数保存,
                # 但不确定不开启实时行情抓取会不会绑定on_messgae事件,所以保留冗余。
                callback_save_data_func(data=frame, freq=frequency)
        time.sleep(0.5)

    return data
Ejemplo n.º 2
0
def QA_SU_save_huobi_realtime():
    """
    实时抓取 huobi.pro 主流公链的交易品种行情
    """
    market = huobi_EXCHANGE
    QA_util_log_info('Starting {:s} realtime ...'.format(market))
    fetch_huobi_history = QA_Fetch_Huobi(
        callback_save_data_func=QA_SU_save_data_huobi_callback,
        find_missing_kline_func=QA_util_find_missing_kline
    )

    # 添加抓取行情数据任务,将会开启多线程抓取。
    fetch_huobi_history.add_subscription_batch_jobs(
        FIRST_PRIORITY,
        [
            CandlestickInterval.MIN1,
            CandlestickInterval.MIN5,
            CandlestickInterval.MIN15,
            CandlestickInterval.MIN30,
            CandlestickInterval.MIN60,
            CandlestickInterval.DAY1
        ],
        '2017-10-26 02:00:00'
    )

    fetch_huobi_history.run_subscription_batch_jobs()
Ejemplo n.º 3
0
def QA_SU_save_huobi_realtime():
    """
    实时抓取 huobi.pro 主流公链的交易品种行情
    """
    market = 'huobi'
    QA_util_log_info('Starting {:s} realtime ...'.format(market))
    fetch_huobi_history = QA_Fetch_Huobi(
        callback_save_data_func=QA_SU_save_data_huobi_callback,
        find_missing_kline_func=QA_util_find_missing_kline)

    # 添加抓取行情数据任务,将会开启多线程抓取。
    fetch_huobi_history.add_subscription_batch_jobs(FIRST_PRIORITY, [
        FREQUENCE.ONE_MIN, FREQUENCE.FIVE_MIN, FREQUENCE.FIFTEEN_MIN,
        FREQUENCE.THIRTY_MIN, FREQUENCE.SIXTY_MIN, FREQUENCE.DAY
    ], '2017-10-26 02:00:00')

    fetch_huobi_history.run_subscription_batch_jobs()
Ejemplo n.º 4
0
def QA_fetch_huobi_kline_subscription(
    symbol,
    start_time,
    end_time,
    frequency,
    callback_func
):
    """
    Get the symbol‘s candlestick data by subscription
    """
    reqParams = {}
    reqParams['from'] = int(end_time - FREQUENCY_SHIFTING[frequency])
    reqParams['to'] = int(end_time)

    requested_counter = 1
    sub_client = QA_Fetch_Huobi(
        callback_save_data_func=callback_func,
        find_missing_kline_func=QA_util_find_missing_kline
    )
    datas = list()
    retries = 1
    while (reqParams['to'] > start_time):
        if ((reqParams['from'] > QA_util_datetime_to_Unix_timestamp())) or \
            ((reqParams['from'] > reqParams['to'])):
            # 出现“未来”时间,一般是默认时区设置,或者时间窗口滚动前移错误造成的
            QA_util_log_info(
                'A unexpected \'Future\' timestamp got, Please check self.missing_data_list_func param \'tzlocalize\' set. More info: {:s}@{:s} at {:s} but current time is {}'
                .format(
                    symbol,
                    frequency,
                    QA_util_print_timestamp(reqParams['from']),
                    QA_util_print_timestamp(
                        QA_util_datetime_to_Unix_timestamp()
                    )
                )
            )
            # 跳到下一个时间段
            reqParams['to'] = int(reqParams['from'] - 1)
            reqParams['from'] = int(reqParams['from'] - FREQUENCY_SHIFTING[frequency])
            continue

        retries = 1
        frame = None
        while (retries != 0):
            try:
                frame = sub_client.run_request_historical_kline(
                    symbol,
                    frequency,
                    reqParams['from'],
                    reqParams['to'],
                    requested_counter
                )
                if (frame is None):
                    # 火币网的 WebSocket 接口机制很奇特,返回len(data)==0
                    # 就说明已经超越这个交易对的上架时间,不再有更多数据了。
                    # 当前 Symbol Klines 抓取已经结束了
                    return None
                else:
                    retries = 0
            except Exception:
                retries = retries + 1
                if (retries % 6 == 0):
                    print(ILOVECHINA)
                print("Retry request_historical_kline #{}".format(retries - 1))
                time.sleep(0.5)
            if (retries == 0):
                # 等待3秒,请求下一个时间段的批量K线数据
                reqParams['to'] = int(reqParams['from'] - 1)
                reqParams['from'
                         ] = int(reqParams['from'] - FREQUENCY_SHIFTING[frequency])
                requested_counter = requested_counter + 1
                # 这一步冗余,如果是开启实时抓取会自动被 WebSocket.on_messgae_callback 事件处理函数保存,
                # 但不确定不开启实时行情抓取会不会绑定on_messgae事件,所以保留冗余。
                callback_func(data=frame, freq=frequency)
        time.sleep(0.5)
    
    if ((retries == 0) and (len(frame) > 0)):
        return frame
    else:
        return None