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

update example

parent cc5ffcc0
......@@ -29,31 +29,39 @@ universe = Universe('custom', ['zz500'])
benchmark_code = 905
neutralize_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',
'2017-08-14',
tenor='1w',
tenor=freq,
calendar='china.sse')
final_res = np.zeros((len(dates), n_bins))
total_data_dict = {}
for strategy in strategies:
factors = strategies[strategy]['factors']
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 = []
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')
returns = engine.fetch_dx_return(ref_date, codes, horizon=horizon)
codes = engine.fetch_codes(ref_date, universe)
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()
total_data = pd.merge(data, returns, on=['Code']).dropna()
print(date, ': ', len(total_data))
risk_exp = total_data[neutralize_risk].values.astype(float)
industry = total_data.industry_code.values
......@@ -97,3 +105,4 @@ for strategy in strategies:
ret_df = pd.DataFrame(total_data_dict, index=dates)
ret_df.cumsum().plot(figsize=(12, 6))
plt.savefig("backtest_big_universe_20170814.png")
plt.show()
......@@ -11,15 +11,14 @@ from matplotlib import pyplot as plt
from PyFin.api import *
from alphamind.api import *
#engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
engine = SqlEngine('postgresql+psycopg2://postgres:we083826@localhost/alpha')
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
universe = Universe('custom', ['zz500'])
neutralize_risk = ['SIZE'] + industry_styles
n_bins = 5
factor_weights = np.array([1.])
freq = '1d'
freq = '1w'
if freq == '1m':
horizon = 21
......@@ -40,7 +39,6 @@ prod_factors = ['EARNYILD', 'ROAEBIT', 'CHV', 'CFinc1']
all_data = engine.fetch_data_range(universe, prod_factors, dates=dates, benchmark=905)
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:
......@@ -48,14 +46,12 @@ for factor in prod_factors:
final_res = np.zeros((len(dates), n_bins))
factor_groups = factor_all_data.groupby('Date')
return_groups = return_all_data.groupby('Date')
for i, value in enumerate(factor_groups):
date = value[0]
data = value[1]
codes = data.Code.tolist()
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()
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