ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

趋势跟踪交易系统:趋势发现、持股管理与短线回调买点

趋势跟踪交易系统:趋势发现、持股管理与短线回调买点

趋势发现、趋势跟踪持股、短线相对进场低点,这三件事其实是一条链上的三个环节:先判断方向能不能做,再决定手里的仓位怎么拿住,最后才是找一个不至于一进场就被套的位置。很多人把这三件事拆开单独研究,结果就是方向对了拿不住,拿住了买在半山腰,买在低点了又赶上趋势已经结束。这篇内容就把这条链拆成可执行的规则,指标公式、参数取值、判断口径、失效场景都会讲到,所有标的均为构造的模拟案例,只为说明形态与方法,不指向任何真实标的。适合已经会看均线、MACD,但用起来总是时灵时不灵,想建立一套自洽判断体系的人。

1. 把“趋势”这个词拆开:从噪音里捞出可交易的方向

1.1 均线金叉为什么经常骗人

刚接触趋势的时候,几乎所有人都是从均线金叉开始的。短期均线上穿长期均线,教科书上说这是多头信号。问题在于,金叉本身只描述了一件已经发生的事:过去若干根K线的平均成本刚刚超过了更早一段时间的平均成本。它不包含任何关于“接下来还有多少空间”的信息。

拿模拟标的A的日线举例,在一段横盘区间里,价格上下摆动幅度只有8%,MA5和MA20会在两个月内交叉七八次。每一次交叉看着都像信号,实际全是噪音。更麻烦的是,金叉出现的位置往往已经是这波小反弹的末端,你追进去,第二天就回落。

真正的差别不在于你用不用金叉,而在于你有没有在金叉之外加一层“这个信号值不值得信”的过滤。我见过的靠谱做法,基本都把趋势判断拆成了三个互相独立的维度:方向、强度、结构。三者同时满足才动手,缺一个就等。

1.2 方向层、强度层、结构层的具体口径

方向层解决“往哪边做”。最朴素的口径是用一条中期均线做多空分界,比如MA60。价格在MA60之上且MA60本身走平或向上,只考虑做多;反之只考虑做空或者干脆不做。这一层的作用不是抓买卖点,而是强行限制你的操作方向,避免在下跌趋势里抄底抄到手软。

强度层解决“这个方向值不值得跟”。方向对但力度弱,最容易出现的情况是慢涨急跌、进三退二,持仓体验极差。强度可以用两个东西衡量:ADX(平均趋向指数)和均线斜率。ADX低于20通常说明市场在震荡,20到25是模糊地带,25以上才算趋势成立。

结构层解决“趋势有没有被破坏”。最直观的定义是看高低点的排列:上升趋势里,每一个摆动高点都比前一个高,每一个摆动低点也都比前一个高,也就是常说的HH/HL结构。摆动高低点的机械定义可以这样取:某根K线的高点是前后各5根K线里的最高,它就是摆动高点;低点同理。结构没破,趋势就还在,哪怕中途跌得很凶。

维度判断工具常见阈值主要作用
方向MA60、MA120价格与均线的相对位置限制只做单边
强度ADX(14)、均线斜率ADX>25,斜率为正过滤弱势震荡
结构摆动高低点排列HH+HL 保留,LH+LL 失效判断趋势是否终结

这三层不是叠加得越多越好。层数多了信号会极度稀疏,一年可能只有几次机会。我的经验是方向层和强度层必留,结构层作为离场依据而不是入场依据,这样入场频率和持仓稳定性比较平衡。

1.3 参数取值背后的计算逻辑

均线周期为什么常用20、60、120?这些数字不是玄学。一个月大约20个交易日,一个季度大约60个交易日,半年大约120个交易日。它们对应的是不同资金群体的平均持仓成本:MA20接近短线资金的成本线,MA60接近中线机构的成本线。价格跌破MA20,短线资金开始亏钱;跌破MA60,中线资金开始亏钱。止损盘往往就集中在这两条线附近,所以它们才有支撑和压力的意义。

ADX的14这个参数,来源于 Wilder 最初设计时的周期选择,本质上是对TR、+DM、-DM做平滑。平滑方式有两种:Wilder平滑和简单移动平均。Wilder平滑的公式是ATR_t = (ATR_{t-1} * 13 + TR_t) / 14,它对历史值给了更高的权重,反应比简单均线慢半拍。很多软件默认用Wilder,你在不同平台看到的ADX数值会有细微差异,这个差异在临界值附近会导致判断不一致,做复盘的时候要留意。

