- Published on
Rolling largest Impulse Murreys Lines
- Authors

- Name
- CoresightQuant
NOTE
本文为公开交易策略的技战术复盘,聚焦方法逻辑、交易场景与风险边界。
策略解读
这是一条非常简洁却极具思考深度的策略描述。它没有复杂的指标体系,也没有冗长的入场出场规则,核心只有两个关键概念:Kadane 算法和 Murrey 数学线。前者负责识别“市场中最大的单方向推动力”,后者负责把这个推动力转化为一组几何级的支撑阻力水平。二者结合,形成一套既具备数学严谨性、又带有古典交易哲学色彩的实验性工具。
在展开之前,我们先把这段话拆解一下。所谓“滚动窗口”,指的是策略会在一段固定长度的价格数据上不断滑动,例如最近 50 根K线,每更新一根K线就重新计算一次。在这个窗口内,策略不是简单地计算最高点与最低点的差值,而是使用 Kadane 算法去搜索“最大子数组和”。这个在计算机科学领域非常经典的问题,应用到价格序列上,相当于在窗口内找出一段连续的价格变化,使得这段价格变化的总和最大。换句话说,它寻找的是“连续行情中涨得最猛的那一段净涨幅”,也就是我们常说的“主升浪”或“冲击脉冲”。
找到这个冲击的范围之后,策略再从该范围的起点价格和终点价格出发,按照 Murrey 数学线的划分逻辑,将这段价格区间八等分,画出一组水平线。这样得到的水平线,并不是固定于绝对价格,而是随着“最大冲击”的强弱和位置动态改变。如果市场出现了新的更大幅度冲击,这组线就会重新调整,反之则维持原状。因此,Murrey 线在这里扮演的是一种“最近趋势节奏”的度量工具。
这种设计思路在量化交易中并不多见。大多数指标使用移动平均或标准差描述市场状态,而本策略选择用“最大子数组和”这种非对称的、侧重极值的度量方式,再结合具有分形特征的 Murrey 数学框架,是一种大胆的跨界尝试。它的目的大概率不是为了直接产生买卖信号,而是为了画出更容易被当前大资金走势“认可”的支撑阻力带,帮助交易者判断行情可能停顿或反转的位置。
当然,实验性意味着它尚未经过充分打磨,其有效性高度依赖于参数选择和市场环境。接下来,我们会从策略逻辑、优缺点、历史渊源以及改进方向等多个维度,深入探讨这一思路的可行性与局限性。
名词解释
-
Kadane 算法:一种用于求解一维数组“最大连续子数组和”的动态规划算法,由计算机科学家 Jay Kadane 提出。它遍历数组一次,不断累加当前值,同时记录历史最大和。如果累加和变为负数,则从下一个元素重新开始累加。其时间复杂度为 O(n),非常高效。
-
最大子数组和(Maximum Subarray Sum):给定一个数值数组,找出一个连续的子数组,使得该子数组内所有元素的和最大。在本策略中,将价格序列转换为相邻K线的涨跌值(如价格差值或收益率),则该和代表了连续上涨(或下跌)的总幅度。
-
冲击(Impulse):在交易语境中,通常指价格朝一个方向快速且持续的运动,往往由重大消息、市场情绪或大单资金推动。本策略将“最大子数组和”视为窗口内最强的冲击,认为它反映了市场的主导力量。
-
Murrey 数学线(Murrey Math Lines):由美国交易员 T.H. Murrey 基于 Gann 理论开发的一套价格水平系统。它将一个价格区间八等分,形成 0/8、1/8、…、8/8 等关键水平,其中 4/8 是中央线。价格在这些水平之间循环移动,突破或跌破某个水平提示趋势可能发生变化。
-
滚动窗口(Rolling Window):一种时间序列处理方式,在固定长度的样本区间上计算指标,然后随着新数据的到来不断向前平移。窗口长度决定了策略观察视角的“记忆范围”,影响指标的灵敏度和稳定性。
-
动态规划(Dynamic Programming):一种算法设计思想,将复杂问题拆分为重叠子问题,并保存子问题的解以避免重复计算。Kadane 算法就是动态规划的经典例子,它用“当前最大子数组和”和“全局最大子数组和”两个状态完成求解。
策略思路讲解
本策略的逻辑可以拆解为三个步骤:数据变换、冲击检测、绘制水平线。
第一步,数据变换。 原始价格序列无法直接使用 Kadane 算法,因为算法要求数组元素为“可加的数值”,而价格本身是绝对数,其累计和没有直接意义。因此,我们需要把每个K线的价格转换为该K线相对前一根K线的变化量,例如收盘价差值。这样,一个长度为 N 的窗口就会产生 N-1 个差值,构成一个可用于求子数组和的数组。如果某根K线涨幅为正,对应元素为正;跌幅为负,对应元素为负。此时,找到的最大子数组和,就是窗口内连续上涨累计幅度最大的一段。
第二步,冲击检测。 使用 Kadane 算法对上述差值数组进行扫描,找到“最大子数组”的起始位置和结束位置。这既给出了冲击的持续时间,也给出了冲击的净涨落幅度。因为 Kadane 算法只关心最大和,所以它在过滤掉小波动的同时,能够精准定位到“最有力量的推进段”。举个例子,如果窗口内先经历了一段小涨、然后回调、再急速拉升,算法会跳过前面的小涨和后面的回调,只把中间那段急速拉升挑选出来。这段拉升的起点价格和终点价格,就构成了一个“冲击区间”。
第三步,绘制 Murrey 数学线。 将冲击区间的价格差(即终点价减起点价)除以 8,得到每个“八分位”的步长。然后以冲击起点或终点的价格为基础,向上或向下叠加这些八分位水平,形成 0/8、1/8、…、8/8 的完整水平网格。这些水平在图表上以水平线形式呈现,代表未来价格可能遇到的支撑或阻力。需要注意的是,Murrey 数学线传统上是在一个固定的价格范围内划分八等分,而本策略将“范围”定义为最近最大冲击的幅度,相当于让每个八分位“格子”的大小跟随市场波动率动态变化。冲击越大,格子越宽;冲击越小,格子越窄。这与 ATR(平均真实波幅)通道的想法有异曲同工之妙,但用 Kadane 算法代替了统计均值,更加聚焦于“极值冲击”。
整体使用方式。 交易者可以观察价格与这些 Murrey 线的相对位置。当价格运行在 4/8 线之上时,倾向多头;跌破 4/8 线则可能转空。或者将 0/8 和 8/8 视为极端的超买超卖区,等待价格触及这些水平时采取反向操作。另一种常见用法是,如果价格突破了最近冲击的高点(即 8/8 线),则意味着新一轮冲击可能开始,可以顺势追多。
这种策略的本质是“用市场最尖锐的推力来定义当前节奏”,而非使用传统的均线或波动率指标。它的优势在于,冲击的方向和幅度是动态自适应的,能够对趋势行情的加速段迅速做出反应,同时在震荡行情中自动放大格子宽度,减少无效信号。
优点
-
数学基础扎实:Kadane 算法是经过严格证明的经典算法,计算效率高,结果确定性好,不存在随机初始化或收敛问题。这种确定性在量化回测中非常重要,因为每一次运行都能得到完全一致的输出。
-
动态自适应市场节奏:通过滚动窗口和最大冲击幅度,Murrey 线的间距会随市场波动率变化而变化。在剧烈趋势中,冲击幅度扩大,网格自动变宽,避免过早触碰阻力位;在窄幅震荡中,冲击幅度缩小,网格变窄,更容易捕捉局部支撑阻力。
-
捕捉趋势核心段:最大子数组和关注的不是平均涨幅,而是“最连续的强势推动段”。这正好反映了趋势行情中最重要的动量部分,比简单的最高点减去最低点更具方向性,因为它只考虑单向连续运动,不会被反向波动干扰。
-
风格独特,具有研究价值:将计算机算法与古典价格几何理论结合,为技术分析提供了一种新的视角。它不同于常见的统计类指标,而是以“最大冲击”为核心变量,能够揭示市场在特定时间段内的主力行为特征。
-
不依赖过多参数:策略的主要参数是窗口长度和 Murrey 线等级,相比机器学习模型,参数数量极少,降低了过拟合风险,也更容易理解和调整。
缺点
-
对参数高度敏感:窗口长度决定了记忆范围。窗口太短,冲击可能只是随机噪声;窗口太长,冲击可能包含多个趋势段,导致最大子数组跨越回调,失去“冲击”的意义。没有明确的逻辑指导如何选取最优窗口,只能依靠经验或优化。
-
忽略成交量因素:策略仅使用价格数据,没有考虑成交量、持仓量等信息。一个由数根巨量阳线推动的冲击和一个小量缓慢推升的冲击,在数值上可能完全相同,但市场含义天差地别。因此,本策略容易在低流动性或假突破环境中发出误导性水平。
-
滞后性依然存在:虽然 Kadane 算法本身基于过去数据,但滚动窗口机制决定了它只能反映已经发生的最大冲击。当旧冲击不再代表当前行情时,Murrey 线却可能仍然维持在旧水平附近,导致交易者基于过时的信息操作。
-
对单边极端行情的误判:最大子数组和天然青睐单边趋势,但市场不是永远单向的。在急速拉升后出现反转的开始阶段,窗口内的最大冲击仍然是之前的上涨段,Murrey 线会继续画出偏高的水平,此时容易让交易者误以为价格还能涨,从而逆势抄底。
-
缺乏明确的交易信号定义:原文只描述了一种绘图方法,并没有给出具体的买卖规则。如何利用这些水平线进行交易,完全依赖交易者自行解读。这导致同样的策略,不同的人使用结果差异巨大,回测和实盘一致性格外难以保证。
起源年份考证
“Rolling largest Impulse Murreys Lines”是一个实验性策略,要考证其精确起源年份非常困难,因为作者并未给出明确日期。不过,我们可以根据其组成元素,给出该类方法的公认发展时间线:
-
20世纪50年代:威廉·江恩(W.D. Gann)的理论在技术分析领域广泛传播,其中包括价格八等分、角度线等思想,成为 Murrey 数学线的基础。
-
1977年:Jay Kadane 在卡内基梅隆大学提出线性时间内求解最大子数组和问题的算法。该算法的基本思想在更早的文献中已有雏形,但以“Kadane 算法”为名的现代版本普遍认为诞生于 20 世纪 70 年代。
-
1990年代:T.H. Murrey 系统性地将 Gann 理论中的价格区间划分思想整理为“Murrey Math”,提出了从 0/8 到 8/8 的九条水平线体系。相关书籍和交易教材在 90 年代陆续出版,该指标体系在技术分析师中赢得一定知名度。
-
21世纪00年代至10年代:随着开源编程语言和量化回测平台的普及,越来越多策略作者尝试将计算机算法与传统技术指标结合。在公开交易社区中,出现了一些基于最大子数组和识别交易区间的实验性思路。
-
21世纪20年代:作者 RicardoSantos 发布 “Rolling largest Impulse Murreys Lines” 并标注为“实验性”。由于该策略明显依赖现代编程环境中的滚动窗口与算法实现,推测其出现时间应在 2015 年之后,但具体年份无法考证。
需要强调的是,以上时间线是针对“该类方法”的考证,即“用最大子数组和识别冲击”以及“基于冲击绘制 Murrey 线”这两种思想的间接结合。本策略的最终形态,是该作者在特定社区传播后的原创整合,不存在一个公认的“正式提出年份”。
改进建议
-
引入成交量加权:在将价格差值送入 Kadane 算法之前,用对应K线的成交量或成交额作为权重,对差值进行缩放。例如将价格差值乘以成交量因子(如当日成交量相对窗口平均成交量的比值)。这样,最大子数组和会被限定为“有真实资金参与的冲击”,大幅降低无量反弹或缩量阴跌对水平线的影响。
-
同时检测正负冲击:原策略只寻找最大正向冲击,忽略了负向冲击。可以并行计算最小子数组和(等价于负数数组的最大子数组和),得到最强的下跌冲击。同时绘制基于正冲击和负冲击的两套 Murrey 线,分别作为多头支撑和空头阻力。当两套线出现交叉或重合时,往往意味着更大的交易机会。
-
加入时间衰减因子:让越近的价格差值在求和中权重越高,即对每个差值乘以一个指数衰减系数(如 0.95^t,t 表示距离当前的距离)。这样可以弱化较早的冲击对当前网格的影响,使水平线更快适应最新行情节奏。注意,这种方式已不是标准 Kadane 算法,但可以在动态规划框架内保持 O(n) 复杂度。
-
使用多窗口融合:不要只用一个滚动窗口,可以用短、中、长三个窗口分别计算最大冲击并绘制三套 Murrey 线。短线作辅助,中线为主,长线用于判断最终方向。当三套线形成密集共振区域时,该区域的支撑/阻力强度远高于单组线。
-
结合波动率过滤:在启动策略前,用 ATR 或布林带宽度检测当前市场状态。如果市场处于低波动率环境,放大 Murrey 线间距或暂停策略,避免无意义的窄幅网格;如果处于高波动率环境,则正常应用并配合止损。这样能够减少震荡市中的虚假突破。
-
添加动量确认信号:在价格触及 8/8 或 0/8 线时,不立即反向操作,而是等待一个动量指标(如 RSI、MACD)发出背离或钝化信号后再入场。这能有效避免在极端单边行情中过早逆势。
-
优化窗口长度的自适应机制:允许窗口长度根据市场波动率动态变化,例如当最近冲击幅度超过一定阈值时缩短窗口,反之延长窗口。可以让策略在趋势和震荡中保持相对稳定的灵敏度。
总结
“Rolling largest Impulse Murreys Lines”是一个极具创意但尚不成熟的实验性策略。它将计算机科学中的 Kadane 最大子数组和算法,与源于 Gann 理论的 Murrey 数学线进行结合,用滚动窗口内最强连续冲击的幅度来定义当前市场的“节奏单位”,并以此为刻度绘制支撑阻力网格。其核心价值在于提供了一种全新的市场波动度量方式:不依赖均值和标准差,而是聚焦于极值脉冲。这在趋势识别方面具有天然优势,但也伴随着参数敏感、忽略成交量、信号定义模糊等问题。
从研究角度来看,该策略的思想非常值得借鉴。它提醒我们,技术分析可以跨越传统指标边界,从其他学科中引入数学工具来重新描述市场价格行为。然而,要将其用于实际交易,还需要在信号生成、过滤条件、仓位管理等方面进行大量细化和优化。实验性的标签意味着它是一块“璞玉”,等待量化研究者进一步打磨。
对于普通交易者,本策略最有用的部分或许不是直接拿它下单,而是理解“用近期最大推动力定义市场节奏”这一理念。无论是在回调买入、突破追入还是止盈止损的设置上,这种动态评估支撑阻力强度的方法,都可以为我们提供新的灵感。毕竟,市场永远在变化,而那些能够敏锐捕捉“最大冲击”并随之灵活调整的工具,往往更有可能在复杂行情中找到自己的立足之地。