本文目的是为了验证采用什么样的均线策略会比较有效;
采用策略:当开盘价>=MA_5日线并且涨跌幅>0时第二天以开盘价买入;
当开盘价
import pandas as pd
#pd.set_option('display.max_rows',10000)
data=pd.read_csv('overview-data-sh/index/sh000001_new.csv',encoding='gbk')
data=data[['股票代码', '交易日期','涨跌幅','开盘价','收盘价','MA_5','MA_10','MA_20','MA_60']]
data.交易日期=pd.to_datetime(data.交易日期)
data=data[data.交易日期>='20050101']
data=data.sort('交易日期')
#第二步:按照策略计算买卖信号,计算收盘发出的信号
#buy=data[data.开盘价<4000].index
#sell=data[data.开盘价>=4000].index
buy=data[(data.开盘价>=data.MA_5) & (data.涨跌幅>0)].index
sell=data[(data.开盘价<data.MA_20) & (data.涨跌幅<0)].index
data.loc[buy,'收盘发出的信号']=1
data.loc[sell,'收盘发出的信号']=0
data['当天仓位']=data['收盘发出的信号'].shift(1)
data['当天仓位'].fillna(method='ffill',inplace=True)
data
#第三步:计算策略年及累积的涨跌幅
data['策略涨跌幅']=(data.涨跌幅) * data.当天仓位
year_rnt=data.set_index('交易日期')[['股票代码','涨跌幅','策略涨跌幅']].\
resample('M',how=lambda x: (x+1).prod() -1)
year_rnt['累积涨跌幅']=(year_rnt.涨跌幅+1).cumprod()
year_rnt['策略累积涨跌幅']=(year_rnt.策略涨跌幅+1).cumprod()
year_rnt
%pylab
import matplotlib.pyplot as plt
data1=year_rnt['涨跌幅']
data2=year_rnt['策略涨跌幅' ]
data3=year_rnt['累积涨跌幅']
data4=year_rnt['策略累积涨跌幅']
plt.plot(data1,'k',label='change')
plt.plot(data2,'g',label='strategy change')
plt.plot(data3,'b',label='cumchange')
plt.plot(data4,'r',label='cumstrategy change')
plt.legend()
plt.show()
结论上图:
以A股上市2005010年来的数据为例:
以个股600148为例(20050101以来数据):
这种策略对个股在某段时间或许有效,长期并不一定比一直持股有效。