Commit ca79db7e authored by Dr.李's avatar Dr.李

update example

parent cc5ffcc0
...@@ -29,31 +29,39 @@ universe = Universe('custom', ['zz500']) ...@@ -29,31 +29,39 @@ universe = Universe('custom', ['zz500'])
benchmark_code = 905 benchmark_code = 905
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
constraint_risk = ['SIZE'] + industry_styles constraint_risk = ['SIZE'] + industry_styles
n_bins = 5 freq = '1w'
if freq == '1m':
horizon = 21
elif freq == '1w':
horizon = 4
elif freq == '1d':
horizon = 0
dates = makeSchedule('2012-01-14', dates = makeSchedule('2012-01-14',
'2017-08-14', '2017-08-14',
tenor='1w', tenor=freq,
calendar='china.sse') calendar='china.sse')
final_res = np.zeros((len(dates), n_bins))
total_data_dict = {} total_data_dict = {}
for strategy in strategies: for strategy in strategies:
factors = strategies[strategy]['factors'] factors = strategies[strategy]['factors']
factor_weights = strategies[strategy]['weights'] factor_weights = strategies[strategy]['weights']
all_data = engine.fetch_data_range(universe, factors, dates=dates, benchmark=905)
factor_all_data = all_data['factor']
factor_groups = factor_all_data.groupby('Date')
rets = [] rets = []
for i, date in enumerate(dates): for i, value in enumerate(factor_groups):
date = value[0]
data = value[1]
codes = data.Code.tolist()
ref_date = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
returns = engine.fetch_dx_return(ref_date, codes, horizon=horizon)
codes = engine.fetch_codes(ref_date, universe) total_data = pd.merge(data, returns, on=['Code']).dropna()
data = engine.fetch_data(ref_date, factors, codes, benchmark_code)
returns = engine.fetch_dx_return(ref_date, codes, horizon=4)
total_data = pd.merge(data['factor'], returns, on=['Code']).dropna()
print(date, ': ', len(total_data)) print(date, ': ', len(total_data))
risk_exp = total_data[neutralize_risk].values.astype(float) risk_exp = total_data[neutralize_risk].values.astype(float)
industry = total_data.industry_code.values industry = total_data.industry_code.values
...@@ -97,3 +105,4 @@ for strategy in strategies: ...@@ -97,3 +105,4 @@ for strategy in strategies:
ret_df = pd.DataFrame(total_data_dict, index=dates) ret_df = pd.DataFrame(total_data_dict, index=dates)
ret_df.cumsum().plot(figsize=(12, 6)) ret_df.cumsum().plot(figsize=(12, 6))
plt.savefig("backtest_big_universe_20170814.png") plt.savefig("backtest_big_universe_20170814.png")
plt.show()
...@@ -11,15 +11,14 @@ from matplotlib import pyplot as plt ...@@ -11,15 +11,14 @@ from matplotlib import pyplot as plt
from PyFin.api import * from PyFin.api import *
from alphamind.api import * from alphamind.api import *
#engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha") engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
engine = SqlEngine('postgresql+psycopg2://postgres:we083826@localhost/alpha')
universe = Universe('custom', ['zz500']) universe = Universe('custom', ['zz500'])
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
n_bins = 5 n_bins = 5
factor_weights = np.array([1.]) factor_weights = np.array([1.])
freq = '1d' freq = '1w'
if freq == '1m': if freq == '1m':
horizon = 21 horizon = 21
...@@ -40,7 +39,6 @@ prod_factors = ['EARNYILD', 'ROAEBIT', 'CHV', 'CFinc1'] ...@@ -40,7 +39,6 @@ prod_factors = ['EARNYILD', 'ROAEBIT', 'CHV', 'CFinc1']
all_data = engine.fetch_data_range(universe, prod_factors, dates=dates, benchmark=905) all_data = engine.fetch_data_range(universe, prod_factors, dates=dates, benchmark=905)
factor_all_data = all_data['factor'] factor_all_data = all_data['factor']
return_all_data = engine.fetch_dx_return_range(universe, start_date, end_date, dates, horizon=horizon)
for factor in prod_factors: for factor in prod_factors:
...@@ -48,14 +46,12 @@ for factor in prod_factors: ...@@ -48,14 +46,12 @@ for factor in prod_factors:
final_res = np.zeros((len(dates), n_bins)) final_res = np.zeros((len(dates), n_bins))
factor_groups = factor_all_data.groupby('Date') factor_groups = factor_all_data.groupby('Date')
return_groups = return_all_data.groupby('Date')
for i, value in enumerate(factor_groups): for i, value in enumerate(factor_groups):
date = value[0] date = value[0]
data = value[1] data = value[1]
codes = data.Code.tolist() codes = data.Code.tolist()
ref_date = value[0].strftime('%Y-%m-%d') ref_date = value[0].strftime('%Y-%m-%d')
returns = return_groups.get_group(date) returns = engine.fetch_dx_return(date, codes, horizon=horizon)
total_data = pd.merge(data, returns, on=['Code']).dropna() total_data = pd.merge(data, returns, on=['Code']).dropna()
print(date, ': ', len(total_data)) print(date, ': ', len(total_data))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment