鉴于一些小伙伴在询问平台上行业指数的行情数据的问题,这里就用申万一级行业的数据做了内容,进行行业指数获取的方法示例给大家做参考。
目前平台暂无提供直接的API获取行业数据,以下的内容都是调用了聚源数据库进行的操作,具体数据源可以参考这个链接
在开始之前先用研究展示下一些数据统计、行业涨跌幅统计操作,如下内容即是回顾下上周的市场情况
5月底创出3041低点后,市场开始回升,上周接连走出三连阳后,周四高开低走收阴,周五一根阴线将一周的回升全部拉回去且逼近3041低点,感慨我大A股上升的道路总是*悠长,下跌的时候猝不及防。下面的图是获取市场周五的行情数据,其中可以看到以上证50、中证500,中证1000代表的大中小市值全线下跌,板块方面唯次新股收阳、从数据来看这也符合5日收益次新最高,还有值得注意的是各指数均是价跌量涨,这不是筑底的特征。
下面两张图,就是对上周和上上周申万行业涨跌幅进行的统计,可以看到非周期性行业,食品饮料、家用电器连续两周走势还行
这篇帖子里面的这个策略,就是基于申万行业涨跌幅进行的定期轮换策略
策略思路:
选股:统计申万一级行业指数,固定时间选取涨幅最大的指数,选取指数成分股中流通市值最大的5只股票作为操作标的
择时:轮动模型,固定调仓周期开盘操作,默认开盘卖出不在股票池中股票,买入选出的股票
仓位:平均分配仓位
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom jqdata import jypd.set_option('precision', 3)import datetimeimport jqdatafrom jqdata import *
#统计各指数当天涨跌#输入日期#返回dfdef get_pct(date):#指数涨跌幅统计#总数据zhishu_list = ['000001.XSHG','000300.XSHG','000016.XSHG','000905.XSHG','000852.XSHG','399006.XSHE','399678.XSHE','399005.XSHE'] pl = get_price(zhishu_list,end_date=date,count=6)#.ix[:,0,:]#涨跌幅数据pl_pct = (pl.iloc[:,-1,:]/pl.iloc[:,-2,:]-1)*100pl_pct_5 = (pl.iloc[:,-1,:]/pl.iloc[:,-6,:]-1)*100#5日money均量df_money = pl.loc['money',:,:]def f(x):return x.mean()se_money = df_money.apply(f)#5日volume均量df_volume = pl.loc['volume',:,:]def f(x):return x.mean()se_volume = df_volume.apply(f)#最新一天指数值数据zv = pl.iloc[:,-1,:]zv['name'] = ['上证','沪深300','上证50','中证500','中证1000','创业板','次新股','中小板']df_fin = pd.concat([zv['close'],pl_pct['close'],pl_pct_5['close'],pl_pct['volume'],zv['volume']/(10**8),se_volume/(10**8),pl_pct['money'],zv['money']/(10**8),se_money/(10**8)],axis=1)df_fin.index = zv['name'].valuesdf_fin.columns = ['指数值','涨跌幅%','5日涨跌幅%','成交量%','成交量(亿)','5日成交均量(亿)','成交额%','成交额(亿)','5日成交均额(亿)']return df_fina = get_pct('2018-6-10')a
指数值 | 涨跌幅% | 5日涨跌幅% | 成交量% | 成交量(亿) | 5日成交均量(亿) | 成交额% | 成交额(亿) | 5日成交均额(亿) | |
---|---|---|---|---|---|---|---|---|---|
上证 | 3067.15 | -1.36 | -0.26 | 5.40 | 134.69 | 124.31 | -3.59 | 1611.79 | 1628.77 |
沪深300 | 3779.62 | -1.34 | 0.24 | 3.84 | 83.34 | 78.31 | -4.05 | 1078.19 | 1116.12 |
上证50 | 2652.08 | -1.60 | 0.18 | 10.72 | 26.03 | 22.54 | -7.19 | 343.96 | 342.39 |
中证500 | 5669.30 | -1.20 | -0.28 | 11.71 | 52.93 | 49.41 | 8.65 | 587.67 | 568.66 |
中证1000 | 6205.96 | -1.10 | -0.60 | 4.97 | 72.21 | 70.35 | 1.00 | 725.64 | 737.36 |
创业板 | 1711.52 | -1.09 | 0.12 | -0.61 | 12.29 | 12.68 | -0.18 | 186.79 | 198.03 |
次新股 | 1053.96 | 0.02 | 3.03 | -11.66 | 6.16 | 6.08 | -11.99 | 210.47 | 209.45 |
中小板 | 7035.08 | -1.01 | 0.48 | 6.01 | 16.18 | 16.85 | 2.11 | 248.20 | 270.62 |
a[['涨跌幅%','5日涨跌幅%']].plot(kind='bar',figsize=(12,8))
<matplotlib.axes._subplots.AxesSubplot at 0x7fe9e70f6d10>
#统计各指数当天涨跌#输入日期#返回dfdef get_hy_pct(date_s,date):#指数涨跌幅统计#总数据sw_hy = jqdata.get_industries(name='sw_l1')sw_hy_dict = {}for i in sw_hy.index:value = get_SW_index(i,start_date=date_s,end_date=date)sw_hy_dict[i] = valuepl_hy = pd.Panel(sw_hy_dict)pl = pl_hy.transpose(2,1,0)pl = pl.loc[['PrevClosePrice','OpenPrice','HighPrice','LowPrice','ClosePrice','TurnoverVolume','TurnoverValue'],:,:]#涨跌幅数据pl_pct = (pl.iloc[:,-1,:]/pl.iloc[:,-2,:]-1)*100pl_pct_5 = (pl.iloc[:,-1,:]/pl.iloc[:,-6,:]-1)*100#5日money均量df_money = pl.loc['TurnoverValue',:,:]def f(x):return x.mean()se_money = df_money.apply(f)#5日volume均量df_volume = pl.loc['TurnoverVolume',:,:]def f(x):return x.mean()se_volume = df_volume.apply(f)#最新一天指数值数据zv = pl.iloc[:,-1,:]zv['name'] = sw_hy['name']df_fin = pd.concat([zv['ClosePrice'],pl_pct['ClosePrice'],pl_pct_5['ClosePrice'],pl_pct['TurnoverVolume'],zv['TurnoverVolume']/(10**8),se_volume/(10**8),pl_pct['TurnoverValue'],zv['TurnoverValue']/(10**8),se_money/(10**8)],axis=1)df_fin.columns = ['指数值','涨跌幅%','5日涨跌幅%','成交量%','成交量(亿)','5日成交均量(亿)','成交额%','成交额(亿)','5日成交均额(亿)']df_fin['name'] = sw_hy['name']df_fin['code'] = df_fin.indexdf_fin.index = df_fin['name'].valuesdel df_fin['name'] return df_fin.sort('涨跌幅%',ascending=0)#获取N天前的交易日日期def ShiftTradingDay(date,shift):# 获取所有的交易日,返回一个包含所有交易日的 list,元素值为 datetime.date 类型.tradingday = jqdata.get_all_trade_days()# 得到date之后shift天那一天在列表中的行标号 返回一个数shiftday_index = list(tradingday).index(date)+shift# 根据行号返回该日日期 为datetime.date类型return tradingday[shiftday_index] #获取N天前的交易日日期def ShiftTradingDay(date,shift=5):# 获取所有的交易日,返回一个包含所有交易日的 list,元素值为 datetime.date 类型.tradingday = get_all_trade_days()# 得到date之后shift天那一天在列表中的行标号 返回一个数shiftday_index = list(tradingday).index(date)+shift# 根据行号返回该日日期 为datetime.date类型return tradingday[shiftday_index] #行业涨跌幅#直接用申万的行业指数数据进行说明了def get_SW_index(SW_index = 801010,start_date = '2017-01-31',end_date = '2018-01-31'):index_list = ['PrevClosePrice','OpenPrice','HighPrice','LowPrice','ClosePrice','TurnoverVolume','TurnoverValue','TurnoverDeals','ChangePCT','UpdateTime']jydf = jy.run_query(query(jy.SecuMain).filter(jy.SecuMain.SecuCode==str(SW_index)))link=jydf[jydf.SecuCode==str(SW_index)]rows=jydf[jydf.SecuCode==str(SW_index)].index.tolist()result=link['InnerCode'][rows]df = jy.run_query(query(jy.QT_SYWGIndexQuote).filter(jy.QT_SYWGIndexQuote.InnerCode==str(result[0]),\ jy.QT_SYWGIndexQuote.TradingDay>=start_date,\ jy.QT_SYWGIndexQuote.TradingDay<=end_date))df.index = df['TradingDay']df = df[index_list]return df#输入截止日期,获取往前推固定天数的行业涨跌幅date = datetime.date(2018,6,8)s_date = ShiftTradingDay(date,-5)hy_df = get_hy_pct(s_date,date)hy_df
指数值 | 涨跌幅% | 5日涨跌幅% | 成交量% | 成交量(亿) | 5日成交均量(亿) | 成交额% | 成交额(亿) | 5日成交均额(亿) | code | |
---|---|---|---|---|---|---|---|---|---|---|
家用电器I | 7.15e+03 | 0.0985 | 2.98 | 23 | 6.74 | 6.05 | 21.4 | 110 | 106.08 | 801110 |
电子I | 3.01e+03 | -0.385 | 2.65 | 14.8 | 22.5 | 21.30 | 11.8 | 310 | 294.28 | 801080 |
汽车I | 4.58e+03 | -0.442 | 0.383 | 1.22 | 9.57 | 9.79 | -2.24 | 142 | 145.41 | 801880 |
医药生物I | 8.99e+03 | -0.564 | 1.53 | 0.0353 | 15 | 17.01 | -0.905 | 329 | 382.37 | 801150 |
休闲服务I | 6.22e+03 | -0.649 | -0.537 | 6.33 | 1.54 | 1.49 | -4.14 | 28.2 | 28.11 | 801210 |
食品饮料I | 1.25e+04 | -0.68 | 2.38 | -12.2 | 6.76 | 8.84 | -7.97 | 181 | 228.02 | 801120 |
通信I | 2.42e+03 | -0.724 | 0.187 | 9.54 | 8.43 | 7.27 | 8.01 | 127 | 110.95 | 801770 |
计算机I | 4.3e+03 | -0.751 | 0.884 | 12.8 | 15.4 | 15.10 | 9.58 | 262 | 262.03 | 801750 |
电气设备I | 4.37e+03 | -1 | -3.5 | -0.527 | 11 | 11.44 | -6.87 | 111 | 121.55 | 801730 |
机械设备I | 1.23e+03 | -1.07 | -0.844 | 13.4 | 15.4 | 14.08 | 7.66 | 170 | 163.26 | 801890 |
建筑材料I | 5.39e+03 | -1.14 | 0.568 | 0.953 | 4.93 | 4.81 | -2.12 | 64.4 | 64.01 | 801710 |
建筑装饰I | 2.5e+03 | -1.19 | -1.32 | 23.1 | 7.72 | 6.76 | 17.1 | 62.8 | 57.98 | 801720 |
交通运输I | 2.74e+03 | -1.21 | 1.01 | 3.22 | 9.98 | 9.86 | -17.8 | 107 | 119.61 | 801170 |
化工I | 3e+03 | -1.25 | 0.913 | -0.962 | 20.7 | 20.44 | -9.02 | 286 | 292.88 | 801030 |
公用事业I | 2.31e+03 | -1.31 | -1.65 | 12.6 | 9.8 | 8.75 | 5.34 | 81.4 | 78.62 | 801160 |
轻工制造I | 2.73e+03 | -1.42 | -1.01 | -2.49 | 6.27 | 6.30 | -9.46 | 68 | 79.55 | 801140 |
综合I | 2.14e+03 | -1.44 | -0.864 | 36.7 | 3.91 | 3.06 | 22.6 | 25.1 | 20.06 | 801230 |
传媒I | 794 | -1.48 | -1.83 | -0.857 | 13.2 | 12.30 | -0.542 | 127 | 123.75 | 801760 |
农林牧渔I | 2.7e+03 | -1.57 | -2.04 | 2.9 | 9.74 | 8.95 | -0.477 | 108 | 101.41 | 801010 |
钢铁I | 2.77e+03 | -1.61 | 1.72 | -27.2 | 9.28 | 8.45 | -27.1 | 50.9 | 45.36 | 801040 |
银行I | 3.36e+03 | -1.79 | -1.45 | 16.7 | 15.8 | 12.54 | 12.7 | 121 | 95.66 | 801780 |
采掘I | 2.88e+03 | -1.84 | -0.749 | 11.6 | 8.31 | 8.16 | 0.839 | 57.4 | 58.24 | 801020 |
商业贸易I | 4.2e+03 | -1.86 | -3.05 | -3.41 | 7.41 | 7.66 | -16.2 | 88.5 | 93.10 | 801200 |
有色金属I | 3.54e+03 | -1.91 | -0.721 | 3.72 | 16.8 | 15.71 | -2.59 | 190 | 187.35 | 801050 |
纺织服装I | 2.52e+03 | -1.95 | -2.96 | -3.78 | 3.62 | 4.43 | -19.7 | 35.2 | 50.62 | 801130 |
非银金融I | 1.69e+03 | -1.99 | -0.297 | -10.4 | 10.4 | 9.16 | -20.1 | 142 | 138.36 | 801790 |
房地产I | 4.37e+03 | -2.05 | 0.531 | -0.587 | 11.5 | 11.39 | -14.9 | 102 | 110.13 | 801180 |
国防军工I | 1.07e+03 | -2.17 | -1.58 | 30.6 | 4.43 | 3.87 | 15.9 | 51 | 49.01 | 801740 |
hy_df_sort = hy_df.sort('5日涨跌幅%',ascending=0)hy_df_sort[['涨跌幅%','5日涨跌幅%']].plot(kind='bar',figsize=(12,8))
<matplotlib.axes._subplots.AxesSubplot at 0x7fe9e72c0310>
#输入截止日期,获取往前推固定天数的行业涨跌幅date = datetime.date(2018,6,1)s_date = ShiftTradingDay(date,-5)hy_df_1 = get_hy_pct(s_date,date)hy_df1_sort = hy_df_1.sort('5日涨跌幅%',ascending=0)hy_df1_sort[['涨跌幅%','5日涨跌幅%']].plot(kind='bar',figsize=(12,8))
<matplotlib.axes._subplots.AxesSubplot at 0x7fe9e701b4d0>
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程