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
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
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
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
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
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
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
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
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
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