返回列表 发布新帖

1000个策略--5日动量因子策略真的有效吗

9 1

相对动量和绝对动量,下面简单的介绍一下

绝对动量(Absolute Momentum)也叫时间序列动量。它只看自己:这只股票或基金自身现在的价格,比它过去一段时间(比如12个月)的价格高还是低。判断标准:如果当前价格 > 过去N个月前的价格,就是正动量(看涨);反之是负动量(看跌)。典型策略:趋势跟踪。涨了就买,跌了就卖,不关心别人。例子:现在股价1800元,比1年前1600元高,那它的绝对动量就是正的,趋势交易者会买入或持有。

相对动量(Relative Momentum):也叫横截面动量。它看的是排名:把一群股票放在一起比,谁过去涨得比同类更猛。判断标准:不关心自己涨没涨,只关心涨得是不是比别人多。典型策略:多空配对。买入过去表现最好的前20%股票,同时做空表现最差的后20%股票。

例子:今年所有股都跌了(绝对动量全是负的),但一个跌了5%,一个跌了20%。第一个相对动量就是正的,因为它在同类里跌得最少、跑赢了同行。

5日动量是我们常见的一个绝对动量的因子,具体我们检验一下这个因子是不是有效的因子,还要因子相关性等问题,第一步进入模型,当然也可以使用ai去分析,skill可以正常的使用,全部的ai工具都可以,比如WorkBuddy,trae等都可以使用,把这个内容发给ai就可以

9ecab930aa0b46d05dafd7c9ff81c60a.png

dac938141a98d5fd603271fdaa2fa392.png

/小果量化平台系统skill 利用小果排序多因子回测系统,生成这个代码,
策略逻辑: 在 2024-01-01 至 2026-12-31 期间,以 000300.SH 为基准,
对 1595.SZ、500.SH、580.SH、5180.SH、
151.SZ、5000.SH、1325.SZ、
5160.SH 进行排序轮动交易。 最大持股 1 只,
总排序方式: 降序。
买入条件筛选: ✅ 开启
自定义因子: 开启,2个自定义因子 (收盘价大于5日均线、均线评分)
买入条件: 5日涨跌幅(AND, 大于 0);5日涨跌幅(AND, 小于 5)
排序因子(相关性/权重): 5日涨跌幅(正相关, 权重:1)
止盈设置: 涨幅3.0%触发,金额卖出1000元,这个是用户账户,
服务器地址等数据url="124.220.32.224",
    port=8888,
    user="小果",
    password="小果",
    auth_code="小果",不需要分析过程,直接输出完整代码

ai会自动生成分析的框架代码

bcb69a3ef7c236e5492d4f00271c318e.png

下面我用手动的方式实现因子的检验策略分析,打开多因子排序算法模型

240166beb359d977f6852f7c1c261d57.png

选择股票池,利用etf建立一个全球大类的组合,重要是低相关性标的,建立组合,避免策略风格的偏移

da22efc81c670a8c2360326f3171a4b7.png

设置交易的参数,这个可以自定义,我的只是策略的检验不做参考

becbbefa582038685ded4eb6079718ed.png

选择因子比如我们今天需要验证的5日涨跌幅因子,这个我做了一个简单的涨跌幅区间的限制,可以自定义因子我目前计算了600多个因子

5b34c5c5592ca22c30eae57e555f1282.png

ff3aeef70897a41c9f8522c1af7f19e6.png

排序因子的选择,也是利用5日因子,这里需要注意相关性的选择,先正相关,后面检验一下相关性对策略的影响

64e21af3a6f358b6616fdc48033e64fb.png

系统会自动安策略参数生成一个简单策略说明

2e45500f62e45ce48c434d688de2a90e.png

点击回测,5日因子动量,正相关排序看看收益

891df67cf53b55f97785187bc45fb43e.png

目前来看正相关排序,没有跑过指数,回测也巨大,正相关排序,买因子里面最大的标的,容易追高,看一下回测分析

c945eedcc0365111c9a734fd40c0d2ec.png

收益统计

76b31f8a93b8bff6fa2420e4009c236d.png

{'start_date': '2024-01-02', 'end_date': '2026-08-28', 
'total_days': 644, 'final_value': 129742.84, 
'total_return': 0.2974, 'total_pnl': 29742.84, 
'final_holdings': 43900, 'remaining_cash': 64946.44, 
'total_trades': 711, 'annual_return': 0.1031,
 'max_drawdown': -0.0845, 'sharpe_ratio': 0.8216, 
 'volatility': 0.1066, 'win_rate': 0.1644, 
 'profit_loss_ratio': 0.0122, 
 'benchmark_final_value': 1.7087, 
 'benchmark_total_return': 0.7087, 'excess_return': -0.4113, 
 'index_final_value': 1.3442, 'index_total_return': 0.3442}

看一下策略排序的因子相关性和策略的关系,在选择买卖的因子基础上,涨跌幅基础上,排序从小到大买入,买入动量小的标的,相关性改成负相关就可以

db2b4ba8761cd1c623ecb072c2b4cfa1.png

点击回测看看结果,收益多了一倍,负相关选择收益比正相关高,存在超额收益对比指数

7439d20430db39c3d21c7662291020a3.png

回撤分析

8d9e4a51476240ff6f65112c2dcf99e3.png 年度统计

dc88b51e8c4cff7ed8407ee38a2f489a.png

