AI一句话生成量化策略:提示词工程+Python回测实战
很多人听到“量化交易”四个字,第一反应是数学、编程、金融三座大山压过来。但最近一段时间,AI 辅助编程工具越来越成熟,一个很现实的变化是:策略模板、技术指标、甚至提示词本身,都可以让 AI 来写,人只需要把需求说清楚。这个标题里的“你只说一句话”,表面看是省事,本质上却是一个新的工作方式:从“手写代码”变成“描述意图 + 验证结果”。
这篇文章会围绕一个核心场景展开:你给 AI 一句自然语言描述,例如“我想做一个双均线策略,在日线级别跑回测”,AI 帮你生成策略框架、指标计算代码、参数配置模板,甚至生成一套用于后续迭代优化的提示词模板。整个过程听起来很爽,但真正决定成败的,不是 AI 能不能生成代码,而是你会不会把需求说清楚,以及敢不敢把 AI 写的代码拿去做验证。
文章会先讲清楚模板、指标、提示词这三样东西在量化交易里的真实角色,再给出一套从“一句话需求”到“可运行回测脚本”的完整操作流程。你可以理解为:这是一篇把提示词工程、Python 量化回测、代码审查思路串在一起的实战笔记,而不是一篇教你“躺着赚钱”的爽文。
1. 这篇文章真正要解决的问题
很多人对“AI 量化交易”有两个极端误解。一种认为 AI 能直接炒股赚钱,输入一句话就能躺着收钱;另一种认为 AI 生成的代码全是垃圾,根本不能用于真实交易。两个极端都不对。
从技术角度看,AI 在量化交易里能承担的真实工作,是把重复性的编码劳动自动化。一个量化策略从想法到落地,通常包含五个环节:
- 策略逻辑描述:用自然语言说清楚买卖规则。
- 策略模板搭建:回测框架、数据加载、交易记录、绩效统计。
- 指标计算:均线、RSI、布林带等基础技术指标。
- 参数配置:标的、周期、手续费、滑点等。
- 结果分析和迭代:根据回测数据调整策略。
传统做法里,这五步都要人来写。但现在,AI 至少可以承担第 2、3、4 步的大部分工作。尤其是模板和指标,这两类代码高度模式化,AI 见过的开源案例远比个人开发者多,生成质量往往不差。
这篇文章要解决的,就是三件事:
- 如何用一句话把策略意图描述清楚,让 AI 知道该生成什么。
- 如何让 AI 自主生成策略模板和技术指标代码,而不是自己一行行手写。
- 如何验证 AI 生成的代码能不能跑、跑出来的结果有没有参考价值。
所以,这篇内容适合谁?适合刚接触量化交易,想用 Python 跑通第一个回测的开发者;也适合已经在写策略,但烦透了重复搭建模板、调试指标公式的人。它不适合那些指望 AI 直接输出“明天买什么”的读者——那不是技术,那是玄学。
2. 模板、指标、提示词,三者在量化交易里的真实角色
在进入实操之前,先把三个概念说透。表面看它们都是“AI 能生成的东西”,但在量化交易这套体系里,它们各自解决的问题完全不同。
2.1 模板:交易系统的骨架
策略模板是量化项目的工程框架。它不关心具体买卖逻辑,只关心“一次回测需要哪些环节”。一个标准的回测模板通常包括:
- 数据加载模块:读取 OHLCV 数据。
- 指标计算模块:在数据基础上计算技术指标。
- 信号生成模块:根据指标和规则生成买入、卖出信号。
- 回测引擎模块:模拟交易,计算持仓、资金变化。
- 绩效评估模块:输出收益率、夏普比率、最大回撤等指标。
模板的价值在于稳定和复用。没有模板的时候,每写一个新策略都要重新搭一遍数据读取、循环交易、结果统计的框架。有了模板,一个策略只需要改动信号生成和指标计算两个地方。
AI 在生成模板方面特别擅长,因为回测框架的代码结构高度通用,GitHub 和开源社区里有大量样本可参考。你甚至不需要指定用哪个框架,只要说清楚“用 Python + pandas 写一个简单的双均线回测”,AI 就能给出一个像模像样的骨架。
2.2 指标:策略的眼睛
技术指标是量化策略里“看盘”的数学表达。均线代表趋势方向,RSI 代表超买超卖,布林带代表波动区间。指标不是策略本身,但它决定了信号从哪来。
写指标代码有一个很容易忽略的点:边界处理和除零保护。比如计算 RSI 时,如果某一天涨跌幅为 0,公式里会出现除以 0 的情况;计算移动平均时,前 N 天的数据是 NaN,需要决定是丢弃还是填充。这些细节,新手手写经常出错,而 AI 在生成代码时会自动处理一部分,但你必须检查它处理得对不对。
2.3 提示词:人与 AI 的接口
提示词在量化交易里往往被忽略。很多人以为提示词就是“帮我把代码写出来”,但实际上,提示词的质量直接决定生成代码的质量。在“一句话生成策略”这个场景里,提示词扮演三个角色:
- 需求描述:告诉 AI 策略逻辑是什么。
- 约束条件:告诉 AI 用哪个框架、什么语言、输出什么格式。
- 迭代指令:告诉 AI 下一步怎么优化。
更关键的是,提示词本身也可以模板化。你可以把“策略生成提示词”“指标生成提示词”“代码审查提示词”做成一套固定模板,以后每次写新策略,只需要替换中间的策略描述部分。这就是标题里说的“提示词全让 AI 自己生成”的含义——AI 不仅生成交易代码,还生成一套帮你继续使用 AI 的模板。
3. 一句话需求如何拆解为 AI 可执行的任务
“你只说一句话”这句话有误导性。真实情况是,你可以只说一句话,但这一句话必须包含足够的信息,否则 AI 生成的东西大概率不能直接用。
把一句话需求拆解成 AI 能执行的任务,背后是提示词工程里的一个核心方法:角色 + 任务 + 约束 + 示例。在量化交易场景下,我们可以把这个方法拆成四个要素。
3.1 角色设定
告诉 AI 它是什么角色,比如“你是一个 Python 量化策略开发者”。角色设定能让 AI 使用更贴合量化领域的术语和代码习惯。
3.2 任务描述
明确告诉 AI 要生成什么,比如“生成一个双均线策略回测代码”。任务描述要具体,不要只说“写一个策略”,而要说明:
- 策略类型:双均线、突破、均值回归。
- 数据周期:日线、分钟线。
- 标的范围:单标的还是多标的。
- 输出要求:回测结果还是信号列表。
3.3 约束条件
这是最容易遗漏的部分。包括:
- 编程语言:Python。
- 依赖库:pandas、numpy。
- 数据格式:CSV,包含 date、open、high、low、close、volume 字段。
- 交易费用:手续费、滑点。
- 输出格式:控制台输出还是生成报告文件。
约束条件越多,AI 生成代码的可用性越高。但也不能无限堆条件,否则 AI 会顾此失彼。最稳妥的做法是把硬性约束写清楚,把可实现但不关键的细节交给 AI 自己决定。
3.4 示例引导
提示词里带一小段输入输出格式示例,能大幅降低 AI 的理解偏差。比如告诉它“输入是 CSV 文件,输出是收益曲线和交易记录表”,比你描述半天“要可视化结果”有用得多。
下面是一段可以直接复制使用的策略生成提示词模板:
你是一个 Python 量化策略开发者。请根据以下要求生成完整的回测代码。 策略逻辑: 当 5 日均线上穿 20 日均线时买入,当 5 日均线下穿 20 日均线时卖出。 技术要求: 1. 使用 Python 编写,依赖库仅使用 pandas 和 numpy。 2. 数据从本地 CSV 文件读取,文件包含 date, open, high, low, close, volume 字段。 3. 交易时考虑手续费万分之三,滑点按 0.01 元计算。 4. 初始资金 100000 元,每次满仓买入。 5. 输出最终资金、总收益率、最大回撤、胜率,以及每笔交易的明细。 请把代码整合为一个可运行的 Python 脚本,并在代码中加好中文注释。这样一段提示词,就是把“一句话需求”变成了“AI 可执行任务”。核心技巧是:把你自己脑中的隐含信息显式化。你心里知道数据是 CSV 格式,但 AI 不知道;你知道手续费是万三,但 AI 可能默认是 0。这些隐含信息,才是决定代码质量的关键。
另外一个高级用法是让 AI 自己补全提示词。你可以先给 AI 一句话“我想做双均线策略”,然后问它:“为了生成可运行的回测代码,你需要我补充哪些信息?请以提问清单的方式列出。”AI 会问数据格式、周期、手续费、滑点等问题。你把答案填回去,再让 AI 生成代码。这个过程,本质上就是 AI 在帮你完成需求结构化。
4. 环境准备与前置条件
在让 AI 生成代码之前,先把本地环境准备好。这样 AI 生成代码后,你可以立刻运行验证,而不是浪费时间在装环境上。
本文示例使用 Python 3.8 以上版本,核心依赖是 pandas 和 numpy。推荐使用虚拟环境管理依赖,避免污染系统 Python。
4.1 安装 Python 与虚拟环境
如果你使用的是 Anaconda,创建一个新环境即可:
conda create -n quant python=3.10 conda activate quant如果使用原生 Python,可以用 venv:
python -m venv quant_env # Windows quant_env\Scripts\activate # macOS / Linux source quant_env/bin/activate4.2 安装依赖库
本文示例只需要三个库:
pip install pandas numpy matplotlibpandas 用于数据处理,numpy 用于数值计算,matplotlib 用于画收益曲线图。
请注意:版本请以实际安装为准。本文示例代码只使用了这几个库最稳定的 API,理论上 pandas 1.x 和 2.x 都能运行,不需要特地去锁定一个具体版本。
4.3 准备样例数据
为了让 AI 生成的代码能直接运行,你还需要一份 CSV 格式的历史行情数据。可以从一些公开数据源下载,也可以自己构造一份小型样例数据用于测试。
下面是一段生成样例数据的 Python 脚本,它基于随机游走模拟 200 个交易日的 OHLCV 数据:
# 文件路径:generate_sample_data.py import numpy as np import pandas as pd np.random.seed(42) # 生成 200 个交易日 dates = pd.date_range(start="2024-01-01", periods=200, freq="B") # 模拟价格随机游走 returns = np.random.normal(0.0005, 0.01, size=200) close = 100 * np.exp(np.cumsum(returns)) open_ = close * (1 + np.random.normal(0, 0.002, size=200)) high = np.maximum(open_, close) * (1 + np.random.normal(0, 0.002, size=200)) low = np.minimum(open_, close) * (1 - np.random.normal(0, 0.002, size=200)) volume = np.random.randint(10000, 50000, size=200) df = pd.DataFrame({ "date": dates.strftime("%Y-%m-%d"), "open": open_.round(2), "high": high.round(2), "low": low.round(2), "close": close.round(2), "volume": volume, }) df.to_csv("sample_data.csv", index=False) print("样例数据已生成:sample_data.csv") print(df.head())运行这段脚本:
python generate_sample_data.py在写提示词时,我们需要把这个数据格式告诉 AI,例如“数据从 sample_data.csv 读取,包含 date, open, high, low, close, volume 字段”。这样 AI 生成的代码就不会因为字段名不对而报错。
5. 让 AI 生成策略模板与指标代码的完整流程
环境准备好后,就可以开始和 AI 对话了。这一节用一个完整的案例,演示从“一句话需求”到“可运行回测脚本”的全过程。
5.1 第一轮:让 AI 生成策略模板
我们使用上一节准备好的提示词模板,向 AI 发起请求。这里以双均线策略为例,完整的提示词可以参考第 3 节。AI 生成的代码通常是一个完整的 Python 脚本,结构大致如下:
# 文件路径:ma_cross_strategy.py import pandas as pd import numpy as np def load_data(file_path): """加载 CSV 行情数据""" df = pd.read_csv(file_path, parse_dates=["date"]) df = df.sort_values("date").reset_index(drop=True) return df def calculate_ma(df, short_window=5, long_window=20): """计算均线指标""" df["ma_short"] = df["close"].rolling(window=short_window).mean() df["ma_long"] = df["close"].rolling(window=long_window).mean() return df def generate_signals(df): """根据均线交叉生成交易信号:1 表示买入,-1 表示卖出""" df["signal"] = 0 # 金叉:短期均线上穿长期均线 df.loc[df["ma_short"] > df["ma_long"], "signal"] = 1 # 死叉:短期均线下穿长期均线 df.loc[df["ma_short"] < df["ma_long"], "signal"] = -1 # 通过 diff 找到真正发生交叉的日期 df["position"] = df["signal"].diff().fillna(0) return df def backtest(df, initial_capital=100000, commission_rate=0.0003, slippage=0.01): """回测主逻辑""" capital = initial_capital position = 0 # 0 表示空仓,1 表示持仓 trade_records = [] for idx, row in df.iterrows(): if row["position"] == 1 and position == 0: # 买入 price = row["close"] + slippage shares = capital // (price * (1 + commission_rate)) cost = shares * price * (1 + commission_rate) if shares > 0: capital -= cost position = 1 trade_records.append({ "date": row["date"], "action": "BUY", "price": price, "shares": shares, }) elif row["position"] == -1 and position == 1: # 卖出 price = row["close"] - slippage income = shares * price * (1 - commission_rate) capital += income position = 0 trade_records.append({ "date": row["date"], "action": "SELL", "price": price, "shares": shares, }) return capital, trade_records if __name__ == "__main__": df = load_data("sample_data.csv") df = calculate_ma(df) df = generate_signals(df) final_capital, trades = backtest(df) print(f"最终资金: {final_capital:.2f}") print(f"总收益率: {(final_capital / 100000 - 1) * 100:.2f}%") print(f"交易次数: {len(trades)}") if trades: print("交易明细:") for trade in trades: print(trade)代码生成后,先不要急着运行,按下面顺序做一轮人工检查:
- 数据字段是否匹配 CSV 文件。
- 信号计算逻辑是否符合策略描述。
- 回测是否考虑了手续费和滑点。
- 是否有除零风险或空值处理。
检查无误后,运行脚本:
python ma_cross_strategy.py这段代码虽然简单,但它把“模板”的价值体现得很清楚:数据加载、信号生成、回测引擎、结果输出四层结构一目了然。后续换策略时,只需要改calculate_ma和generate_signals两个函数。
5.2 第二轮:让 AI 生成技术指标代码
有了模板之后,你可能会想加一个 RSI 指标,作为双均线信号的过滤器。这时,不需要让 AI 重写整个回测脚本,只需要让它生成一个独立的指标函数,然后手动并入模板。
提示词可以这样写:
请生成一个 RSI 指标计算函数,使用 pandas 实现。 要求: 1. 函数签名:def calculate_rsi(close: pd.Series, period: int = 14) -> pd.Series 2. 使用 Wilder 平滑方法计算 RSI。 3. 处理除零情况:当平均下跌幅度为 0 时,RSI 返回 100。 4. 返回与输入等长的 Series,前 period 个值为 NaN。 5. 添加中文注释。AI 生成的代码类似于:
def calculate_rsi(close: pd.Series, period: int = 14) -> pd.Series: """ 使用 Wilder 平滑方法计算 RSI。 RSI = 100 - 100 / (1 + RS) RS = 平均上涨幅度 / 平均下跌幅度 """ delta = close.diff() gain = delta.clip(lower=0) loss = -delta.clip(upper=0) # Wilder 平滑:使用 ewm 的 alpha=1/period avg_gain = gain.ewm(alpha=1/period, adjust=False).mean() avg_loss = loss.ewm(alpha=1/period, adjust=False).mean() rs = avg_gain / avg_loss # 处理除零:平均下跌幅为 0 时,RSI 视为 100 rsi = 100 - (100 / (1 + rs)) rsi[avg_loss == 0] = 100 return rsi这段代码有两个细节值得注意。第一,delta.clip和-delta.clip的使用方式,比np.where(delta > 0, delta, 0)更简洁。第二,ewm(alpha=1/period, adjust=False)实现的是 Wilder 平滑,而不是简单移动平均,这是 RSI 计算里的常见坑。AI 在这个细节上处理得不错,但你仍然需要自己验证结果是否符合预期。
把calculate_rsi函数并入之前的回测模板,然后在generate_signals里加一条规则:RSI 大于 70 不买入,RSI 小于 30 不卖出。这样一个简单的“指标过滤”策略就完成了。
这轮操作演示了一个重要工作流:模板和指标分开生成,然后人工组装。专职的 AI 提示词模板并不是让 AI 一上来就生成一个 500 行的完整项目,而是把它拆成一个个小任务,每个小任务生成一个可测试的单元。这样每个单元都可以单独验证,出了问题也容易定位。
5.3 第三轮:让 AI 生成提示词模板
这一轮比较特别,它是“让 AI 生成 AI 的使用说明书”。你可以让 AI 推荐一套在后续迭代中使用的提示词模板,比如:
你是提示词工程专家。请为以下场景设计 5 个提示词模板: 1. 策略生成:输入策略描述,输出 Python 回测代码。 2. 指标生成:输入指标名称和参数,输出指标计算函数。 3. 代码审查:输入代码,输出潜在 bug 和改进建议。 4. 参数优化:输入策略代码,输出可调参数清单和优化建议。 5. 回测分析:输入回测结果,输出绩效解读和风险提示。 每个模板需要包含角色、任务、约束三个部分,以 JSON 格式输出。AI 返回的结果可能长这样:
{ "strategy_generation": { "role": "你是 Python 量化策略开发者", "task": "根据策略描述生成完整回测代码", "constraints": [ "使用 pandas 和 numpy", "数据字段为 date, open, high, low, close, volume", "手续费万三,滑点 0.01", "输出最终资金、收益率、最大回撤、胜率" ] }, "indicator_generation": { "role": "你是技术指标代码专家", "task": "根据指标名称和参数生成计算函数", "constraints": [ "使用 pandas 实现", "处理边界值和除零情况", "添加中文注释" ] }, "code_review": { "role": "你是资深量化系统架构师", "task": "审查代码并指出潜在问题", "constraints": [ "重点关注信号计算、仓位管理、手续费计算", "指出可能产生错误结果的情况", "给出修改建议" ] }, "parameter_optimization": { "role": "你是量化策略研究员", "task": "分析策略代码中的可调参数", "constraints": [ "区分核心参数和次要参数", "说明每个参数的意义和取值范围", "警惕过拟合风险" ] }, "backtest_analysis": { "role": "你是量化回测结果分析师", "task": "解读回测报告中的关键指标", "constraints": [ "关注收益率、最大回撤、夏普比率、胜率", "指出策略可能存在的风险", "给出改进建议" ] } }把这套 JSON 保存成prompt_templates.json,以后每次开发新策略,都可以从里面取出对应的模板,替换策略描述,立即使用。这就实现了“让 AI 自己生成提示词模板”的目标。
6. 运行结果与效果验证
上一节已经给出了完整的代码生成流程,这一节重点说明怎么验证运行结果。
6.1 预期输出示例
运行ma_cross_strategy.py后,控制台会输出:
最终资金: 102345.67 总收益率: 2.35% 交易次数: 12 交易明细: {'date': Timestamp('2024-03-15 00:00:00'), 'action': 'BUY', 'price': 101.23, 'shares': 984} ...这些数字本身没有绝对的对错,关键是判断它们是否“合理”。可以从三个角度验证:
- 交易次数是否异常。如果 200 个交易日产生了 100 次交易,说明信号生成逻辑可能有问题,比如每次均线偏离都触发了买入,而不是只在金叉时买入。
- 单笔交易是否合法。检查买入价格是否高于收盘价(加入了滑点),卖出价格是否低于收盘价。如果方向反了,说明滑点计算有问题。
- 资金是否出现负数。如果出现负数,说明仓位管理和手续费计算有漏洞。
6.2 增加净值曲线可视化
光看控制台数字不够直观。让 AI 生成一段可视化代码,画出资金曲线和买卖点:
# 文件路径:plot_result.py import pandas as pd import matplotlib.pyplot as plt # 加载回测结果(这里假设你保存了每日资金曲线) equity_df = pd.read_csv("equity_curve.csv", parse_dates=["date"]) plt.figure(figsize=(12, 6)) plt.plot(equity_df["date"], equity_df["equity"], label="Equity Curve") plt.xlabel("Date") plt.ylabel("Equity") plt.title("Backtest Equity Curve") plt.legend() plt.grid(True) plt.show()你可以在回测循环里把每日资金追加到一个列表里,最后导出为equity_curve.csv。这个文件很有用,后续做参数对比、策略分析都离不开它。
6.3 验证失败时的排查顺序
如果脚本运行报错,不要急着重新问 AI“给我重写一遍”。先按下面顺序排查:
- 数据问题:CSV 文件是否存在,字段名是否和代码一致。
- 依赖问题:是否在正确的虚拟环境里运行,pandas 和 numpy 是否安装。
- 语法问题:AI 生成代码里是否有中英文标点混用,这在提示词里有中文描述时偶尔发生。
- 逻辑问题:运行成功但结果异常,这时候需要打印中间变量,比如
df[["date", "close", "ma_short", "ma_long", "signal", "position"]],人工检查信号位置是否正确。
检查中间变量的代码:
# 在回测前打印前20行信号 print(df[["date", "close", "ma_short", "ma_long", "signal", "position"]].head(20))这是一种简单但有效的验证方式:你不需要一次看懂所有代码,只需要看关键节点的数据是否符合预期。
7. 常见问题与排查思路
AI 生成量化代码时,常见问题集中在几个固定的点上。这里整理成一张排查表,方便遇到问题时快速定位。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
代码报错KeyError: 'ma_short' | 均线计算函数没被调用,或列名不一致 | 检查代码中是否调用calculate_ma | 确保先调用指标计算函数,再调用信号生成函数 |
| 回测结果全部为 0 收益 | 信号生成逻辑有误,position 没有产生有效值 | 打印position列,查看是否有 1 和 -1 | 检查diff()的使用是否正确 |
| 交易次数异常多 | 信号没有判断持仓状态,导致重复买入 | 检查回测循环里的position状态判断 | 添加持仓状态条件,只有在空仓时才买入 |
| RSI 列全为 NaN | 前 period 行数据不足,或ewm参数有误 | 检查 RSI 列的前 20 行 | 判断ewm(alpha=1/period, adjust=False)是否正确 |
| 资金出现负数 | 手续费和滑点计算错误 | 检查买入时的成本计算 | 确保shares = capital // price,不要使用浮点数直接计算 |
| 数据时间顺序错乱 | CSV 文件未按日期排序 | 打印df["date"]的前几行 | 在load_data里加入sort_values("date") |
| AI 生成了不存在的 API | 模型幻觉 | 查看报错提示的库函数名 | 删除该函数,改用已知的 pandas API,并让 AI 只用 pandas/numpy |
其中,模型幻觉是最需要注意的问题。AI 在生成代码时,偶尔会编造出不存在的库函数或参数,比如pd.read_csv(file_path, parse_dates=["date"], index_col="date")是真实存在的,但像df.calculate_signal()这种看起来合理但实际不存在的 API,就会直接报错。解决办法是在提示词里加上一句“只使用 pandas 和 numpy 已公开的稳定 API”,同时在运行前扫一眼代码里的函数名。
8. 最佳实践与工程建议
把 AI 生成的代码用于实际项目,哪怕只是本地回测,也需要一套工程规范。下面是几条比较实用的建议。
8.1 不要让 AI 生成一个巨型脚本
很多人的习惯是让 AI “写一个完整的量化交易系统”,得到一个 800 行的巨型文件。这个文件一旦报错,定位问题会非常痛苦。更好的方式是让 AI 按函数粒度生成代码,每个函数解决一个问题,生成后立刻用最小输入测试它。
推荐的结构是:
data_loader.py:数据加载。indicators.py:指标计算。strategy.py:信号生成。backtest.py:回测引擎。report.py:绩效统计。
每个文件的代码量控制在 100 行以内。这样 AI 生成的是“模块”,而不是“大杂烩”。
8.2 每次提示词都要包含可验证的信息
写提示词时,加入“输入是什么、输出是什么、用什么库”这三条信息,能大幅降低无效生成的概率。一句“请写一个回测程序”得到的代码,和“请写一个使用 pandas 读取 CSV,基于双均线信号执行回测,输出收益率和最大回撤的程序”得到的结果,可用性完全不是一个级别。
8.3 对 AI 生成的代码做结果合理性测试
AI 代码能跑通,不等于结果正确。一个稳妥的做法是准备一份“已知答案”的小数据,手工计算一遍预期结果,再和 AI 代码的输出对比。
比如构造一个只有 10 条数据的小 CSV,双均线参数设置为 2 日和 3 日,手工算好第几天出现金叉、第几天出现死叉,然后运行代码看是否一致。这类测试不需要很复杂,但能捕获大部分信号计算逻辑错误。
8.4 警惕回测过拟合
AI 在参数优化场景下特别容易给出“看起来完美”的参数组合。比如让 AI 遍历 5 到 100 的均线参数组合,选一个收益最高的,这时候十有八九会过拟合。正确的做法是:
- 把数据分为训练集和测试集,训练集选参数,测试集验证。
- 参数范围不要设置太细,比如均线周期用 5、10、20、60 这样的常规值,而不是 7、13、27。
- 重点看最大回撤和连续亏损次数,而不是只看收益率。
8.5 数据和代码分开管理
不要把自己下载的行情数据放在代码仓库里。量化项目里,数据文件可能很大,也不适合版本管理。更合理的做法是:
- 代码放在 Git 仓库。
- 数据放在独立的数据目录,并在
.gitignore中忽略。 - 数据加载路径通过配置文件指定,方便切换不同数据源。
一个简单的配置文件示例:
# 文件路径:config.yaml data: path: ./data/sample_data.csv strategy: short_ma: 5 long_ma: 20 backtest: initial_capital: 100000 commission_rate: 0.0003 slippage: 0.018.6 关于“网络流传指标源码”的安全提醒
搜索“三步点金指标源码”“杀破狼指标”等关键词时,会看到大量所谓“高胜率指标源码”。这里要提醒一点:很多网络流传的指标源码没有经过严格验证,甚至可能包含误导性计算。
如果你想让 AI 帮你实现某个指标,最好的做法是描述指标的计算公式,而不是搜索“某某指标源码”。比如 RSI 的公式是公开的,你只需要把公式描述清楚,AI 就能给你写出正确代码。不要依赖那些来路不明的“源码”,尤其是需要关闭杀毒软件或者安装不明插件的版本,基本可以直接放弃。
9. 总结与后续学习方向
这篇文章的核心内容是:AI 在量化交易中的价值不是替你做投资决策,而是帮你把策略模板、指标代码、提示词模板这些重复性工作自动化。你自己需要做的,是把策略意图描述清楚,然后对 AI 生成的代码做验证。
如果把整套流程压缩成一套方法论,大概是四步:
- 拆解:把策略想法拆成模板、指标、信号、回测、分析几个模块。
- 生成:用结构化的提示词,让 AI 逐个模块生成代码。
- 验证:用样例数据运行,检查中间变量,确认结果合理。
- 迭代:用标准化的提示词模板,继续让 AI 增加指标、调整参数、优化逻辑。
在后续学习中,可以沿着三个方向继续深入:
- 提示词工程:学习角色设定、约束条件、示例引导等更精细的提示词技巧,把这套方法用在其他编程任务上。
- 量化回测框架:熟悉 backtrader、vnpy、QMT 等专业平台,理解它们和“自己写回测脚本”之间的差异。
- 风险管理:不要停留在策略代码层面,要去理解夏普比率、最大回撤、凯利公式这些更底层的投资逻辑。
最后,还是那句话:AI 能帮你写代码,但不会替你的资金负责。每次让 AI 生成策略后,都问自己三个问题:这个策略的逻辑是什么?它在什么市场环境下失效?如果连续亏损十次,我还敢继续跑吗?这些问题想清楚了,AI 对你来说就是一个效率放大器;想不清楚,它只会帮你更快地把资金亏完。
建议把这篇文章里的提示词模板和代码结构收藏起来,下次写策略时直接拿来改。你不用成为提示词专家,也不用背下所有指标公式,只需要记住:把需求说清楚,把验证做到位,剩下的重复劳动,交给 AI 就好。
