AI助手多样化研究分享-多因子工作流的构建+回测
  iacky 15天前 90 0

一、多因子工作流的构建

1.1 使用模版 官网案例3多因子 来初始化工作流

1.2 简要说明三个因子

1.2.1 StopLossBreakMA5Factor

class StopLossBreakMA5Factor(Factor):
    def calculate(self, factors):
        close = factors['close']
        
        # 5日均线
        ma5 = MA(close, 5)
        
        # 当日是否在5日均线之下(True/False → 1/0)
        below_ma5_today = AS_FLOAT(close < ma5)
        
        # 昨日是否在5日均线之下
        below_ma5_yesterday = AS_FLOAT(DELAY(close, 1) < DELAY(ma5, 1))
        
        # “向下跌破5日均线”定义为:昨天在均线上方/相等,今天在均线下方
        just_break_down = AS_FLOAT((below_ma5_yesterday == 0) & (below_ma5_today == 1))
        
        # 构造0~1停损信号:
        #  - 刚刚跌破当日:1
        #  - 持续在均线下方天数越久,信号逐步从1线性衰减到0
        # 用连续在均线下方的天数做衰减基础
        consecutive_below = BARSLASTCOUNT(close < ma5)
        
        # 最多考虑N天衰减窗口,这里设为10天,可根据需要调整
        N = 10.0
        # 当刚跌破时 consecutive_below=1 → 信号接近1;
        # 当连续在均线下方达到N天时 → 信号衰减到0
        decay_signal = 1.0 - (consecutive_below - 1.0) / N
        
        # 限制在[0,1]区间
        decay_signal = MAX(0.0, MIN(1.0, decay_signal))
        
        # 只有在均线下方时才有停损信号,在均线上方时为0
        stop_loss_signal = IF(close < ma5, decay_signal, 0.0)
        
        # 起始几天均线不完整时,信号置0
        stop_loss_signal = IF(BARSLASTCOUNT(close == close) < 5, 0.0, stop_loss_signal)
        
        return stop_loss_signal

你这段代码实现的是一个“基于5日均线的止损衰减因子”,核心思想:

pandaai助手分析如下:
image.png

1.2.2 RANK((OPEN / DELAY(OPEN,5) - 1) * (VOLUME / MA(VOLUME,20)))

这创造了一个结合了“价格动量”和“成交量确认”的单一合成因子

  • OPEN / DELAY(OPEN,5) - 1:计算当前开盘价相对于5日前开盘价的百分比涨幅。这衡量了短期(5日)的价格动量
  • VOLUME / MA(VOLUME,20):计算当前成交量相对于其20日均量的比率。这衡量了成交量的异常活跃程度(放量或缩量)

1.2.3 TS_ZSCORE(FUTURE_RETURNS(CLOSE,5),20)

这个公式是计算一个未来收益的标准化分数

  • FUTURE_RETURNS(CLOSE,5)本身衡量的是从现在开始,未来5个交易日的预期(或回测时的已知)收益。在回测框架中,这是一个已知的未来结果;在预测框架中,它是目标变量
  • 标准化处理:TS_ZSCORE( …, 20)
    这个步骤旨在消除该股票自身历史波动水平的影响,将“未来5日收益率”这个绝对值,转化为相对于其自身近期历史表现的异常程度分数。z-score为正表示当期未来收益显著高于其近期平均水平,为负则表示显著低于

多因子一起来构建:价格动量、成交量、未来收益、止损。
image.png
启动工作流:
image.png
image.png

  • 可以使用图中的 【AI分析】 来看下此因子的效果及改进建议

  • 注意,多空组合最大回撤约20%,且夏普、信息比率为大幅负值,说明这里采用的是“空好多差”方向,与当前在因子方向设置中选择的“负向因子”定义是一致的——即高因子值对应未来收益更差,低因子值对应收益更好;如果你想做“做多高分组”的策略,需要在因子方向上取反。

  • 优点:

    预测能力极强:|IC|远高于0.05门槛,且IC分布集中在正区间,几乎没有失灵期。
    单调性优秀:从低组到高组,收益/超额收益呈近线性反向单调,区分度极大。
    稳定性高:IC波动率不大,IC_IR与整体IR均显著高于行业常见水平。
    风险可控:多空组合最大回撤约20%,在如此高年化收益背景下是可接受的。

  • 缺点与风险点:

    因子过强可能有“过拟合/样本偏好”的嫌疑,尤其是在单一市场阶段表现异常好时,要警惕未来回落。
    当前方向定义为“负向因子”,若在实盘中误用为“做多高分组”,收益将完全相反。
    多空组合夏普为负,说明构建方式或年化/回撤统计口径存在不对称(例如多空权重、费用/滑点设定等)需要进一步核查。
    回测区间(2025-01~2025-03)较短,仅覆盖一个市场阶段,样本外可靠性仍需验证。

  • 注意事项与改进建议:

    建议优先以“做多低因子值/做空高因子值”的方向使用该因子,或直接在参数中将因子方向从“0:负向”切换为“1:正向”并对因子取负,确保交易方向与统计结论一致。
    建议拉长因子分析区间(至少1–3年),观察在不同市场风格(上涨/下跌/震荡)下IC与分组单调性是否保持稳定,以排除阶段性失效风险。
    可进一步检查IC随滞后期的衰减情况(1日、5日、10日等),以优化调仓周期;当前设置为5日,如IC在短周期衰减明显,可考虑缩短至1–3日或延长至10日视曲线形态微调。
    为降低组合回撤,建议将该因子与其它风格因子(如市值、质量、低波动等)做多因子组合,控制对单一风格暴露过高的问题。
    若你计划用此因子直接驱动选股策略,建议在“分组数”和“股票池”上做敏感性测试:如将分组由5档调整为10档,或从“沪深全A”缩窄到中盘或某些行业,看单调性与IC是否依然稳健

二、回测阶段

2.1 利用AI助手写回测提示词,生成相应的回测节点

如下:我要根据当前工作流做股票回测,做多最高一组 每五天调一次仓,跌破五日线止损
image.png

2.2 生成回测节点,如有错误可以根据ai提示来修复,

如多次没有修复可以导出当前工作流的json文件寻求技术支持😄 pandaai的坚强的后盾们 背后的大神们。
image.png

2.3 再次 【启动工作流】 跑回测, 期间需要注意下 因子 时间 和 回测 时间的一致性

成功后 全屏查看回测结果
image.png

  • 优点方面:
  1. 收益与风险比极端优越:年化收益 100%+ 配合低于 10% 的回撤,收益/回撤比远大于 10,理论上极具吸引力。
  2. 风险控制优异:波动率约 0.41,最大回撤仅 -7.3%,配合极高的 Sharpe/Sortino,说明亏损区间极短且幅度有限。
  3. 对基准绝对压制:基准年化为负,而策略强势向上,信息比率极高,说明在回测期内几乎持续战胜指数。
  • 但从专业角度,这组指标也存在明显“太好”的信号,需要谨慎解读:
  1. 指标数值严重偏离常识区间:成熟股票多因子策略,在日频回测中,夏普 > 3 就已非常优秀,>5 就极罕见,而本策略夏普高达 300+,很可能是时间窗口极短、收益计算口径、无风险利率处理或年化方式导致的放大效应。
  2. 回测周期与样本量疑似偏短:在 2025-01-01 至 2025-03-31 这类短期区间内,少量交易日会被强行年化,容易把一次性收益放大成夸张的年化收益。
  3. 交易与成本建模可能过于理想:佣金、滑点、成交约束等现实 frictions 若未充分建模,会进一步夸大 Sharpe 和超额收益。
  4. 策略结构高度依赖因子与价格数据:多因子选股+等权配置+较高初始资金,如因子预处理、对数收益/简单收益口径有误,也会影响波动和回撤度量。
  • 注意事项与建议:
  1. 强烈建议先视作“实验性回测结果”,不要直接据此评估真实可投资价值。
  2. 建议在更长周期上重跑回测(至少 3–5 年)观察 Sharpe 是否回落到更合理的 1–3 区间,最大回撤是否保持在 10–20% 范围内。
  3. 仔细核查回测引擎设置:确认是否存在:
  4. 收益年化方式异常(例如按过少交易日乘以过大的年化因子)
  5. 无风险利率设定错误,导致 Sharpe 畸高
  6. 成本模型过于理想(佣金、滑点、涨跌停、流动性约束是否考虑)
  7. 做样本外与滚动回测:例如用 2020–2023 做训练/调参,2024–2025 做验证,看策略在未参与调参的区间表现是否依旧稳定。
  8. 结合更细节的回测输出(比如月度收益分布、持仓分布、单笔交易盈亏)检查是否存在集中风险或极端尾部事件被 “平均” 掩盖。

根据2在更长的周期上重跑就是负载超了。

  • 总结,这次在多个因子,价格动量、成交量、未来收益、止损等因子构建下 跑成回测,给主观到量化打开了一条可期的通路。后续因子特征工程到大模型的链路应该也能畅通无阻。

  • 问题:在多因子回测下,时间周期拉长可能回导致一些资源类的错误。有时也会出现【负载超荷,建议优化工作流】的情况。

    多因子 时间周期拉到一年左右,用高级服务器跑的
    image.png
    相应json已反馈上传

最后一次编辑于 15天前 0

暂无评论