相对动量和绝对动量,下面简单的介绍一下
绝对动量(Absolute Momentum)也叫时间序列动量。它只看自己:这只股票或基金自身现在的价格,比它过去一段时间(比如12个月)的价格高还是低。判断标准:如果当前价格 > 过去N个月前的价格,就是正动量(看涨);反之是负动量(看跌)。典型策略:趋势跟踪。涨了就买,跌了就卖,不关心别人。例子:现在股价1800元,比1年前1600元高,那它的绝对动量就是正的,趋势交易者会买入或持有。
相对动量(Relative Momentum):也叫横截面动量。它看的是排名:把一群股票放在一起比,谁过去涨得比同类更猛。判断标准:不关心自己涨没涨,只关心涨得是不是比别人多。典型策略:多空配对。买入过去表现最好的前20%股票,同时做空表现最差的后20%股票。
例子:今年所有股都跌了(绝对动量全是负的),但一个跌了5%,一个跌了20%。第一个相对动量就是正的,因为它在同类里跌得最少、跑赢了同行。
5日动量是我们常见的一个绝对动量的因子,具体我们检验一下这个因子是不是有效的因子,还要因子相关性等问题,第一步进入模型,当然也可以使用ai去分析,skill可以正常的使用,全部的ai工具都可以,比如WorkBuddy,trae等都可以使用,把这个内容发给ai就可以


/小果量化平台系统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会自动生成分析的框架代码

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

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

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

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


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

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

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

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

收益统计

{'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}
看一下策略排序的因子相关性和策略的关系,在选择买卖的因子基础上,涨跌幅基础上,排序从小到大买入,买入动量小的标的,相关性改成负相关就可以

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

回撤分析
年度统计

{'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,当某一类资产(如某国股票)因短期弱势被买入时,往往其他资产(如债券、商品)处于强势,形成天然对冲。这解释了为什么负相关策略在控制回撤的同时,还能获得高收益。
不懂的问我就可以,加我备注入群可以加入量化交流群

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

分析框架代码验证因子
"""
作者:小果
微信: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['绩效'])