def get_multi_points_history_kline(self,
                                       code_list,
                                       dates,
                                       fields,
                                       ktype=KLType.K_DAY,
                                       autype=AuType.QFQ,
                                       no_data_mode=KLNoDataMode.FORWARD):
        '''
        从本地历史K线中获取多支股票多个时间点的指定数据列

        :param code_list: 单个或多个股票 'HK.00700'  or  ['HK.00700', 'HK.00001']
        :param dates: 单个或多个日期 '2017-01-01' or ['2017-01-01', '2017-01-02']
        :param fields: 单个或多个数据列 KL_FIELD.ALL or [KL_FIELD.DATE_TIME, KL_FIELD.OPEN]
        :param ktype: K线类型
        :param autype: 复权类型
        :param no_data_mode: 指定时间为非交易日时，对应的k线数据取值模式，参见KLNoDataMode
        :return: (ret, data)

                ret == RET_OK 返回pd dataframe数据，固定表头包括'code'(代码) 'time_point'(指定的日期) 'data_status' (KLDataStatus)。数据列格式如下

                ret != RET_OK 返回错误字符串

            =================   ===========   ==============================================================================
            参数                  类型                        说明
            =================   ===========   ==============================================================================
            code                str            股票代码
            time_point          str            请求的时间
            data_status         str            数据点是否有效，参见KLDataStatus
            time_key            str            k线时间（美股默认是美东时间，港股A股默认是北京时间）
            open                float          开盘价
            close               float          收盘价
            high                float          最高价
            low                 float          最低价
            pe_ratio            float          市盈率（该字段为比例字段，默认不展示%）
            turnover_rate       float          换手率
            volume              int            成交量
            turnover            float          成交额
            change_rate         float          涨跌幅
            last_close          float          昨收价
            =================   ===========   ==============================================================================
        '''
        req_codes = unique_and_normalize_list(code_list)
        if not code_list:
            error_str = ERROR_STR_PREFIX + "the type of code param is wrong"
            return RET_ERROR, error_str

        req_dates = unique_and_normalize_list(dates)
        if not dates:
            error_str = ERROR_STR_PREFIX + "the type of dates param is wrong"
            return RET_ERROR, error_str

        req_fields = unique_and_normalize_list(fields)
        if not fields:
            req_fields = copy(KL_FIELD.ALL_REAL)
        req_fields = KL_FIELD.normalize_field_list(req_fields)
        if not req_fields:
            error_str = ERROR_STR_PREFIX + "the type of fields param is wrong"
            return RET_ERROR, error_str

        query_processor = self._get_sync_query_processor(
            MultiPointsHisKLine.pack_req, MultiPointsHisKLine.unpack_rsp)

        # 一次性最多取100支股票的数据
        max_req_code_num = 50

        data_finish = False
        list_ret = []
        # 循环请求数据，避免一次性取太多超时
        while not data_finish:
            logger.debug('get_multi_points_history_kline - wait ... %s' % datetime.now())
            kargs = {
                "code_list": req_codes,
                "dates": req_dates,
                "fields": copy(req_fields),
                "ktype": ktype,
                "autype": autype,
                "max_req": max_req_code_num,
                "no_data_mode": int(no_data_mode),
                "conn_id": self.get_sync_conn_id()
            }
            ret_code, msg, content = query_processor(**kargs)
            if ret_code == RET_ERROR:
                return ret_code, msg

            list_kline, has_next = content
            data_finish = (not has_next)

            for dict_item in list_kline:
                item_code = dict_item['code']
                list_ret.append(dict_item)
                if item_code in req_codes:
                    req_codes.remove(item_code)

            if 0 == len(req_codes):
                data_finish = True

        # 表头列
        col_list = ['code', 'time_point', 'data_status']
        for field in req_fields:
            str_field = KL_FIELD.DICT_KL_FIELD_STR[field]
            if str_field not in col_list:
                col_list.append(str_field)

        pd_frame = pd.DataFrame(list_ret, columns=col_list)

        return RET_OK, pd_frame
从本地历史K线中获取多支股票多个时间点的指定数据列

        :param code_list: 单个或多个股票 'HK.00700'  or  ['HK.00700', 'HK.00001']
        :param dates: 单个或多个日期 '2017-01-01' or ['2017-01-01', '2017-01-02']
        :param fields: 单个或多个数据列 KL_FIELD.ALL or [KL_FIELD.DATE_TIME, KL_FIELD.OPEN]
        :param ktype: K线类型
        :param autype: 复权类型
        :param no_data_mode: 指定时间为非交易日时，对应的k线数据取值模式，参见KLNoDataMode
        :return: (ret, data)

                ret == RET_OK 返回pd dataframe数据，固定表头包括'code'(代码) 'time_point'(指定的日期) 'data_status' (KLDataStatus)。数据列格式如下

                ret != RET_OK 返回错误字符串

            =================   ===========   ==============================================================================
            参数                  类型                        说明
            =================   ===========   ==============================================================================
            code                str            股票代码
            time_point          str            请求的时间
            data_status         str            数据点是否有效，参见KLDataStatus
            time_key            str            k线时间（美股默认是美东时间，港股A股默认是北京时间）
            open                float          开盘价
            close               float          收盘价
            high                float          最高价
            low                 float          最低价
            pe_ratio            float          市盈率（该字段为比例字段，默认不展示%）
            turnover_rate       float          换手率
            volume              int            成交量
            turnover            float          成交额
            change_rate         float          涨跌幅
            last_close          float          昨收价
            =================   ===========   ==============================================================================