跳到主要内容
用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录 | 极客日志
Python
用 OpenClaw + 飞书 Agent 打造 AI 自主模拟炒股系统:从零到实盘全记录 综述由AI生成 **作者:海风 | 日期:2026年3月17日** > 记录了我用 OpenClaw 2026.3.8 搭建 AI 自主模拟炒股系统的完整过程。trader Agent 拥有 5 万元虚拟资金,每天自主选股、自主决策买卖、自主管理仓位——完全不需要人类干预交易决策。 * * 一、背景:为什么让 AI Agent 炒股? 2026 年,AI Agent 已经从"聊天机器人"进化到能**自主执行复…
DevStack 发布于 2026/4/7 更新于 2026/5/20 14K 浏览作者:海风 | 日期: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.5 Agent 的"大脑",负责推理决策 行情数据 TuShare 高级 API A 股日线、基本面、交易日历 信息搜索 SearXNG + Jina Reader 搜索财经新闻辅助决策 金融数据 Skill TuShare 官方 Skill(waditu-tushare) 220+ 接口:龙虎榜、资金流向、财务报表等 服务器 阿里云 ECS 7×24 小时运行
OpenClaw 支持多子 Agent 架构,我配置了 4 个子 Agent:researcher (研究员)、coder (程序员)、writer (写手)和 trader (交易员)。本文的主角就是 trader 。
三、系统架构设计
3.1 两阶段每日循环
整个系统的核心是一个两阶段每日循环 :
graph TD A ["16:30 收盘分析" ] --> B ["拉取全市场行情" ] B --> C C --> D D --> E E --> F F --> --> H --> J J --> K K --> L L --> M M --> N N --> O H - >|"过夜"| O - >|"等待收盘"|
["更新持仓市值" ]
["评估持仓:持有/卖出/加仓" ]
["基础选股筛选(2000+只)" ]
["精选候选标的(3-5只)" ]
G
["生成次日交易计划 trade_plan.json" ]
G
["推送分析摘要到飞书" ]
I
["09:45 开盘执行" ]
["解冻 T+1 冻结仓位" ]
["读取交易计划" ]
["获取今日开盘价" ]
["自主判断:执行/调整/放弃" ]
["逐笔执行交易" ]
["推送成交报告到飞书" ]
.-
I
.-
A
3.2 目录结构 ~/.openclaw/workspace /trading/ ├── data/ │ ├── portfolio.json
3.3 关键设计原则
Agent 决策,脚本执行 :Agent 负责分析和决策,Python 脚本负责数据拉取和交易执行
严格模拟真实规则 :T+1、涨跌停限制、手续费,一个不少
防止 Agent 作弊 :所有数据必须来自 TuShare,禁止编造行情;禁止直接修改 portfolio.json
策略自主进化 :Agent 自己维护 strategy.md,每周复盘更新
四、核心代码实现 这是 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股 + 创业板 # 排除:科创板(688 xxx)、北交所、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):流动性不足
这是 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 )
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 请执行收盘分析流程,这是第一次运行。
7.1 选股结果 Agent 从 3699 只股票中,经过基础筛选得到约 2400 只,再根据自主制定的策略精选出 5 只重点关注股票 :
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
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 最小化安装没有 tree yum install -y tree 或用 find 替代创业板涨跌停与主板不同 创业板是 20%,主板是 10% 选股和交易引擎中分别处理 可能买入涨停股 选股筛除了但交易时没拦截 trade_engine 加入涨跌停硬拦截 科创板/北交所混入选股池 初始代码只过滤了主板代码 明确范围为上证+深市+创业板
十、加装官方 TuShare Skill:从"够用"到"专业级" 前面的 tushare_helper.py 覆盖了选股和交易的核心需求,但 TuShare 其实还有更多宝藏接口。好消息是,TuShare 官方发布了一个 OpenClaw 专属 Skill (skills.sh/waditu-tushare ),覆盖 220+ 数据接口 ,安装后 Agent 可以直接调用。
安装一行搞定 # 备份旧版(如有) mv ~/.openclaw/ skills/tushare ~/.openclaw/ skills/tushare.bak .old # 安装官方 Skill npx skills add <https :
安全评估:Gen Safe ✅ · Socket 0 alerts ✅ · Snyk Med Risk
效果立竿见影 安装后我在飞书问了一句"查询今日沪深港通资金流向",Agent 立刻返回了一份完整报告:
沪股通/深股通成交额与北向资金净买入
沪股通十大成交股(贵州茅台、兆易创新、紫金矿业……)
深股通十大成交股(宁德时代、中际旭创、天孚通信……)
港股通成交股(腾讯、阿里、小米、中海油……)
关键发现 :Agent 自动把资金流向数据和交易计划关联——"立讯精密在深股通中排名第5,获北向资金关注,支持明日买入计划"
最后一条特别惊喜:Agent 自主建立了不同数据源之间的关联 ,这说明它的分析已经超越了单一数据维度。
双通道架构 现在 trader Agent 拥有两个互补的数据通道:
通道 用途 接口数 tushare_helper.py 模拟炒股专用(选股、交易执行) ~10 个 TuShare 官方 Skill 深度分析(龙虎榜、资金流向、筹码、财报、技术因子、新闻……) 220+
十一、后续计划
手动验证期 (第 1 周):每天手动触发,观察 Agent 决策质量
全自动运行 (第 2 周起):切换到 crontab 全自动
策略进化 :观察 Agent 是否会根据盈亏自主调整策略
增加 Researcher 协作 :让 researcher Agent 搜索行业新闻,trader 综合判断
月度/季度收益对比 :与沪深 300 指数做基准对比
十二、写在最后 整个搭建过程大约花了一个傍晚。最让我惊喜的不是系统本身,而是 trader Agent 第一次运行就展现出了合理的投资逻辑 ——它会看量价关系、会分散仓位、会预留现金、会设置止损线。
当然,AI 炒股到底能不能赚钱,还需要时间来验证。但至少,OpenClaw 让我们能够快速搭建这样一个实验平台,用极低的成本去探索 AI Agent 在金融领域的可能性。
这不是炒股建议,这是一次技术实验。 但如果你也对 AI Agent 感兴趣,不妨动手试试——毕竟,5 万虚拟资金,输了也不心疼 。
如果这篇文章对你有帮助,欢迎点赞收藏关注!后续我会持续更新 trader Agent 的实盘表现和策略进化过程。
标签: OpenClawAI Agent模拟炒股TuShare飞书Kimi量化投资Python
相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online