10年市场牛熊数据证明不准的技术指标——MACD篇

最近的文章,本狐讨论了技术指标为什么会亏钱的问题,引发了不少读者的讨论。技术指标亏钱的原因有:技术指标是滞后的,只说明了当前的走势,不能预测未来的走势;技术指标反应了一部分人群的看法,反而成为了庄家、主力反向操作的机会;技术指标是基于历史经验和数据统计获得的,但是由于历史局限性,并未经过有效检验。

实践是检验真理的唯一标准,数据是检验技术指标准确的标准。技术指标是否准确,只有理论推导是不行的,一定需要数据检验。因此,本狐提出了几条数据检验的基准:

长周期的历史交易数据验证。长周期指时间跨度要长,至少经过几次市场的牛熊变换。

大数据量的交易数据验证。交易不能局限在几支股票,或者某一类股票,最好是拿全市场的股票数据进行验证,包括创业板(涨跌幅不同),ST,大盘股,小盘股,指数成分股等。

对真实交易的模拟,引入各种真实的客观限制。交易者的资金有限,不可能对市场上所有的符合技术指标的股票进行购买,需要限定持仓股数;涨跌幅买卖不成;停牌对资金的占用等。

本狐使用了A股市场2010年到2021年10月,近11年的市场A股所有日线数据进行检验,股票数量一共4424只,交易数据773万+。模拟交易模型分为两类:

无限制的交易模型。假设资金量无限,对交易日市场上的所有股票,只要技术指标是买入信号,且当前未持仓该股票,就进行买入;只要技术指标是卖出信号,且当前持仓该股票,就进行卖出。此交易模型用于检验指标的通用成功率,买卖后盈利计算为成功,买卖后亏损计算为失败,并统计所有买卖的平均盈利和最大亏损。

固定持仓交易模型。这个模型更接近于真实,限制同时持仓的股票数量,设定为4只,每只占用约1/4的资金量。只要技术指对持仓股票发出卖出信号,就卖出持仓股票;同时,对市场上发出买入信号的股票随机选取进行买入,保证当前持仓4只股票,除非市场上的股票在当前交易日无买入信号。

以上两个交易模型的成交价均以股票当日的收盘价成交,如果当天涨停或者跌停则交易失败。所有交易忽略交易手续费,仅计算买卖的差价。

最近的文章我们评估了均线、RSI、OBV等指标的结果(参照本狐近期的文章),本篇我们看下使用非常广泛,口碑极佳的MACD指标。MACD称为异同移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势。MACD衍生了不少的股票战法,也是很多股评大神喜欢使用的指标。那么macd的指标表现到底如何呢?

严谨的科学实验才能获得真实结果

数据实验代码使用了Python pandas_ta的macd,指标参数选择常用的12,26和9。对应买入、卖出的代码片段如下:

def model_predict(self, s, fo, model_path):
        df = pd.DataFrame({‘close’: s.close_price})
        if len(df) < 34:  # 26+9-1
            # No sufficient data samples
            pred = [0] * len(df)
            return pred
        macd = df.ta.macd()
        # buy point: macd_12_26_9 up through macdh_12_26_9
        # sell point: macd_12_26_9 down through macdh_12_26_9
        pred = [0] * len(macd)
        for i in range(1, len(pred)):
            if np.isnan(macd[‘MACD_12_26_9’][i]) or np.isnan(macd[‘MACDh_12_26_9’][i]):
                continue
            if macd[‘MACD_12_26_9’][i – 1] <= macd[‘MACDh_12_26_9’][i – 1] and macd[‘MACD_12_26_9’][i] > \
                    macd[‘MACDh_12_26_9’][i] > 0:
                pred[i] = self.buy_point
                continue
            if macd[‘MACD_12_26_9’][i – 1] >= macd[‘MACDh_12_26_9’][i – 1] and macd[‘MACD_12_26_9’][i] < \
                    macd[‘MACDh_12_26_9’][i] < 0:
                pred[i] = self.sell_point
        return pred

接下来,就上实验的数据结果了:

UnlimitTrade

Evaluate stock count 4424, total sample length:7731826

Total trading count:93365, succeed count:28196, successful rate:0.301998

Revenue:0.017561, max gain:13.416803, max loss:-0.814815

Accumulated revenue:0.017561

———————————————————–

FixedTrade

Evaluate stock count 4424, total sample length:7731826

Total trading count:311, succeed count:89, successful rate:0.286174

Average revenue:0.009232, peak gain: 2.141833, max single gain:0.986340

Max single loss:-0.190171, max backward:-0.698351

Accumulated revenue:0.571395, Init asset: 400000, Final asset:628558

———————————————————–

FixedTrade, test from the date 2020-08-20

Evaluate stock count 4413, total sample length:1154610

Total trading count:37, succeed count:12, successful rate:0.324324

Average revenue:0.020084, peak gain: 1.206643, max single gain:0.794207

Max single loss:-0.118793, max backward:-0.238448

Accumulated revenue:0.094243, Init asset: 400000, Final asset:437697

数据解读:

无限制交易模型,共交易次数9.3万次,其中盈利的交易次数只有30%。是不是远低于你的预期?所有单次交易的最大盈利有13.4倍,最大亏损-81%。平均交易的盈利是1.76%。

固定持仓4只股票交易模型,共交易次数311次,其中盈利的交易次数28.6%。交易中的最大亏损有-19%%,最大回撤-69.8%。10年下来的最终盈利是57.1%。值得注意的是,因为符合买入条件的股票是随机买入,多次实验的盈利数据有一点差距。进一步,我们看指标在最近一年,即20年8月之后的数据:交易成功率32.4%,最终收益9.4%。

10年真实的牛熊市真实的数据实验检测的结果,是否和你的传统经验有很大的出入?广泛流传并使用的技术指标MACD的成功率只有3成!对比其他指标,如均线、RSI、OBV等,指标成功率差不多,并没有表现出更高的成功率!

很遗憾,投资市场没有所谓的银弹,或者不败的秘籍。远离一切技术指标吧,当看到股评节目中的专家头头是道地进行技术分析时,看看就好,千万不要据此做出买卖决策。技术指标由于受众广,或许能作为投资者的情绪反应,但是万万不能作为投资的风向标。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to Top