量化研究 | CPMO动量比较策略

松鼠Quant
2026-01-22

图片
量化策略开发,高质量社群,交易思路分享等相关内容

工具推荐

👉·   参数筛选工具

👉·   Ai帮你编写策略

👉·   订单流图表

👉·   加入2026俱乐部

👉·   Ai投研助手课程

👉·   ssquant量化开源框架

『正文』

ˇ


核心思想

Compare Price Momentum Oscillator(CPMO)的价值,在于把两个标的的动量(PMO)放到同一张图里“横向比较”。相较于只看价格强弱,CPMO 更强调“动量谁更强、何时发生切换”。

当一条动量线从下向上穿越另一条动量线时,往往意味着相对动量发生了阶段性反转;如果再结合零轴、信号线等结构,可以构成更完整的信号体系。


指标定义:DecisionPoint PMO 与 CPMO

文章的基础是 DecisionPoint Price Momentum Oscillator(PMO)。PMO 以 1 期 ROC 为源,再做两次平滑得到动量曲线,并附带一条信号线用于提示拐点与交叉。

TBQuant 版本采用文章描述的“自定义 EMA”平滑方式:

自定义平滑系数alpha = 2 / period(区别于常规 EMA 的 2/(period+1))

计算流程(对应脚本参数):

ROC1 = (Close - Close[1]) / Close[1] * 100

EMA1 = CustomEMA(ROC1, Periods1)

PMO = CustomEMA(PMOScale * EMA1, Periods2)

Signal = EMA(PMO, SignalLen)(策略里用 XAverage 近似)

CPMO 的“对比”体现在:

Data0:PMO0(主标的动量)

Data1:PMO1(对比标的动量)
两条动量线同屏呈现,更容易捕捉动量领先/落后与交叉切换。


交易信号:三类交叉

原文并未给出唯一固定的交易系统,因此本策略定位为“信号化模板”:把 CPMO 的典型信号转成可回测的开平仓规则,你可以在此基础上再加入趋势过滤、波动过滤、形态确认等。

1)动量交叉(EntryMode=0)

当 PMO0 自下向上穿越 PMO1,视为主标的动量转强:

多头入场:PMO0 - PMO1 从 <=0 变为 >0

多头离场:反向交叉

这类信号强调“相对动量”的切换,适合做板块强弱比较、品种间动量领先/滞后观察。

2)零轴交叉(EntryMode=1)

当 PMO0 上穿 0,动量由负转正;下穿 0,动量由正转负:

多头入场:PMO0 从 <=0 变为 >0

多头离场:PMO0 从 >=0 变为 <0

这类信号更偏“趋势动量确认”,常用于过滤震荡中的噪声,但在横盘区仍可能出现来回穿越。

3)信号线交叉(EntryMode=2)

当 PMO0 上穿 SIG0,视为动量拐点向上;下穿则向下:

多头入场:PMO0 - SIG0 从 <=0 变为 >0

多头离场:反向交叉

这类信号更敏感,通常更早出现,但也更容易产生“whipsaw”。

执行规则:反偷价与开盘成交

为避免回测中“看穿当根路径”的不一致,本策略将信号确认与下单执行做了明确分离:

信号只看上一根 K 线([1]/[2])是否发生交叉

下单在当前 K 线以 Open 执行(限价模拟“开盘成交”)

策略默认只做多(AllowShort=0),如需做空可打开 AllowShort=1。

图形输出与诊断


策略会在副图输出

PMO0、SIG0

PMO1(来自 data1.gPmo1)

MP(当前持仓方向)

CB1(Data1 的 CurrentBar,用于确认 Data1 是否确实在推进)

若你看到 CB1 不增长或一直为 -1,通常意味着 Data1 未正确加载/未对齐周期/历史不足。

参数建议

先保持文章默认:Periods1=35, Periods2=20, PMOScale=10, SignalLen=10

想更少交易、更稳:优先 EntryMode=1(零轴交叉)

想更敏感、早一点:尝试 EntryMode=2(信号线交叉)

做相对动量切换:用 EntryMode=0,并确保 Data1 已正确叠加且历史长度足够

策略代码(部分)



图片


图片


图片


完整源码可加入2026俱乐部获得


图片

防迷路


           图片

微   信|小松鼠-松鼠Quant

微信号|viquant01

2026俱乐部源码《动量比较策略》

加入2026量化俱乐部



分享