python移动均线SMA及双均线策略

import pandas as pd
import numpy as np
import tushare as ts
import seaborn
import matplotlib.pyplot as plot
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 设置matplotlib可以显示汉语
mpl.rcParams['axes.unicode_minus'] = False

#pd.set_option()就是pycharm输出控制显示的设置
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中

pro = ts.pro_api('tushare的TOKEN')

data = pro.daily(ts_code='000001.SZ', start_date='20180101', end_date='20190101')
#print(data.head())
data.set_index('trade_date',inplace=True)  #设置索引覆盖原来的数据
print(data.head())
data['SMA_20'] = data['close'].rolling(20).mean()  #简单移动平均线计算
data['SMA_60'] = data['close'].rolling(60).mean()
data[['close', 'SMA_20', 'SMA_60']].plot(figsize=(10, 6))  #画图
plot.show()

#计算股票收益,有两种计算收益率方法:1.离散收益率  2.连续收益率
data['position'] = np.where(data['SMA_20'] > data['SMA_60'], 1, -1)  #当20日均线大于60日均线时记录1,反之记录-1
data['returns'] = np.log(data['close']/data['close'].shift(1))  #连续收益率计算
#data['returns_dis'] = data['close']/data['close'].shift(1) - 1  #离散收益率计算
data['strategy'] = data['position'].shift(1)*data['returns']
data['returns'].cumsum().apply(np.exp).plot(figsize=(10, 6))  #计算累计收益并输出图,np.exp方法返回x的指数
plot.show()

data['returns'].hist(bins=50)  #绘制直方图
plot.show()

猜你喜欢

转载自blog.csdn.net/Wilburzzz/article/details/107636928
今日推荐