🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
导入数据
时间类型转换
日期筛选
按区间筛选
按指定时间筛选
金融计算
涨跌额
涨跌幅
移动均值
移动均值(可视化)
移动均值(可视化)
指数移动平均值(EMA)
MACD
布林指标
日期移动
移动值
移动索引
日期重采样
日 -> 周
日 -> 月
分钟 -> 日
低频 -> 高频
总结
导入数据
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
df1 = pd.read_csv("000001_daily.csv")
df2 = pd.read_csv("000001_5min.csv")
df1.head()
时间类型转换
将 df1 和 df2 的 日期 列转换为 pandas 支持的时间格式
df1['日期'] = pd.to_datetime(df1['日期'])
df2['时间'] = pd.to_datetime(df2['时间'])
# df1['日期'] = df1['日期'].astype('datetime64[ns]')
日期筛选
按区间筛选
筛选出 df2 时间在 2021-08-03 09:35:00
与 2021-08-04 15:00:00
之间的数据
df2[(df2['时间'] > '2021-08-03 09:35:00') & (df2['时间'] < '2021-08-04 15:00:00')]
按指定时间筛选
筛选 df2 时间为 2021-08-03 的全部数据
df2.set_index('时间').truncate(after=pd.Timestamp('2021-08-03'))
金融计算
涨跌额
df1
新增一列 涨跌,计算前后两日收盘价之差
注意:虽然我们的df1包含涨跌额列,但是这个操作很常用,所以练习一下
df1['涨跌'] = df1.收盘.diff()
涨跌幅
df1
新增一列 涨跌变化率,计算前后两日收盘价之差的变化率
注意:虽然我们的df1包含涨跌幅列,但是这个操作很常用,所以练习一下,结果可以用于验证
df1['涨跌变化率'] = (df1.收盘.pct_change()).apply(lambda x: format(x, '.2%'))
移动均值
计算收盘价的5日移动均线
df1.收盘.rolling(window=5).mean()
0 NaN
1 NaN
2 NaN
3 NaN
4 8.314...
1141 18.672
1142 18.792
1143 19.298
1144 19.650
1145 19.676
Name: 收盘, Length: 1146, dtype: float64
移动均值(可视化)
计算并绘制收盘价的5日移动均线
df1.收盘.rolling(window=5).mean().plot()
移动均值(可视化)
同时计算并绘制 df1 的收盘价、5日均线、20日均线
df1.set_index("日期")['收盘'].plot()
df1.set_index("日期")['收盘'].rolling(5).mean().plot()
df1.set_index("日期")['收盘'].rolling(20).mean().plot()
指数移动平均值(EMA)
根据 df1 计算 EMA20
df1['EMA20'] = df1['收盘'].ewm(span=20,min_periods=0,adjust=False,ignore_na=False).mean()
MACD
计算 df1 的 MACD 指标
exp1 = df1['收盘'].ewm(span=12, adjust=False).mean()
exp2 = df1['收盘'].ewm(span=26, adjust=False).mean()
df1['MACD'] = exp1 - exp2
df1['Signal line'] = df1['MACD'].ewm(span=9, adjust=False).mean()
布林指标
计算并绘制布林指标,计算方法参考百度百科
df1['former 30 days rolling Close mean'] = df1['收盘'].rolling(20).mean()
df1['upper bound'] = df1['former 30 days rolling Close mean'] + \2*df1['收盘'].rolling(20).std() # 在这里我们取20天内的标准差
df1['lower bound'] = df1['former 30 days rolling Close mean'] - \2*df1['收盘'].rolling(20).std()import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Songti SC'] #设置中文,如果本句代码导致失效,可以点击https://mp.weixin.qq.com/s/WKOGvQP-6QUAP00ZXjhwegdf1.set_index("日期")[['收盘', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6))plt.show()
日期移动
移动值
将 df1 的索引设置为日期,将 df1 数据向后移动一天
df1.set_index('日期').shift(1)
移动索引
将 df1 的索引设置为日期,并将全部日期向后移动一天
import datetime
df1.set_index('日期').shift(freq=datetime.timedelta(1))
日期重采样
日 -> 周
按周对 df1 进行重采样,保留每周最后一个数据
df1.set_index('日期').resample('W').last()
日 -> 月
按月对 df1 进行重采样,保留每月最后一个数据
df1.set_index('日期').resample('M').last()
分钟 -> 日
按日对 df2 进行重采样,保留每天最后一个数据
df2.set_index('时间').resample('D').last()
低频 -> 高频
将 df2 的 5分钟 数据改为 3分钟,缺失数据向前填充
df_3min = df2.set_index('时间').resample('3min').last()
df_3min.ffill()
总结
通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等
在此次实战中,我还学会了下面几点工作学习心态:
1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。
2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。
3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。
这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。