Esempio n. 1
0
 def wsd(self,
         codes,
         fields,
         beginTime,
         endTime,
         options="") -> pd.DataFrame:
     """
     获取历史序列数据
     :param codes:数据集名称
     :param fields:指标
     :param beginTime:开始时间
     :param endTime:结束时间
     :param options:可选参数
     :return:
     """
     path = 'wsd/'
     if isinstance(codes, list):
         codes = ','.join(codes)
     if isinstance(fields, list):
         fields = ','.join(fields)
     req_data_dic = {
         "codes": codes,
         "fields": fields,
         "beginTime": format_2_date_str(beginTime),
         "endTime": format_2_date_str(endTime),
         "options": options
     }
     req_data = json.dumps(req_data_dic)
     json_dic = self.public_post(path, req_data)
     df = pd.DataFrame(json_dic).T
     return df
Esempio n. 2
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
Esempio n. 3
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
Esempio n. 4
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
Esempio n. 5
0
 def THS_EDBQuery(self, indicators, begintime, endtime) -> pd.DataFrame:
     """
     EDB序列
     :param indicators:EDB指标ID,可以是单个代码也可以是多个代码,代码之间用逗号(‘,’)隔开。例如'M001620326,M002822183'
     :param begintime:开始时间,时间格式为YYYY-MM-DD,例如2015-06-23
     :param endtime:截止时间,时间格式为YYYY-MM-DD,例如2016-06-23
     :return:
     """
     path = 'THS_EDBQuery/'
     req_data_dic = {
         "indicators": indicators,
         "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)
     df = pd.DataFrame(json_dic)
     return df
Esempio n. 6
0
 def tdays(self, beginTime, endTime, options="") -> dict:
     """
     获取区间内的日期序列
     :param beginTime:开始时间
     :param endTime:结束时间
     :param options:可选参数
     :return:
     """
     path = 'tdays/'
     req_data_dic = {
         "beginTime": format_2_date_str(beginTime),
         "endTime": format_2_date_str(endTime),
         "options": options
     }
     req_data = json.dumps(req_data_dic)
     json_dic = self.public_post(path, req_data)
     # df = pd.DataFrame(json_dic)
     return json_dic
Esempio n. 7
0
 def THS_DateQuery(self, exchange, params, begintime,
                   endtime) -> pd.DataFrame:
     """
     日期查询序列
     :param exchange:交易所简称。例如'SSE'
     :param begintime:开始时间,时间格式为YYYY-MM-DD,例如2018-01-01
     :param params:时间频率、日期格式、日期类型,例如:'dateType:0,period:D,dateFormat:0'
     :param endtime:截止时间,时间格式为YYYY-MM-DD,例如2018-06-23
     :return:
     """
     path = 'THS_DateQuery/'
     req_data_dic = {
         "exchange": exchange,
         "params": params,
         "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)
     df = pd.DataFrame(json_dic)
     return df
Esempio n. 8
0
 def edb(self, codes, beginTime, endTime, options) -> pd.DataFrame:
     """
     获取EDB序列
     :param codes:数据集名称
     :param beginTime:开始时间
     :param endTime:结束时间
     :param options:可选参数
     :return:
     """
     path = 'edb/'
     if isinstance(codes, list):
         codes = ','.join(codes)
     req_data_dic = {
         "codes": codes,
         "beginTime": format_2_date_str(beginTime),
         "endTime": format_2_date_str(endTime),
         "options": options
     }
     req_data = json.dumps(req_data_dic)
     json_dic = self.public_post(path, req_data)
     df = pd.DataFrame(json_dic).T
     return df
Esempio n. 9
0
 def tdaysoffset(self, offset, beginTime, options="") -> dict:
     """
     获取某个偏移值对应的日期
     :param offset:偏移值
     :param beginTime:基准日
     :param options:可选参数
     :return:
     """
     path = 'tdaysoffset/'
     req_data_dic = {
         "offset": offset,
         "beginTime": format_2_date_str(beginTime),
         "options": options
     }
     req_data = json.dumps(req_data_dic)
     json_dic = self.public_post(path, req_data)
     date_str = json_dic['Date']
     return date_str
Esempio n. 10
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