Commit 108d2d78 authored by Dr.李's avatar Dr.李

added one more example

parent ca79db7e
......@@ -23,6 +23,7 @@ from alphamind.data.dbmodel.models import IndexComponent
from alphamind.data.dbmodel.models import Uqer
from alphamind.data.dbmodel.models import Tiny
from alphamind.data.dbmodel.models import LegacyFactor
from alphamind.data.dbmodel.models import Experimental
from alphamind.data.dbmodel.models import SpecificRiskDay
from alphamind.data.dbmodel.models import SpecificRiskShort
from alphamind.data.dbmodel.models import SpecificRiskLong
......@@ -79,7 +80,7 @@ macro_styles = ['COUNTRY']
total_risk_factors = risk_styles + industry_styles + macro_styles
factor_tables = [Uqer, Tiny, LegacyFactor]
factor_tables = [Uqer, Tiny, LegacyFactor, Experimental]
def append_industry_info(df):
......
# -*- coding: utf-8 -*-
"""
Created on 2017-8-16
@author: cheng.li
"""
import datetime as dt
import numpy as np
import pandas as pd
from PyFin.api import *
from alphamind.api import *
from matplotlib import pyplot as plt
start = dt.datetime.now()
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 = '1w'
if freq == '1m':
horizon = 21
elif freq == '1w':
horizon = 4
elif freq == '1d':
horizon = 0
start_date = '2016-04-01'
end_date = '2017-08-17'
dates = makeSchedule(start_date,
end_date,
tenor=freq,
calendar='china.sse')
prod_factors = ['IVR', 'RVOL']
all_data = engine.fetch_data_range(universe, prod_factors, dates=dates, benchmark=905)
factor_all_data = all_data['factor']
total_df = pd.DataFrame()
for factor in prod_factors:
factors = [factor]
final_res = np.zeros((len(dates), n_bins))
factor_groups = factor_all_data.groupby('Date')
for i, value in enumerate(factor_groups):
date = value[0]
data = value[1][['Code', factor, 'isOpen', 'weight'] + neutralize_risk]
codes = data.Code.tolist()
ref_date = value[0].strftime('%Y-%m-%d')
returns = engine.fetch_dx_return(date, codes, horizon=horizon)
total_data = pd.merge(data, 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 Exception as e:
print(e)
res = np.zeros(n_bins)
final_res[i] = res / benchmark.sum()
df = pd.DataFrame(final_res, index=dates)
start_date = advanceDateByCalendar('china.sse', dates[0], '-1w')
df.loc[start_date] = 0.
df.sort_index(inplace=True)
df = df.cumsum().plot()
plt.title('{0} weekly re-balance'.format(factors[0]))
plt.savefig('{0}_big_universe_20170814.png'.format(factors[0]))
print('{0} is finished'.format(factor))
print(dt.datetime.now() - start)
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