(一)第一阶段:从构想到收敛——AI辅助下的因子筛选与聚焦
- 策略构思的演进与精确化
在初步构想了一个包含趋势、动量、波动率、量价等多维度的复杂因子库后,我通过AI助手进行了密集的回测与归因分析。经过多轮“假设-回测-分析”的快速迭代,AI的绩效归因报告清晰显示,因子的简洁性与有效性往往比数量更重要。基于此洞见,我将策略描述精炼为:
“在螺纹钢主力合约上,构建一个由三类核心因子驱动的中低频趋势跟踪策略: - 价格趋势因子:作为方向锚,识别并量化中期趋势。
- 波动率因子:作为风险调节器,在高波动市场抑制风险暴露。
- 成交量因子:作为信号置信度放大器,在放量时增强趋势信号。
请生成一个工作流,实现这三个因子的计算、标准化与集成,并包含基于波动率的动态仓位管理模块。”
- AI生成的核心三因子策略框架
AI助手基于这一清晰、聚焦的指令,在更短时间内生成了一个结构更紧凑、逻辑链条更清晰的工作流。与之前复杂的多因子体系相比,此框架直指策略核心,避免了因子间可能存在的冗余与相互抵消。
生成的核心代码结构概览:
数据准备
def prepare_data(close, high, low, volume):
# 准备价量数据
pass
=== 核心三因子计算模块 ===
def calculate_core_factors(df):
# 1. 价格趋势因子
ma_short = df[‘close’].rolling(window=10).mean()
ma_long = df[‘close’].rolling(window=40).mean()
df[‘factor_trend’] = (ma_short - ma_long) / ma_long # 均线差异率,衡量趋势强度与方向
# 2. 波动率因子 (风险调节)
daily_ret = df[‘close’].pct_change()
vol_20d = daily_ret.rolling(window=20).std()
# 在60日窗口内进行Min-Max归一化,将波动率映射到[0,1],1代表近期最高波动
df[‘factor_vol’] = vol_20d.rolling(window=60).apply(lambda x: (x.iloc[-1] - x.min()) / (x.max() - x.min()) if x.max() > x.min() else 0.5)
# 3. 成交量因子 (信心增强)
volume_ma_10 = df[‘volume’].rolling(window=10).mean()
df[‘factor_volume_raw’] = df[‘volume’] / volume_ma_10
# 将量比映射到[0,1]区间,1代表显著放量
df[‘factor_volume’] = df[‘factor_volume_raw’].clip(lower=0.5, upper=1.5).apply(lambda x: (x - 0.5) / (1.5 - 0.5)).clip(0, 1)
return df
动态仓位计算模块
def _calc_target_hands(base_position, factor_vol):
# 高波动时降低仓位
volatility_discount = 1.0 - factor_vol * 0.5 # 波动率因子为1时,仓位最大削减50%
return max(1, int(base_position * volatility_discount))
(二)第二阶段:核心三因子的深度解构与经济逻辑
在AI生成的基础代码上,通过交互式优化,最终确定了以下三个支柱性因子,它们构成了策略的“黄金三角”。
- 价格趋势因子 (Price Trend Factor) - 策略的“指南针”
数据与形式:基于收盘价,计算 10日均线与40日均线的差异率 (MA10 - MA40) / MA40。正值表示短期均线在长期均线之上,处于多头趋势。
AI优化点:AI建议采用差异率而非绝对差值,消除了价格尺度的影响,使该因子在不同价位合约间具有可比性。
经济含义与用途:这是策略的核心方向性指标。它不仅决定了开仓的多空方向(因子为正做多,为负做空),其绝对值的大小更直接量化了趋势的强度,是仓位分配的首要依据。 - 波动率因子 (Volatility Factor) - 策略的“阻尼器”
数据与形式:基于日收益率的20日滚动标准差,衡量近期价格波动幅度。关键步骤是将其在过去60日的窗口内进行Min-Max归一化,得到介于0到1之间的值。
AI优化点:AI实现了滚动窗口内的动态归一化,使得“高波动”的定义是自适应、与时俱进的,避免了固定阈值的不适应性。
经济含义与用途:这是策略的核心风险调节器。其用途体现在两个层面:
信号层面:在信号合成时,高波动值(接近1)将削弱由趋势因子产生的多空信号强度,因为高波动环境下的趋势信号可靠性降低。
仓位层面:通过 _calc_target_hands函数,直接将波动率因子转化为仓位折扣系数,实现高波动时自动、定量地减仓,是控制最大回撤的关键。 - 成交量因子 (Volume / Liquidity Factor) - 策略的“放大器”
数据与形式:计算当日成交量与过去10日均值量的比值(量比),并将其平滑映射到[0, 1]区间。接近1表示显著放量,接近0表示显著缩量。
AI优化点:AI帮助设计了非线性映射函数,对温和放缩量(如0.8-1.2)区间进行平滑处理,仅在明显异常放量或缩量时给出极值信号,避免了因成交量正常波动带来的信号抖动。
经济含义与用途:这是策略的信号置信度调节器。“价升量增”是趋势健康延续的经典特征。因此,当趋势因子发出做多信号且成交量因子显示放量(值>0.5)时,该信号得到增强;反之,在缩量上涨时,信号会被减弱。这有效过滤了部分无量空涨的假突破。
(三)第三阶段:因子的智能集成与动态决策 - 信号的合成逻辑
AI助手协助我将三个因子以清晰的方式整合进决策流程:
原始信号强度 = 价格趋势因子 (决定方向与基础强度)
风险调整后信号 = 原始信号强度 * (1 - 波动率因子 * 衰减系数)
最终交易信号 = 风险调整后信号 * (0.8 + 0.4 * 成交量因子) # 量能在0.8-1.2之间调节
AI协作的价值:AI不仅实现了这个逻辑,还自动生成了不同市场环境(高波动缩量、低波动放量等)下的信号模拟,让我直观理解各因子的交互影响。 - 权重的内生性与动态性
与之前需要人为设定静态权重不同,本策略的“权重”是内生、动态且非线性的:
波动率因子:通过乘法折扣直接作用于信号强度和最终仓位,其“权重”体现在预设的衰减系数(如0.5)上,这是一个经过回测优化的风险参数。
成交量因子:以乘数形式在固定区间内调节信号,其“权重”已内嵌在映射函数的上下界中。
AI的优化角色:AI助手的核心任务从“寻找静态最优权重”转变为优化风险衰减系数和成交量映射曲线等关键参数,使策略能自适应不同市场环境。 - 在AI辅助下的回测验证
使用此三因子框架进行回测后,AI生成的绩效归因报告一目了然:
趋势因子是主要的收益来源,清晰地捕捉了几段主要趋势行情。
波动率因子是主要的回撤控制来源,报告明确标注了它在几次市场暴跌前成功降低了仓位。
成交量因子小幅提升了胜率与盈亏比,通过过滤假信号改善了交易质量。
这一清晰的正反馈,证实了从复杂因子库到精简核心组合的收敛是正确且高效的,完美体现了AI在策略研究中的“快速假设验证”与“聚焦核心矛盾”的价值。