文章目录
显示
双均线策略:
一、计算信号收益率
上节课我们已经把生成信号的工作都做好了
这节课计算计算单次收益率
/和累计收益率
def ma_strategy(data, short_window = 5, long_window = 20):
# 计算技术指标:ma短期 ma长期
data['short_ma'] = pd.DataFrame(data['close']).rolling(window=short_window).mean()
data['long_ma'] = pd.DataFrame(data['close']).rolling(window=long_window).mean()
#生成信号 : 金叉买入 死叉卖出
data['buy_signal'] = np.where(data['short_ma']>data['long_ma'], 1, 0)
data['sell_signal'] = np.where(data['short_ma']<data['long_ma'], -1, 0)
#print(data)
# 过滤信号 st.compose_signal
stb.compose_signal(data)
#计算单次收益率
data = stb.calculate_profit_pct(data)
#计算累计收益率
data = stb.calculate_cum_prof(data)
#print(data)
return data
运行结果 看2020年用这个策略进行投资的累计收益率
可以看到,这里的累计收益率是负的,
这里有2个问题:
- 这是我用平安银行跑的数据,这只股票用这个策略不赚钱不代表其他股票不赚钱,每只股票都不同 可能有些股票它一直下跌,你怎么弄都是亏钱。
- 时间区间的问题,这里为了测试方便,取的是一年的时间,正常来说我们取的是3到5年的时间段,因为时间越长越容易了解它的时间趋势性策略的有效性。
按我们的金叉,死叉策略,如果我们想要测试的更有效还需要考虑很多参数,比如说ma短期,ma长期它的不同的取值会有什么影响,以及对于同样一个策略,我去添加一个止盈和止损的因素,这样合成的策略,它的结果又会不同,所以这里分析的空间会有很大。
所以我们多拿几个投资标的,比如说你可以找五粮液,比亚迪,等其他的股票一起取测试,
二、更改投资标的
if __name__ == '__main__':
#创建股票列表(平安银行 五粮液 比亚迪)
stocks = ['000001.XSHE', '000858.XSHE', '002594.XSHE']
# 存放累计收益率
cum_profits = pd.DataFrame()
for code in stocks:
data = st.get_single_price(stock_code=code, timefrequency='daily', start_date='2016-01-01', end_date='2021-01-01')
data = ma_strategy(data)
cum_profits[code] = data['cum_profit'].reset_index(drop=True)
# # 筛选有信号点的数据
# data = data[data['signal']!=0]
# # 预览数据
print("开仓次数:", int(len(data)))
# print(data)
#预览
print(cum_profits)
# 可视化
cum_profits.plot()
plt.title('comparison of ma strategy')
plt.show()
可以看到 采用这个策略 ,持续5
年 ,都是盈利的,五粮液盈利最大。
可视化的图形可以非常直观的看出来:
转载请注明:xuhss » Python量化交易实战-25使用双均线策略计算收益率