如何开通基于 AI 打造的 A 股量化策略(下):特征工程与大模型决策落地

书接上回,上篇我们拆解了 AI 量化策略的三层核心骨架,完成了带缓存机制的行情数据模块搭建。本篇我们进入策略的核心环节:特征工程 与大模型决策表构建,手把手带你把原始行情转化为大模型可理解的市场语言,并通过精准的提示词设计,约束大模型输出稳定可执行的策略决策。


一、特征工程:把行情翻译成大模型能懂的语言

特征工程是连接原始行情与 AI 决策的桥梁。我们从最基础的价格数据出发,提取 7 类核心市场特征,覆盖收益、波动率、趋势、动量、趋势基准多个维度,为大模型提供充足的决策依据。

完整特征工程代码

bash 复制代码
feat = df.copy()

# 1. 日对数收益率 - 所有量化指标的计算基石
feat['ret'] = np.log(feat['close'] / feat['close'].shift(1))

# 2. 年化已实现波动率(20日滚动窗口)
feat['vol'] = feat['ret'].rolling(VOL_WIN).std() * np.sqrt(252)

# 3. 趋势得分:滚动均值 / 滚动标准差,衡量趋势强度与稳定性
rmean = feat['ret'].rolling(RET_WIN).mean()
rstd = feat['ret'].rolling(RET_WIN).std()
feat['trend'] = (rmean / (rstd + 1e-12)).clip(-5, 5)

# 4. 价格Z-score:当前价格相对于自身长期均值的偏离程度
ma = feat['close'].rolling(ZSCORE_WIN).mean()
sd = feat['close'].rolling(ZSCORE_WIN).std()
feat['z'] = ((feat['close'] - ma) / (sd + 1e-12)).clip(-6, 6)

# 5. 63日动量:近3个月累计收益
feat['mom63'] = feat['ret'].rolling(63).sum()

# 6. 短期波动率(5日滚动)
feat['vol5'] = feat['ret'].rolling(5).std() * np.sqrt(252)

# 7. 50日均线:中期趋势基准
feat['ma50'] = feat['close'].rolling(50).mean()

# 去除空值,保证后续计算有效
feat = feat.dropna()

特征设计逻辑说明

  • 日对数收益率:所有量化指标的计算基础,相比简单算术收益率更符合统计学特性,是波动率、动量、趋势类指标的统一输入。
  • 双波动率维度:同时保留 20 日中期波动率与 5 日短期波动率,既可以捕捉波动率的中长期水平,也能识别短期波动率突变。
  • 趋势得分:用收益均值除以同期标准差,兼顾趋势方向与波动稳定性,避免单边暴涨暴跌带来的虚假趋势信号。
  • 价格 Z-score:衡量当前价格在历史区间中的相对位置,识别价格偏离均值的程度,辅助判断超买超卖状态。
  • 63 日动量:对应约 3 个月的交易周期,捕捉 A 股市场常见的中期动量效应。

拓展建议:你可以引入更多技术指标丰富特征库,比如通过 ta-lib 库添加 RSI、MACD、布林带等。特征维度越丰富,大模型的决策依据就越充分。


二、构建大模型策略决策表

特征工程完成后,我们需要基于历史状态统计,让大模型输出对应每种市场状态的决策,形成可复用的策略表。

第一步:状态统计计算

首先计算每个市场状态对应的历史收益分布,作为大模型决策的统计依据。这里有一个关键设计:所有统计计算使用一日滞后,也就是用 T-1 日的特征对应 T 日的收益,从根源上避免未来函数偏差,保证策略逻辑在实盘环境中可复现。

第二步:大模型提示词设计

提示词是 AI 量化策略的核心,直接决定了大模型输出的质量与稳定性。我们需要精准框定模型的角色、任务边界与输出格式,避免模型自由发挥偏离策略目标。

以下是经过优化的系统提示词模板:

bash 复制代码
system_prompt = """
你是一个针对A股{symbol}({symbol_name})的纯多头风险管理策略决策者。

你的任务不是预测明天的涨跌方向。
你的任务是评估每个市场状态是否蕴含较高的下行风险,从而需要调整持仓水平。

对每个市场状态,输出 LONG(保持持仓)或 FLAT(降低持仓)。
- 当风险收益状态明确为正或中性时,使用 size 1.0
- 当状态略为正但存在不确定性时,使用 size 0.5
- FLAT = 预期回报明显为负或下行风险很高,仅在证据明确时谨慎使用

默认偏向:LONG。大多数状态应为 LONG。
绝不输出 SHORT。

仅返回严格的JSON格式,示例如下:
{"policy": [{"state": "状态标识", "action": "LONG|FLAT", "size": 0.5|1.0}]}
"""

提示词设计的三条核心原则

1. 显式重构任务边界

先明确告诉模型「不该做什么」,再说明「该做什么」。大模型对任务边界高度敏感,如果不明确禁止涨跌预测,模型很容易滑入方向预测模式,偏离风险管理的核心目标。

2. 设定默认行动偏向

明确要求「默认偏向 LONG,大多数状态应为 LONG」。这一设计抵消了大模型在不确定场景下天然保守的倾向。在具有长期正漂移的 A 股纯多头策略中,长期空仓本身就有很高的机会成本。

3. 严格输出格式约束

要求模型输出严格的 JSON 格式,并给出精确的字段 schema。配合代码中的重试机制,可以有效避免模型输出解释性文字、口语化内容,保证策略表可以被程序自动解析执行。


三、AI 量化策略的核心设计逻辑

很多人对 AI 量化有误解,觉得关键在于模型能不能精准预测涨跌。实际上,AI 量化的核心从来都不是预测,而是约束。

  • LONG_FULL_EXP、LONG_HALF_EXP、FLAT_EXP 三个常量,把大模型的定性判断翻译成可执行的持仓水平,是 AI 决策落地的核心桥梁。
  • 前复权行情数据,保证所有特征计算不会被除权缺口污染,从数据源端保证信号质量。
  • 一日滞后的统计设计,切断未来函数,让历史统计结论可以平移到实盘环境。
  • 严格 JSON 输出 + 重试机制,保证策略表可以稳定解析,不会因为模型输出格式波动导致策略中断。

任何一个环节放松要求,AI 带来的都不是效率提升,而是隐性的逻辑风险。

策略表构建完成后,建议先统计信号分布、持仓切换频率与解析失败率,确认模型既没有退化成只会单边看多的 "复读机",也没有因为过度谨慎而长期低持仓,再进行后续的优化与迭代。

投资有风险,入市需谨慎,本文仅做教学,不做投资建议。

相关推荐
估值探索者4 小时前
【Python量化系统工程实战 #08】从脚本到生产:量化系统上线 checklist 的最小闭环
java·开发语言·jvm·python·数据挖掘·数据·股票数据api接口
万年咸鱼4 小时前
解决C语言的内存释放机制
java·c语言·python
李可以量化4 小时前
如何开通基于 AI 打造的 A 股量化策略(上):三层策略骨架与代码落地
python
破芽5 小时前
python知识点整理02
开发语言·python
打工仔折腾 AI5 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
老歌老听老掉牙5 小时前
麻花钻锥面后刀面数学模型的完整推导与数值求解
python·钻头·后刀面
墨染天姬5 小时前
【人工智能训练师】python语法二
开发语言·人工智能·python
ikun_文7 小时前
Python高级特性
python
用户872185012437 小时前
港股投资者必备:三大数据源对比,哪种最适合实时行情与回测?
python