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

update example

parent c2f950d3
...@@ -5,12 +5,14 @@ Created on 2017-7-10 ...@@ -5,12 +5,14 @@ Created on 2017-7-10
@author: cheng.li @author: cheng.li
""" """
import datetime as dt
import pandas as pd import pandas as pd
from alphamind.analysis.factoranalysis import factor_analysis from alphamind.analysis.factoranalysis import factor_analysis
from alphamind.data.engines.sqlengine import SqlEngine from alphamind.data.engines.sqlengine import SqlEngine
from alphamind.data.engines.universe import Universe from alphamind.data.engines.universe import Universe
from alphamind.data.engines.sqlengine import industry_styles from alphamind.data.engines.sqlengine import industry_styles
from PyFin.api import bizDatesList from PyFin.api import bizDatesList
from PyFin.api import makeSchedule
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'])
...@@ -21,15 +23,16 @@ total_risks = used_risk_styles + industry_styles ...@@ -21,15 +23,16 @@ total_risks = used_risk_styles + industry_styles
build_type = 'risk_neutral' build_type = 'risk_neutral'
def calculate_one_day(ref_date, factors, factor_weights): def calculate_one_day(ref_date, factors, factor_weights, horizon_end=None):
print(ref_date) print(ref_date)
codes = engine.fetch_codes(ref_date, universe) codes = engine.fetch_codes(ref_date, universe)
total_data = engine.fetch_data(ref_date, factors, codes, 905) total_data = engine.fetch_data(ref_date, factors, codes, 905)
factor_data = total_data['factor'] factor_data = total_data['factor']
factor_df = factor_data[['Code', 'industry', 'weight', 'isOpen'] + total_risks + factors].dropna() factor_df = factor_data[['Code', 'industry', 'weight', 'isOpen'] + total_risks + factors].dropna()
dx_return = engine.fetch_dx_return(ref_date, codes) dx_return = engine.fetch_dx_return(ref_date, codes, expiry_date=horizon_end)
factor_df = pd.merge(factor_df, dx_return, on=['Code']) factor_df = pd.merge(factor_df, dx_return, on=['Code'])
weights, _ = factor_analysis(factor_df[factors], weights, _ = factor_analysis(factor_df[factors],
...@@ -51,15 +54,19 @@ if __name__ == '__main__': ...@@ -51,15 +54,19 @@ if __name__ == '__main__':
factors = ['BDTO', 'CFinc1', 'DivP', 'EPS', 'RVOL', 'DROEAfterNonRecurring'] factors = ['BDTO', 'CFinc1', 'DivP', 'EPS', 'RVOL', 'DROEAfterNonRecurring']
factor_weights = [0.10, 0.30, 0.15, 0.18, 0.11, 0.35] factor_weights = [0.10, 0.30, 0.15, 0.18, 0.11, 0.35]
biz_dates = bizDatesList('china.sse', '2017-01-01', '2017-07-07') biz_dates = makeSchedule('2015-01-01', '2017-07-07', '1w', 'china.sse')
ers = [] ers = []
dates = [] dates = []
for ref_date in biz_dates: for i, ref_date in enumerate(biz_dates[:-1]):
ref_date, er = calculate_one_day(ref_date, factors, factor_weights) ref_date = ref_date.strftime("%Y-%m-%d")
try:
ref_date, er = calculate_one_day(ref_date, factors, factor_weights, horizon_end=biz_dates[i+1])
dates.append(ref_date) dates.append(ref_date)
ers.append(er) ers.append(er)
except Exception as e:
print(str(e) + ": {0}".format(ref_date))
res = pd.Series(ers, index=dates) res = pd.Series(ers, index=dates)
res.cumsum().plot() res.cumsum().plot()
......
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