斜率怎么算才可比?直接算MA_t - MA_{t-5}不行,因为不同价位的标的这个差值量级完全不同。要归一化,我常用的写法是:

slope = (MA_t / MA_{t-5} - 1) / 5 * 100

这样得到的是“均线每天平均涨跌百分比”,跨标的可比。经验上,日线MA60的归一化斜率大于0.05(即每天平均涨0.05%以上)算温和上行,超过0.2就是比较陡的趋势了。这个数值需要在你自己关注的品种上做统计校准,不同波动率的品种差别很大。

2. 趋势强度的量化:ADX与斜率怎么配合看

2.1 ADX在算的到底是什么东西

ADX常被误解成“方向指标”,其实它完全不告诉你方向。它衡量的是“方向性运动的纯度”。价格每天大涨大跌但方向来回切换,ADX会很低;价格每天只涨一点点但从不回调,ADX会很高。

拆开看:先算 +DM 和 -DM。今天最高价减昨天最高价,如果为正且大于昨天最低价减今天最低价的绝对值,那今天的 +DM 就是它,否则为0;-DM反之。然后各自用TR归一化,得到 +DI 和 -DI。DX = 100 × |+DI − -DI| / (+DI + -DI)。最后对DX做14周期平滑,就是ADX。

这个结构决定了ADX的一个重要特性:它滞后。趋势启动初期ADX往往还在20以下,等它冲到30以上,行情可能已经走了一半。所以ADX适合用来“确认”而不是“发现”。拿它当入场信号,你永远买在趋势中段偏后;拿它当过滤器,把ADX<20的时段全部剔除,效果立竿见影。

2.2 均线斜率和ADX的互补关系

这两个指标经常给出不同答案,刚开始我会觉得矛盾,后来才想明白它们看的是不同东西:ADX看的是K线内部的方向一致性,斜率看的是均线这个平滑结果的移动速度。

会出现三种组合:

第一种,ADX高、斜率大,标准强趋势,可以正常按规则持仓,回撤容忍度可以放宽。 第二种,ADX高但斜率小,说明价格在高位剧烈震荡,方向性强但净值不涨。这种阶段最磨人,容易出现“指标显示趋势良好,账户却在缩水”。遇到这种情况我会主动降低仓位,因为波动加大而趋势推进效率下降,风险收益比变差了。 第三种,ADX低但斜率大,通常是急涨之后的初期,ADX还没来得及反应。这时候不宜追高,等ADX补上来或者等回调确认更稳妥。

提示:把ADX和斜率做成两个并列的条件,不要做成加权综合评分。综合评分看起来优雅,实际上掩盖了“到底是哪个维度不满足”,出问题的时候你没法定位。

2.3 一个典型的假趋势案例

模拟标的B在去年某段时间走了一段很漂亮的形态:价格从底部起来,连续三周收阳,MA20上穿MA60,看起来趋势确立了。但翻到ADX窗口,数值一直在18到22之间徘徊,从未有效突破25。同时斜率虽然为正,但只有0.03左右,属于极缓。

后续两个月,价格在一个12%的箱体里反复震荡,每次冲到箱体上沿就回落。按金叉入场的仓位,反复被MA20下方的止损打掉,累计亏损超过15%,而同期标的本身只涨了3%。这就是典型的“形状像趋势、强度不够”的陷阱。

识别这类陷阱的关键,是不要被K线的连续性迷惑。连续收阳不等于趋势强,可能只是波动率低导致的窄幅上移。真正有强度的趋势,K线实体大、回调浅、放量明显,ADX会给出呼应。指标之间互相不认账的时候,宁可放弃这次机会。

3. 趋势跟踪持股:止盈不是猜顶,而是让规则替你扛住波动

3.1 三种移动止损口径的实测对比

持股这件事,难点从来不是买入,而是“涨了30%之后回撤到20%,你走不走”。凭感觉走,结果一定是赚一点就跑、亏了死扛。必须有机械规则。

我用过三种主流口径,各自的性格差别很大:

