AI交易代理实战:从零构建自己的智能量化交易系统
2026/8/30 3:48:15 网站建设 项目流程

最近在 Hacker News 上看到一个很有意思的帖子:Show HN: Delphi – Build your own AI trading agent in seconds。这个项目的思路是把大模型、市场数据、交易执行整合到一起,让开发者用很短的时间搭建一个属于自己的 AI 交易代理(trading agent)。和很多 Demo 项目不同,它不是只给一个聊天框让你问“明天买什么”,而是把“观察行情 → 模型推理 → 生成交易决策 → 执行订单”这条链路做成了可配置、可复用的框架。

我顺着这个方向做了一些研究和本地实验,并把从概念到实战的完整过程整理成这篇教程。读完你会理解 AI 交易代理的核心组成,能照着示例写一个最小可用版本,也能避开模型乱调用、接口限流、回测失真这些常见坑。

需要提醒一句:名字叫 Delphi 的项目不止一个。老牌的 Delphi 是 Embarcadero 出品的 Object Pascal 开发工具,很多热词里出现的“Delphi 10.4 读取 Excel”“Delphi 7 禁 U 盘”都是指它。而本文要讲的是 Hacker News 上这个专门用于构建 AI 交易代理的开源项目,它只是恰好也叫 Delphi。阅读时先把这个区分开。

1. 项目背景与核心概念

1.1 什么是 AI 交易代理

先看一个通俗解释。AI 交易代理是“一个能自己拿主意”的程序,它不像传统量化策略那样只执行你写死的买卖规则,而是借助大模型的推理能力,把市场行情、新闻、技术指标甚至宏观经济数据作为上下文,经过分析后输出一个交易动作。

它最典型的运行循环如下:

  1. 获取当前市场数据,比如 K 线、最新价、成交量。
  2. 读取用户设定的投资目标和风险偏好。
  3. 把上述信息交给大模型,要求模型输出一个结构化决策。
  4. 校验模型输出,确认动作合法后再提交到交易所。
  5. 记录决策理由、当时的持仓、当时的行情快照,方便复盘。

这已经不是一个简单的“策略回测脚本”,而是一个带有感知、推理、行动、反思能力的智能体(AI Agent)。

1.2 为什么这类项目值得关注

传统量化交易的门槛主要在两点:一是策略开发需要大量数学和代码功底,二是数据清洗、回测、实盘接入的工程链很长。而 AI 交易代理把门槛进一步降低,因为策略本身不再是一堆公式,而是可以用自然语言描述的“规则”。

例如,你可以把策略写成这样一句话:

当比特币 4 小时级别突破布林带中轨,且 RSI 大于 55 时,可以考虑做多; 如果价格跌破最近一个支撑位,则立即止损离场。

Delphi 这类框架的作用,就是让这句话变成可执行的交易逻辑。大模型负责理解这句话,并基于实时行情做出当前时刻的判断。对个人开发者、量化初学者、搞 AI 应用开发的人来说,这是一个很好的学习切入点。

1.3 适用场景与目标读者

从项目标题里的 “in seconds” 可以看出,这个框架的定位是快速搭建。它比较适合以下场景:

场景适合程度说明
个人学习 LLM + 交易策略结合用少量代码跑通完整链路
快速验证某个交易想法用自然语言描述想法即可测试
短线/波段辅助决策需要搭配严格风控,不能直接全自动
高频交易大模型推理延迟高,不适合高频场景
生产环境大资金实盘需要额外审计、熔断、合规设计

如果你是刚接触 AI Agent 的开发新手,或者已经有量化基础想试试大模型怎么辅助交易,这个项目值得研究。

2. AI 交易代理的系统构成

在动手写代码之前,需要先建立一个整体认知。一个可用的 AI 交易代理,通常由下面几个模块组成。

2.1 观察层:市场数据接入

观察层负责给 agent 提供“眼睛”。它从交易所 API、行情服务商或本地数据库获取数据,统一转换成 agent 可以理解的格式。

这里的关键不是“能拿到数据”,而是“拿到数据之后如何组织”。大模型对长文本的注意力有限,把 5000 根 K 线全部塞进提示词既不经济,效果也差。常见的做法是只提取最近几十根 K 线,再计算几个关键指标,如移动平均线、RSI、布林带、成交量变化。

2.2 推理层:大模型与工具调用

推理层是 agent 的“大脑”。它接收市场数据、用户指令和对话历史,输出决策。这一层大多是调用 OpenAI、Anthropic 或本地模型的 API。

为了不让模型“凭空猜测”,推理层通常配合工具调用(function calling / tool use)能力。比如模型可以请求调用get_price_datacalculate_rsiplace_order这些工具,然后根据工具返回结果继续推理。这样 agent 就不是一次性输出结论,而是能主动获取信息后再决定。

2.3 执行层:订单与仓位管理

执行层把模型输出的决策翻译成真实或模拟的订单。它必须处理几个关键问题:

  • 订单方向:买入、卖出、持有。
  • 订单类型:市价单、限价单。
  • 仓位比例:用总资金的多少比例下单。
  • 杠杆与保证金:如果交易合约,还要考虑杠杆倍数和强平价格。

安全起见,执行层最重要的职责是“校验”,而不是“执行”。模型分析能力再强,也可能突然输出一个不合理的仓位,所以执行层必须设置硬性上限。

2.4 记忆层:对话记忆与策略记忆

记忆层是 AI 交易代理比较容易忽视的部分。每次调用模型时,如果只把当前行情塞进上下文,模型就会“失忆”,看不到上一轮它自己给出的判断和理由。这会带来两个问题:

  • 无法对之前的决策做复盘。
  • 策略行为不稳定,同一个行情可能一会儿做多一会儿做空。

合理的做法是维护一个会话记忆,记录历史决策、当时的理由和最终结果。在下一轮推理时,将最近的几条决策作为参考。这就是一个轻量级的“交易日志系统”。

2.5 安全边界:风控模块

任何自动交易工具都不能少了风控。AI 交易代理的安全边界至少要覆盖:

  • 单笔最大亏损比例。
  • 总仓位上限和最大回撤限制。
  • 不允许交易的时段或品种黑名单。
  • 模型输出非法动作时的熔断处理。

如果风控模块不完善,AI 交易代理在模拟盘上跑得再好,都不能上实盘。这是建议中优先级最高的一条。

3. 环境准备与版本说明

由于这类 AI 项目迭代速度快,具体版本需要根据你实际 clone 的仓库来确认。下面以我实验时的常见环境为例,重点演示配置思路。

3.1 运行环境

  • 操作系统:建议 Linux 或 macOS。Windows 也能运行,但部分原生库可能要多花时间解决依赖。
  • Python:3.10 或更高。AI Agent 生态基本都逐步迁移到新版 Python。
  • 包管理工具:pip、poetry 或 uv,任选其一。
  • 开发工具:VS Code 或 PyCharm,配合 Python 插件即可。

3.2 模型 API

Delphi 这类框架通常支持多种大模型后端。常见的几类:

  • OpenAI 兼容接口:包括 OpenAI 官方、Azure OpenAI,以及大量兼容 OpenAI 协议的开源模型服务。
  • Anthropic Claude:部分框架通过 SDK 接入。
  • 本地模型:通过 Ollama、vLLM、llama.cpp 启动本地模型,再暴露一个 OpenAI 兼容的 HTTP 接口。

建议没有特殊需求时,先使用 OpenAI 兼容接口。它生态最成熟,工具调用(function calling)支持得也最稳定。

3.3 数据源与交易端

在开发阶段,千万不要直接接真实资金账户。建议优先使用以下环境:

  • 交易所模拟盘(Paper Trading):例如币安测试网、Alpaca Paper Trading。
  • 本地回测数据:下载历史 K 线到本地 CSV 或 SQLite,反复测试策略。
  • 实时行情专用接口:部分数据服务商提供免费等级的行情 API,注意限流。

下表是我建议的开发环境组合:

组件开发阶段推荐说明
大模型OpenAI 兼容 API 或本地模型优先用小模型验证链路
行情数据本地 CSV 或模拟盘数据免费、稳定、不限流
交易执行模拟盘接口不会造成资金损失
存储SQLite单文件易备份,适合日志记录

4. 快速构建:实现自己的第一个 AI 交易代理

下面的示例按照“基于 Delphi 项目的一般实现思路”来写。由于开源项目 API 可能随时调整,具体类名和函数名请以仓库 README 为准。这里重点演示一个 AI 交易代理的完整搭建流程,你完全可以照搬到自己的项目中。

4.1 安装与初始化

假设你已经 clone 了项目到本地,并创建了虚拟环境。安装核心依赖的命令通常类似:

cd delphi python -m venv .venv source .venv/bin/activate pip install -r requirements.txt

如果你的项目使用了 pyproject.toml,也可以使用:

pip install -e .

这一步的作用是安装 agent 框架本身、模型 SDK、交易所 SDK、行情处理库等依赖。

4.2 配置文件:模型、数据源与风控

多数 agent 框架都会提供一个配置入口。下面是一份示例config.yaml,包含模型、数据源和风控三个部分:

model: provider: openai api_key_env: OPENAI_API_KEY model_name: gpt-4o-mini temperature: 0.2 max_tokens: 1024 data_source: type: binance_testnet symbol: BTCUSDT timeframe: 4h lookback_bars: 50 risk: max_position_pct: 0.1 max_single_loss_pct: 0.02 max_drawdown_pct: 0.1 allowed_actions: - buy - sell - hold memory: enabled: true max_history_entries: 20 storage: sqlite:///trading_logs.db

配置里的“风控”部分尤其重要。max_position_pct表示单次开仓最多占用总资金的 10%,max_single_loss_pct表示单笔亏损超过 2% 就强制平仓。这些参数后续会直接传给执行层,充当硬性约束。

4.3 核心代码:创建并运行交易代理

下面用 Python 写一个最小示例。这个示例把配置加载、策略提示词和 agent 运行三部分串起来。

# 文件路径:examples/run_agent.py from delphi import TradingAgent from delphi.config import load_config def advice_prompt() -> str: """把用户的自然语言策略转成模型提示词。""" return """ 你是一个稳健的加密货币交易助手。请基于以下行情数据给出交易决策。 规则: 1. 只看当前数据,不要预测未来。 2. 如果趋势不明朗,输出 hold。 3. 任何买入建议都必须包含止损价。 4. 输出格式必须是 JSON:{"action": "buy/sell/hold", "position_pct": 0~0.1, "stop_loss": 价格, "reason": "理由"} 当前行情: {market_summary} """ def main(): config = load_config("config.yaml") agent = TradingAgent( config=config, system_prompt=advice_prompt(), ) # 运行一轮完整的观察-推理-决策-执行流程 result = agent.run_once() print("=== 决策结果 ===") print(f"动作: {result.action}") print(f"仓位: {result.position_pct}") print(f"止损: {result.stop_loss}") print(f"理由: {result.reason}") print(f"行情快照: {result.market_snapshot}") if __name__ == "__main__": main()

这里需要特别说明agent.run_once()做了什么:

  1. data_source拉取最新 K 线,计算技术指标。
  2. 把指标摘要填充进system_prompt中的{market_summary}占位符。
  3. 调用大模型,得到 JSON 输出。
  4. 解析 JSON,通过风控校验。
  5. 在模拟盘提交订单,并记录日志。

4.4 运行与验证

在激活虚拟环境后,运行:

export OPENAI_API_KEY="你的API Key" python examples/run_agent.py

预期输出类似:

=== 决策结果 === 动作: hold 仓位: 0 止损: 0 理由: 当前价格在布林带中轨附近,RSI 为 52,没有明确方向,不适合开仓。

第一次跑通时,模型输出hold是很正常的。这表示链路是完整的,模型确实看到了行情,也按照规则给出了保守决策。

4.5 结果说明与首次迭代

当你看到类似输出时,说明你的第一个 AI 交易代理已经运行成功。此时我建议先不急着改策略,而是做三件事:

  1. 查看数据库里记录的决策日志,确认每一轮决策都有行情快照。
  2. 多运行几轮,观察不同行情下模型的决策是否稳定。
  3. 把模型输出和真实行情对比,判断模型的理解是否准确。

如果发现模型频繁乱买乱卖,优先检查提示词里是否把仓位上限写清楚,而不是先调温度参数。

5. 进阶:让 AI 交易代理更可靠

跑通一个最小 demo 之后,你会很快发现光靠一句提示词还不够。下面这几个方向是让 agent 真正可用的关键。

5.1 加入技术指标工具

如果你把 50 根 K 线原始数据全塞给模型,它很难看出趋势。更合理的做法是提供计算好的指标。例如给 agent 注册一个calculate_indicators工具:

from delphi.tools import tool @tool def calculate_indicators(df): """计算 RSI、MA20、布林带等指标。""" df["rsi"] = ta.rsi(df["close"], length=14) df["ma20"] = ta.sma(df["close"], length=20) df["bb_upper"], df["bb_middle"], df["bb_lower"] = ta.bbands( df["close"], length=20, std=2 ) return df[["close", "rsi", "ma20", "bb_upper", "bb_middle", "bb_lower"]]

这样模型在决策时可以直接读取指标值,而不是自己计算或盲目猜测。自定义工具注册是 AI 交易代理最核心的扩展方式。

5.2 使用思考链改进决策

简单的一步式输出容易让模型“拍脑袋”。改进办法是让模型先输出思考过程,再输出决策。在提示词中加入类似要求:

请按以下顺序思考: 1. 当前趋势是多头还是空头? 2. 是否存在明显的支撑/阻力位? 3. 当前风险偏好是多少? 4. 综合以上分析,给出最终决策。

这里要注意,思考过程不要被直接当作指令执行。实际项目中,最好把“日常分析”和“最终下单”分开调用模型,避免提示词注入导致的乱操作。

5.3 仓位管理与止损策略

AI 交易代理最常见的风险是模型某个时刻输出一个过大的仓位。即便有max_position_pct参数兜底,也需要在策略层面加入渐进式仓位管理。比如:

  • 首次开仓不超过总资金的 5%。
  • 浮盈超过一定比例后,再逐步加仓。
  • 单笔亏损达到 2% 强制止损,且当天不再开仓。
  • 下午之后不开启新交易,只处理平仓。

这些规则不需要交给大模型,直接用代码执行会更可靠。大模型负责“判断方向”,代码负责“控制风险”。

5.4 多时间周期分析

很多策略只盯一个时间周期,容易在震荡行情中频繁进出。可以让 agent 同时分析 15 分钟、1 小时、4 小时的行情摘要,再综合判断:

15分钟:短期动能向上,但接近超买区。 1小时:价格在布林带中轨上方,偏多。 4小时:仍在上升通道内,但成交量萎缩。

这种多周期视角能让模型给出的决策更稳健,也更容易生成“等待回调再入场”这类合理建议。

6. 常见问题与排查思路

在搭建和运行 AI 交易代理的过程中,下面几个问题出现频率最高。我整理了现象、原因和解决思路,方便你对照排查。

问题现象常见原因解决思路
启动时报 API Key 为空环境变量未正确设置检查终端是否执行 export,或改用 .env 文件加载
模型返回内容无法解析为 JSON提示词格式约束不够强,或 max_tokens 太短增加 JSON 示例输出,调大 max_tokens
代理从不交易,一直输出 hold提示词过于保守,或行情数据为空检查数据源拉取是否成功,降低模型温度
代理频繁买卖,手续费吃掉收益缺少过滤条件,模型对噪音过于敏感增加多周期确认条件,禁止仓位为 0 时连续操作
模拟盘连接失败接口地址或 API Key 配置错误检查模拟盘 endpoint,确认配置处于 testnet 模式
模型响应速度太慢使用大模型且输入过长压缩行情数据,使用更小模型,开启流式输出
实际成交价和模型决策价差异大涨跌幅过快或使用市价单改用限价单,或增加滑点估算

6.1 模型不遵守输出格式

这是最常遇到的问题。解决办法是“给例子,而不是给描述”。在提示词中直接放一个具体的 JSON 示例:

{ "action": "buy", "position_pct": 0.05, "stop_loss": 51000, "reason": "价格突破20日均线,RSI从超卖区回升,短期动能偏多。" }

模型看到具体例子后,输出格式的稳定性会明显提升。如果还是偶发解析失败,可以在解析层做一次兜底重试。

6.2 回测与模拟盘结果差异大

很多人在本地回测表现很好,一上模拟盘就亏损。根本原因通常是回测时忽略了手续费、滑点和成交延迟。AI 交易代理在模拟盘阶段还多一个变量:模型输出的不确定性。

排查时建议把每一轮决策的“模型理由”和当时的行情快照一起录下来,观察模型是否真的依据数据做判断,还是只是随机喊单。

6.3 模型成本失控

如果 agent 频繁调用大模型,每月账单可能很可观。一个常见优化方案是先本地计算硬指标,只把“已经整理好的结论”发给模型。例如先用代码判断:

  • 价格是否高于 MA20?
  • RSI 是否大于 60?
  • 今日成交量是否放大?

只有这些条件满足时才发起模型调用,这样既省成本,又避免模型处理无意义数据。

7. 最佳实践与工程建议

无论你用的是 Delphi 项目,还是自己造的轮子,下面这些都是值得长期坚持的工程实践。

7.1 先跑模拟盘,再考虑实盘

AI 交易代理存在明显的“黑盒性”,你无法完全预测模型在极端行情下会做什么。因此一定要先在模拟盘上运行足够长的时间,建议至少覆盖一轮完整的震荡和趋势行情。模拟盘没有资金压力,但成交机制更接近真实环境,是检验策略的第一步。

7.2 把风控写成代码,而不是写进提示词

提示词里的规则是“软约束”,模型可能因为各种原因不遵守。风控应该写在与模型无关的执行层里。例如,开仓前必须检查:

def check_risk(action, position_pct, stop_loss, balance): if action not in ["buy", "sell", "hold"]: return False if position_pct > 0.1: return False if action == "buy" and stop_loss <= 0: return False if position_pct * balance < 10: # 最少下单金额 return False return True

只有通过检查的订单才会被发送到交易接口。这条建议能拦住大多数“模型抽风”的情况。

7.3 保留完整的决策日志

每一轮决策都应当记录:

  • 当前时间。
  • 行情快照与技术指标。
  • 模型原始输出和解析后的动作。
  • 最终成交结果。
  • 决策理由摘要。
  • 手续费和滑点。

这些日志不仅用于复盘,还能在模型“事后解释”时提供依据。SQLite 足够用,不需要一开始就上重型数据库。

7.4 用最小化模型验证链路

初学阶段不要一上来就使用顶级大模型,成本高且故障排查困难。先用gpt-4o-mini或本地小模型跑通全链路,再逐步替换为更强模型。这样能快速区分问题是“链路问题”还是“模型能力问题”。

7.5 注意合规与平台条款

不同国家和地区对自动交易有不同的监管要求,交易所平台对 API 下单也有使用条款限制。开发和测试时,务必使用模拟盘或虚拟资产。如果要进行实盘交易,必须先确认所在地区的合法性,并严格控制资金规模。任何自动交易系统都应该允许随时手动接管,避免完全无人值守。

8. 总结与学习路线

通过本文,你已经理解了一个 AI 交易代理的基本架构:观察层负责行情数据,推理层由大模型驱动,执行层负责下单,记忆层记录决策,风控模块提供安全边界。你也动手搭建了一个最小可运行的代理,知道怎么配置模型和数据源,也了解到模型不遵守格式、回测失真、成本失控这些高频问题的排查思路。

接下来,如果你想继续深入,可以考虑这些方向:

  • 阅读 Delphi 项目源码,理解 agent 循环和工具注册机制。
  • 给 agent 增加更多工具,比如新闻情绪分析、链上数据查询。
  • 尝试接入不同数据源,对比不同市场下 agent 的表现。
  • 学习回测框架,把策略历史表现量化出来。
  • 研究多智能体协作,比如“分析 agent 负责研究,执行 agent 负责下单”。

最后再次提醒:AI 交易代理的本质是一个“辅助决策工具”,它不保证盈利。千万不要因为模拟盘表现好就直接上大资金实盘。先把模拟盘跑通,把日志和风控做扎实,再逐步、小规模地放到真实环境验证。交易有风险,入场需谨慎。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询