AI生成量化策略代码:模板、指标与提示词工程实战 在折腾量化策略的时候我踩过不少重复的坑先花半小时找一套策略模板再翻论坛复制一段 MACD 或 KDJ 指标公式最后还要手写回测代码验证效果。模板、指标、回测三件事看起来都不难但拼在一起往往要耗掉大半天。现在这类工作可以换一种思路策略模板、技术指标、甚至用于生成策略的提示词全都交给 AI 来生成你只需要描述清楚自己的交易想法。这篇文章就来完整拆解这套玩法从核心概念、环境准备到提示词设计、代码生成、回测验证和避坑指南一次性讲清楚。本文适合两类读者一是刚开始接触量化交易、想用 AI 提效的开发者二是已经有策略框架、想构建“需求一句话就能出代码”的提示词流水线的玩家。读完你至少能掌握三件事量化场景下提示词模板怎么写AI 生成指标代码的边界在哪里以及如何让 AI 生成的策略代码通过你的回测审查。1. 为什么量化交易也开始“让 AI 生成一切”1.1 传统量化开发流程的痛点传统量化策略开发通常是这样一条链路确定交易思路比如“金叉买入、死叉卖出”。寻找策略模板常见的双均线、MACD、布林带等模板散落在各篇博客和 GitHub 仓库中。复制指标计算公式再手动适配自己的数据格式。编写回测逻辑统计收益率、回撤、交易次数。反复调参重复第 3 到第 4 步。这条链路最大的问题不是某个环节特别难而是环节之间的“摩擦”太多。模板的代码风格不统一指标的参数名称可能和你数据里的列名对不上回测逻辑里还容易出现未来函数等隐蔽错误。对新手来说每一步都可能卡住。1.2 一个需求一句话剩下的交给 AI大语言模型出现后量化策略开发的方式发生了变化。现在可以把“策略思路描述”直接告诉 AI让 AI 完成模板组装、指标计算、回测函数编写等重复工作。比如你只需要说我想要一个双均线策略5 日均线上穿 20 日均线时买入下穿时卖出。AI 就能生成一套完整代码内容包括数据读取模块双均线指标计算模块信号生成模块向量化回测模块。这不是未来设想而是当前已经可以落地的实践。关键在于你如何设计提示词以及你是否能对 AI 生成的代码做结构化审查。1.3 模板、指标、提示词在 AI 量化里的分工在 AI 量化场景下这三个概念的分工很清楚模板策略的整体骨架决定代码的模块边界和运行流程。比如“数据读取 - 指标计算 - 信号生成 - 回测统计”就是一个固定流程。模板统一之后AI 生成的代码风格和结构也会稳定。指标策略里的核心数学公式例如均线、MACD、布林带、RSI。AI 生成指标代码并不难难的是让指标适配你的数据格式、处理 NaN 值、避免除零。提示词驱动 AI 干活的控制指令。提示词的质量直接决定输出代码的质量。在量化场景中提示词要包含数据格式、函数签名、输出约束等关键信息。所以真正的新玩法不是“找到完美模板”而是“设计一套让 AI 稳定产出代码的提示词规范”。2. 环境准备与工具链2.1 运行环境与项目结构本文示例以 Python 为主操作系统不限Windows、macOS、Linux 均可。建议使用 Python 3.9 及以上版本代码中会用到较新的类型标注语法。建议新建一个干净的目录结构如下ai-quant-demo/ ├── data/ │ ├── make_sample_data.py │ └── sample.csv ├── prompts/ │ ├── strategy_template.txt │ ├── indicator_template.txt │ └── review_template.txt ├── output/ │ └── generated_strategy.py ├── main.py └── requirements.txtdata目录存放演示数据prompts目录存放提示词模板output目录存放 AI 生成的策略代码main.py是调用大模型生成策略的入口程序。2.2 依赖安装本文的依赖非常少主要是数据处理相关库pandas2.0.0 numpy1.24.0 openai1.0.0安装命令pip install -r requirements.txt如果你希望用更专业的回测框架也可以后续替换为 backtrader 或 vectorbt但本文先用轻量的向量化回测来演示避免引入过多概念。2.3 LLM API 接入方式示例代码中默认调用 OpenAI 兼容接口。不同模型服务商的接口地址、模型名称存在差异这里使用环境变量隔离开import os from openai import OpenAI client OpenAI( api_keyos.getenv(LLM_API_KEY), base_urlos.getenv(LLM_BASE_URL) )建议创建.env文件并写入你自己的配置LLM_API_KEY你的密钥 LLM_BASE_URLhttps://api.你的服务商.com/v1 LLM_MODELgpt-4o-mini注意不要把自己的密钥提交到 Git 仓库中。.env文件应加入.gitignore。版本说明openai库的 API 形态在不同版本间会有差异如果你使用的服务商不是 OpenAI请以对应 SDK 的官方文档为准。3. 三个关键概念模板、指标、提示词3.1 策略模板AI 眼中的“策略骨架”策略模板不是一个具体的文件而是一套“流程约定”。在 AI 辅助开发的模式下模板的作用是让 AI 生成代码时保持模块边界清晰。我常用的模板流程如下数据加载读取 CSV 数据到DataFrame。指标计算在原始数据基础上增加技术指标列。信号生成根据指标列生成交易信号signal取值为 1、-1、0。持仓转换将信号转换为实际持仓position处理连续持仓的情况。回测统计根据持仓计算每日收益、累计净值、最大回撤等指标。用代码表达就是def load_data(path: str) - pd.DataFrame: ... def add_indicators(df: pd.DataFrame) - pd.DataFrame: ... def generate_signals(df: pd.DataFrame) - pd.DataFrame: ... def backtest(df: pd.DataFrame) - dict: ...当你把这个流程写进提示词模板后AI 生成的代码就会自动沿用这套结构。后续出现问题时你只要按模块排查即可。3.2 技术指标从公式到可执行代码技术指标本质是一组数学公式。以最简单的均线为例df[sma_5] df[close].rolling(window5).mean()MACD 指标相对复杂需要先计算 EMA再得到 DIF、DEA 和 MACD 柱ema_12 df[close].ewm(span12, adjustFalse).mean() ema_26 df[close].ewm(span26, adjustFalse).mean() df[dif] ema_12 - ema_26 df[dea] df[dif].ewm(span9, adjustFalse).mean() df[macd] (df[dif] - df[dea]) * 2AI 生成指标代码的难点不在于记住公式而在于以下几点数据排序均线、MACD 都是时序计算必须确保close列按时间升序排列。NaN 处理滚动窗口和 EMA 计算会在序列头部产生 NaN后续信号生成逻辑要容忍 NaN。参数可配置建议让 AI 将窗口参数提取为函数参数方便后续调参。3.3 提示词一句话需求与代码之间的翻译层在量化场景中提示词的设计远比“帮我写个策略”复杂。一条合格的量化提示词至少应该包含这些信息信息项说明示例数据格式数据文件有哪些列、什么类型data.csv包含date, open, high, low, close, volume策略规则明确的买卖条件5 日均线上穿 20 日均线买入下穿卖出函数签名AI 必须实现的函数add_indicators(df) - df输出要求信号列取值、回测返回内容signal取值为 1、-1、0约束条件不允许使用未来数据等信号必须在收盘后产生持仓收益要shift(1)提示词写得越具体AI 生成代码的稳定性就越高。4. 完整实战一句话生成双均线策略4.1 准备演示数据为了让教程可以完整复现我们先用随机游走生成一份模拟行情数据。创建一个data/make_sample_data.py文件# 文件路径data/make_sample_data.py import pandas as pd import numpy as np np.random.seed(42) date_range pd.date_range(2022-01-01, periods500, freqB) price 100 prices [] for _ in range(500): price * (1 np.random.normal(0.0005, 0.01)) prices.append(price) data pd.DataFrame({ date: date_range, open: prices, high: [p * 1.01 for p in prices], low: [p * 0.99 for p in prices], close: prices, volume: np.random.randint(10000, 50000, 500) }) data.to_csv(sample.csv, indexFalse) print(demo data saved to sample.csv)运行cd data python make_sample_data.py这段代码会生成 500 个交易日的模拟行情数据。固定随机种子后可以保证每次运行结果一致。4.2 设计量化策略提示词模板在prompts/strategy_template.txt中我设计了一个比较通用的提示词模板你是一名量化策略工程师。请根据以下需求生成完整的 Python 策略代码。 需求{user_requirement} 数据格式 - CSV 文件路径为 data/sample.csv - 列名依次为 date, open, high, low, close, volume - date 列是日期类型其余列为浮点数 代码要求 1. 使用 pandas 和 numpy不使用第三方量化平台专用 API。 2. 定义 add_indicators(df: pd.DataFrame) - pd.DataFrame在 DataFrame 中增加技术指标列。 3. 定义 generate_signals(df: pd.DataFrame) - pd.DataFrame新增 signal 列。 signal 取值为 1 表示买入-1 表示卖出0 表示持仓不动。 4. 定义 backtest(df: pd.DataFrame) - dict返回总收益率、最大回撤、交易次数。 5. 主程序入口读取 data/sample.csv依次调用上述函数并打印回测结果。 6. 禁止使用未来数据。当天信号只能在第二天生效策略收益计算必须使用 position.shift(1)。 7. 只输出 Python 代码不要输出解释文字。这个模板值得说明几点我不仅要求 AI 输出指标和信号还要求它“禁止使用未来数据”并明确指出position.shift(1)这是回测最重要的防腐层。函数签名固定之后后续运行、测试、审查都可以依赖统一的接口。要求只输出代码避免从大段解释中手动复制代码。4.3 调用 LLM 生成策略代码创建项目根目录下的main.py负责读取提示词模板、拼接用户需求、调用大模型接口、保存代码文件。# 文件路径main.py import os from pathlib import Path from openai import OpenAI client OpenAI( api_keyos.getenv(LLM_API_KEY), base_urlos.getenv(LLM_BASE_URL) ) PROMPT_PATH Path(prompts/strategy_template.txt) OUTPUT_PATH Path(output/generated_strategy.py) def load_prompt(user_requirement: str) - str: template PROMPT_PATH.read_text(encodingutf-8) return template.format(user_requirementuser_requirement) def generate_strategy(user_requirement: str) - str: prompt load_prompt(user_requirement) response client.chat.completions.create( modelos.getenv(LLM_MODEL, gpt-4o-mini), messages[ {role: system, content: 你是一名严谨的量化策略代码生成器。}, {role: user, content: prompt} ], temperature0.2 ) return response.choices[0].message.content def save_generated_code(code: str) - None: OUTPUT_PATH.parent.mkdir(exist_okTrue, parentsTrue) OUTPUT_PATH.write_text(code, encodingutf-8) print(fgenerated code saved to {OUTPUT_PATH}) if __name__ __main__: requirement 基于双均线策略5日均线上穿20日均线时买入下穿时卖出。 code generate_strategy(requirement) save_generated_code(code)运行之前确保环境变量已经配置好export LLM_API_KEY你的密钥 export LLM_BASE_URLhttps://api.你的服务商.com/v1 export LLM_MODELgpt-4o-mini然后运行python main.py程序会在output/目录下生成generated_strategy.py。4.4 人工审查并运行回测AI 生成的代码不是直接拿起来就用的必须人工审查后运行。下面是我用该提示词得到的一份参考代码它演示了 AI 在提示词约束下应该产出的最终形态# 文件路径output/generated_strategy.py import pandas as pd import numpy as np def load_data(path: str) - pd.DataFrame: df pd.read_csv(path, parse_dates[date], index_coldate) return df.sort_index() def add_indicators(df: pd.DataFrame) - pd.DataFrame: result df.copy() result[sma_5] result[close].rolling(window5).mean() result[sma_20] result[close].rolling(window20).mean() return result def generate_signals(df: pd.DataFrame) - pd.DataFrame: result df.copy() result[signal] 0 result.loc[result[sma_5] result[sma_20], signal] 1 result.loc[result[sma_5] result[sma_20], signal] -1 result[position] result[signal].replace(0, np.nan).ffill().fillna(0) return result def backtest(df: pd.DataFrame, initial_capital: float 100000.0) - dict: result df.copy() result[returns] result[close].pct_change().fillna(0) result[strategy_returns] result[position].shift(1) * result[returns] result[nav] initial_capital * (1 result[strategy_returns]).cumprod() total_return result[nav].iloc[-1] / initial_capital - 1 max_drawdown (result[nav] / result[nav].cummax() - 1).min() trade_count (result[position].diff().abs() 0).sum() return { total_return: total_return, max_drawdown: max_drawdown, trade_count: int(trade_count) } if __name__ __main__: df load_data(data/sample.csv) df add_indicators(df) df generate_signals(df) result backtest(df) print(result)这段代码可以直接运行python output/generated_strategy.py预期输出类似{total_return: 0.123, max_drawdown: -0.078, trade_count: 12}注意由于使用的是随机游走模拟数据具体数值会因随机种子和数据不同而变化不要把这些数字当作真实收益的依据。人工审查时重点关注几处add_indicators是否正确按时间序列计算均线position.shift(1)是否出现在收益计算中避免未来函数回测结果是否包含总收益率、最大回撤、交易次数。4.5 更换需求一句话生成 MACD 策略双均线跑通之后整个流程就可以复用了。现在把需求换一下交给 AI基于 MACD 策略DIF 上穿 DEA 时买入下穿时卖出只在 20 日均线之上时做多。提示词模板完全不变只需要修改main.py里的requirement变量即可。AI 大概率会生成类似下面的指标代码ema_12 result[close].ewm(span12, adjustFalse).mean() ema_26 result[close].ewm(span26, adjustFalse).mean() result[dif] ema_12 - ema_26 result[dea] result[dif].ewm(span9, adjustFalse).mean() result[macd] (result[dif] - result[dea]) * 2这里要提醒一点MACD 的信号生成必须加入持仓过滤条件避免在 20 日均线之下还做多。如果 AI 生成的信号逻辑里没有这个条件你需要在审查阶段补充result.loc[result[close] result[sma_20], signal] 0所以在整个流程里提示词负责提高效率人工负责兜住逻辑底线。4.6 把生成结果沉淀为模板当 AI 生成的代码经过人工审查、回测验证后下一步是把有效经验沉淀回模板。常见的做法有两种函数级模板把经过验证的add_indicators、generate_signals、backtest函数保存为本地模块下次生成时直接复用。提示词级模板把你发现的问题补充进prompts/strategy_template.txt例如增加“MACD 信号必须增加趋势过滤”的约束。沉淀模板最大的好处是同一个团队或同一个项目里AI 生成的代码风格会越来越一致整体可维护性大幅提升。5. 常见问题与排查思路问题现象常见原因解决思路LLM 返回的不是代码而是解释提示词约束不严或模型理解偏差在提示词尾部强调“只输出 Python 代码不要输出解释”生成代码运行时缺少导入模型省略了 import 语句在提示词中明确要求“代码必须包含完整的 import 语句”回测收益率高得离谱使用了未来数据如信号当天生效检查收益计算是否使用position.shift(1)指标结果全是 NaN数据未排序或滚动窗口参数过大在数据加载后执行sort_index()并检查数据长度API 调用报错base_url、model 或密钥配置错误检查环境变量确认模型服务商文档中的端点地址生成代码风格每次都不一样缺少函数签名约束在模板中固定函数名和返回类型下面展开两个高频问题。未来函数问题。回测中如果当天收盘后产生信号当天就以收盘价成交属于“未来函数”因为信号发生和成交无法在同一时刻完成。常见的修正方式是result[strategy_returns] result[position].shift(1) * result[returns]也就是持有仓位一天后才产生当日收益。这个细节在提示词模板里已经写清楚了但 AI 偶尔会遗漏人工审查时必须检查。NaN 导致的信号丢失。均线刚计算时前 19 个交易日的sma_20是 NaN。如果generate_signals直接比较sma_5 sma_20会产生 False 从而持有空仓这不是错误但可能不符合你的预期。如果希望前 20 天不交易可以用(df[sma_20].notna()) (df[sma_5] df[sma_20])这样的过滤条件并在提示词里写明“信号列在指标未就绪时保持 0”。6. 最佳实践与工程建议6.1 提示词工程在量化场景中的实战要点量化提示词和其他编程提示词最大的不同在于它对“可验证性”要求很高。我建议把需求拆分成四要素数据描述文件路径、列名、数据类型。策略规则买卖条件、过滤条件、是否允许做空。接口约束函数名、参数、返回值类型。防坑条款禁止未来数据、必须排序、NaN 处理、只输出代码。每次生成代码之前都把四要素写进提示词。长期积累之后你的提示词模板本身就是一套团队级的技术文档。6.2 AI 生成代码的审查清单不要因为代码是 AI 生成的就跳过审查。我的审查顺序是检查 imports 是否齐全检查数据加载后是否按时间排序检查add_indicators中是否存在除零风险检查generate_signals的信号条件是否符合策略描述检查backtest里的收益计算是否用了shift(1)检查最大回撤计算是否使用累计净值而非每日收益。最后一次检查尤其重要。最大回撤应该基于净值曲线计算max_drawdown (result[nav] / result[nav].cummax() - 1).min()如果写成对收益率序列做累乘后再取最小值结果往往是不对的。6.3 回测、风控与合规边界再强调一次AI 生成的策略代码只是工具不是投资建议。回测结果不能代表未来收益尤其是本文使用的随机游走数据仅用于演示流程。在实际项目中请遵守以下原则先模拟盘验证至少跑一段时间模拟盘再考虑小资金实盘。设置止损在策略代码中加入止损逻辑不要把所有资金押在一个策略上。控制参数过拟合不要在同一个数据集上反复调参尽量使用时间序列交叉验证。合规边界量化交易涉及实盘操作时务必遵守所在地区和平台的规则AI 生成的“收益承诺”内容一律不可信。7. 总结与学习路线7.1 本文核心收获通过这篇文章你应该已经掌握了一条完整的 AI 量化提效链路理解量化场景下模板、指标、提示词三者的分工会设计量化策略提示词模板明确数据格式、函数签名和防未来函数条款能通过 LLM API 自动生成策略代码会运行向量化回测并人工审查关键点。7.2 下一步学习建议如果这套流程已经跑通下一步可以继续深入学习更专业的回测框架比如 backtrader、vectorbt理解逐笔撮合与资金管理研究提示词工程中的函数调用Function Calling让 AI 直接返回结构化参数而不是代码尝试用 AI 辅助生成因子库再用机器学习模型做因子组合但务必重视数据泄露和过拟合问题如果你主要玩通达信或同花顺也可以让 AI 生成平台公式语法原理和生成 Python 代码类似只要在提示词中指定公式语法规则即可。7.3 最后一点提醒整个流程真正有价值的部分不是 AI 帮你写代码而是你脑中那个交易想法本身。提示词只是把想法变成可执行代码的翻译器回测只是验证想法的工具。建议先从最简单的双均线策略开始跑通“一句话需求 - 提示词 - AI 生成 - 人工审查 - 回测验证 - 沉淀模板”这个循环再逐步增加策略复杂度。技术只是手段稳定可验证的策略逻辑才是量化交易的核心。