likes
comments
collection
share

【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

作者站长头像
站长
· 阅读数 3

前言

均线(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 日均线;
  • 纵轴:年份
  • 数据:涨跌绝对值

【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

从近 10 年的数据来看,大概能得出以下结论:

  1. 大盘的胜率大概在 5 成,且基本是整体上涨的时候胜,下跌的时候输;
  2. 策略胜的情况,基本都是 20 日均线以上;
  3. 2022 年扭亏为盈比较神奇,列出图形来看下;
  4. 2021 和 2020 年的数据,策略竟然可以扭赢为亏,有点可怕,列出图形来看一下;

2022 - MA25 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗 2021 - MA25 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗 2020 - MA25 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

小结

看现象,大盘曲线剧烈波动,反复穿越均线的情况,一般都是亏的。赚的时候也是大盘一波单边上涨,然后回调。这个策略目前看来不怎么样,还是换个策略试试吧。

策略二:上穿均线买,固定周期卖

策略描述

  • 买入:收盘价上涨穿过 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)的涨跌绝对值。

【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

初步观察的结论:

  1. 大盘整体上涨时,收益几乎都是最好的,这意味着策略几乎没有效果。2014 比较典型,2015 年反常,等会看下图形;
  2. 大盘整体下跌时,损失几乎都是最差的,这意味着策略的效果明显。重点看一下2022,2018 和 2016;
  3. 近 5 年(2018 年起),【Sell in 1】列整体表现不错,绿色的比较多,但是几乎没有最优解
  4. 2017 年之前,【Sell in 1】列整体表现较差;

2022 - MA5 - Sell in 2 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

2018 - MA30 - Sell in 1 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

2016 - MA5 - Sell in 4 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

2015 - MA5 - Sell in 4 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

2014 - MA5 - Sell in 4 【Backtrader】专治割韭菜(二)——均线(MA)靠谱吗

小结

  • 由于单边上涨时,此策略会错过这波涨幅,所以收益几乎可以忽略不计;
  • 但是单边下跌时,由于该策略的特点,甚至能够实现盈利;
  • 横盘震荡时,可以实现大概率盈利;

总结

由于 A 股只能做多,所以几乎决定了上涨和下跌的策略必然不一样的结果。经过测试,策略二在下跌和横盘时,有一定的操作价值。但是单边上涨时,几乎会错过这波行情;相反的,策略一反而能吃到上涨的这波

以上结论也比较符合认知,那么问题来了。怎么判断大盘什么时候会单边上涨呢?这貌似是个真正的技术活啊!