
策略思路
寻找行业间的股价波动关系,用一阶滞后的数据来寻找相关关系。
策略应用
这个月某行业的股票涨幅好,下个月某某行业的涨幅也会好,那么就可以提前介入某某行业。
策略代码
#导入模块
import numpy as np
import pandas as pd
import itertools
from datetime import datetime
#from deteutil.parser import parse
from scipy import stats as ss
import matplotlib.pyplot as plt
import seaborn as sn
sn.set_style('white')
#自定义获取行业行情的函数
def get_sw_ind_quotation():
index_symbol = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")['indexSymbol'].tolist()
index_symbol = [str(item)+'.ZICN' for item in index_symbol]
symbol_history_list = []
for symbol in index_symbol:
df_daily_ind_symbol = DataAPI.MktIdxdGet(indexID=u"",ticker=symbol[:6],beginDate=u"20150807",endDate=u"20180807",field=u"ticker,tradeDate,closeIndex",pandas="1")
symbol_history_list.append(df_daily_ind_symbol)
df_daily_ind_symbol = pd.concat(symbol_history_list,axis=0)
df_daily_ind_unstack = df_daily_ind_symbol.set_index(['tradeDate','ticker']).unstack()['closeIndex']
return df_daily_ind_unstack
df_daily_ind_unstack = get_sw_ind_quotation()
df_daily_ind_unstack = df_daily_ind_unstack.iloc[1:]
df_daily_ind_unstack['tradeDate'] = df_daily_ind_unstack.index
#自定义行业月度行情的函数
def getMonthlyIndex(df_index):
df_index['tradeDate'] = df_index['tradeDate'].map(lambda x: datetime.strptime(x, "%Y-%m-%d") )
df_index['year_month'] = df_index['tradeDate'].map(lambda x: (x.year,x.month))
return df_index.groupby(['year_month']).head(1)
df_monthly_ind_unstack = getMonthlyIndex(df_daily_ind_unstack[:])
df_monthly_ind_unstack.sort_values(['tradeDate'])
del df_monthly_ind_unstack['tradeDate']
del df_monthly_ind_unstack['year_month']
df_monthly_ind_return = df_monthly_ind_unstack.pct_change(axis=0)
df_monthly_ind_return = df_monthly_ind_return.dropna(how='all')
df_monthly_ind_return_rank = df_monthly_ind_return.rank(axis=1)
index_symbol = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")['indexSymbol'].tolist()
#自定义计算相关系数的函数
def get_corr(ind1,ind2,df_ind):
x = df_ind[ind1].iloc[0:-1].values
y = df_ind[ind2].iloc[1:].values
return np.corrcoef(x,y)[0][1]
#计算下相关系数
predict_corr = {}
for item in itertools.product(index_symbol,repeat=2):
predict_corr[item] = get_corr(item[0],item[1],df_monthly_ind_return_rank)
predict_corr = pd.Series(predict_corr)
filter_corr = predict_corr[(predict_corr>0.45) |(predict_corr<-0.45) ]
result = filter_corr.sort_values(ascending=0)
result = pd.DataFrame(result)
result.columns =['相关系数']
result=result.reset_index()
result.columns =['领先行业','滞后行业','相关系数']
result
#行业代码替换成行业名称
index_symbol = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")
a=0
result['领先行业'] = result['领先行业'].map(lambda x: index_symbol[index_symbol.indexSymbol == x]['industryName'].values)
result['滞后行业'] = result['滞后行业'].map(lambda x: index_symbol[index_symbol.indexSymbol == x]['industryName'].values)
result
运行结果

刺猬偷腥
2018年8月26日
P.S 在github建了个博客,欢迎来访:价值为锚
网友评论