口径计算方式敏感度适合周期主要缺点
ATR止损最高价 − 2.5×ATR(14)中日线、周线波动率骤变时止损位跳动大
唐奇安通道近20日最低价高日线震荡市频繁触发
均线止损收盘跌破MA20或MA60低周线、日线回吐幅度大

ATR口径的好处是自适应波动率。标的平静时止损贴近,标的狂躁时止损放宽,不会因为一根正常波动的大阴线把你洗出去。2.5倍这个系数,是我在日线上反复试出来的平衡点:2倍太紧,3倍回吐太多。

唐奇安通道最经典,海龟法则用的就是20日低点。它的问题是敏感,在震荡上行中经常被扫。改良办法是把周期拉长到40日,或者要求“收盘价低于20日最低价”而不是“盘中触及”。

均线止损最省心,适合不想天天盯盘的人。代价是回吐大,MA20在强势股上经常被击穿后立刻拉回,MA60又太慢,一波30%的涨幅可能回吐掉一半才走。

我的实际做法是分层:底仓用MA60,浮盈超过20%之后切换到MA20,浮盈超过50%再用ATR跟踪。这样在盈利垫足够厚的时候才收紧,避免早期被噪音打掉。

3.2 中继形态:加仓该在什么地方下手

趋势不是一条直线,中间会有整理。整理结束的位置是加仓的好时机,因为风险点明确——跌破整理区间下沿就走,亏损可控。

常见的中继形态有三种:旗形、三角收敛、平台整理。判断它们是不是“中继”而不是“顶部”,看两个东西:量能和回调深度。整理期间成交量应该明显萎缩,萎缩到主升段均量的40%到60%比较理想;回调深度一般不超过前一波涨幅的50%,超过这个比例,结构就有破坏的风险。

突破的确认也有讲究。以平台整理为例,价格突破平台上沿的当天,成交量应该至少是近5日均量的1.5倍。缩量突破大概率是假突破,尤其是在大盘环境不好的时候。我吃过不止一次亏:看着形态漂亮就提前埋伏,结果突破无量,第二天直接回落,套在平台上沿。

加仓的仓位控制,我的习惯是金字塔式递减:首仓占计划总仓位的50%,第一次加仓30%,第二次加仓20%。越往后加得越少,因为越往后离趋势结束越近,风险越大。

3.3 破位离场的确认层级

“跌破就走”这句话说起来简单,实操里最折磨人的是:盘中跌破算不算?收盘拉回来怎么办?

我的规则分三层:

第一层,收盘价确认。以日线收盘价跌破关键位为准,盘中击穿不算。这一条能过滤掉大量假突破,代价是如果尾盘跳水,你要在第二天承受一个低开。

第二层,时间确认。跌破之后连续两个交易日没有收回,视为有效破位。这一条适合波动大的标的,给它一点反抽的机会。

第三层,幅度确认。跌破幅度超过3%(或者超过1倍ATR),无论收盘与否都减仓。这一条是防极端行情的保险,防止一根大阴线把你按在里面。

三层规则叠加会显得复杂,实际执行时我按仓位大小分配:核心仓位用收盘价确认,容忍度高;机动仓位用幅度确认,敏感度高。不同性质的仓位用不同规则,比用一套规则硬套所有仓位要合理得多。

4. 短线相对进场低点:回调深浅与结构完整的博弈

4.1 “相对低点”到底是相对什么

很多人说的“低点”,其实是“我觉得它跌得够多了”。这种主观判断没有可复现性。所谓相对低点,必须相对于某个明确的参照系才有意义。

我用的参照系有三个:

第一,相对于本波上涨的起点。一波从A到B的上涨,回调到(A+B)/2附近,或者回调到0.382、0.5、0.618这些斐波那契位,是有统计意义的区域,因为这些位置聚集了大量获利盘的再入场意愿。

第二,相对于均线。MA20、MA60与斐波那契回调位重合,形成“共振支撑”,这种位置的可靠性明显高于单一信号。

第三,相对于前期的成交密集区。用成交量分布看,某个价格区间堆积了大量成交,说明这里换手充分,套牢盘和获利盘的成本都在这里,价格回到这里会有自然的买卖力量对冲。

三个参照系重合得越多,这个位置越值得下手。只满足一个的,我会降低仓位或者干脆放弃。

