量化策略开发01:我让AI全权做交易决策 - 从提示词设计到决策执行

本文是《量化策略开发》系列的第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算法指标策略」

想系统性掌握策略研发、指标可视化与回测优化?加入我的知识星球,获得持续、体系化的成长支持:


相关推荐
青 春 记 忆5 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO35 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO7 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白7 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲9 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)10 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机10 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69211 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy12 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽13 小时前
真实即粗糙,光滑是伪造
人工智能·python