Back to home

sfeng49

ashare-agent

基于 DeepSeek Harness + AKShare 的本地 A 股 AI Agent 工作台:数据获取 / 每日晨报 / 交易复盘三大技能,只做分析、不做交易。

Stars
0
Language
Python
Created
Aug 17, 2026
Updated
Aug 17, 2026

Introduction

ashare-agent

基于 DeepSeek Harness(dsh)+ AKShare 的本地 A 股 AI Agent 工作台

License: MIT Python

A 股研究与复盘工作台:数据获取 / 每日晨报 / 交易复盘三大技能,外加回测、选股、监控的脚本骨架。Agent 只做分析、不做交易;所有数字来自数据接口实际输出,拿不到就明说,绝不估算编造。

⚠️ 免责声明:本项目不含任何实盘下单能力,不构成投资建议。数据来自公开接口,可能存在延迟、缺失或错误,请自行核对。

目录

特性

  • 🧭 3 个 dsh 技能ashare-data(数据获取)、ashare-report(每日晨报)、ashare-review(交易复盘),SKILL.md 格式,dsh 原生识别
  • 📜 AGENTS.md 投资准则:铁律约束——不做买卖决策、禁用「目标价/必涨」措辞、数字必须来自脚本、数据拿不到就明说
  • 🐍 Python 3.11 数据环境:akshare + pandas + backtrader + matplotlib + tabulate,版本锁定在 requirements.txt
  • 📈 可复用脚本 scripts/morning_report.py:一条命令生成晨报,已处理数据源切换与代理绕过
  • 🔒 默认脱敏:自选股 / 持仓 / 交割单等个人金融数据被 .gitignore,只提交 *.example 模板

快速开始

前置要求

  • Python 3.11+(推荐 3.11,兼容老牌 backtrader)
  • dsh(DeepSeek Harness CLI)
  • git

安装

git clone https://github.com/sfeng49/ashare-agent.git
cd ashare-agent

# 一键初始化:建 venv、装依赖、生成数据文件、接好技能发现链接
./setup.sh

等价手动步骤:

python3.11 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp data/watchlist.example.txt data/watchlist.txt   # 换成你的自选股
cp data/positions.example.csv data/positions.csv
mkdir -p .dsh && ln -sfn ../skills .dsh/skills

让 dsh 识别技能

dsh 只扫描固定技能根目录(.dsh/skills.agents/skills~/.dsh/skills~/.agents/skills),并不默认识别工作区顶层的 skills/setup.sh 已创建项目级链接 .dsh/skills -> ../skills

如需让技能在任意工作区可用,再执行:

ln -sfn "$(pwd)/skills" ~/.dsh/skills

跑第一个晨报

# 直接用脚本(不依赖 dsh)
.venv/bin/python scripts/morning_report.py --save

# 或在 dsh 中把工作区指向本目录后
执行 ashare-report

六个任务

这是工作台的完整玩法,每个任务都可用一句话在 dsh 里发起。

#任务一句话触发产出
1每日晨报执行 ashare-reportoutput/daily/YYYY-MM-DD-morning.md
2年报速读 + 财务排雷把 PDF 放进 data/reports/ 后让 Agent 分析提取 + 横向对比 + 矛盾清单 + 风险清单
3自然语言选股描述条件让 Agent 生成脚本参数化的 scripts/screener.py
4回测「盘感」用 backtrader 回测你的交易习惯年化/回撤/夏普 + 参数敏感性测试
5盯盘监控scripts/monitor.pywebhook 推送异动(去重)
6交易复盘交割单放 data/trades/执行 ashare-review胜率/盈亏比/行为模式/相对沪深300 的 alpha

任务示例 prompt

任务一 · 每日晨报
读取 data/watchlist.txt 里的自选股,生成今日晨报:
1. 大盘:昨日三大指数涨跌幅、成交额、北向资金净流入
2. 自选股:昨日涨跌幅、换手率、是否放量(对比 20 日均量)
3. 消息面:每只自选股近 24 小时的新闻标题,按重要性排序
4. 异动标记:涨跌幅绝对值 > 5% 或成交量 > 20日均量 2 倍的,单独列出并说明可能原因
输出为 markdown,存到 output/daily/YYYY-MM-DD-morning.md,存前先给我看内容。
任务二 · 年报速读 + 财务排雷
读取 data/reports/600xxx_2025年报.pdf:
【提取】营收/净利润近三年趋势、分业务营收占比、毛利率、经营性现金流 vs 净利润、
应收账款与存货周转率、商誉占净资产比例、有息负债率
【交叉验证】用 akshare 拉同行业市值相近 3 家做横向对比,指出明显偏离项
【找矛盾】对比管理层表述与实际财务数据,列出口径不一致处
【风险清单】按严重程度列出疑点,每条指明原文页码与对应数字
不要给投资建议,只呈现事实和疑点。
任务三 · 自然语言选股
筛选全市场股票:近三年 ROE 连续 >15%、当前 PE(TTM) 低于行业中位数、
近一月北向持股比例上升;剔除 ST、次新、近 3 个月解禁高峰、近一年财务造假处罚/非标审计意见。
写成 scripts/screener.py,阈值做成常量放开头。跑一遍输出结果,并告诉我:
1) 每层各过滤掉多少只 2) 这套条件的明显缺陷在哪。
任务四 · 回测「盘感」
我的习惯:放量(成交量 > 5日均量1.5倍)突破 20 日均线买入,跌破 10 日均线卖出。
用 backtrader 回测:沪深300成分股,2020-01-01 至今,初始资金 10 万、单只最大仓位 20%、
手续费万三、印花税千一(卖出)、滑点 0.1%。
输出:年化、最大回撤、夏普、胜率、平均持仓天数、交易次数,并与同期沪深300定投对比。
再做敏感性测试:均线参数在 5/10/20/30/60 遍历,看参数是否落在“运气好”的点上。
任务五 · 盯盘监控
写 scripts/monitor.py:交易时段每 5 分钟检查自选股,触发条件为涨跌幅 ±5%、
成交量突破今日均量3倍、上榜龙虎榜、发布公告;触发后推到 Server酱/钉钉(webhook 从环境变量读);
同一只股同一类型事件 30 分钟内只推一次。先跑一次模拟(只打印不推送)给我看。
任务六 · 交易复盘
分析 data/trades/ 下过去一年的交割单:
1. 总体:胜率、盈亏比、平均持仓天数、总收益 vs 同期沪深300
2. 亏损归因:亏损最大的 10 笔共同点(买点/卖点/选股)
3. 行为模式:盈利单 vs 亏损单持仓天数、是否“拿不住盈利死扛亏损”、交易频率与收益相关性
4. 时间分布:什么时段/环境下胜率最低
5. 若一年前买入沪深300ETF 持有至今收益多少?主动交易创造了正 alpha 还是负 alpha?
直接、不留情面地陈述结论。