4.2 回调深度的分档处理

回调多深算“健康”,跟趋势的强度直接相关。同样是回调,强势趋势里回撤20%以内就止跌了,弱势趋势里回撤50%还在往下跌。

我的分档经验:

回撤小于0.382,属于极强势,通常伴随缩量横盘,不给舒服的进场机会,只能追。 回撤0.382到0.5,最常见的健康回调区间,缩量明显,是首选进场区。 回撤0.5到0.618,需要额外确认,要看到明确的止跌K线组合才动手。 回撤超过0.618,趋势结构大概率已经受损,此时不宜按“回调买点”处理,要按“可能的趋势反转”重新评估。

这里有个细节容易忽略:斐波那契位是区间不是线。0.618不是一个精确价格,而是一个上下2%到3%的带。太较真精确点位,会错过大部分有效机会。

4.3 缩量、止跌K线与量价背离的三重验证

光有价格到位不够,必须有量能和形态的配合。

缩量是第一重。回调期间,成交量应该逐步萎缩,理想的量能比是:回调段的日均量降到上涨段日均量的50%以下。如果回调还在放量,说明抛压没释放完,这时候接就是接飞刀。我一般看两个数:回调第五天的量能是否低于上涨段均量的60%,回调最后两天的量能是否出现地量。

止跌K线是第二重。常见有效的组合有:长下影线的锤子线(下影长度至少是实体的2倍)、缩量十字星后跟一根放量阳线、阳包阴(阳线实体完全吞掉前一根阴线)。这些形态本身成功率有限,但配合前两重条件,胜率会明显提升。

量价背离是第三重,主要用来判断回调是否到位。价格创新低但OBV(能量潮)没有创新低,或者MACD在零轴上方形成金叉、柱状体由绿转红,都说明下跌动能衰竭。这一重是辅助,不能单独用,但能帮你把“差不多到位”和“确实到位”区分开。

注意:这三重验证是“与”的关系不是“或”的关系。只满足一两重就进场,本质上还是在猜底。我自己的纪律是三重全部满足才建首仓,仓位控制在计划仓位的40%以内,留出加仓和纠错的空间。

5. 一套可复现的指标口径与代码实现

5.1 参数汇总与口径说明

把前面讲的规则固化成参数表,复盘和回测才不会走样:

模块指标参数阈值
方向MA60 / MA12060、120价格在其上,且MA60向上
强度ADX14(Wilder平滑)>25
强度归一化斜率MA60,回溯5日>0.05
持仓ATR14止损 2.5×ATR
持仓唐奇安通道20或40收盘破下轨
进场斐波那契0.382/0.5/0.618±3%区间带
进场量能比回调段/上涨段<0.5

这份表不是标准答案,是我自己用了两年多、改过十几版之后稳定下来的版本。不同市场(比如波动率更高的品种)需要重新校准,尤其是斜率阈值和ATR倍数。

5.2 Python实现的关键片段

用pandas实现ADX,最容易出错的地方是平滑方式。下面这版是按Wilder口径写的:

import numpy as np import pandas as pd def wilder_smooth(series, n): result = series.copy().astype(float) result.iloc[:n] = np.nan result.iloc[n-1] = series.iloc[:n].mean() for i in range(n, len(series)): result.iloc[i] = (result.iloc[i-1] * (n - 1) + series.iloc[i]) / n return result def adx(df, n=14): high, low, close = df['high'], df['low'], df['close'] prev_close = close.shift(1) tr = pd.concat([ high - low, (high - prev_close).abs(), (low - prev_close).abs() ], axis=1).max(axis=1) up_move = high - high.shift(1) down_move = low.shift(1) - low plus_dm = np.where((up_move > down_move) & (up_move > 0), up_move, 0.0) minus_dm = np.where((down_move > up_move) & (down_move > 0), down_move, 0.0) atr = wilder_smooth(tr, n) plus_di = 100 * wilder_smooth(pd.Series(plus_dm, index=df.index), n) / atr minus_di = 100 * wilder_smooth(pd.Series(minus_dm, index=df.index), n) / atr dx = 100 * (plus_di - minus_di).abs() / (plus_di + minus_di) return wilder_smooth(dx, n)

均线斜率的归一化:

