第三章:趋势识别与量化

道氏理论:趋势的原始定义

聊趋势,绕不开道氏理论。这是所有趋势跟踪策略的祖宗。

道氏理论的核心其实就三句话:趋势分三级(主要、次级、小型),趋势需要确认(指数之间要互相验证),趋势会持续直到反转信号出现。听起来简单吧?但我在实盘里见过太多人栽在「确认」这一步上。

举个例子。2018年比特币从2万跌到3000,很多人看到日线反弹就喊「牛市回来了」。结果呢?周线级别明明还在创新低。这就是典型的周期错配——用次级趋势去对抗主要趋势。

核心要点:

  • 主要趋势:持续时间超过1年,幅度超过20%
  • 次级趋势:持续3周-3个月,幅度为主要趋势的1/3-2/3
  • 小型趋势:持续不超过3周,容易被操纵

我个人习惯,做趋势跟踪只关注主要趋势。次级趋势用来找入场点,小型趋势?直接忽略。你想想看,如果连周线级别的方向都没定,盯着15分钟K线做单,那不是给自己找麻烦吗?

移动平均线系统:趋势的量化工具

道氏理论是定性分析,移动平均线就是定量工具。说白了,就是把「趋势」这个模糊概念,变成一条可以计算的线。

我常用的均线系统分三套:

系统 参数 适用场景
短期系统 MA5, MA10, MA20 日内交易、短线波段
中期系统 MA20, MA60, MA120 趋势跟踪、中线持仓
长期系统 MA120, MA250, MA500 大周期判断、资产配置

这里有个坑,我踩过。均线参数不是越复杂越好。我曾经搞过一套7条均线的系统,看起来很美,实际上一进场就晕——每条线都在交叉,根本不知道信哪条。

我的经验:趋势行情用EMA(指数移动平均),震荡行情用SMA(简单移动平均)。为什么?EMA对价格变化更敏感,趋势里能早一步跟上;SMA更平滑,震荡里不容易被假突破骗线。

代码实现其实很简单。以Python为例:

import pandas as pd
import numpy as np

def calculate_ma(data, window):
    """计算移动平均线"""
    return data['close'].rolling(window=window).mean()

def calculate_ema(data, window):
    """计算指数移动平均线"""
    return data['close'].ewm(span=window, adjust=False).mean()

# 实战用法:金叉死叉信号
data['MA20'] = calculate_ma(data, 20)
data['MA60'] = calculate_ma(data, 60)

# 金叉:MA20上穿MA60
data['golden_cross'] = (data['MA20'] > data['MA60']) & (data['MA20'].shift(1) <= data['MA60'].shift(1))

# 死叉:MA20下穿MA60
data['death_cross'] = (data['MA20'] < data['MA60']) & (data['MA20'].shift(1) >= data['MA60'].shift(1))

嗯,这里要注意。金叉死叉在震荡行情里就是灾难。我统计过,在横盘区间里,金叉死叉的成功率不到40%。所以千万别无脑用。

ADX趋势强度指标

均线告诉你方向,ADX告诉你这个方向靠不靠谱。

ADX全称是Average Directional Index,平均趋向指数。取值范围0-100,一般这么看:

  • ADX < 20:弱趋势,震荡行情
  • ADX 20-40:中等趋势,可以操作
  • ADX > 40:强趋势,但小心超买超卖
  • ADX > 60:极端行情,随时可能反转

我曾经在2020年原油期货上吃过亏。当时ADX飙到70以上,我以为趋势会继续,追了进去。结果第二天直接暴跌20%。后来复盘才明白——ADX太高的时候,趋势已经走到末期了,这时候进场就是接盘侠。

避坑指南:ADX本身不指示方向,只指示强度。很多人只看ADX数值就做单,这是错的。必须配合+DI和-DI来判断方向。我曾经犯过这个错,亏了不少钱。

ADX的计算稍微复杂一点,但核心逻辑很清晰:

def calculate_adx(data, period=14):
    """计算ADX指标"""
    high = data['high']
    low = data['low']
    close = data['close']
    
    # 计算方向变动
    up_move = high - high.shift(1)
    down_move = low.shift(1) - low
    
    # +DM和-DM
    plus_dm = np.where((up_move > down_move) & (up_move > 0), up_move, 0)
    minus_dm = np.where((down_move > up_move) & (down_move > 0), down_move, 0)
    
    # 计算TR(真实波幅)
    tr = np.maximum(high - low, 
                    np.abs(high - close.shift(1)), 
                    np.abs(low - close.shift(1)))
    
    # 平滑处理
    atr = pd.Series(tr).rolling(period).mean()
    plus_di = 100 * pd.Series(plus_dm).rolling(period).mean() / atr
    minus_di = 100 * pd.Series(minus_dm).rolling(period).mean() / atr
    
    # 计算DX和ADX
    dx = 100 * np.abs(plus_di - minus_di) / (plus_di + minus_di)
    adx = pd.Series(dx).rolling(period).mean()
    
    return adx, plus_di, minus_di

实战中,我一般这么用ADX:

  1. ADX从低位(<20)向上突破20,说明趋势正在形成
  2. ADX在20-40之间,配合+DI/-DI交叉做单
  3. ADX超过50,开始减仓,准备止盈
  4. ADX从高位回落,说明趋势可能结束

说白了,ADX就是趋势的「油门表」。油门踩到底的时候,虽然速度快,但也离翻车不远了。

三者的实战组合

单独用任何一个指标,效果都有限。我习惯把三者结合起来:

我的交易框架:

  • 第一步:用道氏理论判断主要趋势方向(周线级别)
  • 第二步:用均线系统确认当前处于趋势的哪个阶段(日线级别)
  • 第三步:用ADX判断趋势强度,决定仓位大小

举个例子。假设周线级别是上升趋势(道氏理论),日线MA20在MA60之上(均线多头排列),ADX在30左右且向上(趋势中等偏强)。这时候我会考虑做多,仓位可以放到正常水平的80%。

反过来,如果周线上升,但日线均线纠缠,ADX低于20。说明大方向向上,但短期没动能。这时候我会等,或者只做小仓位试探。

这套框架我用了好几年,最大的好处是过滤掉了大部分假信号。三个指标同时共振的时候,胜率明显提升。

趋势识别与量化:三指标共振框架 道氏理论:趋势方向判断 主要趋势(周线)→ 次级趋势(日线)→ 小型趋势(小时线) 核心:大周期定方向,小周期找入场 移动平均线系统:趋势量化确认 短期(5/10/20)→ 中期(20/60/120)→ 长期(120/250/500) 核心:均线排列方向 = 趋势方向,金叉死叉 = 趋势转折 ADX趋势强度指标:趋势可信度评估 ADX<20(震荡)→ 20-40(中等趋势)→ >40(强趋势) 核心:ADX越高趋势越强,但过高意味着趋势末端 三指标共振 → 高胜率交易信号 方向一致 + 趋势确认 + 强度适中 = 最佳入场时机

这张图就是我日常用的框架。从上到下,层层过滤。不符合条件的信号,直接放弃。宁可错过,不要做错——这句话在趋势交易里尤其重要。

最后说一句:任何指标都有滞后性。移动平均线滞后,ADX也滞后。但滞后不是问题,问题是你能不能接受滞后。趋势跟踪本身就是吃「滞后」这碗饭的——我们放弃鱼头鱼尾,只吃鱼身。

专注资料整理