import data_merge as dm import factor_test as ft cash_flow = dbi.get_stocks_data('equity_selected_cashflow_sheet_q', ['net_incr_cash_cash_equ'], '2004-01-01', '2018-03-01') cash_flow['ncf_ttm'] = cash_flow.groupby('stkcd')[[ 'net_incr_cash_cash_equ' ]].apply(lambda x: x.rolling(4, min_periods=4).sum()) store = pd.HDFStore('test_data.h5') fdmt = store['fundamental_info'] retn_1m = store['retn_1m'] retn_1m_zz500 = store['retn_1m_zz500'] store.close() data = dm.factor_merge(fdmt, cash_flow) data = data.loc[:, ['stkcd', 'trd_dt', 'wind_indcd', 'cap', 'ncf_ttm']] data['NCFP_TTM_raw'] = data['ncf_ttm'] / (10000 * data['cap']) ncf_raw = data['NCFP_TTM_raw'].groupby(level=1).describe() data.drop(pd.to_datetime(['2005-01-31', '2005-02-28', '2005-03-31']), level=1, inplace=True) data = dc.clean(data, 'NCFP_TTM') data = data.set_index(['trd_dt', 'stkcd']) data.index.names = ['trade_date', 'stock_ID'] signal_input = data[['NCFP_TTM_neu']] test_data = ft.data_join(retn_1m, signal_input) btic_des, btic_m = ft.btic(test_data, 'NCFP_TTM') layer_des = ft.layer_result(test_data, retn_1m_zz500, 'NCFP_TTM')
['net_profit_excl_min_int_inc'], '2004-01-01', '2018-03-01') net_profit['net_profit_emi_ttm'] = net_profit.groupby('stkcd')[[ 'net_profit_excl_min_int_inc' ]].apply(lambda x: x.rolling(4, min_periods=4).sum()) net_profit['growth'] = net_profit.groupby('stkcd')[[ 'net_profit_emi_ttm' ]].apply(lambda x: x.pct_change()) store = pd.HDFStore('test_data.h5') fdmt = store['fundamental_info'] retn_1m = store['retn_1m'] retn_1m_zz500 = store['retn_1m_zz500'] store.close() data = dm.factor_merge(fdmt, net_profit) data = data.loc[:, [ 'stkcd', 'trd_dt', 'wind_indcd', 'cap', 'net_profit_emi_ttm', 'growth' ]] data['PEG_TTM_raw'] = 100 * data['cap'] / data['net_profit_emi_ttm'] / data[ 'growth'] p_raw = data['PEG_TTM_raw'].groupby(level=1).describe() data.drop(pd.to_datetime(['2005-01-31', '2005-02-28', '2005-03-31']), level=1, inplace=True) data = dc.clean(data, 'PEG_TTM') data = data.set_index(['trd_dt', 'stkcd']) data.index.names = ['trade_date', 'stock_ID'] signal_input = data[['PEG_TTM_neu']] test_data = ft.data_join(retn_1m, signal_input) btic_des, btic_m = ft.btic(test_data, 'PEG_TTM')
import sys sys.path.append(r'E:\FT_Users\XQZhu\stocks_backtest\self_lib') # 自定义的函数 import pandas as pd import database_api as dbi import data_clean as dc import data_merge as dm import factor_test as ft divid = dbi.get_stocks_data('equity_cash_dividend', ['cash_div'], '2004-01-01', '2018-03-01') store = pd.HDFStore('test_data.h5') fdmt = store['fundamental_info'] retn_1m = store['retn_1m'] retn_1m_zz500 = store['retn_1m_zz500'] store.close() data = dm.factor_merge(fdmt, divid) data = data.loc[:, ['stkcd', 'trd_dt', 'wind_indcd', 'cap', 'cash_div']] data['DP_raw'] = data['cash_div'] / data['cap'] dp_raw = data['DP_raw'].groupby(level=1).describe() data.drop(pd.to_datetime(['2005-01-31', '2005-02-28', '2005-03-31']), level=1, inplace=True) data = dc.clean(data, 'DP') data = data.set_index(['trd_dt', 'stkcd']) data.index.names = ['trade_date', 'stock_ID'] signal_input = data[['DP_neu']] test_data = ft.data_join(retn_1m, signal_input) btic_des, btic_m = ft.btic(test_data, 'DP') layer_des = ft.layer_result(test_data, retn_1m_zz500, 'NCFP_TTM', quantile=5)
exec(open(r'E:\FT_Users\XQZhu\stocks_backtest\prerun.py').read()) import sys sys.path.append(r'E:\FT_Users\XQZhu\stocks_backtest\self_lib') # 自定义的函数 import pandas as pd import database_api as dbi import data_merge as dm import data_clean as dc oper_rev = dbi.get_stocks_data('equity_selected_income_sheet_q', ['oper_rev'], '2004-01-01', '2018-03-01') oper_rev['oper_rev_ttm'] = oper_rev.groupby('stkcd')[['oper_rev']].apply( lambda x: x.rolling(4, min_periods=4).sum()) store = pd.HDFStore('test_data.h5') fdmt = store['fundamental_info'] store.close() data = dm.factor_merge(fdmt, oper_rev) data = data.loc[:, ['stkcd', 'trd_dt', 'wind_indcd', 'cap', 'oper_rev_ttm']] data['SP_TTM_raw'] = data['oper_rev_ttm'] / (10000 * data['cap']) s_raw = data['SP_TTM_raw'].groupby(level=1).describe() data.drop(pd.to_datetime(['2005-01-31', '2005-02-28', '2005-03-31']), level=1, inplace=True) data = dc.clean(data, 'SP_TTM') signal_input, test_data = dm.test_merge(data, 'SP_TTM_neu', close_price_post) dm.test_result(test_data, 'SP_TTM_neu', 'close_price_post') store = pd.HDFStore('test_data.h5') store['SP_TTM_neu'] = signal_input store.close()