🎯 本章学习目标
如果你曾经对着AI输入"帮我写个量化策略",然后看着它生成一堆不知所云的代码发呆——这一章就是为你准备的。Prompt工程不是程序员的专利,而是每个想和AI高效协作的人都必须掌握的技能。读完这一章,你将能够:
- 理解Prompt质量对AI输出的决定性影响,知道为什么同样的AI会给你完全不同的结果
- 掌握一套结构化的Prompt编写框架,每次写Prompt都有章可循
- 学会使用Chain-of-Thought等高级技巧,让AI一步步展示推理过程
- 建立一个属于自己的Prompt模板库,覆盖数据获取、策略编写、回测优化等常见场景
- 能够诊断和改进低质量Prompt,把"垃圾输入"变成"黄金输入"
💬 一个真实的故事
小王和小张是同事,两人都刚学完Python基础,想要用AI写一个"双均线交叉策略"。
小王打开ChatGPT,输入:"帮我写个量化策略。"五秒后,AI生成了一段代码。小王复制粘贴到编辑器里,运行——报错。他仔细看代码,发现AI用了一个他根本不认识的库,而且均线计算的参数也写死了。小王又输入:"刚才的代码报错了。"AI换了一种写法,但还是有问题。折腾了一个小时,小王放弃了。
小张则不同。他先在心里梳理了一下需求,然后输入:
我想用Python的Backtrader库写一个双均线交叉策略,具体要求如下:
1. 交易标的:沪深300ETF(510300)
2. 短期均线:20日,长期均线:60日
3. 金叉时全仓买入,死叉时全仓卖出
4. 回测时间:2020年1月1日至2024年12月31日
5. 初始资金:10万元
6. 请给出完整可运行的代码,并逐行注释解释每个部分的作用
AI生成的代码一次就能运行,而且注释清晰。小张只花了10分钟就拿到了一个可以正常回测的策略。
这个故事的关键在于:AI不是不会写代码,而是需要你用正确的方式告诉它你要什么。Prompt工程,就是学习"如何正确告诉AI"的艺术。
核心洞察:把AI当成一个聪明但缺乏上下文的新员工。你不会对新员工说"去做个策略",而是会告诉他目标、约束、工具、格式和验收标准。Prompt工程的本质,就是学会给AI提供足够的上下文。
⚡ 核心知识:Prompt工程的五大支柱
1. 为什么Prompt质量如此重要?
大型语言模型(LLM)本质上是一个"概率机器"——它根据你输入的文本,预测最可能的下一个词。这意味着:你的输入直接决定了输出的概率分布。模糊的输入会让模型在广阔的可能性空间中迷失方向,而精确的输入则会把它引导到正确的区域。
在量化交易的场景中,一个差Prompt的典型特征是:只有"做什么",没有"怎么做"、"用什么工具"、"输出什么格式"。而一个高质量Prompt则像一份详细的需求文档,让AI知道边界在哪里、标准是什么。
2. 高质量Prompt构建流程
下面这个流程图展示了一个结构化Prompt的构建过程。你可以把它当成每次写Prompt前的检查清单。
flowchart LR
A[明确目标] --> B[提供上下文]
B --> C[给出示例]
C --> D[指定格式]
D --> E[要求解释]
E --> F[迭代优化]
style A fill:#f97316,stroke:#fff,color:#fff
style F fill:#06b6d4,stroke:#fff,color:#fff
第一步:明确目标。用一句话说清楚你要AI做什么。比如"写一个双均线交叉策略"就是一个目标,但它太笼统了。更好的说法是"用Backtrader写一个沪深300ETF的双均线交叉策略,短期均线20日,长期均线60日"。
第二步:提供上下文。AI不知道你的技术水平、不知道你已有的代码环境、不知道你的数据从哪里来。你需要主动提供这些信息。比如"我已经安装好了backtrader和akshare,数据用AKShare获取"。
第三步:给出示例。如果你希望AI输出某种特定格式,最好的方式不是描述格式,而是直接给一个例子。比如"请按下面的格式输出:\n买入日期: YYYY-MM-DD\n买入价格: XX.XX\n卖出日期: YYYY-MM-DD\n卖出价格: XX.XX"。
第四步:指定格式。明确告诉AI你希望输出什么:是完整代码、伪代码、文字说明、还是表格?是需要逐行注释、还是只需要关键部分?
第五步:要求解释。对于量化策略来说,知道"是什么"不如知道"为什么"。要求AI解释它的设计决策,可以帮助你判断这个策略是否合理。
3. 差Prompt vs 好Prompt:同一个策略,天壤之别
下面这个对比展示了同一个需求,用不同Prompt会得到什么结果。
❌ 差Prompt
帮我写个量化策略,要赚钱的。
问题:没有目标标的、没有策略逻辑、没有工具要求、没有输出格式。AI只能瞎猜,生成的代码大概率无法运行。
✅ 好Prompt
请用Python的Backtrader库写一个双均线策略:
- 标的:贵州茅台(600519),用AKShare获取前复权日线数据
- 策略:5日均线上穿20日均线买入,下穿卖出
- 回测:2020-01-01 至 2024-12-31
- 初始资金:100000元,全仓买卖
- 输出:完整可运行代码+每行注释
优点:目标明确、工具指定、参数具体、格式清晰。AI只需按照要求"填空"即可。
4. 量化交易Prompt模板库
下面是一组经过实战检验的Prompt模板,覆盖量化交易的常见场景。建议你收藏这一页,以后需要时直接复制修改。
📃 模板1:数据获取类Prompt
点击展开查看模板
请用[工具名,如AKShare/yfinance]获取[标的名称]的[数据类型]数据。
具体要求:
1. 时间范围:[开始日期] 至 [结束日期]
2. 数据频率:[日线/分钟线/周线]
3. 复权方式:[前复权/后复权/不复权]
4. 需要字段:[open, high, low, close, volume]
5. 请处理可能的缺失值和异常值
6. 将结果保存为[CSV/Parquet]格式
7. 给出Python代码,并逐行解释
📃 模板2:策略编写类Prompt
点击展开查看模板
请用[框架名,如Backtrader]写一个量化交易策略。
策略逻辑:
- 入场条件:[详细描述]
- 出场条件:[详细描述]
- 仓位管理:[详细描述]
- 止损止盈:[详细描述]
技术要求:
- 数据来自:[数据源]
- 回测参数:初始资金[金额],时间[范围]
- 输出格式:完整代码 + 关键逻辑解释 + 预期风险点说明
📃 模板3:代码优化类Prompt
点击展开查看模板
我有一段量化策略代码,需要优化以下方面:
1. [具体问题,如运行速度太慢]
2. [具体问题,如内存占用过高]
3. [具体问题,如代码结构混乱]
原始代码如下:
```python
[粘贴代码]
```
请给出优化后的代码,并说明:
- 每处修改的原因
- 优化前后的性能对比(估算)
- 是否引入了新的风险
📃 模板4:策略诊断类Prompt
点击展开查看模板
我运行了一个量化策略,回测结果如下:
- 总收益率:[X%]
- 年化收益率:[X%]
- 最大回撤:[X%]
- 夏普比率:[X]
- 交易次数:[X]
请分析:
1. 这个策略的表现属于什么水平?
2. 可能存在的风险和问题
3. 从哪些维度可以进一步优化?
4. 如果要上实盘,还需要做哪些工作?
5. 高级技巧:让AI成为你的思维伙伴
掌握了基础模板后,你还可以使用一些高级技巧,让AI的输出质量再上一个台阶。
Chain-of-Thought(思维链):要求AI"一步步思考"。比如不要直接问"这个策略能赚钱吗?",而是问"请一步步分析这个策略的入场逻辑、出场逻辑、仓位管理和风险点,然后给出综合判断"。思维链Prompt能显著提升AI在复杂推理任务上的表现。
角色扮演:给AI设定一个角色。比如"你是一位有20年经验的对冲基金经理,请从专业角度评价这个策略"。角色设定能让AI调动更相关的知识,输出更专业的内容。
few-shot示例:在Prompt中给出1-3个输入-输出对的例子,让AI"模仿"你的期望格式。比如先给一个"差策略描述 -> 改进建议"的例子,然后再让AI处理你的真实输入。
自我纠正:让AI先给出答案,然后要求它检查自己的错误。比如"请先写出代码,然后从数据泄露、未来函数、过拟合三个角度检查这段代码是否有问题,如果有请修正"。
🤖 与AI一起练习
练习1:差Prompt vs 好Prompt对比实验
任务:用同一个策略需求,分别写一个好Prompt和一个差Prompt,对比AI的输出差异。
步骤:
- 写差Prompt:只用一句话描述需求,比如"帮我写个均线策略"。记录AI的输出。
- 写好Prompt:使用本章的五大支柱框架,写一份详细的Prompt。记录AI的输出。
- 对比分析:从"代码可运行性"、"逻辑完整性"、"注释清晰度"三个维度给两个输出打分。
练习2:建立你的Prompt模板库
任务:基于本章提供的4个模板,结合你自己的交易需求,创建至少3个专属Prompt模板。
建议方向:
- 多因子选股Prompt:让AI帮你从财务指标中筛选符合条件的股票
- 回测报告解读Prompt:让AI帮你分析Backtrader输出的回测结果
- 策略变体生成Prompt:给AI一个基础策略,让它生成5个变体版本
练习3:用元Prompt让AI教你写Prompt
Prompt模板:
我想让AI帮我写一个量化策略的Python代码。
但我不知道我的Prompt写得好不好。
请扮演一位Prompt工程专家,帮我检查下面的Prompt,
指出问题并给出改进建议:
[粘贴你的Prompt]
请从以下维度评价:
1. 目标是否明确
2. 上下文是否充分
3. 是否有具体的约束条件
4. 输出格式是否清晰
5. 总分(1-10分)及改进方向
🔧 动手实践:Prompt质量评分器
下面这个交互式评分器可以帮你快速评估一个Prompt的质量。把你写的Prompt粘贴进去,它会从五个维度给出评分和改进建议。
当然,评分器只是辅助工具。真正提升Prompt质量的唯一方法是:多写、多试、多对比。每一次和AI的对话,都是一次Prompt工程的实战训练。
Python代码:批量生成策略变体
下面这段代码展示了如何用结构化的方式调用AI API(以OpenAI为例),批量生成策略变体。虽然这只是一个示例框架,但它展示了"程序化Prompt工程"的思想。
import openai
# ==========================================
# 配置:你的API密钥和模型
# ==========================================
# openai.api_key = "your-api-key"
MODEL = "gpt-4"
# ==========================================
# 基础策略描述
# ==========================================
BASE_STRATEGY = """
双均线交叉策略:
- 短期均线:5日
- 长期均线:20日
- 金叉买入,死叉卖出
- 标的:沪深300ETF
"""
# ==========================================
# Prompt模板:生成策略变体
# ==========================================
VARIANT_PROMPT = """你是一位量化策略研究员。
基础策略:
{base_strategy}
请生成{num_variants}个策略变体,每个变体修改一个参数或添加一个条件。
要求:
1. 每个变体只改变一个要素(如均线周期、添加过滤器、改变仓位管理)
2. 给出变体的名称和修改理由
3. 用表格形式输出:名称 | 修改内容 | 预期效果 | 风险点
"""
# ==========================================
# Prompt模板:代码生成
# ==========================================
CODE_PROMPT = """请用Backtrader实现以下策略:
{strategy_description}
要求:
1. 数据用AKShare获取
2. 回测时间:2020-01-01 至 2024-12-31
3. 初始资金:100000元
4. 全仓买卖
5. 输出完整可运行代码
6. 关键行添加注释
"""
def generate_variants(base_strategy, num_variants=3):
"""生成策略变体(概念展示)"""
prompt = VARIANT_PROMPT.format(
base_strategy=base_strategy,
num_variants=num_variants
)
print("=" * 50)
print("生成的Prompt(策略变体):")
print("=" * 50)
print(prompt)
print("\n注:实际使用时,将此prompt发送给AI API即可。\n")
# 模拟返回结果
variants = [
{
"name": "变体A:加入RSI过滤",
"change": "金叉时要求RSI < 70(避免超买区买入)",
"expect": "减少高位接盘,提高胜率",
"risk": "可能错过强势行情"
},
{
"name": "变体B:均线周期调整",
"change": "短期10日,长期60日",
"expect": "减少假信号,更适合趋势行情",
"risk": "信号滞后,买卖点不够精确"
},
{
"name": "变体C:加入止损",
"change": "买入后跌5%强制止损",
"expect": "控制单笔最大亏损",
"risk": "震荡期可能频繁触发止损"
}
]
return variants
def generate_code(strategy_desc):
"""生成策略代码(概念展示)"""
prompt = CODE_PROMPT.format(strategy_description=strategy_desc)
print("=" * 50)
print("生成的Prompt(代码生成):")
print("=" * 50)
print(prompt)
print("\n注:实际使用时,将此prompt发送给AI API即可。\n")
return prompt
# ==========================================
# 主程序
# ==========================================
if __name__ == "__main__":
print("\n🌟 Prompt工程演示:批量生成策略变体\n")
# 步骤1:生成变体
variants = generate_variants(BASE_STRATEGY, num_variants=3)
print("=" * 50)
print("策略变体清单:")
print("=" * 50)
for i, v in enumerate(variants, 1):
print(f"\n变体 {i}: {v['name']}")
print(f" 修改: {v['change']}")
print(f" 预期: {v['expect']}")
print(f" 风险: {v['risk']}")
# 步骤2:为第一个变体生成代码Prompt
print("\n")
first_variant = f"{BASE_STRATEGY}\n额外条件:{variants[0]['change']}"
code_prompt = generate_code(first_variant)
print("\n✅ 完成!这个框架的核心思想是:")
print(" 1. 把策略逻辑和Prompt模板分离")
print(" 2. 用变量替换实现Prompt复用")
print(" 3. 批量生成 -> 批量回测 -> 对比择优")
🤔 思考题
知识自测
1. 下面哪个Prompt最可能让AI生成可运行的代码?
- A. "帮我写个策略"
- B. "用Python写一个交易策略"
- C. "用Backtrader写一个双均线策略,标的为600519,2020-2024年回测,初始资金10万,给出完整代码和注释"
- D. "量化交易怎么赚钱?"
答案是C。选项C包含了目标(双均线策略)、工具(Backtrader)、参数(标的、时间、资金)和输出格式(完整代码+注释),给AI提供了最充分的上下文。A和B过于笼统,D则完全不是代码生成类Prompt。
2. Chain-of-Thought技巧的核心作用是什么?
- A. 让AI运行得更快
- B. 让AI展示推理过程,提高复杂任务的准确率
- C. 减少API调用费用
- D. 让输出更短更简洁
答案是B。Chain-of-Thought(思维链)通过要求AI逐步展示推理过程,迫使其在每一步都进行更深入的思考,从而显著提高在数学、逻辑和策略分析等复杂任务上的表现。
3. 在量化Prompt中,为什么要让AI解释设计决策?
- A. 因为解释可以让代码运行更快
- B. 解释占用的token更多,能充分利用API
- C. 解释能帮助用户判断策略是否合理,发现潜在问题
- D. AI的解释总是正确的,可以直接照着做
答案是C。让AI解释设计决策,可以帮助你判断策略逻辑是否有漏洞、是否引入了未来函数、是否忽略了某些风险点。AI的解释不一定总是正确的,但它提供了一个可以被质疑和验证的基线。
深入思考
- 如果你在Prompt中要求AI"写一个有90%胜率的策略",会发生什么?为什么这是一个危险的要求?
- 当AI生成的代码有bug时,你应该如何设计后续Prompt来让AI修复它?是直接说"有bug",还是提供更详细的错误信息?
- 假设你要和AI协作开发一个完整的量化系统(数据+策略+回测+优化),你会如何设计一系列Prompt,让整个流程高效运转?
🚀 下一章预告
Prompt技巧已经掌握,现在让我们回到数据的本质。下一章《历史价格数据——最简单的起点》,我们将深入探讨价格数据的结构、类型和处理方法。
你将学会:如何获取、清洗、存储历史价格数据;理解前复权、后复权、不复权的区别;以及如何用AI帮你处理数据中的缺失值和异常值。这是所有量化策略的基石——没有干净的数据,再好的Prompt也写不出好策略。
准备好了吗?让我们进入数据篇的第一站。