AI交易代理实战:从零构建自己的智能量化交易系统

发布时间:2026/8/30 3:48:19
AI交易代理实战:从零构建自己的智能量化交易系统 最近在 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 交易代理是“一个能自己拿主意”的程序它不像传统量化策略那样只执行你写死的买卖规则而是借助大模型的推理能力把市场行情、新闻、技术指标甚至宏观经济数据作为上下文经过分析后输出一个交易动作。它最典型的运行循环如下获取当前市场数据比如 K 线、最新价、成交量。读取用户设定的投资目标和风险偏好。把上述信息交给大模型要求模型输出一个结构化决策。校验模型输出确认动作合法后再提交到交易所。记录决策理由、当时的持仓、当时的行情快照方便复盘。这已经不是一个简单的“策略回测脚本”而是一个带有感知、推理、行动、反思能力的智能体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_data、calculate_rsi、place_order这些工具然后根据工具返回结果继续推理。这样 agent 就不是一次性输出结论而是能主动获取信息后再决定。2.3 执行层订单与仓位管理执行层把模型输出的决策翻译成真实或模拟的订单。它必须处理几个关键问题订单方向买入、卖出、持有。订单类型市价单、限价单。仓位比例用总资金的多少比例下单。杠杆与保证金如果交易合约还要考虑杠杆倍数和强平价格。安全起见执行层最重要的职责是“校验”而不是“执行”。模型分析能力再强也可能突然输出一个不合理的仓位所以执行层必须设置硬性上限。2.4 记忆层对话记忆与策略记忆记忆层是 AI 交易代理比较容易忽视的部分。每次调用模型时如果只把当前行情塞进上下文模型就会“失忆”看不到上一轮它自己给出的判断和理由。这会带来两个问题无法对之前的决策做复盘。策略行为不稳定同一个行情可能一会儿做多一会儿做空。合理的做法是维护一个会话记忆记录历史决策、当时的理由和最终结果。在下一轮推理时将最近的几条决策作为参考。这就是一个轻量级的“交易日志系统”。2.5 安全边界风控模块任何自动交易工具都不能少了风控。AI 交易代理的安全边界至少要覆盖单笔最大亏损比例。总仓位上限和最大回撤限制。不允许交易的时段或品种黑名单。模型输出非法动作时的熔断处理。如果风控模块不完善AI 交易代理在模拟盘上跑得再好都不能上实盘。这是建议中优先级最高的一条。3. 环境准备与版本说明由于这类 AI 项目迭代速度快具体版本需要根据你实际 clone 的仓库来确认。下面以我实验时的常见环境为例重点演示配置思路。3.1 运行环境操作系统建议 Linux 或 macOS。Windows 也能运行但部分原生库可能要多花时间解决依赖。Python3.10 或更高。AI Agent 生态基本都逐步迁移到新版 Python。包管理工具pip、poetry 或 uv任选其一。开发工具VS Code 或 PyCharm配合 Python 插件即可。3.2 模型 APIDelphi 这类框架通常支持多种大模型后端。常见的几类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( configconfig, system_promptadvice_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()做了什么从data_source拉取最新 K 线计算技术指标。把指标摘要填充进system_prompt中的{market_summary}占位符。调用大模型得到 JSON 输出。解析 JSON通过风控校验。在模拟盘提交订单并记录日志。4.4 运行与验证在激活虚拟环境后运行export OPENAI_API_KEY你的API Key python examples/run_agent.py预期输出类似 决策结果 动作: hold 仓位: 0 止损: 0 理由: 当前价格在布林带中轨附近RSI 为 52没有明确方向不适合开仓。第一次跑通时模型输出hold是很正常的。这表示链路是完整的模型确实看到了行情也按照规则给出了保守决策。4.5 结果说明与首次迭代当你看到类似输出时说明你的第一个 AI 交易代理已经运行成功。此时我建议先不急着改策略而是做三件事查看数据库里记录的决策日志确认每一轮决策都有行情快照。多运行几轮观察不同行情下模型的决策是否稳定。把模型输出和真实行情对比判断模型的理解是否准确。如果发现模型频繁乱买乱卖优先检查提示词里是否把仓位上限写清楚而不是先调温度参数。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], length14) df[ma20] ta.sma(df[close], length20) df[bb_upper], df[bb_middle], df[bb_lower] ta.bbands( df[close], length20, std2 ) 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 频繁调用大模型每月账单可能很可观。一个常见优化方案是先本地计算硬指标只把“已经整理好的结论”发给模型。例如先用代码判断价格是否高于 MA20RSI 是否大于 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 交易代理的本质是一个“辅助决策工具”它不保证盈利。千万不要因为模拟盘表现好就直接上大资金实盘。先把模拟盘跑通把日志和风控做扎实再逐步、小规模地放到真实环境验证。交易有风险入场需谨慎。