Commit 95f000e7 authored by Dr.李's avatar Dr.李

update examples

parent bd3c56b0
...@@ -26,7 +26,7 @@ strategies = { ...@@ -26,7 +26,7 @@ strategies = {
} }
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha") engine = SqlEngine('postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha')
universe = Universe('custom', ['zz500']) universe = Universe('custom', ['zz500'])
benchmark_code = 905 benchmark_code = 905
neutralize_risk = industry_styles neutralize_risk = industry_styles
...@@ -53,17 +53,17 @@ for strategy in strategies: ...@@ -53,17 +53,17 @@ for strategy in strategies:
all_data = engine.fetch_data_range(universe, factors, dates=dates, benchmark=905) all_data = engine.fetch_data_range(universe, factors, dates=dates, benchmark=905)
factor_all_data = all_data['factor'] factor_all_data = all_data['factor']
factor_groups = factor_all_data.groupby('Date') factor_groups = factor_all_data.groupby('trade_date')
rets = [] rets = []
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 = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
returns = engine.fetch_dx_return(ref_date, codes, horizon=horizon) returns = engine.fetch_dx_return(ref_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))
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
......
...@@ -13,19 +13,19 @@ from matplotlib import pyplot as plt ...@@ -13,19 +13,19 @@ from matplotlib import pyplot as plt
# defind your alpha formula here # defind your alpha formula here
base_factors = ['EPS', 'ROEDiluted', 'VAL', 'CFinc1'] base_factors = ['EPS', 'ROEDiluted', 'BTOP']#, 'ROEDiluted', 'VAL', 'CFinc1']
expression = 0. expression = 0.
for name in base_factors: for name in base_factors:
expression = expression + RSI(10, name) expression = expression + LAST(name)
alpha_factor_name = 'alpha_factor' alpha_factor_name = 'alpha_factor'
alpha_factor = {alpha_factor_name: expression} alpha_factor = {alpha_factor_name: expression}
# end of formula definition # end of formula definition
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha") engine = SqlEngine('postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha')
universe = Universe('custom', ['zz500']) universe = Universe('custom', ['zz500'])
benchmark_code = 905 benchmark_code = 905
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
...@@ -39,8 +39,8 @@ elif freq == '1w': ...@@ -39,8 +39,8 @@ elif freq == '1w':
elif freq == '1d': elif freq == '1d':
horizon = 0 horizon = 0
dates = makeSchedule('2017-01-01', dates = makeSchedule('2012-01-01',
'2017-08-18', '2012-08-01',
tenor=freq, tenor=freq,
calendar='china.sse') calendar='china.sse')
...@@ -48,18 +48,20 @@ factor_all_data = engine.fetch_data_range(universe, ...@@ -48,18 +48,20 @@ factor_all_data = engine.fetch_data_range(universe,
alpha_factor, alpha_factor,
dates=dates, dates=dates,
benchmark=905)['factor'] benchmark=905)['factor']
return_all_data = engine.fetch_dx_return_range(universe, dates=dates, horizon=horizon)
factor_groups = factor_all_data.groupby('Date') factor_groups = factor_all_data.groupby('trade_date')
return_groups = return_all_data.groupby('trade_date')
final_res = np.zeros((len(dates), n_bins)) final_res = np.zeros((len(dates), n_bins))
for i, value in enumerate(factor_groups): for i, value in enumerate(factor_groups):
date = value[0] date = value[0]
data = value[1][['Code', alpha_factor_name, 'isOpen', 'weight'] + neutralize_risk] data = value[1][['code', alpha_factor_name, 'isOpen', 'weight'] + neutralize_risk]
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 = engine.fetch_dx_return(date, codes, horizon=horizon) returns = return_groups.get_group(date)
total_data = pd.merge(data, returns, on=['Code']).dropna() total_data = pd.merge(data, returns, on=['code']).dropna()
risk_exp = total_data[neutralize_risk].values.astype(float) risk_exp = total_data[neutralize_risk].values.astype(float)
dx_return = total_data.dx.values dx_return = total_data.dx.values
benchmark = total_data.weight.values benchmark = total_data.weight.values
......
...@@ -14,7 +14,7 @@ from matplotlib import pyplot as plt ...@@ -14,7 +14,7 @@ from matplotlib import pyplot as plt
start = dt.datetime.now() start = dt.datetime.now()
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha") engine = SqlEngine('postgresql+psycopg2://postgres:A12345678!@10.63.6.220/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
...@@ -30,8 +30,8 @@ elif freq == '1w': ...@@ -30,8 +30,8 @@ elif freq == '1w':
elif freq == '1d': elif freq == '1d':
horizon = 0 horizon = 0
start_date = '2017-01-01' start_date = '2012-01-01'
end_date = '2017-08-22' end_date = '2012-08-01'
dates = makeSchedule(start_date, dates = makeSchedule(start_date,
end_date, end_date,
...@@ -39,9 +39,10 @@ dates = makeSchedule(start_date, ...@@ -39,9 +39,10 @@ dates = makeSchedule(start_date,
calendar='china.sse', calendar='china.sse',
dateRule=BizDayConventions.Following) dateRule=BizDayConventions.Following)
prod_factors = ['CHV'] prod_factors = ['EPS']
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)
return_all_data = engine.fetch_dx_return_range(universe, dates=dates, horizon=horizon)
factor_all_data = all_data['factor'] factor_all_data = all_data['factor']
total_df = pd.DataFrame() total_df = pd.DataFrame()
...@@ -51,15 +52,16 @@ for factor in prod_factors: ...@@ -51,15 +52,16 @@ for factor in prod_factors:
factors = [factor] factors = [factor]
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('trade_date')
return_groups = return_all_data.groupby('trade_date')
for i, value in enumerate(factor_groups): for i, value in enumerate(factor_groups):
date = value[0] date = value[0]
data = value[1][['Code', factor, 'isOpen', 'weight'] + neutralize_risk] data = value[1][['code', factor, 'isOpen', 'weight'] + neutralize_risk]
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 = engine.fetch_dx_return(date, codes, horizon=horizon) returns = return_groups.get_group(date)
total_data = pd.merge(data, returns, on=['Code']).dropna() total_data = pd.merge(data, returns, on=['code']).dropna()
print('{0}: {1}'.format(date, len(data))) print('{0}: {1}'.format(date, len(data)))
risk_exp = total_data[neutralize_risk].values.astype(float) risk_exp = total_data[neutralize_risk].values.astype(float)
dx_return = total_data.dx.values dx_return = total_data.dx.values
......
...@@ -13,7 +13,7 @@ from alphamind.data.dbmodel.models import Uqer ...@@ -13,7 +13,7 @@ from alphamind.data.dbmodel.models import Uqer
from alphamind.data.dbmodel.models import Tiny from alphamind.data.dbmodel.models import Tiny
from alphamind.data.dbmodel.models import LegacyFactor from alphamind.data.dbmodel.models import LegacyFactor
engine = SqlEngine('postgresql+psycopg2://postgres:we083826@localhost/alpha') engine = SqlEngine('postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha')
universe = Universe('custom', ['zz500']) universe = Universe('custom', ['zz500'])
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
n_bins = 24 n_bins = 24
...@@ -45,7 +45,7 @@ for t in factor_tables: ...@@ -45,7 +45,7 @@ for t in factor_tables:
for c in t.__table__.columns: for c in t.__table__.columns:
col_names.add(c.name) col_names.add(c.name)
col_names = col_names.difference(set(['Date', 'Code'])) col_names = col_names.difference(set(['trade_date', 'code']))
prod_factors = list(col_names) prod_factors = list(col_names)
...@@ -54,20 +54,20 @@ return_all_data = engine.fetch_dx_return_range(universe, dates=dates, horizon=ho ...@@ -54,20 +54,20 @@ return_all_data = engine.fetch_dx_return_range(universe, dates=dates, horizon=ho
factor_all_data = all_data['factor'] factor_all_data = all_data['factor']
total_df = pd.DataFrame() total_df = pd.DataFrame()
factor_groups = factor_all_data.groupby('Date') factor_groups = factor_all_data.groupby('trade_date')
return_groups = return_all_data.groupby('Date') return_groups = return_all_data.groupby('trade_date')
for date, factor_data in factor_groups: for date, factor_data in factor_groups:
ref_date = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
returns = return_groups.get_group(date) returns = return_groups.get_group(date)
final_res = np.zeros((len(prod_factors), n_bins)) final_res = np.zeros((len(prod_factors), n_bins))
this_date_data = factor_data[['Code', 'isOpen', 'weight'] + prod_factors + neutralize_risk] this_date_data = factor_data[['code', 'isOpen', 'weight'] + prod_factors + neutralize_risk]
this_date_data = pd.merge(this_date_data, returns, on=['Code']) this_date_data = pd.merge(this_date_data, returns, on=['code'])
codes = this_date_data.Code.tolist() codes = this_date_data.code.tolist()
for i, factor in enumerate(prod_factors): for i, factor in enumerate(prod_factors):
factors = [factor] factors = [factor]
total_data = this_date_data[['Code', 'isOpen', 'weight', 'dx'] + factors + neutralize_risk].dropna() total_data = this_date_data[['code', 'isOpen', 'weight', 'dx'] + factors + neutralize_risk].dropna()
risk_exp = total_data[neutralize_risk].values.astype(float) risk_exp = total_data[neutralize_risk].values.astype(float)
dx_return = total_data.dx.values dx_return = total_data.dx.values
benchmark = total_data.weight.values benchmark = total_data.weight.values
...@@ -87,7 +87,7 @@ for date, factor_data in factor_groups: ...@@ -87,7 +87,7 @@ for date, factor_data in factor_groups:
df = pd.DataFrame(final_res, index=prod_factors) df = pd.DataFrame(final_res, index=prod_factors)
df.sort_index(inplace=True) df.sort_index(inplace=True)
df['Date'] = date df['trade_date'] = date
total_df = total_df.append(df) total_df = total_df.append(df)
print('{0} is finished'.format(date)) print('{0} is finished'.format(date))
......
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