获取数据—— 股票代码: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())

根据如上数据,应该是没有亏损且能够获利。

 

 

 

 

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