作者:海风 | 日期: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["基础选股筛选(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, reason=''):
    # 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, reason=''):
    # 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 最小化安装没有 tree yum 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 的实盘表现和策略进化过程。

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

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