コード例 #1
0
    def THS_Snapshot(self,
                     thscode,
                     jsonIndicator,
                     jsonparam,
                     begintime,
                     endtime,
                     max_code_num=None) -> pd.DataFrame:
        """
        日内快照序列
        :param thscode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param jsonIndicator:指标,可以是单个指标也可以是多个指标,指标指标用 分号(‘;’)隔开。例如'close;open'
        :param jsonparam:参数,当前参数只能是dataType:Original
        :param begintime:开始时间,时间格式为YYYY-MM-DD HH:MM:SS,例如2017-05-15 09:30:00。
        :param endtime:截止时间,时间格式为YYYY-MM-DD HH:MM:SS,例如2017-05-15 10:00:00
        :return:
        """
        path = 'THS_Snapshot/'
        code_list = []
        if type(thscode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list.append(','.join(thscode))
            else:
                # 如果 max_code_num 有值,自动分段切割
                for a_list in split_chunk(thscode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thscode)

        df_list = []
        try:
            for sub_list in code_list:
                req_data_dic = {
                    "thscode": sub_list,
                    "jsonIndicator": jsonIndicator,
                    "jsonparam": jsonparam,
                    "begintime": format_2_date_str(begintime),
                    "endtime": format_2_date_str(endtime)
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception('THS_Snapshot(%s, %s, %s, %s, %s, %s) 失败',
                                 thscode, jsonIndicator, jsonparam, begintime,
                                 endtime, max_code_num)
        finally:
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df
コード例 #2
0
    def THS_HistoryQuotes(self,
                          thscode,
                          jsonIndicator,
                          jsonparam,
                          begintime,
                          endtime,
                          max_code_num=None) -> pd.DataFrame:
        """
        历史序列
        :param thscode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param jsonIndicator:指标,可以是单个指标也可以是多个指标,指标指标用 分号(‘;’)隔开。例如'close;open'
        :param jsonparam:参数,可以是默认参数也根据说明可以对参数进行自定义赋值,参数和参数之间用逗号(‘,’)隔开,参数的赋值用冒号(‘:’)。例如' period:D,pricetype:1,rptcategory:1'
        :param begintime:开始时间,时间格式为YYYY-MM-DD,例如2015-06-23
        :param endtime:截止时间,时间格式为YYYY-MM-DD,例如2016-06-23
        :return:
        """
        path = 'THS_HistoryQuotes/'
        code_list = []
        if type(thscode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list.append(','.join(thscode))
            else:
                # 如果 max_code_num 有值,自动分段切割
                for a_list in split_chunk(thscode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thscode)

        df_list = []
        try:
            for sub_list in code_list:
                req_data_dic = {
                    "thscode": sub_list,
                    "jsonIndicator": jsonIndicator,
                    "jsonparam": jsonparam,
                    "begintime": format_2_date_str(begintime),
                    "endtime": format_2_date_str(endtime)
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception(
                    'THS_HistoryQuotes(%s, %s, %s, %s, %s, %s) 失败', thscode,
                    jsonIndicator, jsonparam, begintime, endtime, max_code_num)
        finally:
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df
コード例 #3
0
    def THS_HighFrequenceSequence(self,
                                  thscode,
                                  jsonIndicator,
                                  jsonparam,
                                  begintime,
                                  endtime,
                                  max_code_num=None) -> pd.DataFrame:
        """
        高频序列
        :param thscode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param jsonIndicator:指标,可以是单个指标也可以是多个指标,指标指标用 分号(‘;’)隔开。例如 ths_close_price_stock;ths_open_price_stock
        :param jsonparam:参数,可以是默认参数也根据说明可以对参数进行自定义赋值,参数和参数之间用逗号 (‘ , ’) 隔开, 参 数 的 赋 值 用 冒 号 (‘:’) 。 例 如 100;100
        :param begintime:开始时间,时间格式为YYYY-MM-DD HH:MM:SS,例如2018-05-15 09:30:00
        :param endtime:截止时间,时间格式为YYYY-MM-DD HH:MM:SS,例如2018-05-15 10:00:00
        :return:
        """
        path = 'THS_HighFrequenceSequence/'
        code_list = []
        if type(thscode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list = ','.join(thscode)
            else:
                for a_list in split_chunk(thscode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thscode)

        df_list = []
        try:
            for sub_list in code_list:
                req_data_dic = {
                    "thscode": sub_list,
                    "jsonIndicator": jsonIndicator,
                    "jsonparam": jsonparam,
                    "begintime": format_2_date_str(begintime),
                    "endtime": format_2_date_str(endtime)
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception(
                    'THS_HighFrequenceSequence(%s, %s, %s, %s, %s, %s) 失败',
                    thscode, jsonIndicator, jsonparam, begintime, endtime,
                    max_code_num)
        finally:
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df
コード例 #4
0
    def THS_BasicData(self,
                      thsCode,
                      indicatorName,
                      paramOption,
                      max_code_num=None) -> pd.DataFrame:
        """
        基础数据序列
        :param thsCode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param indicatorName:指标,可以是单个指标也可以是多个指标,指标之间用分号(‘;’)隔开。例如'ths_stock_short_name_stock;ths_np_stock'
        :param paramOption:函数对应的参数,参数和参数之间用逗号(‘,’)隔开。例如';2017-12-31,100'
        :param max_code_num:最大截取数量
        :return:
        """
        path = 'THS_BasicData/'
        code_list = []
        if type(thsCode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list.append(','.join(thsCode))
            else:
                # 如果 max_code_num 有值,自动分段切割
                for a_list in split_chunk(thsCode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thsCode)

        df_list = []
        try:
            for a_list in code_list:
                req_data_dic = {
                    "thsCode": a_list,
                    "indicatorName": indicatorName,
                    "paramOption": paramOption
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception('THS_BasicData(%s, %s, %s, %s) 失败', thsCode,
                                 indicatorName, paramOption, max_code_num)
        finally:
            # 合并数据
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df
コード例 #5
0
    def THS_RealtimeQuotes(self,
                           thscode,
                           jsonIndicator,
                           jsonparam="",
                           max_code_num=None) -> pd.DataFrame:
        """
        实时序列
        :param thscode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param jsonIndicator:指标,可以是单个指标也可以是多个指标,指标之间用分号(‘;’)隔开。例如'close;open'
        :param jsonparam:参数,可以是默认参数也可以根据说明对参数进行自定义赋值,参数和参数之间用逗号(‘,’)隔开,参数的赋值用冒号(‘:’)。例如'pricetype:1'
        :return:
        """
        path = 'THS_RealtimeQuotes/'
        code_list = []
        if type(thscode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list = ','.join(thscode)
            else:
                for a_list in split_chunk(thscode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thscode)

        df_list = []
        try:
            for sub_list in code_list:
                req_data_dic = {
                    "thscode": sub_list,
                    "jsonIndicator": jsonIndicator,
                    "jsonparam": jsonparam
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception('THS_RealtimeQuotes(%s, %s, %s, %s) 失败',
                                 thscode, jsonIndicator, jsonparam,
                                 max_code_num)
        finally:
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df
コード例 #6
0
    def THS_DateSerial(self,
                       thscode,
                       jsonIndicator,
                       jsonparam,
                       globalparam,
                       begintime,
                       endtime,
                       max_code_num=None) -> pd.DataFrame:
        """
        日期序列
        :param thscode:同花顺代码,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如 600004.SH,600007.SH
        :param jsonIndicator:指标,可以是单个指标也可以是多个指标,指标指标用 分号(‘;’)隔开。例如 ths_close_price_stock;ths_open_price_stock
        :param jsonparam:参数,可以是默认参数也根据说明可以对参数进行自定义赋值,参数和参数之间用逗号 (‘ , ’) 隔开, 参 数 的 赋 值 用 冒 号 (‘:’) 。 例 如 100;100
        :param globalparam:参数,可以是默认参数也根据说明可以对参数进行自定义赋值,参数和参数之间用逗号 (‘, ’) 隔开, 参 数 的 赋 值 用 冒 号 (‘:’) 。 例 如 Days:Tradedays,Fill:Previous,Interval:D
        :param begintime:开始时间,时间格式为 YYYY-MM-DD,例如 2018-06-24
        :param endtime:截止时间,时间格式为 YYYY-MM-DD,例如 2018-07-24
        :return:
        """
        path = 'THS_DateSerial/'
        code_list = []
        if type(thscode) == list:
            # 如果是 list 数据,自动 ',' 链接
            if max_code_num is None:
                code_list.append(','.join(thscode))
            else:
                # 如果 max_code_num 有值,自动分段切割
                for a_list in split_chunk(thscode, max_code_num):
                    code_list.append(','.join(a_list))
        else:
            code_list.append(thscode)

        df_list = []
        try:
            for sub_list in code_list:
                req_data_dic = {
                    "thscode": sub_list,
                    "jsonIndicator": jsonIndicator,
                    "jsonparam": jsonparam,
                    "globalparam": globalparam,
                    "begintime": format_2_date_str(begintime),
                    "endtime": format_2_date_str(endtime)
                }
                req_data = json.dumps(req_data_dic)
                json_dic = self._public_post(path, req_data)
                if json_dic is None or len(json_dic) == 0:
                    continue
                df = pd.DataFrame(json_dic)
                df_list.append(df)
        except APIError as exp:
            if len(df_list) == 0:
                if 'errcode' in exp.ret_dic and exp.ret_dic['errcode'] == -4001:
                    logger.warning(
                        'THS_DateSerial(%s, %s, %s, %s, %s, %s, %s) 没有数据',
                        thscode, jsonIndicator, jsonparam, globalparam,
                        begintime, endtime, max_code_num)
                else:
                    raise exp from exp
            else:
                # 对于分段查询的情况,如果中途某一段产生错误(可能是流量不够)则不抛出异常,而将已查询出来的数据返回
                logger.exception(
                    'THS_DateSerial(%s, %s, %s, %s, %s, %s, %s) 失败', thscode,
                    jsonIndicator, jsonparam, globalparam, begintime, endtime,
                    max_code_num)
        finally:
            if len(df_list) > 0:
                df = pd.concat(df_list)
            else:
                df = None
        return df