df['ma60'] = df['close'].rolling(60).mean() df['slope60'] = (df['ma60'] / df['ma60'].shift(5) - 1) / 5 * 100

唐奇安通道与回调位:

df['donchian_low_20'] = df['low'].rolling(20).min() swing_low = df['low'].iloc[start_idx] swing_high = df['high'].iloc[end_idx] for ratio in (0.382, 0.5, 0.618): df[f'fib_{ratio}'] = swing_high - (swing_high - swing_low) * ratio

这段代码跑出来之后,先别急着回测。手动挑三五个历史区间,把算出来的ADX值和你软件里显示的值对一下,差太多说明平滑口径不一致。这一步能帮你省掉后面大量的困惑。

5.3 回测里最容易踩的四个坑

第一个,未来函数。用当日收盘价计算的信号,不能在当日开盘成交。很多人回测收益漂亮得离谱,一看成交价写的是当日开盘,信号却是收盘算出来的,等于用了未来信息。正确做法是信号日次日开盘成交,或者收盘前几分钟按估算值成交并加入滑点。

第二个,复权处理。用不复权数据算均线,除权当天会凭空出现一个巨大的跳空,均线全部失真。必须用前复权或者后复权数据,而且整个回测过程保持同一口径。前复权的问题是最新价格变动会导致历史数据整体平移,如果你的回测是滚动更新的,会引入微妙的偏差。

第三个,涨跌停与流动性。信号出现但当天封死在涨停板上,你根本买不进;跌停时想卖也卖不出。回测里必须加这条约束,否则结果虚高。

第四个,过拟合。参数从2.0试到3.0,找出收益最高的那个,这叫曲线拟合,不叫优化。我的做法是留出一段完全没参与调参的数据做验证,验证结果和调参结果差距超过30%就说明过拟合了。

6. 三个模拟案例的完整推演

6.1 案例一:缓慢爬升型趋势的持股全过程

模拟标的C,从某年3月到8月走了一段持续五个月的上升趋势,累计涨幅约70%,但过程极不流畅,中途有四次超过10%的回撤。

3月初,价格站上MA60,MA60由走平转为上行,ADX从18缓慢爬升到26,归一化斜率0.08。方向、强度同时满足,建首仓。

4月中旬第一次回调,回撤幅度约为前一波的0.45,正好落在0.5附近,回调段量能降到上涨段的48%,第六天出现一根长下影锤子线。三重验证满足,加仓。这一次加仓后价格继续上行。

5月底出现一次较深回调,回撤到0.62,同时跌破了前一个摆动低点。按规则,结构被破坏,不加仓,但底仓未触发MA60止损,继续持有。事后看这次回调确实是最后一冲前的洗盘,价格在MA60上方获得支撑后重新向上。

7月中旬,浮盈超过40%,止损口径从MA60切换到MA20。8月初价格收盘跌破MA20,离场,最终收益约55%,回吐了15个百分点。

这个案例里最值得记的一点:中途那次结构破坏,如果不加区分地按“结构破就清仓”处理,会错过后半段30%的涨幅。结构破坏只影响加仓决策,不影响底仓,除非同时触发止损口径。

6.2 案例二:加速段之后的衰竭识别

模拟标的D,前期走势平缓,最后一个月突然加速,单月涨幅超过40%,K线连续放量长阳,ADX从25快速冲到45以上。这种加速段是最诱人也最危险的位置。

衰竭的信号有三个,几乎同时出现:

一是量能。加速段的成交量是前期均量的3倍以上,但最后三天的量能开始萎缩,价格却还在创新高,形成量价背离。

二是K线形态。出现一根上影线极长的阳线,上影长度超过实体的1.5倍,第二天低开收阴,形成类似黄昏星的组合。

三是ADX的拐头。ADX在45以上开始向下,这个信号本身不代表趋势结束,但配合前两个信号,说明方向性运动的一致性在下降。

我在第二天收盘减掉了七成仓位,剩下的三成用ATR跟踪。后续价格在一周内回撤了25%,剩下的仓位在ATR止损位被打掉,整体保住了大部分利润。

这里要强调:加速段的止盈不能等MA20。等价格跌破MA20的时候,往往已经回吐了加速段涨幅的一半以上。加速段必须用更敏感的规则,ATR或者前一日低点,宁可走早了再买回来。

