利用Excel进行最简单的策略回测
前言
谈到金融量化,大部分人的第一个想到的工具就是python,对于excel则比较瞧不起。其实这种使用工具之间的优越感倒是真不必,任何工具都有其擅长的范围,我们需要根据不同的应用场景加以考察。
策略回测
下面以最简单的520策略为例,选择平安银行(000001.SZ)的2017-01-01至2019-05-13为时间段,在Excel上进行回测,看一下这个策略在这段时间的表现如何。
买入:5日均线上穿20日均线(金叉)
卖出:5日均线下穿20日均线(死叉)
简单起见,限定交易环境:
- 只考虑做多
- 买卖单边手续费0.03%,不考虑印花税
- 每手100股
- 不考虑分红
- 买卖全仓操作,不考虑资金管理
- 初始资金100万元
要计算最终策略的收益,设定了如下变量:
- 当前市值:前一日的市值+当日净收益
- 当前持仓:当日持有的股票数量
- 价格变化:当日价格-前一日价格
- 价格变动收益:就是当日股价变动带来的浮动收益
- 手续费:如果当日出现买卖,则计算手续费
- 净收益:价格变动收益-手续费
注意事项
1. 注意未来函数,不要在当前周期还没有结束前交易
以日线为例,是以一天的收盘价计算的买卖信号,也就是说当一天的交易结束之后才能判断出是否满足了买卖条件,例如2017-05-25结束后,才能计算得5日均线>20日均线,并且前一日的5日均线<20日均线,可知满足了买入条件,但是当天的交易已经结束,只能等到明天才能进行买卖操作,为简单起见,我将第二日的收盘价作为了买卖的价格,即在收盘那刻成交。
同时需要注意,第二日(2017-05-26)的价格变动收益就不能用"(当日收盘价-前一日收盘价)*当前持仓",我这里设为零。
2.excel的公式编写
上述各个变量之间存在关联,需要理清其中的先后关系,考虑实际交易环境:
2.1 当天收盘后计算浮动盈亏
情况一:当天持仓没有变化
浮动盈亏=价格变化*当前持仓
情况二:当天持仓发生了变化
不论是多头开仓,还是多头平仓,均只有手续费,不计算当天的价格变动收益,此时
浮动盈亏= -手续费
2.2 当天的市值
当前市值 = 前一日的市值 + 当日浮动盈亏
2.3 判断当天是否给出买卖信号
如果当天没有给出买卖信号,则第二天不做操作,否则第二天需要调整仓位(买入或卖出),需要注意这里调整的仓位依赖于前一日计算的市值
结果
一些excel的函数细节比较琐碎,就不一一展开了,文件的截图以及净值收益率曲线如下: