韭神~ 发布于2025-12-03
回复 3
浏览 2062
16
策略最原始来自于loveLQ的策略,但大佬未提供源码,
后经过神启大佬的复现,得到一个很不错的效果;
在这之上,我增加了移动止损条件,原本的止损是亏损5%止损,我增加了动态止损,从最高点回落5%也会止损;
该逻辑更切合我的投资风格。相对回撤也会更平稳;
各位大佬可以继续研究,控制回撤;
详情分析:
### 一、策略整体定位与核心目标
这是一款**ETF动量+质量因子**的量化策略,核心目标是筛选「高动量、低波动、趋势稳定」的ETF构建持仓组合,同时通过严格的风控规则(止损、量能过滤、跌幅过滤)和防御性切换机制控制回撤,最终实现“高收益、低波动”的投资效果。
策略核心逻辑:**动量(收益趋势)+ 质量(趋势稳定性/低波动)** 双维度筛选ETF,结合加权仓位分配+多层风控,市场弱势时切换到防御性ETF组合,避免单一风险。
### 二、策略框架与核心模块拆解
策略基于聚宽(JoinQuant)平台开发,遵循「盘前计算因子→盘中执行交易→盘后更新数据」的每日运行逻辑,核心模块包括:**基础设置、因子计算、风控规则、交易执行、防御机制、加权/EPO优化**。
#### (一)基础设置(initialize函数)
这是策略的“初始化面板”,定义了所有核心参数、标的池、全局变量和运行调度,是策略的基础骨架。
| 核心配置项 | 具体内容 & 作用 |
|------------|----------------|
| 交易环境配置 | 1. 基准:沪深300(000300.XSHG)< br>2. 滑点:固定滑点3/10000(模拟实际交易成本)< br>3. 交易成本:佣金2.5/10000,最低佣金0.2元(ETF免印花税)< br>4. 禁用未来数据、使用真实价格 |
| ETF标的池 | 15只覆盖不同品类的ETF(商品:豆粕/黄金;海外:纳指/标普/恒生互联网;A股:A50/创业板/中证1000/科创50等;行业:半导体/人工智能/机器人等),分散资产类别风险 |
| 核心参数 | 1. 因子窗口:动量25日、斜率/均线/RSRS/波动率20日(控制因子计算的时间范围)< br>2. EPO优化参数:风险厌恶系数10、收缩系数0.2(后续讲解)< br>3. 风控参数:最大持仓3只、成本止损5%、跟踪止损5%、跌幅过滤5%、成交量过滤阈值等 |
| 全局变量 | 1. g.hold_cost:记录持仓ETF的平均成本(用于成本止损)< br>2. g.hold_high:记录持仓ETF的最高价(用于跟踪止损)< br>3. g.factor_scores:存储所有ETF的因子得分< br>4. g.defensive_etfs:防御性组合(黄金/纳指/豆粕,抗跌性强) |
| 函数调度 | 1. before_market_open(9:00):盘前计算因子得分< br>2. market_open(9:35):盘中执行交易逻辑< br>3. update_hold_high(15:00):收盘更新持仓最高价 |
#### (二)核心因子体系(before_market_open函数)
策略的“选股大脑”,盘前批量计算每只ETF的因子得分,筛选优质标的,核心是「先过滤(量能/跌幅)→ 再计算动量+质量因子 → 最终生成综合得分」。
##### 1. 前置过滤(排除高风险标的)
先过滤掉量能异常、短期暴跌的ETF,避免踩雷:
- **成交量过滤**:计算「5日均量/20日均量」(成交量比率),超过2.0则过滤(量能异常放大可能是异动/流动性风险);
- **跌幅过滤**:近3日任意单日跌幅>5% 或 3日累计跌幅>10%,过滤(短期暴跌标的风险高)。
##### 2. 核心因子计算(筛选高动量+低波动标的)
过滤后,对剩余ETF计算「动量因子+质量因子」,最终生成综合得分:
| 因子类型 | 计算逻辑 | 核心作用 |
|----------|----------|----------|
| 动量因子 | 1. 对收盘价取对数,做线性回归得到斜率(代表每日收益率)< br>2. 年化收益率=exp(斜率)^250 - 1(转换为年化收益)< br>3. 判定系数R²:衡量回归拟合度(0~1,越高趋势越稳定)< br>4. 动量因子=年化收益率 × R²(既看收益,也看趋势稳定性) | 筛选“有持续上涨趋势”的ETF,而非短期脉冲式上涨 |
| 质量因子(4个子因子加权平均,各占25%) | 1. 斜率×拟合度:20日收盘价线性回归斜率×R²(衡量趋势强度)< br>2. 均线因子:收盘价是否站上20日均线(0/1变量,衡量趋势方向)< br>3. RSRS因子:高低价线性回归斜率×R²的均值(衡量价格波动强度)< br>4. 波动率因子:20日收益率标准差的倒数(波动率越低,得分越高,筛选低波动标的) | 筛选“趋势稳定、低波动”的ETF,避免高波动的动量标的 |
| 综合得分 | 综合得分 = 动量因子 × 质量因子 | 兼顾“高动量”和“低波动/趋势稳定”,得分>0才纳入候选 |
#### (三)风控规则(贯穿交易全流程)
策略的“安全垫”,包含**事前过滤(量能/跌幅)、事中止损(成本/跟踪)、持仓限制**三层风控:
##### 1. 双重止损机制(market_open函数)
- **成本止损**:持仓亏损幅度=(当前价-平均成本)/平均成本 < -5%,强制卖出(控制单笔亏损不超过5%);
- **跟踪止损**:持仓从最高价回落幅度=(当前价-最高价)/最高价 < -5%,强制卖出(锁定盈利,避免利润回吐);
- 辅助函数update_hold_high:每日收盘更新持仓ETF的最高价,为跟踪止损提供数据。
##### 2. 持仓限制
最多持有3只ETF,既分散风险,又保证持仓集中度(避免过度分散导致收益稀释)。
#### (四)交易执行逻辑(market_open函数)
策略的“操作手”,盘中按因子得分和风控规则执行买卖,核心流程如下:
```mermaid
graph TD
A[执行止损] --> B[筛选候选ETF(综合得分>0)]
B --> C{优质ETF数量≥7?}
C -- 否 --> D[切换到防御组合(黄金/纳指/豆粕),等权重]
C -- 是 --> E[选综合得分前3的ETF]
E --> F[计算权重(简单加权/EPO优化)]
F --> G[卖出非目标持仓]
G --> H[按权重买入目标ETF,更新成本/最高价]
```
##### 关键步骤拆解:
1. **执行止损**:先卖出触发成本/跟踪止损的ETF,清理无效持仓;
2. **防御切换机制**:若综合得分>0的ETF数量<7(市场整体弱势,优质标的少),切换到防御性组合(黄金/纳指/豆粕,抗跌性强),等权重分配仓位;
3. **权重计算**:
- 默认:基于得分的简单加权(综合得分归一化,得分越高仓位越高,作者实测效果优于EPO);
- 可选:简化版EPO优化(结合收益率方差和综合得分,权重=综合得分×方差倒数,降低高波动标的仓位,数据不足时回退到等权重);
4. **调仓操作**:卖出不在目标列表的ETF,按权重买入目标ETF,计算加权平均成本(更新g.hold_cost),初始化最高价(g.hold_high)。
#### (五)EPO优化与简单加权对比
EPO(Enhanced Portfolio Optimization)是“增强型组合优化”,核心是结合「收益信号(综合得分)」和「风险(方差/协方差)」优化权重,追求风险调整后收益最大化。
- **简化版EPO逻辑**:
1. 计算目标ETF的收益率协方差矩阵,取对角线(方差,代表单只ETF的波动);
2. 权重=综合得分 × 方差倒数(波动越低,权重越高);
3. 归一化权重,确保总和为1;
- **作者结论**:完整EPO优化效果不如简单加权,因此默认使用简单加权(避免过度优化导致过拟合)。
### 三、策略优缺点分析
#### 优点:
1. **因子体系合理**:动量+质量双维度筛选,兼顾收益和稳定性,避免“高波动动量标的”;
2. **风控严格**:多层过滤(量能/跌幅)+ 双重止损,有效控制回撤;
3. **防御机制**:市场弱势时切换到抗跌组合,降低系统性风险;
4. **效率高**:批量计算数据,减少API调用,适合实盘;
5. **加权方式稳定**:默认简单加权,避免过度优化导致的过拟合。
#### 缺点:
1. **参数固定**:因子窗口(20/25日)、止损比例(5%)等参数固定,可能不适应所有市场环境(如极端牛市/熊市);
2. **防御组合固定**:黄金/纳指/豆粕的防御性并非绝对,需根据市场调整;
3. **集中度较高**:最多持有3只ETF,若标的选择错误,影响较大;
4. **EPO优化效果有限**:复杂优化未带来超额收益,反映量化策略“简单有效”的特点。
### 四、策略核心亮点总结
1. **动量+质量的双因子筛选**:不仅看“涨得多”,还看“涨得稳、波动小”,筛选高胜率标的;
2. **双重止损+防御切换**:既控制单笔亏损,又应对市场弱势,风控体系完善;
3. **简单化优先**:放弃效果不佳的复杂EPO优化,采用简单加权,提升策略稳定性和可复制性;
4. **多维度过滤**:量能、跌幅过滤提前排除高风险标的,从源头控制风险。
### 五、实操建议
1. **参数优化**:可回测不同因子窗口(如15/30日)、止损比例(4%/6%),适配不同市场;
2. **防御组合调整**:根据宏观环境更新防御性ETF(如加息周期可加入国债ETF);
3. **回测验证**:需在不同行情(牛市/熊市/震荡市)下回测,验证策略的适应性;
4. **流动性检查**:确保所选ETF成交量充足,避免买入/卖出时滑点过大。
评论
防御策略切换为10年国债,然后像原帖子一样每周三11:15交易,收益就下降非常多,而且感觉和etf池子关系很大,目前里面etf标的相关性太高了
2025-12-05
@cpsubuntu 这种轮动的多少带点后视镜。我也不敢实盘用
2025-12-05
发现是运行在一个交易bug上的收益。
买卖策略上,没有正确调整仓位权重,导致没有按代码设定的持有。但却如此跑得更好。
2025-12-30