python分析政策实施前后_用Python分析春节前后的中国A股市场行情(附源代码)

最近中国股市也因受到海外市场波动的影响的振幅非常大,又由于马上面临春节了,股市里的钱是取出来放到货币基金里好呢,还是继续放在股市里好呢?

除了对于宏观,行业,个股的分析和把握,我们从历史市场表现的角度也来看下吧,供大家的投资计划作参考。

好了,废话不多说,先上结论

一、上证指数的春节前后表现,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小时+。

课程传送门:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值