今天介绍一下我简单优化的风控动量算法的原理的研究分析,给大家借鉴学习,优化策略算法,上一个文章介绍了原始的算法算法研究---ETF原始动量算法回测研究
一、 算法核心思路
该算法的核心思想是动量轮动 + 双重风控。它并非简单地买入过去一段时间涨幅最大的资产,而是通过一套更精细的“打分系统”来评估资产的上涨质量,并结合资产自身和外部市场环境进行风险控制,力求在捕捉上涨趋势的同时,规避趋势破位和系统性风险。
整体思路可以分为三个步骤:
定性筛选:寻找“稳健”的上涨趋势
策略不只看“涨了多少”,更看重“涨得是否稳健”。
它利用加权线性回归,对资产的对数价格进行拟合。斜率为正代表有上涨趋势,而拟合优度(R-squared)高则代表这个趋势很稳定、价格紧紧围绕趋势线波动,而不是剧烈震荡上行。两者的乘积构成了动量评分的基础。
1量化打分:过滤“过热”与“过冷”
计算出动量得分后,策略设定了上下限阈值。
上限:剔除那些上涨过快、斜率过高的资产。这体现了“均值回归”思想,认为短期过度的暴涨可能透支了未来收益,风险较高。
下限:剔除动量为负或极弱的资产,确保只参与有明确上升趋势的市场。如果所有资产都不合格,则空仓。
2风险控制:双层保险
个股(标的)风控:如果持仓标的的价格跌破了其短期均线(例如文中设置的10日均线),则直接判定为不合格,会被卖出。这是一种典型的技术性趋势跟踪止损。
3指数(市场)风控:
这是一种创新的宏观风控方法。策略会观察一个代表性指数的状态,只有当该指数本身处于其均线上方时,才允许持有特定的、与之相关的资产。如果指数破位,即使该资产自身趋势良好,也会强制清仓,以规避系统性下跌风险。
二、 策略原理深度解析
策略的原理是对传统动量因子的一次改进,融合了法玛-弗伦奇三因子模型的思想延伸和对市场状态的判断。
- 动量评分模型(MOM函数)
这是策略的“大脑”,其计算逻辑旨在评估趋势的质量:
数据转换:对收盘价取自然对数 y = log(close)。这样做的好处是可以将价格的指数增长线性化,便于线性回归,并且回归系数(斜率)可以直接转化为对数收益率,进而计算年化收益率。
加权线性回归:weights = np.linspace(1, 2, n) 。通过 numpy 的 polyfit 函数进行加权回归。关键在于,权重是线性递增的。这意味着近期价格变动对趋势斜率(slope)的影响远大于远期价格。这使得模型对趋势的转变更加敏感,能更快地反映最新的价格动态。
年化收益率计算:annualized_returns = math.pow(math.exp(slope), 250) - 1。将回归得到的日对数收益率斜率,按每年250个交易日复利计算出年化收益率。这是动量的核心——代表了趋势的强度和方向。
拟合优度计算:计算加权后的 R-squared(r_squared)。它衡量了回归线对价格波动的解释程度。
高R-squared:价格在趋势线附近规律波动,趋势噪音小,更可靠。
低R-squared:价格围绕趋势线大幅震荡,趋势不稳定,噪音大。
最终得分:score = annualized_returns * r_squared。这个乘法设计非常巧妙,它惩罚了“高收益但低质量”的趋势(比如脉冲式上涨),奖励了“收益可观且走势平稳”的趋势。一个斜率极高但R-squared很低的资产,其得分可能不如一个斜率中等但R-squared很高的资产。
- 风险控制逻辑
策略将风险分为两个层面:
标的自身趋势破位风险:通过 c.is_stock 开关控制。last_price < last_line 即价格低于其 N 日均线,这是一个经典的右侧出场信号,承认趋势可能已经结束或逆转。
市场系统性风险:通过 c.is_index 开关控制。last_index < last_index_line 即代表性指数低于其均线,通常意味着市场整体环境恶化,情绪低迷。此时,与指数高度相关的标的(c.index_trader_stock 列表中的标的)极易受到拖累,提前离场是一种预防性保护。这个列表的设计体现了策略的严谨性,例如,用上证指数状态去控制黄金ETF的买卖就是不合理的,因为两者的驱动因素不同。
- 排名与仓位管理逻辑
合格阈值过滤:get_rank 函数中的 (df['score'] > c.min_value) & (df['score'] <= c.max_value) 是精华所在。它过滤掉了动量得分为负(没有上升趋势)和动量过高(过度延伸、回归风险加大)的标的,只在“健康的动量区间”内选择。
集中持仓:参数 c.rank = 1 意味着始终只选择得分最高的那个标的满仓(c.buy_ratio = 1)持有。这是一种极端集中的轮动策略。
每日再平衡:handlebar 函数在每个交易日都会重新计算所有标的的得分,生成新的目标持仓列表,并与当前持仓对比,进行卖出不符合条件标的、买入新的最高分标的的操作。
简单的分析思路框架

在大qmt建立回测的框架思路参考
建立需要的参数

补充历史数据方便回测

计算动量分析

编写回测框架

轮动分析思路

我选择了2024年开始的数据会回测,可以自己研究思路
回测的结果只做数据分析原理的展示,不做交易参考,投资有风险入市需谨慎
优化的结果比原始的算法思路好一点,可以继续结合自己的经验优化算法原理


不懂的问我就可以,加我备注入群可以加入研究群,免费的量化资料学习

算法框架完整的流程
