行情软件里天天有人盯MACD,但绝大多数人只盯金叉死叉,一进震荡就被来回打脸。真正让MACD这指标在量化交易里站得住脚的,其实是背离——价格创了新高,指标却不再跟进,这叫顶背离;价格创了新低,指标反而抬高,这叫底背离。两者都指向一件事:推动趋势的动能正在衰竭。而这个“动能衰竭”,正是趋势反转信号识别里最经典、也最容易被量化的底层逻辑。
这篇文章不聊玄学,只聊硬货。我会把MACD背离拆开揉碎,讲清楚指标内部三根线之间的关系、顶背离和底背离到底怎么精确判定、日线与分时周期的差异有多大,以及怎么用Python从零写一套能直接用于回测的背离检测代码。不管你是刚开始研究量化交易的新手,还是想给已有策略加一层反转过滤的开发者,按着这条思路都能跑出一个属于自己的可用版本。
1. MACD背离的本质:价格与动能之间的矛盾
1.1 先搞清楚MACD里三样东西的职责
很多教程一上来就抛公式,其实MACD的核心就三个量:DIF、DEA和MACD柱。网上到处是“金叉买入、死叉卖出”,但那是最浅层用法。我们做背离,主要盯的是DIF值和柱状图,DEA更多是辅助。
DIF的计算逻辑是快线减去慢线:用12日EMA减去26日EMA。当价格上涨趋势加强,短期均线和长期均线之间的距离被拉开,DIF数值变大;当趋势减弱,DIF就会回落。DEA是把DIF再做一次9日平滑,相当于给快线又加了一层滤镜,用来减少DIF本身的抖动。MACD柱则通常取两倍的DIF与DEA之差,数值变化更加夸张,相当于把动能变化放大了来看。
我打个比方:DIF是车速表,DEA是过去一段时间的平均车速,MACD柱是踩油门的力度。车身还在往前冲,但油门已经明显松了,这就是你想要警惕的时刻。背离信号的本质,就是捕捉这种“车身价格还在冲、油门却跟不上了”的错位。
计算层面的细节,多数行情软件默认参数是(12, 26, 9)。这个组合不是拍脑袋定的,12和26分别对应两周与一个月级别的均线周期,9则是短周期的平滑窗口。不同平台对MACD柱的缩放系数可能不同,有的取两倍,有的取一倍,但形态判断逻辑不受影响。你在看信号时,只要始终用同一套公式,相对关系就成立。
1.2 顶背离和底背离的形态判定标准
先说顶背离的严格条件,以DIF为参照。第一,价格要出现两个明显的高点,而且第二个高点比第一个更高。第二,DIF在同样两个位置也要对应两个高点,但DIF的第二个高点必须比第一个更低。第三,背离最好发生在DIF处于零轴上方区域,或者至少第二个高点回落时仍在零轴附近,这说明此前是多头格局,背离才有反转意义。
举个例子你就能记住:一只股票从10元涨到18元,第一波上涨时DIF冲到1.2,随后回调到0.6。第二波继续冲到20元,这时DIF却只到了0.9。价格创新高,DIF没创新高,这就是教科书式的顶背离。再直白一点,价格能涨上来,说明还有买盘在推,但买方力量已经明显弱于前一波了。
底背离则是镜像关系:价格出现两个低点,第二个低点比第一个更低或者基本持平,但DIF的第二个低点比第一个更高。这时候说明抛压在减弱,虽然价格还在往下探,但卖出的力量已经枯竭,聪明的资金开始进场接货。底部区域的“价格跌不动、指标先抬头”,往往就是下跌趋势接近尾声的信号。
1.3 背离背后的多空博弈逻辑
背离不是随机指标巧合,它反映的是真金白银的多空力量切换。顶背离出现时,价格创新高,说明还有增量资金在推动,但力度已经弱于前一波。这时候往往有部分主力在借高位出货,推升价格只需要很少的量,而派发的筹码却在不断增加。盘面上看似红红火火,实际上是强弩之末。
底背离相反,价格创新低,说明空头还在主导,但杀跌的动能在减弱。砸盘越来越费劲,成交量和振幅都在缩小,反过来有资金在低位吸筹。你会发现,很多大级别底部(周线月线级别)都会出现连续两三次底背离,其实那是主力吸筹、洗盘、再吸筹的节奏。
理解这一点,你才会明白一个关键问题:背离是“动能衰竭”的预警,不是“立即反转”的确认。它告诉你拐点可能临近,但没说拐点一定在今天或明天出现。
2. 量化交易视角下:背离信号的价值与陷阱
2.1 为什么背离适合做趋势反转信号识别
量化交易里,我们选因子的第一要求是逻辑干净、可以数值化。背离这个形态天然满足要求:它会清晰地转化成“价格极值点”与“指标极值点”两组数据之间的关系比较,不需要基本面数据,也不依赖盘中消息。你只要把历史K线拉出来,算法就能自动对比。
相比均线金叉死叉,背离的优点是信号频率低、逻辑性强。金叉死叉在震荡市里会连续产生大量假信号,而背离至少要求价格走出明显的两个波峰或两个波谷,形态本身已经过滤掉了一大半无效行情。这也是很多CTA策略和股票择时策略把背离作为“反转预警”而不是“主信号”的原因——它在趋势末端天然具备较高的区分度。
在量化框架里,我通常把背离信号放在决策流水线的第一级,也就是“候选项过滤”。所有出现顶背离的时段进入空头候选池,出现底背离的时段进入多头候选池,然后让其它过滤器和风控规则做二次判断。这样做的好处是不会让你的策略在震荡市里频繁换方向,因为候选池本身已经比较稀疏了。
2.2 常规背离与隐藏背离:别把方向做反
这个话题非常值得单独讲,因为绝大多数做背离的人只知道表面那套,不知道还有反向用法。除了上面说的常规顶背离和常规底背离之外,还有隐藏底背离和隐藏顶背离,它们出现的意义截然相反。
隐藏底背离发生在上涨趋势中:价格回调时,低点不断抬高,但指标MACD的低点却在不断降低。这看起来像底背离的形态,但实际含义是——多头趋势主动回调,动能的短期回落只是洗盘,中期趋势没有破坏,后面大概率会继续创新高。这时候正确的操作不是做空,而是等回调结束继续做多,或者加仓多单。
隐藏顶背离出现在下跌趋势中:价格反弹时,高点不断降低,但DIF的高点却在抬高。这同样不是常规意义上的顶背离,它暗示空头趋势中的反弹只是技术性修复,反弹结束后还要继续下跌。很多新手在这种位置看到“指标抬高”就想着抄底,结果反手被套,就是没搞清楚背离的方向属性。
我把这四种形态整理成一张对照表,收藏起来省得混淆:
| 形态名称 | 价格走势 | 指标走势 | 指示意义 | 正确操作 |
|---|---|---|---|---|
| 常规顶背离 | 高点抬高 | 指标高点降低 | 多头动能衰竭,反转向下 | 减仓或做空 |
| 常规底背离 | 低点降低 | 指标低点抬高 | 空头动能枯竭,反转向上 | 关注做多 |
| 隐藏底背离 | 低点抬高 | 指标低点降低 | 上涨中继,回调结束 | 继续持有或加多 |
| 隐藏顶背离 | 高点降低 | 指标高点抬高 | 下跌中继,反弹结束 | 继续持有或做空 |
做量化策略的时候,上面四种信号应该分别建模,不能混进同一个信号函数里。我见过不少人用一套“指标低点抬高则买入”的规则直接跑回测,结果把隐藏底背离也当成买入信号,长期下来胜率被严重稀释。
2.3 背离的固有局限:钝化与噪音
如果背离是灵丹妙药,这市场早就被量化基金薅秃了。它有几个天然缺陷,必须先有认知准备。
第一个是钝化。在强趋势行情里,背离信号会连续出现三次甚至四次,价格却一路不回头。这种情况在大牛市的顶部和大熊市的底部特别常见,不是指标算错了,而是市场情绪极端化之后,动能衰减可以持续很长时间。每次背离都对应一次动能减弱,但真正的反转只需要最后一次“衰竭到极限”,前面那些信号注定是牺牲品。
第二是周期噪音。分钟级别的MACD背离几乎每天都会出现,频率高到完全没法直接用。半小时图的背离可能影响也就一两个小时,日线级别的背离才对应数周甚至数月的调整,周线级别的背离对应更大级别的牛熊切换。级别错配是所有背离策略亏损的最大来源。
第三是信号单一性。背离本身只依赖价格与指标的历史数据,完全不含成交量、持仓量、市场情绪等信息。单独使用它,在风格极端的行情里被反复打脸是必然的。后面我会专门讲怎么给背离加过滤条件,把它从“噪音”变成“信号”。
3. Python实现MACD背离检测:从零到可回测的完整代码
3.1 数据准备与指标计算
先说技术选型。计算MACD我用pandas,个别极值判断会用到一点numpy。如果你习惯用TA-Lib也可以,但很多刚接触量化的人会被TA-Lib的安装环境卡住,所以这里我直接手写核心逻辑,顺手还能让你看清楚每一步到底在算什么。
首先准备一份干净的日线数据,至少包含date、open、high、low、close、volume这几列。如果是从数据源下载的,注意先检查是否有NaN和停牌导致的缺失值。计算EMA时,pandas的ewm函数默认的adjust参数是True,它的权重计算方式会和行情软件存在细微差别,务必设置成adjust=False,这样初期的计算方式才和国内主流行情软件对标。
import pandas as pd import numpy as np def ema(series, period): # span就是通达信公式里的EMA周期 return series.ewm(span=period, adjust=False).mean() def compute_macd(df, fast=12, slow=26, signal=9): data = df.copy() data['DIF'] = ema(data['close'], fast) - ema(data['close'], slow) data['DEA'] = ema(data['DIF'], signal) data['MACD'] = 2 * (data['DIF'] - data['DEA']) return data默认参数(12, 26, 9)对应日线级别比较合适。如果你的行情数据是小时线或者分钟线,这个参数也可以保留,但信号意义要重新解读。想要更灵敏可以改成(6, 13, 5),想要更稳定可以改成(24, 52, 13),具体选哪组,得靠回测数据说话,不要拍脑袋。
3.2 顶背离与底背离的检测逻辑
背离检测的核心是找极值点。我采用最简单稳妥的方式:当前K线的DIF(或者MACD柱)同时大于前后两根K线,就记为一个局部高点;同时小于前后两根K线,就记为一个局部低点。用order参数控制极值之间的最小距离,可以避免连续几天同一波峰被重复计算。
def find_pivots(series, order=5): series = series.dropna().reset_index(drop=True) highs = [] lows = [] for i in range(order, len(series) - order): window = series.iloc[i - order: i + order + 1] if series.iloc[i] == window.max(): highs.append(i) if series.iloc[i] == window.min(): lows.append(i) return highs, lows以顶背离为例,检测流程是这样的:先找到DIF的所有局部高点,然后在相邻两个高点之间,对比它们对应的价格高点。如果价格第二个高点高于第一个高点,而DIF第二个高点低于第一个高点,就标记一次顶背离。底背离逻辑完全镜像。
def detect_divergences(df, macd_col='DIF', order=5): data = df.copy().reset_index(drop=True) highs, lows = find_pivots(data[macd_col], order=order) bearish_signals = [] # 顶背离 for i in range(1, len(highs)): idx1, idx2 = highs[i-1], highs[i] if idx2 - idx1 < order * 2: continue # 距离太近,忽略 price1 = data.loc[idx1, 'close'] price2 = data.loc[idx2, 'close'] macd1 = data.loc[idx1, macd_col] macd2 = data.loc[idx2, macd_col] if price2 > price1 and macd2 < macd1: bearish_signals.append((idx2, 'top_divergence')) bullish_signals = [] # 底背离 for i in range(1, len(lows)): idx1, idx2 = lows[i-1], lows[i] if idx2 - idx1 < order * 2: continue price1 = data.loc[idx1, 'close'] price2 = data.loc[idx2, 'close'] macd1 = data.loc[idx1, macd_col] macd2 = data.loc[idx2, macd_col] if price2 < price1 and macd2 > macd1: bullish_signals.append((idx2, 'bottom_divergence')) return bearish_signals, bullish_signals这里的order参数很关键,它决定了“什么级别的波峰波谷算有效”。order设得太小,极值点密集,高背离信号满天飞;order设得太大,信号太稀疏,等信号出来行情都走完了。日线级别我一般设为5,周线级别可以放到3,分钟级别反而要放大到10以上,因为分钟线噪音更大。
3.3 双底背离的强化版实现
很多人在搜索里会看到“macd双底”这个说法,其实就是底部区域出现两个相近的低点,第二个低点甚至比第一个更低,但MACD柱(或DIF)的第二个低点明显高于第一个低点。这是底背离的强化形态,意味着空头两次发力都没能把指标砸出新低,该走的空头已经走完了,反弹概率比单次背离高不少。
def detect_double_bottom(df, macd_col='MACD', lookback=30, min_gap=5): data = df.copy().reset_index(drop=True) _, lows = find_pivots(data[macd_col], order=3) signals = [] for i in range(1, len(lows)): idx1, idx2 = lows[i-1], lows[i] gap = idx2 - idx1 if gap < min_gap or gap > lookback: continue price1 = data.loc[idx1, 'close'] price2 = data.loc[idx2, 'close'] macd1 = data.loc[idx1, macd_col] macd2 = data.loc[idx2, macd_col] # 价格第二个低点不超过第一个低点2%,允许明显新低或基本持平 if price2 <= price1 * 1.02 and macd2 > macd1: signals.append((idx2, 'double_bottom')) return signals这里我特意没有要求price2必须低于price1,因为实际操作中,很多双底的第二个低点会比第一个低点略高一到两个点。真正重要的不是价格本身创新低,而是“价格没创新低、指标却明显抬高”的背离。如果你用行情的画笔工具画一下,出现的是一根比前一个低点略高的W底,但在指标层面看,却是标准的两段式背离,这个W底的信号强度往往更强。
3.4 信号可视化:用图说话
写策略和写代码不一样,建议每做一步检测都把结果画出来,肉眼看一眼。我不喜欢装太复杂的可视化库,直接用matplotlib画价格走势,在底部叠加MACD柱,然后在背离信号点画竖线。
import matplotlib.pyplot as plt def plot_signals(df, bearish, bullish): fig, axes = plt.subplots(2, 1, figsize=(12, 8), sharex=True) axes[0].plot(df.index, df['close'], color='gray', linewidth=1) axes[0].set_title('Close Price') axes[0].plot([p[0] for p in bearish], [df.loc[p[0], 'close'] for p in bearish], 'v', color='red', markersize=12) axes[0].plot([p[0] for p in bullish], [df.loc[p[0], 'close'] for p in bullish], '^', color='green', markersize=12) colors = ['red' if v >= 0 else 'green' for v in df['MACD']] axes[1].bar(df.index, df['MACD'], color=colors, width=0.8) axes[1].axhline(0, color='black', linewidth=0.5) plt.tight_layout() plt.show()这个可视化是最廉价的复盘工具。信号画出来之后,你会很快发现哪些背离后面跟着真实反转,哪些背离后面价格继续走原方向。这种“目检”能帮你定下策略的参数底线,也会让你更加理解第5章要讲的过滤条件。
4. 参数与周期选择:日线、分时与多周期嵌套
4.1 分时MACD是当天的走势吗
这是个高频问题,答案是:分时MACD确实只反映当天(或当前交易时段)的走势。因为分时K线是按分钟生成的,每一根1分钟K线收盘后,MACD就会用这分钟的数据重新计算一次。开盘后指标值会先剧烈跳动,然后慢慢稳定。本质上,分时MACD考验的是“日内多空力度切换”,跟日线MACD那套跨日趋势逻辑完全是两个层面的东西。
所以当你看到分时MACD出现顶背离,至多说明今天上午这波上涨动能衰减了,不能直接推导出日线级别要反转。如果你想用分时背离做日内交易,逻辑上没问题,但要把它当成一个短线出场工具,比如持仓中看到分时顶背离,可以先减仓落袋一部分。它不适合用来判断日线级别的中期顶底。
反过来,日线MACD的背离是跨日计算的,它包含了过去几十个交易日的走势信息,天然对中期趋势有参考价值。周线MACD背离的参考价值又要强于日线。做波段的人,至少看日线背离;做长线的人,必须等周线背离信号;做日内的人,才需要把分时背离放到核心位置。这里的层级关系不能乱。
4.2 参数选择:从(12,26,9)到个性化调参
默认参数(12, 26, 9)不是必须信奉的教条。它对应的是个人交易者手工看图时代的经验值,放在某些品种、某些周期上未必最优。做量化的人应该用寻参的方式找到适合标的的周期参数。
我看到有人在还会问这种形式,通达信等平台的公式里写{n:=4},意思是把某参数N赋值为4,然后后面公式直接用N做对比周期。翻译到Python里,就是把那组MACD参数直接替换成你想测试的值。平台语言和Python只是写法不同,核心逻辑相同。
给大家一个参数调整的经验坐标:
| 参数组 | DIF灵敏度 | 背离频率 | 适用场景 | 风险点 |
|---|---|---|---|---|
| (6,13,5) | 高 | 高 | 短周期波段、强势股二波 | 假信号多,容易被套 |
| (12,26,9) | 中 | 中 | 日线波段、通用标准 | 常规行情够用,极端行情迟钝 |
| (24,52,13) | 低 | 低 | 长线持仓、大级别顶底 | 信号稀疏,需要长期等待 |
调参有个陷阱:你很容易在历史数据上找到一组“完美参数”,但换一段行情就失效。我建议不要只看胜率或者收益,要看信号分布的稳定性。如果一组参数在牛熊市里的信号数量和胜率变化巨大,说明它只是在过拟合历史形态,不值得采用。
4.3 多周期嵌套:大周期定向,小周期找入场
多周期共振是我个人最推荐的背离用法。核心原则是一句话:大周期定方向,小周期找拐点。比如周线MACD柱还在零轴上方运行,说明中期多头格局没变;此时日线出现底背离,意味着短期回调接近尾声,这就是一个高胜率的顺势做多机会。
反过来,如果周线MACD柱已经跌破零轴并且向下开口,日线出现底背离时,你只能当成反弹来处理,仓位应该减半,止损要放得更紧。因为大周期还在空头趋势里,日线级别的背离只能主导一段反弹,而不是彻底反转。趋势是分级别的,背离也是分级别的,把“日线背离”当作“周线反转”来处理是最常见的亏损原因之一。
实际操作上,我会在数据库里同时保存日线和周线数据。当信号函数检测到日线背离后,再查一下周线MACD柱的状态,如果方向一致才会把信号放入交易提醒列表。这样写起来不复杂,但能把日线级别信号的整体胜率抬升一个档次。
5. 背离信号的实战过滤与风控纪律
5.1 背离不反转怎么办:加入确认机制
前面反复强调,背离是动能衰竭的预警,不是“出现即反手”的开仓信号。实战中我们一定要加入确认机制,否则钝化行情会连续教育你。
最常见的确认方式有三种。第一种是等待DIF重新金叉或死叉:底背离出现后,不急于进场,等DIF上穿DEA的那一刻再确认做多;顶背离出现后,等DIF下穿DEA再做空或减仓。第二种是等待价格突破趋势线:底背离后价格站上最近一波下跌趋势线,说明下行结构被打破。第三种是等待成交量确认:底背离后某天突然放量阳线,顶背离后出现放量阴线,这往往是方向选择的直接证据。
你可以把这三种确认做成布尔条件,只有同时满足两个条件才生成信号。比如“日线底背离 + DIF金叉 + 放量阳线”,三者全部满足再进场。过滤之后信号数量会少一半以上,但留下来的信号质量会明显提升。我自己做回测时的经验是,加了确认条件的背离策略,胜率通常能从40%左右抬升到55%以上。
5.2 量价配合与均线方向过滤
背离这根信号线本身不包含量能信息,但成交量是价格行为最好的“测谎仪”。底背离出现时如果伴随成交量持续萎缩,说明抛压减弱,反弹的可信度高;如果价格还在下跌时持续放量,说明空头力量远未释放完毕,背离之后往往还有新低。顶背离的逻辑同理,价格创新高时缩量,是动能不足的典型表现;价格创新高时巨量滞涨,更要警惕主力借高位出货。
均线方向过滤是最简单也最有效的“大势过滤器”。我常用的规则是:价格站在20日均线上方时,只接受底背离作为看多信号,忽略所有顶背离信号;价格跌破20日均线时,只接受顶背离作为看空信号,忽略底背离信号。这条规则直接把“顺势”和“逆势”分开了,虽然会让你错过一些完美的V型反转,但长期来看能避免大量逆势抄底的亏损。
如果你做股票,还可以再加一个更宏观的过滤器:只用大盘指数的月线或周线方向作为多头背景。大盘处于下行阶段时,个股的底背离做多信号成功率会大幅下降,这时候宁可空仓等待也不要去接飞刀。
5.3 止损与仓位:给每个背离信号戴上枷锁
再好的信号,没有风控就是裸奔。背离可能连续失效三次,第四次才生效;这段时间如果你每次都用重仓去试错,第四次即使生效,你的账户也可能已经不适合交易了。
底背离做多时,止损设在两个地方:一是前一个低点下方2%的位置,二是不低于最近ATR(平均真实波幅)的1.5倍。为什么把ATR作为参考?因为它量化的是一段行情的真实波动幅度。用ATR设止损,可以适应不同波动率的市场,比单纯固定百分位更合理。
仓位方面,单笔风险控制在总资金的1%到2%之间是个比较稳妥的底线。举个例子,账户有100万,愿意承担的单笔风险是2万。如果底背离入场后止损距离是5%,那么最多可以建立40万的仓位;如果止损距离是10%,仓位就要砍到20万。严格用这个公式来倒推仓位,哪怕连续错十次,账户回撤也在可控范围内。
6. 常见问题与排查技巧实录
6.1 回测与实盘信号不一致?
这个问题几乎每个做背离策略的人都会遇到。你在回测里看到某天出现底背离,信号点亮,次日起价格上涨,于是你满怀期待上了实盘,结果发现信号根本没有出现,或者信号出现后价格反而下跌了。
最常见的原因是未来函数。回到代码层面,如果你用当根K线的收盘价来计算DIF极值,同时又假设你能用当根K线的收盘价买入,这本质上是在“偷看答案”。因为当根K线的收盘价K线走完才知道,你不可能在那根K线的盘中价位成交。解决方案其实简单:把信号整体往后延迟一根K线,用shift(1)处理,确保开仓价是信号出现后的下一根K线开盘价。
其次是复权问题。股票除权除息后价格会出现跳空,如果不做复权处理,MACD会在除权日出现异常波动,造成大量假背离。做回测时推荐用前复权数据,因为前复权会修正历史价格以匹配最新股本结构,信号和真实走势对得上;做手工复盘时,可以交叉看后复权数据确认。
6.2 指标计算里的隐形坑
EMA初值是背离检测里一个容易被忽略的细节。pandas计算EMA时,如果前面几行数据是NaN,会导致指标计算从头开始累积误差。所以拿到数据源之后,第一件事是清理:删除停牌空行、补全缺失值,用一个足够长的历史区间来预热指标,只取预热之后的信号区间用于回测。
另一个坑在极值点判断。使用相邻两根K线比较法找峰谷,短期剧烈波动时会出现一个极值点被连续标记为多个峰的情况,因为中间那根K线上下影线极大。处理方式就是用order参数加一个最小间隔约束,或者先对DIF做一次简单的rolling平滑再找极值。
如果使用scipy.signal的argrelextrema,还有个值得注意的地方:它返回的索引是针对连续数组的,如果你传入的是含NaN的序列,极值点索引会和原始DataFrame对不上,必须先用dropna并重建索引。很多人在这一步踩坑,发现信号位置和K线对不上,就是索引错位导致的。
6.3 遇到背离不反转的经典场景怎么处理
我复盘过大量背离失败的案例,总结下来无非三种场景。第一种是极强趋势行情,背离虽然出现,但动能衰减之后又换了一批资金续命,价格继续创新高。这种情况最有效的应对是等待价格形态的破坏信号,比如跌破最近的上升趋势线,而不是提前进场逆势操作。第二种是窄幅震荡行情,MACD在零轴附近反复穿越,背离形态出现得七零八落,基本都是噪音。震荡市里应该直接把背离信号禁用,改用区间突破策略。第三种是背离信号级别太小,比如小时线背离在日线趋势面前只能产生小反弹,你以为自己是做一波中级行情,实际上只是一次日内波动。认清信号级别,比判断方向更重要。
6.4 围绕背离的复盘心得
把背离做成量化信号之后,我建议你养成一个习惯:定期复盘每一笔被信号触发的交易,记录当时的背离级别、是否有确认信号、是否突破关键均线。统计一段时间之后,你会发现自己偏好的标的和周期里,哪些条件下背离胜率高,哪些条件下胜率低。每个人交易习惯不同,适合的信号组合也不同,这种统计才是真正属于你的交易规则。
关于资料,我见过不少朋友还在到处找纸质书或者PDF版的学习资料,其实与其囤一堆读不完的教材,不如先把上面的代码跑通,用真实行情数据把背离信号一张一张画出来,再去结合书籍讨论案例,效率会高得多。量化交易这东西,阅读永远替代不了动手回测。
我个人近几年最深的体会是,背离策略能不能赚钱,很大程度取决于你有没有纪律性的确认流程和止损规则。没有确认流程,你会被钝化行情反复诱导;没有止损规则,一次极端行情就能吞掉前面所有利润。把这些“会不会做”的问题全部变成“必须怎么做”的规则,你才真正把背离从好看的图形,变成了自己的交易系统一部分。