外观
次方量化轮动策略系统详解
本文档是对次方量化平台「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²(加权)- 特点:偏重近期趋势,对市场变化反应更快,但震荡时也更容易误判
动量计算方式对比
| 维度 | 区间涨幅 | RSRS 动量 | 斜率动量 | 加权斜率动量 |
|---|---|---|---|---|
| 计算复杂度 | 低 | 高 | 中 | 中 |
| 信息输入 | 2个价格点 | 全周期最高/最低价 | 全周期收盘价 | 全周期收盘价 |
| 抗噪能力 | 低 | 高 | 中 | 中 |
| 对趋势转折响应 | 中 | 高 | 中 | 较高 |
| 适用周期 | 短期 | 中长期 | 中长期 | 短中期 |
2.4 选股与排名参数
| 参数 | 说明 | 取值范围 | 默认值 |
|---|---|---|---|
| 动量下限阈值 | 动量值超过此值才参与排名 | 取决于动量计算方式 | 0.01(simple) |
| 动量上限阈值 | 动量值超过此值视为过热,不参与排名 | 0 表示无上限 | 0 |
| 买入品种数(Top N) | 从动量排名中选择前 N 名买入 | 1 ~ 10 | 1 |
动量阈值说明
- 动量下限:只有动量值大于此阈值的标的才能参与排名。该值越高,筛选越严格。
- 动量上限:动量值大于等于此阈值的标的被视为过热,从排名中剔除。设置为 0 表示不启用上限过滤。
不同动量计算方式的阈值默认值:
| 动量计算方式 | 下限默认值 | 上限默认值 | 说明 |
|---|---|---|---|
| 区间涨幅 | 0.01 | 1 | 0.01 = 1% 的涨幅 |
| RSRS 动量 | 0 | 0(不限) | Z-Score 标准分 |
| 斜率动量 | 0 | 0(不限) | 年化收益率 × R² |
| 加权斜率动量 | 0 | 6 | 年化收益率 × R² |
买入品种数(Top N)
从通过阈值筛选后的动量排名中选择前 N 名进行买入,资金在 N 个标的间等权分配。N = 1 时集中投资于动量最强的单只 ETF,N > 1 时分散投资以降低单一 ETF 的风险暴露。
2.5 持仓控制参数
| 参数 | 说明 | 取值范围 | 默认值 |
|---|---|---|---|
| 最小持有天数 | 每次买入后的最短持仓时间 | 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.6 止盈参数
| 参数 | 说明 | 取值范围 | 默认值 |
|---|---|---|---|
| 启用止盈 | 是否开启止盈机制 | 开 / 关 | 关 |
| 止盈阈值 | 触发止盈卖出的收益率 | 0.01 ~ 1.00 | 0.18 |
| 止盈冷却天数 | 止盈后多少天内不再买入同一 ETF | 0 ~ 90 | 8 |
止盈触发条件
当以下条件同时满足时触发止盈卖出:
- 已满足最小持有天数
- 当前持仓的累计收益率 ≥ 止盈阈值
累计收益率 = (当前价格 - 买入价格) / 买入价格示例:止盈阈值设为 0.18(即 18%),买入价 1.000 元,当价格涨至 1.180 元或以上时触发止盈卖出。
止盈冷却期
止盈卖出后,该标的在冷却天数内不会被重新买入,以避免在短期大涨后买入面临的回调风险。冷却天数按所选的日期计算类型计算。
2.7 止损参数
| 参数 | 说明 | 取值范围 | 默认值 |
|---|---|---|---|
| 启用止损 | 是否开启止损机制 | 开 / 关 | 关 |
| 止损方式 | 可多选 | 跌幅止损 / 高点回撤止损 | 跌幅止损 |
| 跌幅止损阈值 | 持仓亏损达到该比例时卖出 | 自定义 | 8% |
| 高点回撤止损阈值 | 从最高点回撤达到该比例时卖出 | 自定义 | 5% |
| 止损冷却天数 | 止损后多少天内不再买入同一 ETF | 0 ~ 90 | 0 |
权限说明
止损功能需要 VIP 会员权限,体验会员不支持。
止损的特殊优先级
与止盈不同,止损不受最小持有天数的限制,只要触发条件即立即卖出。
跌幅止损
跌幅 = (买入价格 - 当前价格) / 买入价格
当 跌幅 ≥ 止损阈值 时 → 触发卖出示例:止损阈值设为 8%,买入价 1.000 元,当价格跌至 0.920 元或以下时触发止损。
高点回撤止损
回撤 = (持仓最高价 - 当前价格) / 持仓最高价
当 回撤 ≥ 回撤阈值 时 → 触发卖出示例:回撤阈值设为 5%,买入后价格最高涨到 1.200 元,当价格回落至 1.140 元或以下时触发止损。适合在价格上涨后保护已实现的收益。
可以同时启用跌幅止损和高点回撤止损,任一条件满足即触发卖出。
止损冷却期
止损卖出后,该标的在冷却天数内不会被重新买入。设为 0 表示无冷却期(当日仍无法再买入)。建议设为 3~5 天。
2.8 极端情况过滤
| 过滤条件 | 说明 |
|---|---|
| 当日跌停 | 勾选后,当日出现跌停的 ETF 将从排名中移除,不会被买入 |
| 当日涨停 | 勾选后,当日出现涨停的 ETF 将从排名中移除,不会被买入 |
- 跌停过滤:跌停的 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 当日跌停,不会因为启用了跌停过滤而被卖出,但在该日的动量排名中会被移除。