迅投QMT社区 门户 查看主题

1000个量化策略--1全球大类动量策略

发布者: 落花忆流年 | 发布时间: 2026-8-25 17:00| 查看数: 9| 评论数: 0|帖子模式

风险提示:本内容为量化技术及平台操作的纯知识分享,不构成任何投资建议,不推荐任何具体证券或交易时机。部分内容可能理解包含错误,请自行核实。市场有风险,投资需谨慎文章全部内容设计到的标的,只做策略思路的分析,不做投资参考,

今天完成了回测系统的开发,api接口的开发,方便我直接调用量化接口,就行策略的开发分析,做策略参数的组合分析,看那个参数比较合适,我自己计算了大量的因子,差不多1000个因子,可以给机器学习,做因子的组合优化,我也参考金融工程马科维茨思路做了一个简单的优化算法,利用利用全部的因子组合无数的策略,这个用人工处理不太可能,用电脑处理组合很快,我今天完成了全部数据的api编写,后面可以写skills,mcp直接给api调用分析系统,自动挖掘,越来越智能分析,可以远程执行回测

b8b19b7d0adc357ce3971b9c738e5bc7.png

读取因子数据,行情数据,财务数据等

fcd3174fe4c68b6a411dbba0ef7a3937.png

模型实现的回测算法有下面这么多,我还在添加量化分析工具

c2c0fa49576c0e168496913be0f1cb45.png

今天利用回测框架,看怎么样实现第一个动量策略,手动操作的太麻烦,我一般是用量化api直接操作速度快

87068bc06f558a4dc573253f51e40887.png

点击动量模型进入回测

12b837c96e45f3361ebcfbfb18a49982.png

第一步添加标的,支持全市场的,动量的核心在于标的的相关性要低,太高的相关性容易动量出了进入同样一样的标的,容易套,选择全球大类资产,相关性低的标的建立投资组合

动量计算思路

def calculate_momentum_score(self, df):
        """
        计算动量分数
        使用加权线性回归计算对数收益率的斜率,并结合R²加权
        """
        if len(df) < self.mom_daily:
            return 0
        df_sub = df.tail(self.mom_daily).copy()
        if len(df_sub) < 10:
            return 0
        y = np.log(df_sub['close'].values)
        n = len(y)
        weights = np.linspace(1, 2, n)
        x = np.arange(n)
        slope, intercept = np.polyfit(x, y, 1, w=weights)
        annualized_returns = math.pow(math.exp(slope), 250) - 1
        residuals = y - (slope * x + intercept)
        weighted_residuals = weights * residuals**2
        y_mean = np.mean(y)
        r_squared = 1 - (np.sum(weighted_residuals) / np.sum(weights * (y - y_mean)**2))
        score = annualized_returns * r_squared
        return score

abc13eaeae4f01f98b8ea4c95116b959.png

7ba0844b98f07fa634145af74ba81901.png

可以利用相关性分析系统,分析一下标的相关性

3521a9e64a752ffc66f3353f487ce362.png

a5b7579f7781eff4b832ba2793605702.png

相关性明细数据

fcd9985990a8d9bf9749321dc52d22ba.png

协方差分析,总体的相关性比较低

cd0d25d5910bada52169fb54ae319953.png

策略的大概思路是安动量排序,选择合适的动量值,amir动量排名的前N个标的,实现动量的思路,本质是一个动量加趋势跟踪的策略,自定义自己的参数回测

1204a95a0301b4fbbda43ab868fa6399.png

设置我们认为合理的参数,回测就可以,也可以利用api接口偏离回测自己的思路

c1a6dc1bb67d41dc645b29a6531ea979.png

全球大类的组合思路结果,回测稍微有一点大,这个是动量本身无法避免的,可以提高买入组合降低单一标的的仓位

b4b9cc892b9437e9399bfb16f7f69bb1.png

回测分析

006c7f1756f0b274450e85b79a421936.png

交易记录

d2599e228da6423012f1652e188655e1.png

持股数据

932538d4be127084738e5df43af77c9c.png

详细统计

b8ed067936c2a5b3107760075a30c7b0.png

不懂的问我就可以,加我备注入群可以加入专业的量化研究群

e8c1f36f27b826beaba47905c77fe78d.jpg

[#量化策略]() [#动量策略]() [#金融科技]() [#量化回测]() [#ai]() [#数据分析]() [#量化交易]()

动量代码计算参考

def calculate_momentum_score(self, df):
        """
        计算动量分数
        使用加权线性回归计算对数收益率的斜率,并结合R²加权
        """
        if len(df) < self.mom_daily:
            return 0
        df_sub = df.tail(self.mom_daily).copy()
        if len(df_sub) < 10:
            return 0
        y = np.log(df_sub['close'].values)
        n = len(y)
        weights = np.linspace(1, 2, n)
        x = np.arange(n)
        slope, intercept = np.polyfit(x, y, 1, w=weights)
        annualized_returns = math.pow(math.exp(slope), 250) - 1
        residuals = y - (slope * x + intercept)
        weighted_residuals = weights * residuals**2
        y_mean = np.mean(y)
        r_squared = 1 - (np.sum(weighted_residuals) / np.sum(weights * (y - y_mean)**2))
        score = annualized_returns * r_squared
        return score

最新评论

客服专线

400-080-8112

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