def TsQuery(field_dict, dates, stock, **kwargs): """ 天软时间序列函数 """ field_dict.update({ "'date'": 'DateTimeToStr(sp_time())', "'IDs'": 'DefaultStockID()' }) stock = tradecode_to_tslcode(stock) N = len(dates) func_args = [str(N)] + list(reduce(lambda x, y: x + y, field_dict.items())) func_name = "Nday" script_str = _gstr_from_func(func_name, func_args) end_date = max(dates) if (end_date.hour == 0) and (end_date.minute == 0) and (end_date.second == 0): encode_date = tsl.EncodeDate(end_date.year, end_date.month, end_date.day) else: encode_date = tsl.EncodeDateTime(end_date.year, end_date.month, end_date.day, end_date.hour, end_date.minute, end_date.second, 0) sysparams = {'CurrentDate': encode_date, 'StockID': stock} sysparams.update(kwargs) data = tsl.RemoteExecute(script_str, sysparams) df = parse2DArray(data, column_decode=['IDs', 'date']) df['IDs'] = df['IDs'].apply(tslcode_to_tradecode) df['date'] = pd.DatetimeIndex(df['date']) return df.set_index(['date', 'IDs'])
def CsQueryMultiFields(field_dict, end_date, bk_name=_ashare, stock_list=None, condition="1", **kwargs): """天软Query函数封装 与CsQuery()的不同是,此函数对每只股票提取的字段数量大于1。 """ field_dict.update({"'IDs'": 'DefaultStockID()'}) if stock_list is None: stock_list = "''" else: stock_list = "'%s'" % ";".join(map(tradecode_to_tslcode, stock_list)) if (end_date.hour == 0) and (end_date.minute == 0) and (end_date.second == 0): encode_date = tsl.EncodeDate(end_date.year, end_date.month, end_date.day) else: encode_date = tsl.EncodeDateTime(end_date.year, end_date.month, end_date.day, end_date.hour, end_date.minute, end_date.second, 0) func_name = "Query" func_args = [bk_name, stock_list, condition, "''"] + list( reduce(lambda x, y: x + y, field_dict.items())) script_str = _gstr_from_func(func_name, func_args) sysparams = {'CurrentDate': encode_date} sysparams.update(kwargs) data = tsl.RemoteExecute(script_str, sysparams) df = parseByStock(data) return df
def CsQuery(field_dict, end_date, bk_name=_ashare, stock_list=None, condition="1", **kwargs): """对天软Query函数的封装 Parameters: =========== field_dict: """ field_dict.update({"'IDs'": 'DefaultStockID()'}) if stock_list is None: stock_list = "''" else: stock_list = "'%s'" % ";".join(map(tradecode_to_tslcode, stock_list)) if (end_date.hour == 0) and (end_date.minute == 0) and (end_date.second == 0): encode_date = tsl.EncodeDate(end_date.year, end_date.month, end_date.day) else: encode_date = tsl.EncodeDateTime(end_date.year, end_date.month, end_date.day, end_date.hour, end_date.minute, end_date.second, 0) func_name = "Query" func_args = [bk_name, stock_list, condition, "''"] + list( reduce(lambda x, y: x + y, field_dict.items())) script_str = _gstr_from_func(func_name, func_args) sysparams = {'CurrentDate': encode_date} sysparams.update(kwargs) data = tsl.RemoteExecute(script_str, sysparams) df = parse2DArray(data, column_decode=['IDs']) df['IDs'] = df['IDs'].apply(tslcode_to_tradecode) df['date'] = end_date return df.set_index(['date', 'IDs'])
def CsQuery(field_dict, end_date, bk_name=_ashare, stock_list=None, condition="1", code_transfer=True, **kwargs): """对天软Query函数的封装 Parameters: =========== field_dict: dict 计算字段{字段名称: 函数名称},字段名称需自加单引号。 例:{"'IDs'": 'DefaultStockID()'} end_daet: str 截面日期 bk_name: str 天软板块名称,以分号分割。 stock_list: list 股票列表,默认的格式是6位代码 condition: str 天软Csquery参数 code_transfer: bool 是否要将股票列表的代码转为天软格式。如果stock_list中代码格式 没有后缀,那code_transfer需为True。 kwargs: dict 天软系统参数 """ field_dict.update({"'IDs'": 'DefaultStockID()'}) if stock_list is None: stock_list = "''" else: if code_transfer: stock_list = "'%s'" % ";".join( map(tradecode_to_tslcode, stock_list)) else: stock_list = "'%s'" % ";".join(stock_list) if (end_date.hour == 0) and (end_date.minute == 0) and (end_date.second == 0): encode_date = tsl.EncodeDate(end_date.year, end_date.month, end_date.day) else: encode_date = tsl.EncodeDateTime(end_date.year, end_date.month, end_date.day, end_date.hour, end_date.minute, end_date.second, 0) func_name = "Query" func_args = [bk_name, stock_list, condition, "''"] + list( reduce(lambda x, y: x + y, field_dict.items())) script_str = _gstr_from_func(func_name, func_args) sysparams = {'CurrentDate': encode_date} sysparams.update(kwargs) data = tsl.RemoteExecute(script_str, sysparams) df = parse2DArray(data, column_decode=['IDs']) df['IDs'] = df['IDs'].apply(tslcode_to_tradecode) df['date'] = end_date return df.set_index(['date', 'IDs'])
def encode_date(year, month, day): return tsl.EncodeDate(year, month, day)
return d2[1] else: print(d2[2]) if __name__ == '__main__': cy = '日线' dfcode = pd.read_excel('stockcode.xlsx') stockcode = dfcode['代码'].tolist() # 搞成天软格式的时间 # 起始日 sdate = ts.EncodeDate(2017, 1, 1) # 终止日 edate = ts.EncodeDate(2019, 10, 20) # 获取交易日序列 dateS = getTSdate(sdate, edate) # 解析结果的list s2_close = [] s2_low = [] s2_datetime = [] s2_high = [] s2_code = [] df2 = pd.DataFrame() # 整理所有数据
def getTSdata_day(sdate, edate, stockID, cy): '''通过天软获取日线''' d2 = ts.RemoteCallFunc('MyGetTimeSeries', [sdate, edate, stockID, cy], {}) if d2[0] == 0: return d2[1] else: print(d2[2]) # 搞成天软格式的时间 # 起始日 sdate = ts.EncodeDate(2017, 6, 4) # 终止日 edate = ts.EncodeDate(2018, 6, 4) # 天软时间变正常时间 # ts.DecodeDate(43200) # stock1='IC01' # 天软里面的当月连续 # stock2='IC02' # 天软里面的次月连续 # # 获取期货合约代码 # 周期 cy = '1分钟线'
def TSDate(Y, M, D): d = tp.EncodeDate(Y, M, D) return d