最近中国股市也因受到海外市场波动的影响的振幅非常大,又由于马上面临春节了,股市里的钱是取出来放到货币基金里好呢,还是继续放在股市里好呢?
除了对于宏观,行业,个股的分析和把握,我们从历史市场表现的角度也来看下吧,供大家的投资计划作参考。
好了,废话不多说,先上结论
一、上证指数的春节前后表现,2005年-2017年
1. 春节前一工作日的涨跌情况
2.春节后一工作日的涨跌情况
3. 春节前5个工作日
4. 春节后5个工作日
从上面的分析可以看出,上证指数在春节前一周和后一周的上涨可能性还是相对比较高的。尤其是春节前一周。
接下来,再来看看其他指数的表现:
二、沪深300指数
1. 春节前一工作日的涨跌情况
2. 春节后一工作日的涨跌情况
3. 春节前5个工作日的涨跌情况
4. 春节后5个工作日的涨跌情况
三、深圳成分股指数
1. 春节前一工作日的涨跌情况
2. 春节后一工作日的涨跌情况
3. 春节前5个工作日的涨跌情况
4. 春节后5个工作日的涨跌情况
四、创业板指数
1. 春节前一工作日的涨跌情况
2. 春节后一工作日的涨跌情况
3. 春节前5个工作日的涨跌情况
4. 春节后5个工作日的涨跌情况
综上,上证,沪深300,深圳,创业板四个指数,基本上是同步的,在节前节后的第一个工作日没有明显的上涨下跌偏向。但是在前后一周都出现了以上涨为多数的情况,尤其是创业板,连续七年,节后一周收涨,不知道今年还会不会延续呢?
以下是所有的源代码:
import pandas as pd
pd.set_option('expand_frame_repr', False)
import os
os.chdir('D:/all_trading_data/Every_days_analysis/')
from Basic_Functions import Functions
import matplotlib.pyplot as plt
## 1.读取春节假日表,并计算前后指定工农昨日
def get_df_sf(n=5):
df_sf = pd.read_csv('input_data/spring_festival.csv')
# df_sf[['start','end']] = pd.to_datetime(df_sf[['start','end']])
df_sf['start'] = pd.to_datetime(df_sf['start'])
df_sf['end'] = pd.to_datetime(df_sf['end'])
# 获取春节前一个交易日的日期
df_sf['春节前一天'] = df_sf['start'] - pd.Timedelta(days=1)
df_sf['春节前一天判断工作日'] = df_sf['春节前一天'].dt.dayofweek
i = 0
for date in df_sf['春节前一天判断工作日']:
if date == 5: # 如果是星期六再减一天
df_sf.loc[i, '春节前一工作日'] = df_sf.loc[i, '春节前一天'] - pd.Timedelta(days=1)
elif date == 6: # 如果是星期天再减2天
df_sf.loc[i, '春节前一工作日'] = df_sf.loc[i, '春节前一天'] - pd.Timedelta(days=2)
else:
df_sf.loc[i, '春节前一工作日'] = df_sf.loc[i, '春节前一天']
i += 1
df_sf['春节后一天'] = df_sf['end'] + pd.Timedelta(days=1)
df_sf['春节后一天判断工作日'] = df_sf['春节后一天'].dt.dayofweek
i = 0
for date in df_sf['春节后一天判断工作日']:
if date == 5: # 如果是星期六再加2天
df_sf.loc[i, '春节后一工作日'] = df_sf.loc[i, '春节后一天'] + pd.Timedelta(days=2)
elif date == 6: # 如果是星期天再加1天
df_sf.loc[i, '春节后一工作日'] = df_sf.loc[i, '春节后一天'] + pd.Timedelta(days=1)
else:
df_sf.loc[i, '春节后一工作日'] = df_sf.loc[i, '春节后一天']
i += 1
df_sf['春节前指定日'] = df_sf['春节前一工作日'] - pd.Timedelta(days=n)
df_sf['春节后指定日'] = df_sf['春节后一工作日'] + pd.Timedelta(days=n)
return df_sf
# 春节后一段时间的涨跌幅
def get_df_change(df_sf, df_index, type=0):
df_sf = df_sf.copy()
df_index = df_index.copy()
name = {0: '前', 1: '后'}
i = 0
for year in df_sf['year']:
start = df_sf.loc[i, '春节{}指定日'.format(name[type])]
end = df_sf.loc[i, '春节{}一工作日'.format(name[type])]
if type == 0:
total_change = (df_index.loc[(df_index['date'] >= pd.to_datetime(start)) & (df_index['date'] <= pd.to_datetime(end)), 'index_change'] + 1.0).prod()
elif type == 1:
total_change = (df_index.loc[(df_index['date'] >= pd.to_datetime(end)) & (df_index['date'] <= pd.to_datetime(start)), 'index_change'] + 1.0).prod()
# total_change = df_index.loc[(df_index['date'] >= pd.to_datetime(start)) & (df_index['date'] <= pd.to_datetime(end)), 'index_change'].sum()
df_sf.loc[i, 'index_change'] = total_change - 1
i += 1
print df_sf
# exit()
return df_sf
# 作图
def get_plot(df, index_code, n, type):
df = df.copy()
df['index_up'] = df.loc[df['index_change'] >= 0, 'index_change']
df['index_down'] = df.loc[df['index_change'] < 0, 'index_change']
fig = plt.figure(figsize=(14,6))
# ax = fig.add_subplot(1,1,1)
# ax.set_title(str(index_code))
# ax.set_xlabel('Time') # 设置横坐标x轴的名字
# ax.set_ylabel('Change') # 设置Y轴
name = {0: 'back', 1: 'forward'}
plt.title(str(index_code) + '_spring_festival_index_change_' + name[type] + '_' + str(n))
plt.xlabel('Time')
plt.ylabel('Change')
# plt.bar(df['year'], df['index_change'])
plt.bar(df['year'], df['index_up'], fc='r')
plt.bar(df['year'], df['index_down'], fc='g')
plt.show()
if __name__ == '__main__':
## 读取指数数据
# index_code = '000001.SH' # 上证指数
# index_code = '000300.SH' # 沪深300
# index_code = '399001.SZ' # 深圳成指
index_code = '399006.SZ' # 创业板指
type = 1 # 0代表节前, 1代表节后
n = 5
df_index = Functions.import_index_data_wande(index_code=index_code, start_date='20050101')
df_sf = get_df_sf(n=n)
df_sf = get_df_change(df_sf, df_index, type=type)
print "上涨次数:%d" % df_sf.loc[df_sf['index_change'] >= 0, 'index_change'].count()
print "下跌次数:%d" % df_sf.loc[df_sf['index_change'] < 0, 'index_change'].count()
print "平均涨跌幅:%.4f%%" % (df_sf['index_change'].mean() * 100.00)
print "最大涨幅:%.4f%%" % (df_sf['index_change'].max() * 100.00)
print "最大跌幅:%.4f%%" % (df_sf['index_change'].min() * 100.00)
get_plot(df_sf, index_code, n, type)
当然,以上的结果都纯属统计结果,如果只是拿以上的结果作为你个人的投资建议,风险还是比较大的,如果在宏观经济,行业研究,个股分析上,再加上一定的数理统计,则会让你事半功倍。
毕竟,投资的道路没有捷径。给大家拜个早年,祝大家节日快乐~红包多多~
可能对于初学者而言,即使有上述源代码,可能还是会觉得较难理解。那么,建议各位想学习python并研究交易的朋友们可以考虑《Python量化入门》课程系列,非常适合零基础的朋友们,获得所有的股票历史数据,并建立自己的交易策略,建议购买课程后深入学习。
课程评价
优点:这套课程特别适合对Python,pandas都没掌握的同学,和“入门”二字很贴切。虽然价要收取一定的费用,但是对于零基础的同学还是墙裂推荐。当然我的笔记是完全免费的,但这个只能作为点心,毕竟正餐才是最有营养的~而且还有大量的源代码A股所有的股票历史交易数据。
缺点:只能用微信访问学习,PC端的话要通过微信客户端访问。
系列总课时约12多个小时,会获得课程讲解的所有源代码。如要深入熟练掌握,课外练习可能需要100小时+。
课程传送门:
网友评论