天枢量化轮动策略系统详解
本文档是对天枢量化平台「ETF 动量轮动策略」系统的完整技术说明,涵盖策略的运行逻辑、参数含义、风控机制,以及回测与实盘模拟的执行流程。
一、策略核心思想
ETF 动量轮动策略基于金融学中的
动量效应(Momentum Effect)
——在一定时间窗口内,表现较强的资产在未来一段时间内仍然倾向于保持较强的表现("强者恒强")。
策略的核心逻辑可以概括为三步:
计算动量
:在每个检查日,对 ETF 池中所有标的计算指定方式的动量值
排名选优
:按动量值从大到小排序,选取排名前 N 的 ETF 作为目标持仓
调仓执行
:如果目标持仓与当前持仓不同,则卖出旧持仓、买入新持仓;同时受最小持有天数、止盈止损等风控规则约束
二、参数完整说明
2.1 回测区间参数
参数
说明
取值范围
默认值
开始日期
回测起始日期
2018-01-01 至今
2020-01-01
结束日期
回测终止日期
必须晚于开始日期
当前日期
回测数据覆盖 2018 年至今的所有交易日行情
建议回测区间至少覆盖 1 年以上,以获得更有统计意义的结果
2.2 资金与交易成本参数
参数
说明
取值范围
默认值
单位
初始资金
策略运行的起始资金规模
2,000 ~ 10,000,000
100,000
元
交易佣金
单边交易佣金率
0 ~ 200
2.5
万分比
滑点
实际成交价格与理论价格的偏差
0 ~ 5
0.10
百分比
交易成本计算方式
交易佣金和滑点都是
单边
计算的:
实际买入价格
= 理论买入价格 × (1 + 滑点%)
实际卖出价格
= 理论卖出价格 × (1 - 滑点%)
买入佣金
= 买入金额 × 佣金率
卖出佣金
= 卖出金额 × 佣金率
示例
:佣金填 2.5(即万分之 2.5 = 0.025%),滑点填 0.10(即 0.10%)。买入价格为 1.000 元的 ETF 时:
实际买入价 = 1.000 × (1 + 0.001) = 1.001 元
佣金 = 买入金额 × 0.00025
2.3 动量计算参数
参数
说明
取值范围
默认值
动量计算方式
计算动量值的算法
simple / rsrs / slope / weighted_slope
simple
动量周期
计算动量的历史数据回看天数
1 ~ 60
20
四种动量计算方式
1. 区间涨幅(simple)
用当前价格相对 N 天前价格的涨跌幅来衡量动量。
动量值 = (当前收盘价 - N天前收盘价) / N天前收盘价
取值范围
:通常在 -1 ~ +1 之间(即 -100% ~ +100%)
特点
:计算简单直观,但仅看起点和终点,忽略中间走势
体验会员限制
:体验会员仅支持此计算方式
2. RSRS 动量(rsrs)
基于阻力支撑相对强度(Resistance Support Relative Strength)的动量指标,通过最高价与最低价的线性回归关系来刻画市场的支撑强度与上涨弹性,并用历史 Z-Score 标准化。
单日 RSRS 原始值 = 回归斜率 × R²
RSRS 动量 = (当前RSRS值 - 历史均值) / 历史标准差
取值范围
:通常在 -3 ~ +3 之间(Z-Score 标准分)
所需数据量
:比其他方式需要更多历史数据(= 动量周期 × 3)
特点
:利用价格微观结构(最高/最低价),Z-Score 消除不同标的间绝对值差异
3. 斜率动量(slope)
对对数价格做等权线性回归,用回归斜率代表趋势方向与速度,再用 R² 衡量趋势稳定性。
斜率动量 = 年化收益率 × R²
年化收益率 = exp(每日对数斜率 × 250) - 1
取值范围
:理论无限,实际常见 -2 ~ +6
特点
:同时考虑趋势强度与可信度(R²),对数价格具有时间可加性
4. 加权斜率动量(weighted_slope)
与斜率动量完全相同,唯一区别在于线性回归时为近期数据赋予更高权重。
权重:从 1(最旧数据)到 2(最新数据)线性增长
加权斜率动量 = 年化收益率(加权) × R²(加权)
特点
:偏重近期趋势,对市场变化反应更快,但震荡时也更容易误判
V1 与 V2
:加权斜率动量目前有两个可选版本——不带后缀的版本(V1,历史实现)和"-V2"版本。二者年化收益率算法相同,区别在 R² 的计算:V1 中回归拟合与 R² 计算所用的权重口径不一致,个别情况下会导致 R² 出现负值,使原本上涨的资产被打出负分(评分符号翻转);V2 统一了权重口径修复了这个问题。新建策略建议优先选择 V2,已保存的存量策略不受影响。详见
斜率/加权斜率指标详解
。
动量计算方式对比
维度
区间涨幅
RSRS 动量
斜率动量
加权斜率动量
计算复杂度
低
高
中
中
信息输入
2个价格点
全周期最高/最低价
全周期收盘价
全周期收盘价
抗噪能力
低
高
中
中
对趋势转折响应
中
高
中
较高
适用周期
短期
中长期
中长期
短中期
2.4 单动量与双动量
策略支持两种动量筛选模式:
单动量
和
双动量
。
单动量
只配置一组动量参数(计算方式 + 动量周期),策略按该动量值对 ETF 池中所有标的进行排名,选取排名前 N 的标的买入。这是最基础的使用方式,逻辑简洁清晰。
双动量
同时配置
两组
动量参数。两组参数可以选用不同的计算方式和周期。
运作逻辑
:
以
第一动量
的计算结果作为主排名依据,对所有标的排序
同时计算
第二动量
的值,将其作为过滤条件:凡不满足第二动量阈值的标的,直接从排名中剔除
从剩余标的中取排名前 N 名买入
双动量筛选流程:
│
├─ 计算所有标的的 第一动量值 → 按第一动量从大到小排序
├─ 计算所有标的的 第二动量值 → 不满足第二动量阈值条件的标的 → 剔除出排名
└─ 从剩余标的中取前 N 名 → 作为目标买入标的
设计目的
:
双动量的核心价值在于
多周期验证
。典型用法是将大周期动量(如 60 日斜率动量)作为第二动量用于过滤,将小周期动量(如 20 日区间涨幅)作为第一动量用于排名。这样可以:
只买真正强势的标的
:必须同时满足长期趋势向上(大周期动量 > 阈值)和近期表现领先(小周期动量排名靠前),才会被选入
规避进入下跌期的产品
:即便短期动量排名靠前,如果大周期趋势已经走弱,也会被第二动量过滤掉,从而避免在趋势反转初期追涨
减少噪声信号
:单纯的短周期动量容易受到短期波动干扰,双动量通过大周期趋势背书,显著提高信号质量
单动量 vs 双动量
单动量配置简单,适合快速入手;双动量通过引入第二维度的趋势确认,能有效过滤掉"短期反弹但大趋势已坏"的标的,是在市场震荡或行业轮动频繁时提升胜率的进阶用法。
2.5 选股与排名参数
参数
说明
取值范围
默认值
动量下限阈值
动量值超过此值才参与排名
取决于动量计算方式
0.01(simple)
动量上限阈值
动量值超过此值视为过热,不参与排名
0 表示无上限
0
买入品种数(Top N)
从动量排名中选择前 N 名买入
1 ~ 10
1
资金分配
见下文;仅当 Top N > 1 时在界面展示
开 / 关
关(按买入数分配)
动量阈值说明
动量下限
:只有动量值
大于
此阈值的标的才能参与排名。该值越高,筛选越严格。
动量上限
:动量值
大于等于
此阈值的标的被视为过热,从排名中剔除。设置为 0 表示不启用上限过滤。
不同动量计算方式的阈值默认值:
动量计算方式
下限默认值
上限默认值
说明
区间涨幅
0.01
1
0.01 = 1% 的涨幅
RSRS 动量
0
0(不限)
Z-Score 标准分
斜率动量
0
0(不限)
年化收益率 × R²
加权斜率动量
0
6
年化收益率 × R²
买入品种数(Top N)
从通过阈值筛选后的动量排名中选择前 N 名进行买入。N = 1 时集中投资于动量最强的单只 ETF;N > 1 时分散投资以降低单一 ETF 的风险暴露。
当 N > 1 时,若某一调仓日
实际买入的标的数量 k 小于 N
(例如部分标的被上限阈值剔除、或池中可选标的不足),资金如何拆分由
资金分配
(
reserve_cash_hold_max
)控制:
选项
含义
按最大持仓数预留
(开)
始终按
N 个仓位
等额切分资金;当日只买入 k 只时,仍为未建仓的 N−k 个仓位预留现金,使每只已建仓标的的金额与「满仓 N 只」时一致。
按买入数分配
(关,默认)
仅按
当日实际买入的 k 只
等额分配可用资金,不为未建仓仓位预留;k < N 时单只分配到的资金更高。
创建策略与回测中,仅当
Top N > 1
时显示该参数;N = 1 时不展示。
2.6 持仓控制参数
参数
说明
取值范围
默认值
最小持有天数
每次买入后的最短持仓时间
1 ~ 30
8
日期计算类型
天数的计算方式
交易日 / 自然日
交易日
执行时间
策略检查调仓的时间点
09:30 / 10:30 / 14:30 / 14:50 / 15:00
14:30
备选产品
所有标的都不满足阈值时持有的产品
可选 ETF 代码
无(空仓)
最小持有天数
买入后在最小持有天数内
不会进行调仓
(但止损可以打破此限制)。该参数用于避免频繁交易导致的高成本,并给策略信号足够的验证时间。
日期计算类型
影响所有与"天数"相关的参数(最小持有天数、止盈冷却天数、止损冷却天数):
交易日
(推荐):只计算股市开盘日,周末和节假日不计入
自然日
:包括周末和节假日。例如周五买入、最小持有 3 个自然日,则周一即可卖出
执行时间
策略在该时间点获取行情数据、计算动量并决定是否调仓:
时间点
使用场景
09:30
开盘时执行,可在早盘完成调仓
10:30
上午盘中执行
14:30
收盘前 30 分钟(推荐),平衡信号准确性与执行可行性
14:50
收盘前 10 分钟
15:00
收盘时执行,使用当天收盘价,信号最准确但实盘难以精确成交
建议
:实盘模拟策略建议选择 14:30~15:00 之间的时间,越接近收盘,价格越接近当天实际收盘价。
备选产品
当 ETF 池中所有标的的动量值均不满足阈值条件时,策略会转为买入备选产品,避免资金闲置。未设置备选(选"无")时则空仓持有现金。
内置可选备选产品:
产品
代码
特点
无
-
不设备选,直接空仓持有现金
10年国债ETF
511260
低风险、稳定收益
银华日利ETF
511880
货币基金类,极低风险
招商双债LOF
161716
债券型基金
黄金ETF
518880
避险资产
也支持输入任意 6 位代码搜索并设置为备选产品。
2.7 止盈参数
参数
说明
取值范围
默认值
启用止盈
是否开启止盈机制
开 / 关
关
止盈阈值
触发止盈卖出的收益率
0.01 ~ 1.00
0.18
止盈冷却天数
止盈后多少天内不再买入同一 ETF
0 ~ 90
8
止盈触发条件
当以下条件
同时满足
时触发止盈卖出:
已满足最小持有天数
当前持仓的累计收益率 ≥ 止盈阈值
累计收益率 = (当前价格 - 买入价格) / 买入价格
示例
:止盈阈值设为 0.18(即 18%),买入价 1.000 元,当价格涨至 1.180 元或以上时触发止盈卖出。
止盈冷却期
止盈卖出后,该标的在冷却天数内不会被重新买入,以避免在短期大涨后买入面临的回调风险。冷却天数按所选的日期计算类型计算。
2.8 止损参数
参数
说明
取值范围
默认值
启用止损
是否开启止损机制
开 / 关
关
止损方式
可多选
跌幅止损 / 高点回撤止损
跌幅止损
跌幅止损阈值
持仓亏损达到该比例时卖出
自定义
8%
高点回撤止损阈值
从最高点回撤达到该比例时卖出
自定义
5%
止损冷却天数
止损后多少天内不再买入同一 ETF
0 ~ 90
0
权限说明
止损功能需要 VIP 会员权限,体验会员不支持。
止损的特殊优先级
与止盈不同,
止损不受最小持有天数的限制
,只要触发条件即立即卖出。
跌幅止损
跌幅 = (买入价格 - 当前价格) / 买入价格
当 跌幅 ≥ 止损阈值 时 → 触发卖出
示例
:止损阈值设为 8%,买入价 1.000 元,当价格跌至 0.920 元或以下时触发止损。
高点回撤止损
回撤 = (持仓最高价 - 当前价格) / 持仓最高价
当 回撤 ≥ 回撤阈值 时 → 触发卖出
示例
:回撤阈值设为 5%,买入后价格最高涨到 1.200 元,当价格回落至 1.140 元或以下时触发止损。适合在价格上涨后保护已实现的收益。
可以同时启用跌幅止损和高点回撤止损,
任一条件满足即触发卖出
。
止损冷却期
止损卖出后,该标的在冷却天数内不会被重新买入。设为 0 表示无冷却期(当日仍无法再买入)。建议设为 3~5 天。
2.9 极端情况过滤
过滤条件
说明
当日跌停
勾选后,当日出现跌停的 ETF 将从排名中移除,不会被买入
当日涨停
勾选后,当日出现涨停的 ETF 将从排名中移除,不会被买入
跌停过滤
:跌停的 ETF 可能正在经历极端下跌,买入后面临继续下跌的风险
涨停过滤
:涨停的 ETF 实盘中难以买入(可能无法成交),且追涨风险较大
关于涨停过滤的补充说明
:
涨停的 ETF,策略本身就
不会产生买入信号
——因为涨停意味着该 ETF 当日动量极高,但同时价格已经封板、实盘几乎无法买入。在不启用涨停过滤的情况下,策略会对涨停标的正常计算动量并参与排名,若其排名靠前,策略将选择空仓或买入备选产品等待下一个交易日。
勾选涨停过滤后
,涨停的 ETF 会在排名阶段直接被过滤掉,不再参与排名竞争,策略因此会转而买入当前动量最强的其他品种,使资金得到更充分的利用。
2.10 条件过滤
条件过滤是对 ETF 池中每一只标的施加的
技术指标准入条件
。只有满足所有已勾选条件的标的,才能进入动量排名参与选股。
参数
说明
取值范围
默认值
条件过滤
可选的技术条件(多选,AND)
见下文
不启用
均线周期
(收盘价 > 均线)
用于「当前价格 > N日均线」条件的均线天数
1 ~ 250
60
快线周期
(均线多头)
用于「快线 > 慢线」条件的快速均线天数
1 ~ 250
20
慢线周期
(均线多头)
用于「快线 > 慢线」条件的慢速均线天数
1 ~ 250
60
两种过滤条件
1. 当前价格 > N日均线
条件:ETF 当日收盘价 > 过去 N 个交易日的简单移动平均价(MA_N)
该标的近期处于均线上方,说明短中期价格趋势向上。过滤掉价格跌破均线的标的,避免买入正在走弱的品种。
2. N日均线 > M日均线(均线多头)
条件:ETF 的 N 日均线 > M 日均线(N < M)
快均线在慢均线上方,说明近期趋势强于中长期趋势,均线系统处于多头排列。该条件对趋势的判断比单纯的价格 vs 均线更平滑,受单日价格波动的干扰更小。
快线周期必须小于慢线周期
设置均线多头条件时,快线周期必须严格小于慢线周期,否则无法保存策略。
多条件的逻辑关系
同时勾选多个条件时,所有条件之间为
AND(与)
关系,即标的必须
同时满足全部
已勾选的条件,才能参与动量排名。任一条件不满足,该标的将被过滤出排名。
示例
:同时勾选「当前价格 > 60日均线」和「20日均线 > 60日均线」,则只有价格在均线上方、且均线系统处于多头的 ETF 才能参与排名,筛选力度最强。
与极端情况过滤的区别
极端情况过滤
(涨停/跌停):基于当日价格行为的一次性事件过滤,逐日判断
条件过滤
:基于技术指标的趋势状态过滤,每日重新计算,属于持续性筛选
2.11 大盘择时
大盘择时通过引入一个
市场基准指数
,对所有买入行为施加宏观级别的过滤:只有当 ETF 池中标的的动量值高于大盘指数动量时,策略才会买入;若所有池内标的的动量均低于大盘动量,则转为空仓或买入备选产品。
参数
说明
取值范围
默认值
启用大盘择时
是否开启大盘动量过滤
开 / 关
关
大盘指数
用于计算基准动量的市场指数 ETF
内置选项或自定义
沪深300(510300)
内置大盘指数选项:
指数名称
ETF 代码
说明
沪深300
510300
A 股大盘核心代表
上证综指
510760
上交所全市场综合指
深证成指
159901
深交所成分股指数
中证500
510500
中盘股代表
上证50
510050
蓝筹龙头
创业板指
159915
成长股代表
也支持搜索并输入任意场内 ETF / LOF 代码作为大盘基准。
运作逻辑
启用大盘择时后,所选市场指数会与 ETF 池中的标的使用
同一套动量参数
进行动量计算,并作为一个隐含的「门槛标的」参与比较:
大盘择时判断流程:
│
├─ 计算大盘指数的动量值(使用与 ETF 池相同的动量参数)
├─ 计算 ETF 池中所有标的的动量值
│
├─ 筛选条件:ETF 动量值 > 大盘指数动量值
│ ├─ 满足条件的标的 → 保留,参与排名
│ └─ 不满足条件的标的 → 剔除出排名
│
└─ 若排名列表为空(所有标的动量均 ≤ 大盘动量)
├─ 已设置备选产品 → 买入备选
└─ 未设置备选 → 空仓持有现金
设计目的
大盘择时的本质是一种
相对强弱过滤
——在大盘本身动量强劲时,要求持仓标的表现不能弱于大盘;当大盘整体走弱时,即便 ETF 池中个别标的动量为正,策略也不会轻易买入。这样可以:
规避系统性下跌风险
:大盘大幅下跌期间,几乎所有标的动量都低于大盘动量,策略自动切换至空仓或防御性资产
提高买入质量
:只买进动量确实跑赢大盘的标的,避免在大盘震荡期间追涨相对弱势的品种
灵活配置
:通过切换大盘指数(如用创业板指代替沪深300),可以针对不同风格的 ETF 池匹配合适的基准
与备选产品的配合
大盘择时在市场下跌时会频繁触发空仓;如果不希望长期持有现金,建议同时设置一个低风险的备选产品(如 10年国债ETF、银华日利 ETF),让资金在择时空仓期间自动转入防御性资产。
三、ETF 股票池配置
3.1 选择方式
系统提供两种 ETF 选择方式:
热门推荐
:从平台按类别(宽基指数、行业主题、海外市场等)整理的推荐列表中选择
手动添加
:通过输入 ETF 代码或名称搜索,将任意场内 ETF / LOF 加入池中
另外也支持
导入自选
功能,将您在平台中收藏的自选 ETF 一键导入。天枢量化平台支持几乎全市场的 ETF 和 LOF 产品总计 1600 多支。
3.2 数量限制
最少
:1 个 ETF
最多
:50 个 ETF
3.3 选择建议
一个好的 ETF 池应该满足:
流动性好
(成交量大,确保实盘顺利成交)、
覆盖面广
(包含不同行业和主题)、
相关性低
(避免同行业重复,降低系统性风险)。
推荐组合示例:
类别
代表 ETF
说明
宽基指数
沪深300ETF、中证500ETF、创业板ETF
覆盖大盘、中小盘
行业主题
科技ETF、消费ETF、医药ETF、新能源ETF
行业轮动标的
海外市场
恒生ETF、纳斯达克ETF
全球资产配置
商品类
黄金ETF
避险与通胀对冲
四、策略执行逻辑
假设策略设置了买入品种数为1,以下是一个完整交易日中策略的决策流程:
函数: 每日策略执行(当前日期)
│
├─ 计算 ETF 池中所有标的的动量值
├─ 过滤动量值不满足上下限阈值的标的
├─ 过滤极端情况(涨停/跌停)和冷却期标的
├─ 对剩余标的按动量值排序 → 得到排名列表
│
├─ 如果 当前有持仓:
│ │
│ ├─ 检查止损(不受最小持有天数限制)
│ │ ├─ 跌幅止损触发? → 卖出,进入止损冷却
│ │ └─ 回撤止损触发? → 卖出,进入止损冷却
│ │ ├─ 排名列表中有其他标的? → 买入排名第 1 的标的
│ │ └─ 排名列表为空 → 买入备选产品(或空仓)
│ │
│ ├─ 如果 已满足最小持有天数:
│ │ ├─ 止盈触发? → 卖出,进入止盈冷却
│ │ │ ├─ 排名列表中有其他标的? → 买入排名第 1 的标的
│ │ │ └─ 排名列表为空 → 买入备选产品(或空仓)
│ │ └─ 检查是否需要调仓
│ │ ├─ 排名列表为空 → 卖出 → 买入备选产品(或空仓)
│ │ ├─ 当前持仓不在前 N 名 → 卖出 → 买入排名第 1 的标的
│ │ └─ 当前持仓仍在前 N 名 → 继续持有
│ │
│ └─ 如果 未满足最小持有天数:
│ └─ 继续持有(仅止损可打破)
│
└─ 如果 当前无持仓(空仓或持有备选):
├─ 排名列表不为空 → 买入排名第 1 的标的
└─ 排名列表为空 → 继续空仓或持有备选
五、回测系统
5.1 回测流程
用户配置策略参数并选择 ETF 池
提交回测任务至后端计算引擎
引擎按交易日逐日推演策略逻辑
生成回测结果:净值曲线、交易记录、绩效指标
5.2 回测输出指标
回测完成后,系统会计算并展示以下核心绩效指标:
收益指标
指标
说明
总收益率
策略运行期间的累计收益百分比
年化收益率
将总收益率换算为年化水平
超额收益
相对于基准指数(如沪深300)的超额表现
风险指标
指标
说明
最大回撤
策略净值从最高点到最低点的最大跌幅
最大回撤区间
最大回撤发生的起止日期
波动率
策略日收益率的年化标准差
风险调整收益指标
指标
说明
夏普比率
(年化收益 - 无风险利率) / 年化波动率,衡量每承担一单位风险获得的超额收益
卡玛比率
年化收益率 / 最大回撤,衡量收益与最大回撤的平衡
盈亏比
平均盈利交易金额 / 平均亏损交易金额
交易指标
指标
说明
总交易次数
策略产生的买卖交易总次数
胜率
盈利交易占总卖出交易的比例
5.3 统计分析
除核心绩效指标外,系统还提供以下统计维度:
年度统计
:按年拆分策略表现,包括每年的收益率、最大回撤、夏普比率、卡玛比率、交易次数、胜率、Alpha 和 Beta 值
个股统计
:按 ETF 标的维度统计交易表现,包括收益金额与占比、交易次数、胜率、持有天数
交易统计
:最大盈利/亏损交易、最长连续盈利/亏损次数及对应的总收益和持有天数
六、实盘模拟
回测完成后,可以将策略发布为
实盘模拟
。实盘模拟会:
每个交易日按照设定的执行时间自动获取实时行情
根据策略逻辑判断是否需要调仓
模拟执行交易并记录调仓信号
通过微信公众号推送调仓通知(如已开启订阅)
七、常见问题
Q: 策略最少需要多少资金?
A: 建议至少 10,000 元以上,资金过少可能导致买入时因 ETF 最低交易单位限制而无法完全执行。
Q: 动量计算方式选哪个好?
A: 没有绝对最优的选择,建议:
刚入门用
区间涨幅
,简单直观
想要更稳健的选择
斜率动量
或
RSRS 动量
想要更灵敏的选择
加权斜率动量
最终应通过回测对比来选择最适合你的 ETF 池和市场环境的方式
Q: 为什么不同的执行时间会影响回测结果?
A: 不同时间点的价格不同,会导致动量计算结果和交易成交价都不同。一般来说,越接近收盘的时间点,策略信号越稳定,但实盘中留给执行的时间窗口越短。
Q: 极端情况过滤会影响已持有的标的吗?
A: 不会。极端情况过滤只影响排名选择阶段,不会强制卖出已持有的标的。例如已持有的 ETF 当日跌停,不会因为启用了跌停过滤而被卖出,但在该日的动量排名中会被移除。