晨报示例输出

# A 股晨报 · 2026-08-17(周一)
> 生成时间:2026-08-17 11:54(盘中,数据为快照,会变动)
> 数据来源:akshare —— 日线/实时走 sina;个股新闻/北向资金走 eastmoney

## 一句话摘要
三大指数盘中多数上涨;600519 贵州茅台 盘中 -4.2% 领跌。

## 一、大盘
| 指数 | 收盘 | 涨跌幅 |
|---|---|---|
| 上证指数 | 3927.18 | +0.01% |
| 深证成指 | 14354.31 | +0.45% |
| 创业板指 | 3626.30 | +1.12% |
……

技能

技能能力触发
ashare-data实时行情、历史 K 线(前复权)、财务摘要、龙虎榜、北向资金、个股新闻任何 A 股数据请求
ashare-report每日晨报:大盘 + 自选股 + 消息面 + 异动标记晨报/早报/盘前简报
ashare-review交易复盘:胜率/盈亏比/归因/行为模式/alpha复盘交割单、评估绩效

目录结构

.
├── AGENTS.md                 # 全局投资准则(Agent 每次任务都读)
├── skills/                   # dsh 技能(SKILL.md)
│   ├── ashare-data/          # 数据获取
│   ├── ashare-report/        # 每日晨报
│   └── ashare-review/        # 交易复盘
├── data/
│   ├── watchlist.example.txt # 自选股模板(复制为 watchlist.txt)
│   ├── positions.example.csv # 持仓模板(复制为 positions.csv)
│   └── trades/               # 交割单(复盘用,见 README)
├── output/daily/             # 每日报告输出
├── scripts/morning_report.py # 可复用晨报脚本
├── setup.sh                  # 一键初始化
├── requirements.txt          # 依赖锁定
└── LICENSE                   # MIT

数据源与已知限制

数据来源备注
日线 / 实时行情 / 指数sinaeastmoney K 线主机在部分网络下不可用,脚本固定走 sina
个股新闻 / 沪深港通资金(南向)eastmoney
北向净买额交易所自 2024 年 8 月起停止实时披露,接口返回 0

约定:A 股代码 6 位不带前缀;日期 YYYYMMDD;历史行情默认前复权(adjust="qfq");akshare 接口名随版本变动,报错先查 inspect.signature 再调,不凭记忆硬猜。

定时任务

交易日早 8:30 自动生成晨报:

crontab -e
# 加入下面一行(替换成你的实际路径)
30 8 * * 1-5 cd ~/ashare-agent && .venv/bin/python scripts/morning_report.py --save >> logs/morning.log 2>&1

安全与隐私

  • Agent 只做分析、不做买卖决策,最终判断由你本人做;AGENTS.md 已钉死这条铁律。
  • 任何写/删文件、下单类操作必须先问你AGENTS.md 铁律第 5 条)。
  • 实盘下单接口物理隔离:easytrader 等不要放进本工作区,Agent 只输出「操作清单」,你手动去券商 App 下单。
  • 脱敏:个人自选股/持仓/交割单/生成的报告均被 .gitignore,不会提交到公开仓库。
  • 权限预设:dsh 建议用 workspace-write(审批 ask)而非 danger-full-access(审批 never),让危险操作真正走审批门禁。
  • 幻觉抽检:定期随机挑报告里 5 个数字去交易软件核对,确认配置的可靠度量级。

常见问题

dsh 里看不到我新建的技能?

dsh 只扫 .dsh/skills.agents/skills~/.dsh/skills~/.agents/skills,不扫工作区顶层 skills/。用 ln -sfn ../skills .dsh/skills(项目级)或 ln -sfn "$(pwd)/skills" ~/.dsh/skills(全局)接入。

akshare 报 ProxyError / 连接被关闭?

部分机器配了本地代理(如 Clash)但未运行,Python 的 requests 会读到 macOS 系统代理导致连接失败。脚本已默认 no_proxy='*' 绕过;手动跑时也可先 export no_proxy='*'

北向资金净流入为什么是 0?

交易所自 2024 年 8 月起停止披露北向实时净买额,这是数据本身没有了,不是接口坏了。

为什么用 Python 3.11 而不是更新的版本?

backtrader 较老,3.13/3.14 存在兼容风险;3.11 是量化栈的稳妥选择。setup.sh 会自动挑选 python3.11/3.12/3

许可证

MIT