本文是《量化策略开发》系列的第1篇。传统量化策略用if/else写规则,永远写不完。这篇文章分享我开发AI全驱动交易策略的完整链路------提示词怎么设计、AI收到什么数据、怎么"思考"、它的回复如何变成真实的买卖指令。

写在前面
上一篇我们搭好了AI策略引擎的整体架构------数据怎么流、模块怎么分层、回测怎么跑。但有个核心问题一直没展开:AI到底怎么做出交易决策的?
它看到什么数据?它怎么"想"?它"说"出来的东西怎么变成实际的买卖指令?
这篇专门拆解这件事。说实话,这是整个AI策略里最让我觉得有意思的部分。因为它跟传统量化策略的思路完全不一样------不是你写规则告诉程序"什么情况下买",而是你描述场景让AI自己判断。
传统策略的困境:写不完的if/else
先看一个典型的传统量化策略。均值回归策略,逻辑很经典:
python
# 买入信号:价格低于均值 + RSI超卖
if bar.close_price < ema_value and rsi_value <= self.rsi_oversold:
self.buy(bar.close_price, self.fixed_size)
# 卖出信号:价格高于均值 + RSI超买
if bar.close_price > ema_value and rsi_value >= self.rsi_overbought:
self.short(bar.close_price, self.fixed_size)
# 冷却:入场后等3根K线
self.bars_since_signal += 1
if self.bars_since_signal < self.cooldown_bars:
return
逻辑清晰,很好理解。但问题在于------市场场景无穷多。
价格在EMA附近反复穿越怎么办?RSI到了29又弹回35又跌到28怎么办?放量突破和缩量突破处理一样吗?你每发现一个新场景,就得加一条if/else。加着加着,策略变成了几百行的条件判断迷宫,改一处怕影响另一处。
这不是个例。几乎所有写过策略的人都经历过这个痛苦:规则永远写不完,维护越来越难。
思路转变:从写规则到写提示词
后来我换了个角度想这件事。
与其穷举所有市场场景,为什么不告诉AI"你是一个专业的期货交易分析师",然后把市场数据喂给它,让它自己判断?
这就从"写规则"变成了"写提示词"。

传统思路是:价格 < EMA 且 RSI <= 30 → 买。每一步都是你规定的。
AI思路是:你告诉AI"风险第一,数据驱动",然后给它价格、指标、持仓信息,让它综合判断应该买、卖还是观望。
提示词就是策略的"灵魂"。不是代码逻辑,而是文字描述。
那这个提示词到底长什么样?
告诉AI它是谁
系统提示词(System Prompt)是AI策略的核心。它定义了AI的角色、行为边界和输出格式。

