开发工具jupyter,使用的版本基于python3.8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 数据从网易股票接口下载
# http://quotes.money.163.com/service/chddata.html?code=0000002&start=20150101&end=20200925&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP
# 下载后,通过笔记本程序另存为utf8格式
stock_data = pd.read_csv("D:\\temp\\robot\\000002.csv")
# 对数据进行重排序(下载数据是按照日期降序的,因此需要重新进行升序排列)
stock_data.sort_values(by="日期",inplace=True,ascending=True)
# 设定转换的周期:周'W',月'M',季度'Q',五分钟'5min',12天'12D'
period_type = 'W'
# 设置索引为DatetimeIndex, TimedeltaIndex or PeriodIndex类型
stock_data.set_index('日期', inplace=True)
# 把普通索引转换成时间索引,resample函数只支持时间索引
stock_data.index = pd.to_datetime(stock_data.index)
# 将日线数据转换成周线数据
# 1.进行转换,用一周中最后一个交易日的变量值,赋值给周线每个变量值
# 2.周线的【涨跌额】等于一周中每日【涨跌额】相加
# 3.周线的【涨跌幅】等于一周中每日【涨跌幅】相乘
# 4.周线的【开盘价】等于一周中第一个交易日的【开盘价】
# 5.周线的【最高价】等于一周中【最高价】的最大值
# 6.周线的【最低价】等于一周中【最低价】的最小值
# 7.周线的【成交量】等于一周中【成交量】相加
# 8.周线的【成交额】等于一周中【成交额】想加
period_stock_data = stock_data.resample(period_type).last()
period_stock_data['涨跌额'] = stock_data['涨跌额'].resample(period_type).sum()
period_stock_data['涨跌幅'] = stock_data['涨跌幅'].resample(period_type).apply(lambda x:(x/100+1.0).prod() - 1.0)*100
period_stock_data['开盘价'] = stock_data['开盘价'].resample(period_type).first()
period_stock_data['最高价'] = stock_data['最高价'].resample(period_type).max()
period_stock_data['最低价'] = stock_data['最低价'].resample(period_type).min()
period_stock_data['成交量'] = stock_data['成交量'].resample(period_type).sum()
period_stock_data['成交金额'] = stock_data['成交金额'].resample(period_type).sum()
# 删除那些一周都没有交易数据的
period_stock_data = period_stock_data[period_stock_data['股票代码'].notnull()]
period_stock_data.reset_index(inplace=True)
# period_stock_data
# 画周线均线图
period_stock_data['MA5'] = period_stock_data.收盘价.rolling(5).mean()
period_stock_data['MA10'] = period_stock_data.收盘价.rolling(10).mean()
period_stock_data['MA20'] = period_stock_data.收盘价.rolling(20).mean()
#period_stock_data['EMA5'] = period_stock_data.收盘价.ewm(span = 5).mean()
#period_stock_data['EMA10'] = period_stock_data.收盘价.ewm(span = 10).mean()
#period_stock_data['EMA20'] = period_stock_data.收盘价.ewm(span = 20).mean()
#period_stock_data[['收盘价', 'MA5', 'MA10', 'MA20']].plot(subplots = False, figsize = (12,8))
period_stock_data[['MA5', 'MA10', 'MA20']].plot(subplots = False, figsize = (12,8))
下面是运行效果: