PulseForce Momentum(动量策略)算法解析

1. 概述

Momentum(动量策略) 是量化交易领域最常见、最实战化的一类趋势增强策略。
它基于一个核心假设:

“强者恒强,弱者恒弱”:最近表现强的标的,更有可能继续上涨;最近表现差的标的,更有可能继续走弱。

在 PulseForce 中,内置的 momentum 策略并不是“只看涨跌幅”的简单动量,而是综合了:

  • EMA 交叉(ema_fast / ema_slow):确认短期与中长期趋势方向
  • 近期高点突破(recent_high_window):确认价格是否真正突破前一段时间的压力位
  • RSI 动量信号(rsi_period / rsi_buy_threshold / rsi_sell_threshold):衡量多空力量强弱
  • 成交量放大(volume_window):确认上涨是真实资金推动,而非“无量空涨”
  • CatBoost AI 过滤器(可选):在基础规则之上,再用 AI 模型过滤劣质信号

同时,策略通过:

  • 强制止盈 / 止损(force_take_profit / force_stop_loss)
  • 日级止盈 / 止损(daily_take_profit / daily_stop_loss)
  • 动态资金分配(allowable_funds_*)

来管理风险和仓位,并支持在 PulseForce 中使用 HyperOpt 自动搜索最优参数组合


2. 策略起源与发展简述

动量效应拥有非常扎实的学术背景与长期实证支持:

  • 1993 年 Jegadeesh & Titman 的经典论文系统性证明:
    买入过去赢家、卖出过去输家 可以获得显著超额收益。
  • 后续大量研究发现,动量效应存在于:
    股票、期货、外汇、商品、指数、甚至加密货币市场中。

实战中,动量策略常用于:

  • 中短周期趋势交易
  • 行业/板块轮动
  • 多资产多空组合
  • 高频趋势过滤模块

PulseForce 的 Momentum 策略,就是在这些经典思想基础上,叠加了多指标确认与 AI 过滤的增强版本。


3. 这个 Momentum 策略在解决什么问题?

PulseForce 的 momentum 策略试图解决以下几个实战问题:

  1. 只看涨跌幅不够稳,需要多维度确认“真动量”
    → 使用 EMA 交叉 + 近期高点突破 + RSI + 成交量综合判断。

  2. 如何避免“假突破”“假拉升”?
    → 价格必须突破一段时间内的高点,同时成交量要放大。

  3. 如何在趋势加速时尽早上车,而不是等到太晚?
    → 使用近期突破 + RSI 高位作为“趋势加速”信号。

  4. 如何减少无效信号、降低回撤?
    → 再叠加 CatBoost AI 模型过滤部分信号,并使用多层止盈止损机制。


4. 核心指标与信号逻辑

4.1 核心技术指标

momentum 策略中,主要用到以下指标(全部在 1 分钟级别计算):

指标 含义
ema_fast 快速 EMA,反应更敏感,代表短周期动量
ema_slow 慢速 EMA,代表中长期趋势方向
recent_high 一段时间内(recent_high_window)的最高价,用于突破确认
rsi 相对强弱指数,用于衡量短周期买盘强度
volume_mean 一段时间内平均成交量,用于判断是否放量

在代码中,对应这段指标计算逻辑(节选):

1
2
3
4
5
6
df["rsi"] = ta.RSI(df, timeperiod=rsi_p).fillna(0)
df["ema_fast"] = ta.EMA(df, timeperiod=ema_f)
df["ema_slow"] = ta.EMA(df, timeperiod=ema_s)

df["recent_high"] = df["high"].rolling(window=rh_w, min_periods=1).max()
df["volume_mean"] = df["volume"].rolling(window=vol_w, min_periods=1).mean()

4.2 趋势标签:短趋势 / 长趋势 / 日趋势

基于 EMA 计算,策略额外标记:

  • short_trend:由 ema_fastema_slow 决定
  • long_trend:由更长周期的 EMA 组合计算
  • daily_short_trend / daily_trend:由 1m 重采样到 1D 得到的日级趋势

这些趋势字段可用于:

  • 后续 AI 模型特征
  • 风控模块扩展
  • UI 中展示更直观的趋势状态

5. 核心买入/卖出逻辑(结合 Runner + AI 过滤)

5.1 买入信号:突破 + 强动量 + 放量 + EMA 多头 + AI 过滤

populate_buy_trend 中,PulseForce 将 Runner 的逻辑等价为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1) Runner 的基础动量条件
base_cond = (
(df["close"] > df["recent_high"].shift(1)) & # 突破前一窗口期间的最高价
(df["rsi"] > rsi_buy_th) & # RSI 高于买入阈值
(df["volume"] > df["volume_mean"]) & # 成交量高于均量(放量)
(df["ema_fast"] > df["ema_slow"]) & # EMA 多头排列
(df["volume"] > 0) # 有真实成交量
)

df.loc[:, "buy"] = 0

# 2) 若未启用 AI 过滤,直接使用基础条件
if not self.ai_manager or not self.ai_manager.plugins:
df.loc[base_cond, "buy"] = 1
return df

# 3) 启用 AI 过滤时,仅对 base_cond 成立的 K 线做 AI 打分
ai_mask = df.loc[base_cond].apply(_ai_pass, axis=1)
df.loc[base_cond, "buy"] = ai_mask.astype(int)

也就是说,这个 Momentum 策略的买入逻辑可以概括为:

“当价格突破近期高点 + RSI 动量强 + 成交量放大 + EMA 多头排列时,认为出现强动量突破;若 AI 模型也判定该信号质量较高,则正式发出买入信号。”


5.2 卖出信号:动量衰减 + SL/TP 结合

策略不直接用均线死叉,而是定义了一个 “动量减弱信号层” _has_sell_signal

1
2
3
4
5
6
def _has_sell_signal(self, row: pd.Series) -> bool:
rsi_sell_th = float(self._val(self.rsi_sell_threshold))
c = float(row.get("close", np.nan))
ema_f = float(row.get("ema_fast", np.inf))
rsi = float(row.get("rsi", 50))
return (c < ema_f) and (rsi < rsi_sell_th)

含义:

  • 收盘价跌破 ema_fast → 短期动量减弱
  • RSI 跌破 rsi_sell_threshold → 超买/强势状态结束

而真正的退出逻辑在 custom_exit 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# ① 强制止损 / 强制止盈(不依赖动量信号)
if current_profit <= -self.force_stop_loss.value:
return "hard_sl"
if current_profit >= self.force_take_profit.value:
return "hard_tp"

# ② 没有卖出信号 → 即便触及日级 SL/TP 也不动
if not self._has_sell_signal(row):
return None

# ③ 只有在出现卖出信号时,才判断日级 SL/TP
th = self._pick_trend_thresholds(row) # {"sl": daily_stop_loss, "tp": daily_take_profit}
sl = float(th["sl"])
tp = float(th["tp"])

if current_profit <= -sl:
return "sl_signal"
if current_profit >= tp:
return "tp_signal"

总结一下这套卖出逻辑:

  1. 有“强制 TP/SL”兜底:极端情况下,先保护资金安全。
  2. 平时不会随便砍仓,要先等动量减弱信号出现
  3. 只有同时满足“动量减弱 + 触及日级止盈/止损”时,才真正退出仓位

这比简单的“到止损就卖”、“均线死叉就卖”更精细,能在趋势延续期间尽可能持有。


6. PulseForce 参数配置与超参优化说明

PulseForce App(Apple AppStore & Google Play可下载)针对量化任务、量化回测以及超参优化,提供了可视化的配置界面,使策略可以完全参数化。

回测参数配置界面:

超参优化参数配置界面:

6.1 基础参数组

这部分决定了 动量信号的核心结构,全部支持超参优化:

参数 Key 名称 作用 可优化 建议初始搜索范围(otp_init_min ~ otp_init_max
ema_fast Fast EMA Period 快速 EMA 周期,越小反应越敏感 15 ~ 30
ema_slow Slow EMA Period 慢速 EMA 周期,用于平滑中长期趋势 50 ~ 90
recent_high_window Recent High Window 用于计算“近期高点”的窗口长度 20 ~ 45
rsi_period RSI Period RSI 计算周期 10 ~ 25
rsi_buy_threshold RSI Buy Threshold 触发买入信号所需的最小 RSI 值 60 ~ 75
rsi_sell_threshold RSI Sell Threshold 触发卖出信号的最大 RSI 值(动量衰减阈值) 20 ~ 45
volume_window Volume MA Window 计算成交量均值的窗口长度 10 ~ 30

这些参数直接对应代码中的 HyperOpt 空间:

1
2
3
4
5
6
7
ema_fast           # IntParameter(15, 30, ...)
ema_slow # IntParameter(50, 90, ...)
recent_high_window # IntParameter(20, 45, ...)
rsi_period # IntParameter(10, 25, ...)
rsi_buy_threshold # DecimalParameter(60.0, 75.0, ...)
rsi_sell_threshold # DecimalParameter(20.0, 45.0, ...)
volume_window # IntParameter(10, 30, ...)

6.2 资金管理参数

这部分在 PulseForce 中主要用于 控制最大资金使用与趋势型仓位比例,当前配置为用户可配,默认不参与超参优化

参数 含义
max_funds_allowed_using 策略最大可使用资金上限
allowable_funds_neutral 市场中性时使用的资金比例
allowable_funds_uptrend 上升趋势中使用的资金比例
allowable_funds_downtrend 下降趋势中使用的资金比例

你可以根据自己风险偏好,在 PulseForce App 内自行调整这些值,例如:

  • 大趋势明显时,把 allowable_funds_uptrend 设为 1.0
  • 市场不明朗时,降低 allowable_funds_neutralallowable_funds_downtrend

6.3 止损参数

这部分是 风险控制的核心,并且全部支持超参优化:

参数 Key 名称 说明 可优化 搜索范围
force_stop_loss Force Stop-Loss Ratio 无视信号,亏损达到该比例即强制平仓 0.005 ~ 0.30(配置文件)或 0.01 ~ 0.1(代码中 HyperOpt)
daily_stop_loss Daily Stop-Loss Ratio 仅在出现卖出信号时,若亏损超过该值才触发止损 0.005 ~ 0.30(配置文件)或 0.01 ~ 0.1(代码中 HyperOpt)

需要注意的是:

  • 强制止损 是“永远生效”的硬防线;
  • 日级止损 只有在 _has_sell_signal 为真时才会检查。

6.4 止盈参数

同样支持超参优化:

参数 Key 名称 说明 可优化 搜索范围
force_take_profit Force Take-Profit Ratio 无视信号,盈利达到该比例即强制平仓 0.005 ~ 0.30(配置文件)或 0.01 ~ 0.1(代码)
daily_take_profit Daily Take-Profit Ratio 出现卖出信号时,若盈利超过该值则止盈 0.005 ~ 0.30(配置文件)或 0.01 ~ 0.1(代码)

整体而言:

  • Force 系列参数:更偏“防黑天鹅 / 锁定极端收益”的硬逻辑;
  • Daily 系列参数:更偏“顺势中找合理离场点”的柔性逻辑。

在 PulseForce 的 HyperOpt 环境中,这四个参数都可以针对不同股票自动找到更合适的区间。


7. 适用场景与特点

7.1 适合的场景

  • 波动较大且存在明显趋势的标的(如美股成长股、热门 ETF、加密货币等)
  • 1 分钟或 5 分钟级别的短周期趋势交易
  • 有较稳定成交量、容易出现突破行情的标的
  • 希望通过 HyperOpt 寻找「最优参数组合」的研究/实盘环境

7.2 不适合的场景

  • 长期窄幅震荡,无明显突破与趋势的标的
  • 极度缺乏成交量(容易出现价格一跳多格)的股票
  • 高度受消息面瞬时冲击的超短线行情(需要更快机制)

8. 策略优势与不足

优势

  • 结合 EMA 交叉 + 突破 + RSI + 成交量 → 真动量、多重确认
  • 加入 AI 过滤器(CatBoostMomentumPlugin),可减少劣质信号
  • 退出逻辑更细腻:动量衰减 + SL/TP 联合判断
  • 支持完整超参优化,易于针对单票调优
  • 与 PulseForce 的 UI / 回测 / 超参模块深度集成

不足

  • 结构较简单的纯动量相比,本策略逻辑更复杂,对数据质量与回测环境要求更高
  • 在超长时间的震荡市中,突破与强动量本身不多,可能较少出手
  • AI 过滤器依赖模型质量,若训练不当反而可能过滤掉部分好信号

9. 总结

PulseForce 内置的 momentum 动量策略,是在经典动量思想基础上,叠加多指标确认与 AI 过滤的 增强版趋势策略

  • 使用 EMA 快慢线 判断趋势方向
  • 使用 近期高点突破 + RSI 强势区间 + 成交量放大 确认动量质量
  • 使用 AI 模型(CatBoostMomentumPlugin) 审核每一个基础买入信号
  • 使用 强制/日级止盈止损 管理风险
  • 使用 HyperOpt 超参优化 来针对不同标的搜索最优参数组合

对于希望在 PulseForce 中构建 “更聪明的动量策略” 的用户来说,这是一个既稳定又可扩展的基础模块。

想了解更多策略介绍与最新功能,请访问:
👉 PulseForce 官网: https://www.hiforce.ai