首先是角色定义:
# 角色定义
你是一位专业的期货交易分析师,具有丰富的实战交易经验,
专精稳健交易策略,精通技术分析和市场结构理论。
## 核心原则
- 风险第一,盈利第二:每笔交易必须有明确的风险控制计划
- 纪律严明:严格按照交易信号和规则执行
- 数据驱动:基于市场数据和多维度分析,不凭感觉
## 信号优先级体系
1. 持仓管理(有持仓时最高优先级)
2. 大周期趋势方向(主周期)
3. 结构位(支撑/阻力)
4. 小周期价格行为(次周期)
5. 技术指标确认(MACD/RSI/ADX辅助)
你看,这里没有"RSI < 30就买"这种硬规则。取而代之的是一个优先级体系------告诉AI应该先看什么、后看什么,但具体怎么判断,交给它。
然后是交易模式。系统内置了三种模式,以激进模式为例:
# 交易模式:激进模式
- 入场时机:在趋势突破早期果断入场
- 仓位规模:可以使用较大仓位(20%-30%)
- 止盈策略:采用移动止盈,让利润奔跑
## 风险提醒
- 连续亏损后应暂停交易
- 严格遵守日最大亏损限制
还有一个关键部分------输出格式。AI不能随便说,必须按JSON格式输出:
json
{
"action": "LONG",
"position_size": 0.3,
"stop_loss": 3750.0,
"take_profit": 3900.0,
"confidence": 0.75,
"reason": "价格突破关键阻力位,MACD金叉确认趋势"
}
一共支持7种操作:开多(LONG)、开空(SHORT)、平仓(CLOSE)、观望(HOLD)、加多(ADD_LONG)、加空(ADD_SHORT)、减仓(REDUCE)。每种操作都有明确的使用场景。
所以系统提示词本质上做了三件事:告诉AI它是谁,告诉它怎么思考,告诉它怎么回答。
告诉AI市场长什么样
光有角色定义还不够。每次做决策时,还需要把当前的市场状况告诉AI。这就是用户提示词(User Prompt)。
它的结构大概是这个样子:
## 当前交易信息
- 时间: 2025-03-28 21:15:00
- 品种: rb2605.SHFE
## 账户状态
- 总资金: 100000.00元 | 可用资金: 95000.00元
## 市场数据(1小时周期)
- 当前价格: 3820.00 | 涨跌幅: +0.15%
- OHLC: 开3815 / 高3830 / 低3808 / 收3820
## 技术指标(主周期)
- EMA(9,20,60): 3818.50 / 3810.20 / 3795.80 → 多头排列
- MACD(12,26,9): DIF 5.2 > DEA 3.8 → 强势多头
- RSI(14): 62.30 → 多头区域
- ADX: 28.5 (强↑) | ATR: 35.00 (0.92%, 低波动)
## 请做出交易决策
请根据以上信息,给出你的交易决策。
看,AI拿到的数据很实在------价格、指标、持仓、账户,全是客观数据。但"这些数据意味着什么"这件事,不是我们硬编码的规则来判断的,而是AI自己综合分析。
这就呼应了那个核心转变:**数据和规则分离。**数据是客观的,判断是AI的。
对了,如果开启了多周期分析,AI还能同时看到1小时和15分钟两个周期的指标数据,以及多周期共振分析结果。不过这块展开说就太长了,先到这里。
AI说了什么
AI收到提示词后,经过一轮"思考",返回这样的JSON:

json
{
"action": "LONG",
"position_size": 0.25,
"stop_loss": 3790.0,
"take_profit": 3880.0,
"confidence": 0.72,
"reason": "EMA多头排列,MACD强势多头,ADX趋势加强,低波动适合建仓"
}
它不只是说"买"或"卖"。它告诉你:
- 做什么操作(开多)
- 用多大仓位(25%资金)
- 止损设在哪里(3790)
- 止盈设在哪里(3880)
- 它有多大把握(72%置信度)
- 为什么做这个决策(EMA多头排列 + MACD强势 + ADX趋势加强)
**它给了理由。**这是跟传统策略最大的不同。传统策略只能告诉你"信号触发了",但不能解释为什么。AI能告诉你它的推理过程。
不过话说回来,AI也不总是靠谱。有时候它返回的JSON格式是坏的,有时候它"想"了一堆但最后的决策跟想的完全不一样。这就引出了下一个问题------怎么把AI的"话"变成真正能执行的交易。
从文字到交易
AI返回的是一段文字(虽然是JSON格式的文字),但交易系统需要的是明确的指令。中间需要一个解析过程。