{'start_date': '2024-01-02', 'end_date': '2026-08-28', 
'total_days': 644, 'final_value': 134429.78, 
'total_return': 0.3443, 'total_pnl': 34429.78, 
'final_holdings': 30700, 'remaining_cash': 67350.28, 
'total_trades': 625, 'annual_return': 0.118, 
'max_drawdown': -0.1366, 'sharpe_ratio': 0.7675, 
'volatility': 0.1371, 'win_rate': 0.1535,
 'profit_loss_ratio': 0.0121, 
 'benchmark_final_value': 1.7087, 
 'benchmark_total_return': 0.7087, 
 'excess_return': -0.3644, 'index_final_value': 1.3442, 
 'index_total_return': 0.3442}

总结为什么负相关排序有效?

规避“追涨杀跌”陷阱:正相关排序(买入5日最强)在市场震荡或反转时极易高位站岗。回测显示其虽年化有10%,但超额收益为-41%,说明因子暴露方向错误,完全抵消了资产配置的优势。

负相关=逆向价值挖掘:买入5日最弱资产,本质是短期均值回归策略。在全球资产呈现明显的轮动和震荡特征,超跌资产往往有阶段性反弹机会。负相关排序成功捕捉了这一特性,不仅收益翻倍,且回撤更小(因为买入时资产已处于相对低位)。

与低相关性组合的协同:由于底层已配置了全球低相关性ETF,当某一类资产(如某国股票)因短期弱势被买入时,往往其他资产(如债券、商品)处于强势,形成天然对冲。这解释了为什么负相关策略在控制回撤的同时,还能获得高收益。

不懂的问我就可以,加我备注入群可以加入量化交流群

a7b9f40233f3f29062211e1e67380f95.jpg

找我开户也可以专业的量化支持

e17d3a77691c6a8c12de96ed5d1b8a10.png

分析框架代码验证因子

"""
作者:小果
微信:xg_quant
小果量化平台 - 排序多因子回测系统
策略逻辑:
  - 回测区间:2024-01-01 至 2026-12-31
  - 基准指数:000300.SH
  - 交易标的:1595.SZ, 5130.SH, 5188.SH, 5180.SH, 1531.SZ, 5100.SH, 155.SZ, 516310.SH
  - 排序轮动,最大持股 1 只
  - 总排序方式:降序
  - 买入条件筛选:开启
  - 自定义因子:开启,2 个自定义因子(收盘价大于5日均线、均线评分)
  - 买入条件:5日涨跌幅(AND, 大于 0);5日涨跌幅(AND, 小于 5)
  - 排序因子:5日涨跌幅(正相关, 权重:1)
  - 止盈设置:涨幅3.0%触发,金额卖出1000元
"""
from xg_quant_backtrader_data.xg_quant_backtrader_data import xg_quant_backtrader_data
# 初始化客户端(用户账户信息)
client = xg_quant_backtrader_data(
    url="124.220.32.224",      # 数据库服务器
    port=8888,                 # 数据库端口
    user="小果",               # 用户名
    password="小果",           # 密码
    auth_code="小果"           # 认证token
)
print("\n" + "=" * 60)
print("📊 排序多因子回测")
print("=" * 60)
result = client.xg_rank_factor_backtrader(
    start_date='20240101',                                   # 回测开始日期
    end_date='20261231',                                     # 回测结束日期
    stock_list='115.SZ,510.SH,510.SH,580.SH,531.SZ,51.SH,1525.SZ,51.SH',  # 交易标的
    index_stock='000300.SH',                                 # 基准指数
    cash=100000,                                             # 初始资金
    comm=0.0001,                                             # 佣金费率
    min_commission=0,                                        # 最低佣金
    trader_type='百分比',                                    # 交易类型
    trader_value=0.5,                                        # 交易值
    hold_stock_limit=1,                                      # 最大持股 1 只
    is_open_user_factor=True,                                # 启用自定义因子
    user_factor_list='close,high,low,open,amount,volume,zdf',# 因子列表
    user_factor_cacal='{"收盘价大于5日均线": "IF(df[\'close\']>MA(df[\'close\'],5),True,False)", "均线评分": "IF(MA(df[\'close\'],3)>MA(df[\'close\'],5),25,0)+IF(MA(df[\'close\'],5)>MA(df[\'close\'],10),25,0)+IF(MA(df[\'close\'],10)>MA(df[\'close\'],20),25,0)+IF(MA(df[\'close\'],20)>MA(df[\'close\'],30),25,0)"}',
    is_open_buy_condi=True,                                  # 启用买入条件
    buy_condi_factor='{"5日涨跌幅": {"选择类型": "and", "选择方向": "大于", "值": 0}, "5日涨跌幅": {"选择类型": "and", "选择方向": "小于", "值": 5}}',
    rank_factor='{"5日涨跌幅": {"相关性": "负相关", "权重": 1}}',  # 排序因子
    total_factor_rank='降序',                                # 总因子排序方式
    sell_type='金额',                                        # 卖出类型
    sell_zdf=0.03,                                           # 止盈涨幅 3.0%
    sell_value=1000,                                         # 卖出金额 1000元
    max_workers=4,                                           # 最大进程数
    interval=1,                                              # 间隔
    min_hold_days=1,                                         # 最少持有天数
    risk_free_rate=0.02,                                     # 无风险利率
    slippage=0,                                              # 滑点
    enable_limit_up_down_filter=True,                        # 启用涨跌停过滤
    max_single_position_ratio=1.0                            # 最大单仓位比例
)
print("排序多因子回测结果:")
print(result['绩效'])

评论1

落花忆流年楼主
发表于 18 分钟前 | 显示全部楼层
不懂的问我就可以作者微信xg_quant

回复

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

客服专线

400-080-8112

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