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)的数据

  1. 计算每日收益率

    data['Daily_Return'] = data['close'].pct_change()
    
  2. 计算策略收益

    data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
    
  3. 计算累计收益

    data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
    
  4. 绘制折线图

    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)
    

    绘制的折线图如下:


源码已上传 ,需要获取源码,可以在微信后台回复“绘制K线”关键字获取源码

posted @ 2024-01-06 20:39  熠然  阅读(85)  评论(0编辑  收藏  举报