6.3 案例三:一次失败的回调买点复盘

这个案例我复盘了很多次,因为所有条件看起来都满足,结果是亏的。

模拟标的E,上升趋势中回调到0.618位置,量能萎缩到上涨段均量的42%,出现阳包阴。三重验证全部满足,我按规则建仓。

问题出在一个被我忽略的细节:这次回调虽然幅度到位,但它跌破了一个关键的摆动低点,也就是说结构已经破坏了,而这个破坏在回调过程中就发生了,不是回调结束后才发生。我在看盘时把注意力全放在斐波那契位和量能上,没有重新确认高低点排列。

买入后第三天,价格没有如预期反弹,反而放量下跌,跌破了0.618所在的区间带。第五天触发止损,亏损约6%。

复盘结论:三重验证之外,必须加一条前置条件——回调过程中不能跌破前一个摆动低点。如果跌破了,这个回调就已经不是“回调”,而是“反转的第一段”。斐波那契位在结构破坏之后基本失去参考价值,因为计算它的那个上涨段已经结束了。

这条教训后来被我写进了 checklist 的第一条。指标再多,结构是地基。

7. 失效场景与我的避坑清单

7.1 震荡市里所有趋势指标都会钝化

趋势指标的设计前提是“存在趋势”。市场进入横盘震荡,ADX长期在15到20之间,均线反复交叉,唐奇安通道上下轨被反复触碰。这个阶段如果还按趋势规则操作,结果一定是连续小亏。

识别震荡的方法不难:ADX低于20持续超过20个交易日、价格在MA60上下5%的范围内反复穿越、布林带宽度收窄到近期低位。三个条件满足两个,就该把趋势策略停掉。

停掉不等于不操作。震荡市有震荡市的玩法,高抛低吸做区间,但那是另一套规则,不能和趋势规则混着用。最忌讳的是“趋势策略亏了,那就用震荡策略补回来”,两套规则在同一个账户里打架,最后一定是两边的钱都亏。

7.2 跳空和突发冲击对规则的破坏

所有基于收盘价的规则,都假设了价格是连续的。遇到跳空,止损位直接失效。比如你设在MA60下方2%的止损,第二天直接低开8%,你的实际亏损是8%而不是2%。

应对办法有两个方向。一是事前控制,单笔仓位不要重到一次跳空就伤筋动骨,我的单标的上限是总仓位的20%。二是事后处理,跳空跌破关键位之后,不要急着补仓摊低成本,先观察两到三天,看是不是有回补缺口的动作。跳空之后的走势,往往决定了未来一两个月的方向。

我个人不主张为了防跳空去做过多的对冲,成本太高,而且大部分跳空并不改变中期趋势。控制仓位是更经济的办法。

7.3 我踩过的几个坑,写下来提醒自己

第一个坑:指标共振当成因果。看到ADX、MACD、均线同时给出信号,就觉得很可靠。其实这些指标大多基于同一组价格数据,相关性极高,同时满足只是“同一个信息被重复计算了三次”,并不是三个独立证据。

第二个坑:参数在单一品种上优化到极致。在模拟标的F上把ATR倍数调成2.3,收益曲线漂亮得像艺术品,换到另一个标的直接崩掉。参数必须在至少五个不同波动特征的标的上都过得去,才算能用。

第三个坑:把浮盈当成自己的钱。涨了30%之后回撤到20%,心理上的痛苦远大于一开始就亏10%。这种心理会导致提前止盈,破坏规则。解决办法是把浮盈看成“市场暂时借给你的”,只有触发离场规则才算真正落袋。

第四个坑:复盘只看成功案例。成功的案例让人心情好,但信息量低。真正能提升水平的是失败案例的逐笔拆解,尤其是那些“所有条件都满足但还是亏了”的交易,它们会逼你去补规则的漏洞。案例三就是这么补出来的。

最后一个体会:这套东西的价值不在于预测,而在于把一个模糊的判断变成了一系列可以回答是或否的问题。方向对不对、强度够不够、结构破没破、量能配不配合,每个问题都有明确的口径,答完就知道该做什么。至于市场接下来怎么走,谁也不知道,规则能做的只是让你在错的时候少亏一点,在对的时候多拿一段。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进