Commit 0a5a5b7e authored by Dr.李's avatar Dr.李

update examples

parent 24995683
...@@ -10,5 +10,4 @@ Alpha_Mind.egg-info/* ...@@ -10,5 +10,4 @@ Alpha_Mind.egg-info/*
*.nbc *.nbc
*.nbi *.nbi
/notebooks/.ipynb_checkpoints /notebooks/.ipynb_checkpoints
alphamind/examples/*
notebooks/* notebooks/*
\ No newline at end of file
# -*- coding: utf-8 -*-
"""
Created on 2017-5-15
@author: cheng.li
"""
\ No newline at end of file
# -*- coding: utf-8 -*-
"""
Created on 2017-5-15
@author: cheng.li
"""
risk_factors_500 = ['CommunicationsAndTransportation',
'LeisureServices',
'MultiMedia',
'PublicUtility',
'Agriculture',
'ChemicalIndustry',
'MedicationAndBio',
'CommercialTrade',
'DefenseIndustry',
'HouseholdAppliances',
'ConstructionAndMaterial',
'BuildingDecoration',
'RealEstate',
'DiversifiedMetal',
'Machinary',
'MotorVehicle',
'ElectronicIndustry',
'ElectricalEquip',
'TextileAndGarment',
'Synthetics',
'Computer',
'LightManufacturing',
'Telecoms',
'ExtractiveIndustry',
'Metal',
'FoodAndBeverage',
'Size']
risk_factors_300 = ['CommunicationsAndTransportation',
'LeisureServices',
'MultiMedia',
'PublicUtility',
'Agriculture',
'ChemicalIndustry',
'MedicationAndBio',
'CommercialTrade',
'DefenseIndustry',
'HouseholdAppliances',
'ConstructionAndMaterial',
'BuildingDecoration',
'RealEstate',
'DiversifiedMetal',
'Machinary',
'MotorVehicle',
'ElectronicIndustry',
'ElectricalEquip',
'TextileAndGarment',
'Synthetics',
'Computer',
'Telecoms',
'ExtractiveIndustry',
'Metal',
'FoodAndBeverage',
'Size']
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on 2017-7-10 Created on 2017-8-16
@author: cheng.li @author: cheng.li
""" """
import numpy as np import numpy as np
import pandas as pd import pandas as pd
from alphamind.analysis.factoranalysis import factor_analysis from matplotlib import pyplot as plt
from alphamind.data.engines.sqlengine import risk_styles from PyFin.api import makeSchedule
from alphamind.data.engines.sqlengine import industry_styles from alphamind.api import *
from alphamind.portfolio.constraints import Constraints
from alphamind.data.engines.sqlengine import SqlEngine
from alphamind.data.engines.universe import Universe
from PyFin.api import bizDatesList
engine = SqlEngine('mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha')
universe = Universe('custom', ['zz500'])
dates = bizDatesList('china.sse', '2017-01-01', '2017-08-05')
factors = ['EPS', 'FEARNG', 'VAL', 'NIAP']
f_weights = np.array([1., 1., 1., 1.])
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
universe = Universe('custom', ['zz500'])
neutralize_risk = ['SIZE'] + industry_styles neutralize_risk = ['SIZE'] + industry_styles
constraint_risk = [] constraint_risk = ['SIZE'] + industry_styles
n_bins = 5
factors = ['ROEDiluted']
factor_weights = np.array([1.])
dates = makeSchedule('2017-01-01',
'2017-08-14',
tenor='1w',
calendar='china.sse')
final_res = np.zeros((len(dates), n_bins))
rets = [] rets = []
for date in dates: for i, date in enumerate(dates):
print(date) print(date)
ref_date = date.strftime('%Y-%m-%d') ref_date = date.strftime('%Y-%m-%d')
codes = engine.fetch_codes(ref_date, universe)
data = engine.fetch_data(ref_date, factors, codes, 905, risk_model='short')
returns = engine.fetch_dx_return(ref_date, codes, 0)
total_data = pd.merge(data['factor'], returns, on=['Code']).dropna()
risk_cov = data['risk_cov']
total_risks = risk_cov.Factor codes = engine.fetch_codes(ref_date, universe)
risk_cov = risk_cov[total_risks]
risk_exp = total_data[total_risks]
stocks_cov = ((risk_exp.values @ risk_cov.values @ risk_exp.values.T) + np.diag(total_data.SRISK ** 2)) / 10000.
f_data = total_data[factors] data = engine.fetch_data(ref_date, factors, codes, 905)
returns = engine.fetch_dx_return(ref_date, codes, horizon=4)
total_data = pd.merge(data['factor'], returns, on=['Code']).dropna()
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
benchmark = total_data.weight.values benchmark = total_data.weight.values
risk_exp = total_data[neutralize_risk].values
constraint_exp = total_data[constraint_risk].values constraint_exp = total_data[constraint_risk].values
risk_exp_expand = np.concatenate((constraint_exp, np.ones((len(risk_exp), 1))), axis=1).astype(float) risk_exp_expand = np.concatenate((constraint_exp, np.ones((len(risk_exp), 1))), axis=1).astype(float)
risk_names = constraint_risk + ['total'] risk_names = constraint_risk + ['total']
risk_target = risk_exp_expand.T @ benchmark risk_target = risk_exp_expand.T @ benchmark
lbound = 0. lbound = np.zeros(len(total_data))
ubound = 0.05 + benchmark ubound = 0.01 + benchmark
constraint = Constraints(risk_exp_expand, risk_names) constraint = Constraints(risk_exp_expand, risk_names)
for i, name in enumerate(risk_names): for i, name in enumerate(risk_names):
constraint.set_constraints(name, lower_bound=risk_target[i], upper_bound=risk_target[i]) constraint.set_constraints(name, lower_bound=risk_target[i], upper_bound=risk_target[i])
f_data = total_data[factors]
try: try:
pos, analysis = factor_analysis(f_data, pos, analysis = factor_analysis(f_data,
f_weights, factor_weights,
industry, industry=industry,
dx_return, d1returns=dx_return,
benchmark=benchmark,
risk_exp=risk_exp, risk_exp=risk_exp,
benchmark=benchmark,
is_tradable=total_data.isOpen.values.astype(bool), is_tradable=total_data.isOpen.values.astype(bool),
method='mv', method='risk_neutral',
constraints=constraint, constraints=constraint)
cov=stocks_cov,
use_rank=100,
lam=100.,
lbound=lbound,
ubound=ubound)
except: except:
print(date, ' is error!')
rets.append(0.) rets.append(0.)
print("{0} is error!".format(date))
else: else:
rets.append(analysis.er[-1]) rets.append(analysis.er[-1])
ret_series = pd.Series(rets, dates) ret_series = pd.Series(rets, dates)
\ No newline at end of file ret_series.cumsum().plot(figsize=(12, 6))
plt.title('{0} weekly reblance'.format(factors))
plt.show()
# -*- coding: utf-8 -*-
"""
Created on 2017-8-16
@author: cheng.li
"""
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from PyFin.api import makeSchedule
from alphamind.api import *
engine = SqlEngine("mssql+pymssql://licheng:A12345678!@10.63.6.220/alpha")
universe = Universe('custom', ['zz500'])
neutralize_risk = ['SIZE'] + industry_styles
n_bins = 5
factors = ['ROEDiluted']
factor_weights = np.array([1.])
dates = makeSchedule('2017-01-01',
'2017-08-14',
tenor='1w',
calendar='china.sse')
final_res = np.zeros((len(dates), n_bins))
for i, date in enumerate(dates):
print(date)
ref_date = date.strftime('%Y-%m-%d')
codes = engine.fetch_codes(ref_date, universe)
data = engine.fetch_data(ref_date, factors, codes, 905)
returns = engine.fetch_dx_return(ref_date, codes, horizon=4)
total_data = pd.merge(data['factor'], returns, on=['Code']).dropna()
risk_exp = total_data[neutralize_risk].values.astype(float)
dx_return = total_data.dx.values
benchmark = total_data.weight.values
f_data = total_data[factors]
try:
res = quantile_analysis(f_data,
factor_weights,
dx_return,
risk_exp=risk_exp,
n_bins=n_bins,
benchmark=benchmark)
except:
print(date, ' is error!')
res = np.zeros(n_bins)
final_res[i] = res
df = pd.DataFrame(final_res, index=dates)
df.cumsum().plot(figsize=(12, 6))
plt.title('{0} weekly reblance'.format(factors))
plt.show()
\ No newline at end of file
# -*- coding: utf-8 -*-
"""
Created on 2017-5-15
@author: cheng.li
"""
import sqlalchemy as sa
from alphamind.data.engines.sqlengine import risk_styles
from alphamind.data.engines.sqlengine import industry_styles
from alphamind.data.engines.sqlengine import SqlEngine
from alphamind.data.engines.universe import Universe
from alphamind.data.neutralize import neutralize
from alphamind.data.standardize import standardize
from alphamind.data.winsorize import winsorize_normal
from PyFin.api import bizDatesList
universe = Universe("zz500", ['zz500'])
engine = SqlEngine("mysql+pymysql://root:we083826@localhost/alpha?charset=utf8")
dates = bizDatesList('china.sse', '2017-01-01', '2017-07-10')
for date in dates:
print(date)
ref_date = date.strftime("%Y-%m-%d")
codes = engine.fetch_codes(ref_date, universe)
engine.fetch_data(ref_date, ['EPS'], codes)
\ 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