返回列表 发布新帖

算法研究--风控动量算法原理回测研究

37 1
发表于 昨天 09:17 | 显示全部楼层 阅读模式

今天介绍一下我简单优化的风控动量算法的原理的研究分析,给大家借鉴学习,优化策略算法,上一个文章介绍了原始的算法算法研究---ETF原始动量算法回测研究

一、 算法核心思路

该算法的核心思想是动量轮动 + 双重风控。它并非简单地买入过去一段时间涨幅最大的资产,而是通过一套更精细的“打分系统”来评估资产的上涨质量,并结合资产自身和外部市场环境进行风险控制,力求在捕捉上涨趋势的同时,规避趋势破位和系统性风险。

整体思路可以分为三个步骤:

定性筛选:寻找“稳健”的上涨趋势

策略不只看“涨了多少”,更看重“涨得是否稳健”。

它利用加权线性回归,对资产的对数价格进行拟合。斜率为正代表有上涨趋势,而拟合优度(R-squared)高则代表这个趋势很稳定、价格紧紧围绕趋势线波动,而不是剧烈震荡上行。两者的乘积构成了动量评分的基础。

1量化打分:过滤“过热”与“过冷”

计算出动量得分后,策略设定了上下限阈值。

上限:剔除那些上涨过快、斜率过高的资产。这体现了“均值回归”思想,认为短期过度的暴涨可能透支了未来收益,风险较高。

下限:剔除动量为负或极弱的资产,确保只参与有明确上升趋势的市场。如果所有资产都不合格,则空仓。

2风险控制:双层保险

个股(标的)风控:如果持仓标的的价格跌破了其短期均线(例如文中设置的10日均线),则直接判定为不合格,会被卖出。这是一种典型的技术性趋势跟踪止损。

3指数(市场)风控:

这是一种创新的宏观风控方法。策略会观察一个代表性指数的状态,只有当该指数本身处于其均线上方时,才允许持有特定的、与之相关的资产。如果指数破位,即使该资产自身趋势良好,也会强制清仓,以规避系统性下跌风险。

二、 策略原理深度解析

策略的原理是对传统动量因子的一次改进,融合了法玛-弗伦奇三因子模型的思想延伸和对市场状态的判断。

  1. 动量评分模型(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很高的资产。

  1. 风险控制逻辑

策略将风险分为两个层面:

标的自身趋势破位风险:通过 c.is_stock 开关控制。last_price < last_line 即价格低于其 N 日均线,这是一个经典的右侧出场信号,承认趋势可能已经结束或逆转。

市场系统性风险:通过 c.is_index 开关控制。last_index < last_index_line 即代表性指数低于其均线,通常意味着市场整体环境恶化,情绪低迷。此时,与指数高度相关的标的(c.index_trader_stock 列表中的标的)极易受到拖累,提前离场是一种预防性保护。这个列表的设计体现了策略的严谨性,例如,用上证指数状态去控制黄金ETF的买卖就是不合理的,因为两者的驱动因素不同。

  1. 排名与仓位管理逻辑

合格阈值过滤:get_rank 函数中的 (df['score'] > c.min_value) & (df['score'] <= c.max_value) 是精华所在。它过滤掉了动量得分为负(没有上升趋势)和动量过高(过度延伸、回归风险加大)的标的,只在“健康的动量区间”内选择。

集中持仓:参数 c.rank = 1 意味着始终只选择得分最高的那个标的满仓(c.buy_ratio = 1)持有。这是一种极端集中的轮动策略。

每日再平衡:handlebar 函数在每个交易日都会重新计算所有标的的得分,生成新的目标持仓列表,并与当前持仓对比,进行卖出不符合条件标的、买入新的最高分标的的操作。

简单的分析思路框架

image.png

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

建立需要的参数

bc395f9150962cf0a13e0a5311c28102.png

补充历史数据方便回测

17df73683333e90597176743ab2c4b12.png

计算动量分析

5e7c7a220300bff6b9678db968d44823.png

编写回测框架

18e8fa7d72feec331ed17028591ee0b9.png

轮动分析思路

982796e37c3f3579f1aae443cf64fe33.png

我选择了2024年开始的数据会回测,可以自己研究思路

回测的结果只做数据分析原理的展示,不做交易参考,投资有风险入市需谨慎

优化的结果比原始的算法思路好一点,可以继续结合自己的经验优化算法原理

5d3325ce3c434f4e0bb8fb877bd68167.png

557e238c9857ee40b71669efaf1cf3b8.png

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

e2fd922536a57b30f6cc5d1bcac415b5.jpg

算法框架完整的流程

image.png

评论1

落花忆流年楼主
发表于 昨天 10:13 | 显示全部楼层
不懂的问我就可以作者微信xg_quant

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2026 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表