获取数据—— 股票代码:000001.SZ
时间:从 2017-07-20 到 2020-07-20
import tushare as ts
import pandas_datareader as pda
import matplotlib.pyplot as plt
import numpy as np
pro = ts.pro_api('********')
df = pro.daily(ts_code='000001.SZ', start_date='20170720', end_date='20200720')
#数据按日期正序排序,并设置日期为索引
df = df.set_index('trade_date')
df = df.sort_index()
df
df['close'].plot(figsize = (15,7))
计算MA均线指标参数:5、10、50、120天
df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()
df['MA50'] = df['close'].rolling(50).mean()
df['MA120'] = df['close'].rolling(120).mean()
df
df[['close','MA5','MA10','MA50','MA120']].plot(figsize = (15,7))
plt.grid(True)
#去掉空值
data = df[['close','MA5','MA10','MA50','MA120']].dropna()
data['MA5-MA10'] = data['MA5']-data['MA10']
data['MA10-MA50'] = data['MA10']-data['MA50']
data['MA5_10-MA10_50'] = data['MA5-MA10']-data['MA10-MA50']
data.describe()
根据上面的数据分析给出SD,后期再不断调整。
SD = -0.6
#生成交易信号
data['signal'] = np.where(data['MA5_10-MA10_50']> SD,1,0)
data['signal'] = np.where(data['MA5_10-MA10_50']< -SD,-1,data['signal'])
data
#计算收益率 算数收益率 对数收益率
data['return'] = (data['close']-data['close'].shift(1))/data['close'].shift(1)
#累积收益率
data['stra_re'] = data['signal'].shift(1) * data['return']
data[['return','stra_re']].cumsum().plot(figsize = (15,7))
plt.grid(True)
data['stra_sum'] = data['stra_re'].cumsum()
print(data['stra_sum'].describe())
根据如上数据,应该是没有亏损且能够获利。