Commit 4440b488 authored by Dr.李's avatar Dr.李

modified

parent 903df29d
...@@ -1074,19 +1074,18 @@ class Uqer(Base): ...@@ -1074,19 +1074,18 @@ class Uqer(Base):
class SecurityMaster(Base): class SecurityMaster(Base):
__tablename__ = 'security_master' __tablename__ = 'security_master'
Code = Column(Integer, primary_key=True) exchangeCD = Column(String(4))
exchangeCD = Column(Text())
ListSectorCD = Column(BigInteger) ListSectorCD = Column(BigInteger)
ListSector = Column(Text()) ListSector = Column(String(6))
transCurrCD = Column(Text()) transCurrCD = Column(Text())
secShortName = Column(Text()) secShortName = Column(String(10))
secFullName = Column(Text()) secFullName = Column(Text())
listStatusCD = Column(Text()) listStatusCD = Column(String(2))
listDate = Column(DateTime) listDate = Column(DateTime)
delistDate = Column(DateTime) delistDate = Column(DateTime)
equTypeCD = Column(Text()) equTypeCD = Column(String(4))
equType = Column(Text()) equType = Column(String(10))
exCountryCD = Column(Text()) exCountryCD = Column(String(3))
partyID = Column(BigInteger) partyID = Column(BigInteger)
totalShares = Column(Float(53)) totalShares = Column(Float(53))
nonrestFloatShares = Column(Float(53)) nonrestFloatShares = Column(Float(53))
...@@ -1095,6 +1094,7 @@ class SecurityMaster(Base): ...@@ -1095,6 +1094,7 @@ class SecurityMaster(Base):
primeOperating = Column(Text()) primeOperating = Column(Text())
endDate = Column(DateTime) endDate = Column(DateTime)
TShEquity = Column(Float(53)) TShEquity = Column(Float(53))
Code = Column(Integer, primary_key=True)
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -11,33 +11,50 @@ from matplotlib import pyplot as plt ...@@ -11,33 +11,50 @@ from matplotlib import pyplot as plt
from PyFin.api import makeSchedule from PyFin.api import makeSchedule
from alphamind.api import * from alphamind.api import *
strategies = {
'prod': {
'factors': ['RVOL', 'EPS', 'DROEAfterNonRecurring', 'DivP', 'CFinc1', 'BDTO'],
'weights': [0.05, 0.3, 0.35, 0.075, 0.15, 0.05]
},
'candidate': {
'factors': ['RVOL', 'EPS', 'CFinc1', 'BDTO', 'VAL', 'GREV', 'ROEDiluted'],
'weights': [0.02, 0.2, 0.15, 0.05, 0.2, 0.2, 0.2]
}
}
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha") engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
universe = Universe('custom', ['zz500']) universe = Universe('custom', ['zz500'])
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 n_bins = 5
factors = ['ROEDiluted'] dates = makeSchedule('2012-01-14',
factor_weights = np.array([1.])
dates = makeSchedule('2017-01-01',
'2017-08-14', '2017-08-14',
tenor='1w', tenor='1w',
calendar='china.sse') calendar='china.sse')
final_res = np.zeros((len(dates), n_bins)) final_res = np.zeros((len(dates), n_bins))
rets = []
for i, date in enumerate(dates): total_data_dict = {}
print(date)
for strategy in strategies:
factors = strategies[strategy]['factors']
factor_weights = strategies[strategy]['weights']
rets = []
for i, date in enumerate(dates):
ref_date = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
codes = engine.fetch_codes(ref_date, universe) codes = engine.fetch_codes(ref_date, universe)
data = engine.fetch_data(ref_date, factors, codes, 905) data = engine.fetch_data(ref_date, factors, codes, benchmark_code)
returns = engine.fetch_dx_return(ref_date, codes, horizon=4) 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['factor'], returns, on=['Code']).dropna()
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
dx_return = total_data.dx.values dx_return = total_data.dx.values
...@@ -66,14 +83,17 @@ for i, date in enumerate(dates): ...@@ -66,14 +83,17 @@ for i, date in enumerate(dates):
benchmark=benchmark, benchmark=benchmark,
is_tradable=total_data.isOpen.values.astype(bool), is_tradable=total_data.isOpen.values.astype(bool),
method='risk_neutral', method='risk_neutral',
constraints=constraint) constraints=constraint,
except: use_rank=100)
print(date, ' is error!') except Exception as e:
print(e)
rets.append(0.) rets.append(0.)
else: else:
rets.append(analysis.er[-1]) rets.append(analysis.er[-1] / benchmark.sum())
total_data_dict[strategy] = rets
ret_series = pd.Series(rets, dates) ret_df = pd.DataFrame(total_data_dict, index=dates)
ret_series.cumsum().plot(figsize=(12, 6)) ret_df.cumsum().plot(figsize=(12, 6))
plt.title('{0} weekly reblance'.format(factors)) plt.savefig("backtest_big_universe_20170814.png")
plt.show()
...@@ -12,21 +12,26 @@ from PyFin.api import makeSchedule ...@@ -12,21 +12,26 @@ from PyFin.api import makeSchedule
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")
universe = Universe('custom', ['zz500']) #engine = SqlEngine('postgresql+psycopg2://postgres:A12345678!@10.63.6.220/alpha')
universe = Universe('custom', ['pm500_mirror'])
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
n_bins = 5 n_bins = 5
factors = ['ROEDiluted']
factor_weights = np.array([1.]) factor_weights = np.array([1.])
dates = makeSchedule('2017-01-01', dates = makeSchedule('2016-08-14',
'2017-08-14', '2017-08-14',
tenor='1w', tenor='1w',
calendar='china.sse') calendar='china.sse')
final_res = np.zeros((len(dates), n_bins)) prod_factors = ['EARNYILD', 'ROAEBIT']
for factor in prod_factors:
for i, date in enumerate(dates): factors = [factor]
print(date) final_res = np.zeros((len(dates), n_bins))
for i, date in enumerate(dates):
ref_date = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
codes = engine.fetch_codes(ref_date, universe) codes = engine.fetch_codes(ref_date, universe)
...@@ -35,6 +40,7 @@ for i, date in enumerate(dates): ...@@ -35,6 +40,7 @@ for i, date in enumerate(dates):
returns = engine.fetch_dx_return(ref_date, codes, horizon=4) 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['factor'], returns, on=['Code']).dropna()
print(date, ': ', len(total_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
benchmark = total_data.weight.values benchmark = total_data.weight.values
...@@ -47,13 +53,15 @@ for i, date in enumerate(dates): ...@@ -47,13 +53,15 @@ for i, date in enumerate(dates):
risk_exp=risk_exp, risk_exp=risk_exp,
n_bins=n_bins, n_bins=n_bins,
benchmark=benchmark) benchmark=benchmark)
except: except Exception as e:
print(date, ' is error!') print(e)
res = np.zeros(n_bins) res = np.zeros(n_bins)
final_res[i] = res final_res[i] = res / benchmark.sum()
df = pd.DataFrame(final_res, index=dates)
df.cumsum().plot(figsize=(12, 6))
plt.title('{0} weekly re-balance'.format(factors[0]))
plt.savefig('{0}_big_universe_20170814.png'.format(factors[0]))
df = pd.DataFrame(final_res, index=dates)
df.cumsum().plot(figsize=(12, 6))
plt.title('{0} weekly reblance'.format(factors))
plt.show() plt.show()
\ No newline at end of file
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