Python akshare 回测均线交叉策略的收益
针对均线交叉策略的收益,进行回测
从 akshare 获取数据的代码,可从上一篇文章中获取[Python 通过 akshare 绘制中国平安均线并显示买卖点
但是由于需要进行回测,就需要很长时间的数据,只是使用30天的数据,是无法看出来策略的好坏的,这次直接获取所有的数据。
pingan = ak.stock_zh_a_daily(symbol=symbol, adjust="qfq")
data = pingan.reset_index()
计算5日线和10日线的代码如下
data['1'] = data['close']
data['5'] = data.close.rolling(5).mean()
data['10'] = data.close.rolling(10).mean()
计算买卖信号
data['Signal'] = 0
# 短期均线上穿长期均线,产生买入信号
data.loc[data['5'] > data['10'], 'Signal'] = 1
# 短期均线下穿长期均线,产生卖出信号
data.loc[data['5'] < data['10'], 'Signal'] = -1
这篇针对5日线和10日线上穿和下穿的信号,进行数据回测,看下按照均线买卖的话收益率如何。使用的还是中国平安(sh601318)的数据
-
计算每日收益率
data['Daily_Return'] = data['close'].pct_change()
-
计算策略收益
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
-
计算累计收益
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
-
绘制折线图
plt.figure(figsize=(10, 6)) plt.plot(data['Cumulative_Return'], label='策略收益回测', color='b') plt.plot(data['close'] / data['close'].iloc[0], label='股票', color='g') plt.title("策略收益回测 vs. 股票") plt.xlabel("日期") plt.ylabel("策略积累收益") plt.legend() plt.show(block=True)
绘制的折线图如下:
直面挑战,躬身入局