整个过程分几步:
第一步:提取思维链。 有些AI模型(比如Claude)会用<thinking>标签包裹它的思考过程。解析器会先把这些内容提取出来单独保存------这些思维链是调试和优化提示词的金矿。
python
# 提取 <thinking> 标签中的思考过程
thinking_match = re.search(
r'<thinking>(.*?)</thinking>', text, re.DOTALL
)
if thinking_match:
reasoning = thinking_match.group(1).strip()
第二步:提取JSON并修复。 AI有时候返回的JSON不是标准格式------可能多了几个逗号,可能少了几个引号。解析器会尝试直接解析,失败了就自动修复:
python
# 尝试直接解析
result = safe_json_loads(content)
if result:
return result # 解析成功
# 失败了?修复后重试
repaired = repair_json(content)
return safe_json_loads(repaired)
第三步:验证和兜底。 就算JSON解析成功了,里面的内容可能也有问题。比如AI说confidence是1.5(超出0-1范围),或者action写了个不认识的字符串。验证器会把这些问题修正过来。
python
# 验证操作类型
VALID_ACTIONS = {
"LONG", "SHORT", "CLOSE", "HOLD",
"ADD_LONG", "ADD_SHORT", "REDUCE",
}
action = str(action).upper()
if action not in VALID_ACTIONS:
return "HOLD" # 不认识?默认持有
如果整个解析过程彻底失败了怎么办?安全回退------返回一个HOLD(观望)决策。宁可错过一次机会,也不要因为解析错误执行一笔不该执行的交易。
跑起来看看效果
说了这么多原理,这个AI策略跑出来的效果到底怎么样?
我用rb2605(螺纹钢)从2026年2月到3月底做了一个回测,初始资金10万,跑了36个交易日。结果说实话,比我预期的好:
总收益率2.45%,年化16.30%,最大回撤只有0.01%。


几个让我觉得有意思的点。
第一,胜率100%。 18笔平仓交易全部盈利,没有一笔亏损。但这不完全是好事------说明AI非常保守,宁可错过也不会冒险。总交易次数只有33笔(含开平和加仓),平均每天不到1笔。这种风格好不好,看你自己的偏好。我个人觉得在AI策略初期,保守一点不是坏事。
第二,风险控制得很好。 最大回撤只有13块钱(占总资金的0.01%),回撤持续了2天就恢复了。Sharpe Ratio到了9.74,Sortino Ratio更是110.49------这两个数字都远超传统策略的常见水平。当然,样本量还小,不能太当真。
第三,持仓时间分布很合理。 平均持仓2.69天,最短不到2小时(0.09天),最长10天半。说明AI不是死拿,也不是频繁交易,而是根据市场状况灵活调整。从交易时段来看,大部分交易集中在早上9点开盘附近,这也符合期货市场的波动规律。

不过要泼盆冷水。2个月、36个交易日、一个品种的回测数据,完全不足以证明策略的有效性。这只是验证了整个系统确实能跑通------AI在做决策,决策确实在执行,风控确实在起作用。真正的策略验证需要更长时间、更多品种、不同市况的考验。
写在最后
从写if/else到写提示词,表面上看是换了一种方式"告诉程序该做什么"。但本质上,这是一个思维方式的转变。
传统量化策略是你想清楚所有情况,然后用代码写死。AI策略是你想清楚决策框架(角色、原则、风控),然后把具体判断交给模型。
这不意味着AI策略就比传统策略好。传统策略在规则明确的场景下依然很有效,而且可解释性强、执行确定性高。AI策略的价值在于------当你发现自己在不断加if/else却始终覆盖不完市场场景的时候,它提供了一种不同的可能性。
你的策略能不能也用AI?哪些部分适合交给模型判断,哪些部分还是写死规则更靠谱?这些问题值得想想。
后面我还会分享一些传统量化策略的开发思路------均值回归、趋势跟踪这些经典策略,在实战中依然有它们的用武之地。AI和传统不是对立的,是互补的。
先写到这,有问题欢迎留言交流。
本文基于ATMQuant量化交易系统,完整代码已开源至GitHub:https://github.com/seasonstar/atmquant
本文内容仅供学习交流,不构成任何投资建议。交易有风险,投资需谨慎。
往期文章回顾
《以AI量化为生》系列
- 以AI量化为生:23.打造AI全驱动量化策略引擎
- 以AI量化为生:22.指标计算引擎重构 - 让策略直接复用图表指标
- 以AI量化为生:21.交易图表AI分析功能集成
- 以AI量化为生:20.实时图表交易系统开发
《量化指标解码》系列
加入「量策堂·AI算法指标策略」
想系统性掌握策略研发、指标可视化与回测优化?加入我的知识星球,获得持续、体系化的成长支持:
