def test_align(): # ------------------------------------------------------------------------------------- # input and pre-process demo data ds = RemoteDataService() ds.init_from_config() raw, msg = ds.query_lb_fin_stat('income', '600000.SH', 20151225, 20170501, 'oper_rev') assert msg == '0,' idx_list = ['report_date', 'symbol'] raw_idx = raw.set_index(idx_list) raw_idx.sort_index(axis=0, level=idx_list, inplace=True) df_ann = raw_idx.loc[pd.IndexSlice[:, :], 'ann_date'] df_ann = df_ann.unstack(level=1) df_value = raw_idx.loc[pd.IndexSlice[:, :], 'oper_rev'] df_value = df_value.unstack(level=1) date_arr = ds.get_trade_date_range(20160101, 20170501) df_close = pd.DataFrame(index=date_arr, columns=df_value.columns, data=1e3) # ------------------------------------------------------------------------------------- # demo usage of parser parser = Parser() parser.register_function( 'Myfunc', lambda x: x * 0 + 1) # simultaneously test register function and align expr_formula = 'revenue / Myfunc(close)' expression = parser.parse(expr_formula) for i in range(100): df_res = parser.evaluate({ 'revenue': df_value, 'close': df_close }, df_ann, date_arr) # ------------------------------------------------------------------------------------- sec = '600000.SH' """ # print to validate results print "\n======Expression Formula:\n{:s}".format(expr_formula) print "\n======Report date, ann_date and evaluation value:" tmp = pd.concat([df_ann.loc[:, sec], df_value.loc[:, sec]], axis=1) tmp.columns = ['df_ann', 'df_value'] print tmp print "\n======Selection of result of expansion:" print "20161028 {:.4f}".format(df_res.loc[20161028, sec]) print "20161031 {:.4f}".format(df_res.loc[20161031, sec]) print "20170427 {:.4f}".format(df_res.loc[20170427, sec]) """ assert abs(df_res.loc[20161028, sec] - 82172000000) < 1 assert abs(df_res.loc[20161031, sec] - 120928000000) < 1 assert abs(df_res.loc[20170427, sec] - 42360000000) < 1
def test_remote_data_service_lb(): ds = RemoteDataService() # test lb.secDailyIndicator fields = "pb,pe,share_float_free,net_assets,limit_status" for res3, msg3 in [ds.query("lb.secDailyIndicator", fields=fields, filter="symbol=600030.SH&start_date=20170907&end_date=20170907", orderby="trade_date"), ds.query_lb_dailyindicator('600030.SH', 20170907, 20170907, fields)]: assert msg3 == '0,' assert abs(res3.loc[0, 'pb'] - 1.5135) < 1e-4 assert abs(res3.loc[0, 'share_float_free'] - 781496.5954) < 1e-4 assert abs(res3.loc[0, 'net_assets'] - 1.437e11) < 1e8 assert res3.loc[0, 'limit_status'] == 0 # test lb.income for res4, msg4 in [ds.query("lb.income", fields="", filter="symbol=600000.SH&start_date=20150101&end_date=20170101&report_type=408001000", order_by="report_date"), ds.query_lb_fin_stat('income', '600000.SH', 20150101, 20170101, fields="")]: assert msg4 == '0,' assert res4.shape == (8, 12) assert abs(res4.loc[4, 'oper_rev'] - 120928000000) < 1