【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗
前言
均线(MA,Moving Avarage)是最常用的技术指标,用法也多种多样。我们今天就来测一下均线相关的策略,看看效果到底怎么样。
注:测试均不考虑佣金,货币时间价值等因素,且本金无限。测试结果仅供参考。完整代码请见 笔者的 Gitee。
策略一:无脑买卖
策略描述
- 买入:收盘价上行穿过 n 日均线;
- 卖出:收盘价下行穿过 n 日均线;
核心代码
def __init__(self):
self.dataclose = self.datas[0].close
self.order = None
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
self.order = None
def next(self):
if self.order:
return
if not self.position:
if self.dataclose[0] > self.sma[0]:
self.order = self.buy()
else:
if self.dataclose[0] < self.sma[0]:
self.order = self.sell()
数据分析
- 横轴:上证指数或 n 日均线;
- 纵轴:年份
- 数据:涨跌绝对值
从近 10 年的数据来看,大概能得出以下结论:
- 大盘的胜率大概在 5 成,且基本是整体上涨的时候胜,下跌的时候输;
- 策略胜的情况,基本都是 20 日均线以上;
- 2022 年扭亏为盈比较神奇,列出图形来看下;
- 2021 和 2020 年的数据,策略竟然可以扭赢为亏,有点可怕,列出图形来看一下;
2022 - MA25
2021 - MA25
2020 - MA25
小结
看现象,大盘曲线剧烈波动,反复穿越均线的情况,一般都是亏的。赚的时候也是大盘一波单边上涨,然后回调。这个策略目前看来不怎么样,还是换个策略试试吧。
策略二:上穿均线买,固定周期卖
策略描述
- 买入:收盘价上涨穿过 n 日均线;
- 卖出:持有 m 天后;
核心代码
class TestStrategy(BasicStrategy):
params = (
('maperiod', 15),
('exitbars', 2),
('printlog', False),
)
def __init__(self):
self.dataclose = self.datas[0].close
self.sma = bt.indicators.SimpleMovingAverage(
self.datas[0], period=self.params.maperiod)
self.bar_executed = 0
self.order = None
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
self.signal = 0
self.bar_executed = len(self)
self.order = None
def next(self):
if self.order:
return
if not self.position:
if self.dataclose[0] > self.sma[0] and self.dataclose[-1] < self.sma[-1]:
self.log('BUY CREATE, %.2f' % self.dataclose[0])
self.order = self.buy()
else:
if len(self) >= self.bar_executed + self.p.exitbars:
self.log('SELL CREATE, %.2f' % self.dataclose[0])
self.order = self.sell()
def stop(self):
self.final = self.broker.getvalue()
数据分析
- 横轴:m 天后卖出;
- 纵轴:n 日均线;
- 数据:收益绝对值;
- 多表:每个表格表示一年的数据,从当年的 1.1~12.31 日,加粗的数字为当年上证指数(SSE)的涨跌绝对值。
初步观察的结论:
- 大盘整体上涨时,收益几乎都是最好的,这意味着策略几乎没有效果。2014 比较典型,2015 年反常,等会看下图形;
- 大盘整体下跌时,损失几乎都是最差的,这意味着策略的效果明显。重点看一下2022,2018 和 2016;
- 近 5 年(2018 年起),【Sell in 1】列整体表现不错,绿色的比较多,但是几乎没有最优解;
- 2017 年之前,【Sell in 1】列整体表现较差;
2022 - MA5 - Sell in 2
2018 - MA30 - Sell in 1
2016 - MA5 - Sell in 4
2015 - MA5 - Sell in 4
2014 - MA5 - Sell in 4
小结
- 由于单边上涨时,此策略会错过这波涨幅,所以收益几乎可以忽略不计;
- 但是单边下跌时,由于该策略的特点,甚至能够实现盈利;
- 横盘震荡时,可以实现大概率盈利;
总结
由于 A 股只能做多,所以几乎决定了上涨和下跌的策略必然不一样的结果。经过测试,策略二在下跌和横盘时,有一定的操作价值。但是单边上涨时,几乎会错过这波行情;相反的,策略一反而能吃到上涨的这波。
以上结论也比较符合认知,那么问题来了。怎么判断大盘什么时候会单边上涨呢?这貌似是个真正的技术活啊!
转载自:https://juejin.cn/post/7132692403999211533