開發(fā)工具jupyter,使用的版本基于python3.8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 數(shù)據從網易股票接口下載
# 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")
# 對數(shù)據進行重排序(下載數(shù)據是按照日期降序的派殷,因此需要重新進行升序排列)
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函數(shù)只支持時間索引
stock_data.index = pd.to_datetime(stock_data.index)
# 將日線數(shù)據轉換成周線數(shù)據
# 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()
# 刪除那些一周都沒有交易數(shù)據的
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))
下面是運行效果: