用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录

用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录

作者:海风 | 日期:2026年3月17日

本文记录了我用 OpenClaw 2026.3.8 搭建 AI 自主模拟炒股系统的完整过程。trader Agent 拥有 5 万元虚拟资金,每天自主选股、自主决策买卖、自主管理仓位——完全不需要人类干预交易决策。

一、背景:为什么让 AI Agent 炒股?

2026 年,AI Agent 已经从"聊天机器人"进化到能自主执行复杂工作流的智能体。我一直在想:如果给一个 AI Agent 一笔钱,让它在 A 股市场上自主投资,它能做得怎么样?

这不是一个理论问题——借助 OpenClaw(一个开源 AI Agent 框架),我们真的可以搭建这样一个系统。于是在某个周二的傍晚,我开始了这个实验。

我的目标

  • 给 trader Agent 5 万元虚拟资金
  • 让它完全自主选股、买卖、管理仓位
  • 严格遵守 A 股交易规则(T+1、涨跌停、手续费)
  • 每天自动运行,我只看结果
  • 验证 AI Agent 的投资决策能力

二、技术栈一览

组件技术选型用途
Agent 框架OpenClaw 2026.3.8多 Agent 协作平台
前端交互飞书 Agent「多多助理」人机交互界面,接收 Agent 报告
大模型Kimi 2.5Agent 的"大脑",负责推理决策
行情数据TuShare 高级 APIA 股日线、基本面、交易日历
信息搜索SearXNG + Jina Reader搜索财经新闻辅助决策
金融数据 SkillTuShare 官方 Skill(waditu-tushare)220+ 接口:龙虎榜、资金流向、财务报表等
服务器阿里云 ECS7×24 小时运行

OpenClaw 支持多子 Agent 架构,我配置了 4 个子 Agent:researcher(研究员)、coder(程序员)、writer(写手)和 trader(交易员)。本文的主角就是 trader


三、系统架构设计

3.1 两阶段每日循环

整个系统的核心是一个两阶段每日循环

graph TD A["16:30 收盘分析"] --> B["拉取全市场行情"] B --> C["更新持仓市值"] C --> D["评估持仓:持有/卖出/加仓"] D --> E["基础选股筛选(2000+只)"] E --> F["精选候选标的(3-5只)"] F --> G["生成次日交易计划 trade_plan.json"] G --> H["推送分析摘要到飞书"] I["09:45 开盘执行"] --> J["解冻 T+1 冻结仓位"] J --> K["读取交易计划"] K --> L["获取今日开盘价"] L --> M["自主判断:执行/调整/放弃"] M --> N["逐笔执行交易"] N --> O["推送成交报告到飞书"] H -.->|"过夜"| I O -.->|"等待收盘"| A 

3.2 目录结构

~/.openclaw/workspace/trading/ ├── data/ │ ├── portfolio.json # 账户与持仓 │ ├── strategy.md # Agent 自主维护的策略文档 │ └── trade_plan.json # 次日交易计划 ├── scripts/ │ ├── tushare_helper.py # TuShare 数据助手 │ ├── check_trade_day.py # 交易日判断 │ └── trade_engine.py # 模拟交易引擎 └── logs/ ├── trade_log.csv # 交易日志 └── cron.log # 定时任务日志 

3.3 关键设计原则

  • Agent 决策,脚本执行:Agent 负责分析和决策,Python 脚本负责数据拉取和交易执行
  • 严格模拟真实规则:T+1、涨跌停限制、手续费,一个不少
  • 防止 Agent 作弊:所有数据必须来自 TuShare,禁止编造行情;禁止直接修改 portfolio.json
  • 策略自主进化:Agent 自己维护 strategy.md,每周复盘更新

四、核心代码实现

4.1 TuShare 数据助手(tushare_helper.py

这是 Agent 的"眼睛"——封装了所有行情数据接口:

# 核心函数一览 def get_trade_date(offset=0): # 获取最近交易日 def is_trade_day(date_str=None): # 判断是否交易日 def get_daily_data(trade_date): # 全市场日线行情 def get_daily_basic(trade_date): # 基本面指标(PE/PB/换手率) def get_stock_history(code, days): # 个股历史K线 def get_open_price(codes): # 获取开盘价 def screen_stocks(trade_date): # 基础选股筛选 

选股筛选逻辑——这是 Agent 选股的第一道过滤网:

def screen_stocks(trade_date=None): basic = get_daily_basic(trade_date) daily = get_daily_data(trade_date) merged = pd.merge(daily, basic, on=['ts_code', 'trade_date']) # 选股范围:上证A股 + 深市A股 + 创业板 # 排除:科创板(688xxx)、北交所、ST股 filtered = merged[ (merged['ts_code'].str.startswith(('00', '60', '30'))) & (~merged['ts_code'].str.startswith('688')) & (~merged['ts_code'].str.contains('ST')) & (merged['pct_chg'] < 9.9) # 排除涨停 & (merged['pct_chg'] > -9.9) # 排除跌停 & (merged['total_mv'] > 50) # 市值 > 50亿 & (merged['turnover_rate'] > 1) # 换手率 > 1% ] # 创业板涨跌停为20%,需单独处理 is_gem = filtered['ts_code'].str.startswith('30') gem_limit = filtered[is_gem & (filtered['pct_chg'].abs() < 19.9)] main_board = filtered[~is_gem] filtered = pd.concat([main_board, gem_limit]) return filtered.sort_values('vol', ascending=False) 

选股范围的考量:

  • 上证A股(60xxxx):大盘蓝筹为主
  • 深市A股(00xxxx):中小盘标的丰富
  • 创业板(30xxxx):成长性强,20% 涨跌停带来更多机会
  • 科创板(688xxx):门槛高、波动大,暂不纳入
  • 北交所(8/4xxxxx):流动性不足

4.2 模拟交易引擎(trade_engine.py

这是 Agent 的"手"——执行实际的买卖操作:

def buy_stock(code, name, price, shares,): # 1. 涨停检查:涨停的股票无法买入 pct_chg = get_current_pct_chg(code) limit = 19.9 if code.startswith('30') else 9.9 if pct_chg >= limit: return {"success": False, "msg": f"{name} 已涨停,无法买入"} # 2. 股数取整到100的倍数 shares = (shares // 100) * 100 # 3. 计算费用:佣金万2.5(最低5元) commission = max(amount * 0.00025, 5) # 4. 资金检查、扣款、更新持仓 # 5. T+1 冻结:当天买入的股票今天不能卖 # 6. 写入交易日志 CSV def sell_stock(code, price, shares=None,): # 1. 跌停检查:跌停的股票无法卖出 # 2. T+1 检查:今天买的不能今天卖 # 3. 计算费用:佣金 + 印花税千1 # 4. 收款、更新持仓、写日志 

涨跌停硬拦截是一个重要的设计——即使 Agent 的决策出了偏差,引擎层面也会阻止不可能的操作。这保证了模拟的真实性。

4.3 手续费模型

def calc_fee(amount, direction): commission = max(amount * 0.00025, 5) # 佣金万2.5,最低5元 stamp_tax = amount * 0.001 if direction == 'sell' else 0 # 卖出印花税千1 return round(commission + stamp_tax, 2) 

与真实 A 股完全一致,让模拟结果更有参考价值。


五、Agent 的"大脑"——AGENTS.md 规则配置

OpenClaw 通过 AGENTS.md 文件给 Agent 下达指令。这是 trader Agent 的核心规则(精简版):

## trader 子 Agent 模拟炒股系统 ### 每日工作流程 **阶段一:收盘分析(16:30)** 1. 读取持仓 → 2. 拉行情 → 3. 更新市值 → 4. 评估持仓 → 5. 筛选新标的 → 6. 生成交易计划 → 7. 推送摘要 **阶段二:开盘执行(09:45)** 1. 解冻T+1 → 2. 读计划 → 3. 获取开盘价 → 4. 自主判断执行 → 5. 推送成交报告 ### 交易规则(硬性) - T+1、最小100股、佣金万2.5+印花税千1 - 涨停不买、跌停不卖(引擎自动拦截) - 仅限上证A股、深市A股、创业板 ### 风控红线 - 单股仓位 ≤ 30%,总仓位 ≤ 80% - 单股止损 ≥ 8%,总回撤 ≥ 10% 暂停交易 ### 绝对禁止 - 不允许编造行情数据 - 不允许修改历史交易记录 - 不允许绕过 trade_engine.py 直接改 portfolio.json 

这套规则的设计哲学是:给 Agent 足够的自主权去决策,但用硬规则约束它不能做危险的事


六、自动化:Crontab 定时触发

三个定时任务驱动整个系统:

# 收盘分析:每个工作日 16:30 30 16 * * 1-5 /bin/bash ~/trading/scripts/trigger_close_analysis.sh # 开盘执行:每个工作日 09:45 45 9 * * 1-5 /bin/bash ~/trading/scripts/trigger_open_execute.sh # 周末复盘:每周日 10:00 0 10 * * 0 /bin/bash ~/trading/scripts/trigger_weekly_review.sh 

每个触发脚本都会先判断是否为交易日(调用 TuShare 交易日历),非交易日自动跳过。


七、实战首秀:Agent 的第一次收盘分析

搭建完成后,我在飞书给 trader Agent 发了第一条指令:

@trader 请执行收盘分析流程,这是第一次运行。

Agent 的表现让我惊喜:

7.1 选股结果

Agent 从 3699 只股票中,经过基础筛选得到约 2400 只,再根据自主制定的策略精选出 5 只重点关注股票

代码名称收盘价Agent 看好理由
002475.SZ立讯精密49.83消费电子龙头,量价配合
300059.SZ东方财富21.56券商互联网龙头
600930.SH华电新能6.80新能源赛道,低价放量
002130.SZ沃尔核材27.51核电概念
601899.SH紫金矿业34.90有色资源龙头(仅关注未买入)

7.2 自主制定的策略

Agent 写入 strategy.md 的核心策略:

  • 核心原则:趋势跟踪 + 量价配合
  • 基础筛选:价格 5-50 元、成交额 > 1 亿、涨幅 0-8%
  • 技术面:MA5 > MA10 多头排列
  • 仓位控制:单股 ≤ 30%,总仓位 ≤ 80%
  • 风控:止损 -8%,止盈 +15%

7.3 生成的交易计划

计划明日买入 4 只股票,总投入约 4 万元,预留约 1 万现金(20%),完全符合风控规则。

这一切都是 Agent 自主完成的,我没有干预任何决策。


八、测试验证过程

在让 Agent 正式"上岗"之前,我做了完整的测试:

8.1 数据接口测试

# TuShare 连接 ✅ $ python3 tushare_helper.py trade_date 20260317 # 基础选股 ✅ —— 筛出 2422 只股票 $ python3 tushare_helper.py screen 共筛选出 2422 只股票 # 个股历史 ✅ —— 平安银行30天K线 $ python3 tushare_helper.py stock 000001.SZ 30 

8.2 交易引擎测试

# 初始账户 ✅ $ python3 trade_engine.py summary 初始资金:50,000.00 元 当前现金:50,000.00 元 # 模拟买入 ✅ $ python3 trade_engine.py buy 000001.SZ 平安银行 12.50 500 "测试买入" 买入 平安银行 500股 @ 12.5,花费 6255(含佣金 5),剩余现金 43745 # 佣金计算验证:12.5 × 500 = 6250,佣金 = max(6250×0.00025, 5) = 5 ✅ # 总花费 = 6250 + 5 = 6255 ✅ 

所有测试一次通过!


九、踩过的坑

问题原因解决方案
tree: command not found阿里云 ECS 最小化安装没有 treeyum install -y tree 或用 find 替代
创业板涨跌停与主板不同创业板是 20%,主板是 10%选股和交易引擎中分别处理
可能买入涨停股选股筛除了但交易时没拦截trade_engine 加入涨跌停硬拦截
科创板/北交所混入选股池初始代码只过滤了主板代码明确范围为上证+深市+创业板

十、加装官方 TuShare Skill:从"够用"到"专业级"

前面的 tushare_helper.py 覆盖了选股和交易的核心需求,但 TuShare 其实还有更多宝藏接口。好消息是,TuShare 官方发布了一个 OpenClaw 专属 Skillskills.sh/waditu-tushare),覆盖 220+ 数据接口,安装后 Agent 可以直接调用。

安装一行搞定

# 备份旧版(如有) mv ~/.openclaw/skills/tushare ~/.openclaw/skills/tushare.bak.old # 安装官方 Skill npx skills add <https://github.com/waditu-tushare/skills> --skill tushare # → Installation scope: Global # → Installation method: Symlink (Recommended) # → Proceed: Yes # 重启 Gateway openclaw gateway restart 

安全评估:Gen Safe ✅ · Socket 0 alerts ✅ · Snyk Med Risk 

效果立竿见影

安装后我在飞书问了一句"查询今日沪深港通资金流向",Agent 立刻返回了一份完整报告:

  •  沪股通/深股通成交额与北向资金净买入
  •  沪股通十大成交股(贵州茅台、兆易创新、紫金矿业……)
  •  深股通十大成交股(宁德时代、中际旭创、天孚通信……)
  •  港股通成交股(腾讯、阿里、小米、中海油……)
  • 关键发现:Agent 自动把资金流向数据和交易计划关联——"立讯精密在深股通中排名第5,获北向资金关注,支持明日买入计划"

最后一条特别惊喜:Agent 自主建立了不同数据源之间的关联,这说明它的分析已经超越了单一数据维度。

双通道架构

现在 trader Agent 拥有两个互补的数据通道:

通道用途接口数
 tushare_helper.py模拟炒股专用(选股、交易执行)~10 个
 TuShare 官方 Skill深度分析(龙虎榜、资金流向、筹码、财报、技术因子、新闻……)220+

十一、后续计划

  1. 手动验证期(第 1 周):每天手动触发,观察 Agent 决策质量
  2. 全自动运行(第 2 周起):切换到 crontab 全自动
  3. 策略进化:观察 Agent 是否会根据盈亏自主调整策略
  4. 增加 Researcher 协作:让 researcher Agent 搜索行业新闻,trader 综合判断
  5. 月度/季度收益对比:与沪深 300 指数做基准对比

十二、写在最后

整个搭建过程大约花了一个傍晚。最让我惊喜的不是系统本身,而是 trader Agent 第一次运行就展现出了合理的投资逻辑——它会看量价关系、会分散仓位、会预留现金、会设置止损线。

当然,AI 炒股到底能不能赚钱,还需要时间来验证。但至少,OpenClaw 让我们能够快速搭建这样一个实验平台,用极低的成本去探索 AI Agent 在金融领域的可能性。

这不是炒股建议,这是一次技术实验。 但如果你也对 AI Agent 感兴趣,不妨动手试试——毕竟,5 万虚拟资金,输了也不心疼 。


相关资源

  • OpenClaw 官方文档:GitHub
  • TuShare 数据接口:tushare.pro
  • 本文完整代码和配置:见附属指南页面 

如果这篇文章对你有帮助,欢迎点赞收藏关注!后续我会持续更新 trader Agent 的实盘表现和策略进化过程。

标签:OpenClawAI Agent模拟炒股TuShare飞书Kimi量化投资Python

Read more

小龙虾配置飞书机器人(适合本地部署)

小龙虾配置飞书机器人(适合本地部署)

🚀 OpenClaw 手把手教学:配置飞书机器人 📖 目录 1. 前置准备 2. 创建飞书应用 3. 配置机器人能力 4. 获取必要凭证 5. 配置 OpenClaw 6. 测试机器人 前置准备 在开始之前,请确保你具备以下条件: ✅ 必需条件 * 飞书管理员权限 * 需要创建企业自建应用的权限 * 或联系管理员协助创建 OpenClaw 已安装 # 检查是否已安装 openclaw --version 📋 准备清单 * OpenClaw 已安装并运行 * 有飞书企业管理员权限 * 基本的命令行操作能力 创建飞书应用 步骤 1:进入飞书开放平台 1. 打开浏览器,访问 飞书开放平台 2. 使用��书账号登录 点击右上角 “开发者后台” 步骤 2:创建企业自建应用

Windows安装Neo4j保姆级教程(图文详解)

Windows安装Neo4j保姆级教程(图文详解)

文章目录 * 前言 * 系统要求 * 安装Java环境 * 步骤1:检查Java版本 * 步骤2:下载Java JDK * 步骤3:安装Java JDK * 下载Neo4j * 步骤1:访问官方网站下载Neo4j * 步骤2:解压Neo4j * 启动Neo4j服务 * 步骤1:以管理员身份打开命令提示符 * 步骤2:导航到Neo4j的bin目录 * 步骤3:安装Neo4j服务 * 步骤4:启动Neo4j服务 * 步骤5:验证服务状态 * 访问Neo4j * 基本操作和配置 * 常用管理命令 * 配置文件修改 * 常见问题解决 * 问题1:端口被占用 * 问题2:Java版本不匹配 * 问题3:服务启动失败 * 总结 前言 Neo4j是一款强大的图数据库,特别适合处理复杂的关系数据。本教程将手把手教你在Windows系统上安装Neo4j,并配置可视化工具,让你快速上手图数据库的世界。 系统要求 在开始安装之前,请确保你的系统满足以下要求: 操作系统:

Microi吾码:从零到服装ERP:低代码打造企业级系统的实战之旅

Microi吾码:从零到服装ERP:低代码打造企业级系统的实战之旅

个人主页:chian-ocean 文章专栏 从零到服装ERP:吾码平台打造企业级系统的实战之旅 关键词:吾码平台、低代码、服装ERP、多表关系、自动化、开发实例 引言 在传统的服装行业管理中,ERP系统已成为提高效率、降低成本、优化资源分配的核心工具。然而,开发一个功能全面、覆盖采购、库存、销售、财务等模块的ERP系统,往往需要投入大量时间和人力资源。在吾码低代码平台的支持下,1人仅用1个月便完成了包含100+表的企业级服装ERP系统。本文将从项目概述、开发细节到关键代码段详细剖析整个开发过程,展示低代码技术的强大能力。 第一部分:项目概览 1.1 项目背景 * 项目需求: * 支持采购、库存、销售、客户管理、财务报表等多个模块。 * 包括100+数据表,涵盖复杂的业务逻辑与数据关联。 * 需实现流程自动化(如采购审批、库存提醒)。 * 开发目标: * 快速完成开发,并保证系统稳定性与扩展性。

龙虾机器人(OpenClaw)本地部署完全技术指南

龙虾机器人(OpenClaw)本地部署完全技术指南

龙虾机器人(OpenClaw)本地部署完全技术指南 前言:什么是“龙虾机器人”? 在开始部署之前,我们需要明确部署的对象。通常所说的“龙虾机器人”指的是开源项目 OpenClaw(曾用名:Clawdbot、Moltbot)。它由程序员彼得·斯坦伯格开发,是一个开源的、可本地部署的通用型AI代理系统。与ChatGPT等对话式AI不同,OpenClaw被赋予了操作系统的权限:它可以执行终端命令、读写文件、操控浏览器、安装软件,甚至通过MCP协议调用外部工具。 由于其强大的系统操控能力,安全性是部署时需关注的首要问题。官方及社区普遍建议:不要在主力机或存有敏感数据的生产环境直接裸奔部署,最好使用虚拟机、Docker容器或专用硬件(如Mac Mini或AI开发盒子)进行隔离。 第一章:环境准备与核心依赖 在安装OpenClaw之前,必须准备好运行环境。OpenClaw的核心由TypeScript编写,因此Node.js是必不可少的运行环境。此外,根据安装方式的不同,可能还需要Git、Docker或Python环境。 1.1 硬件建议与系统选择 * Linux