今天你 AI 赋能了吗?打开浏览器,在地址栏输入 xuefulu.ai,按下 Enter 即可访问学府路1号!
2026年10月17日 星期六 12:32:20
常用网址:案例设计 | 案例导航 | 学府路1号 https://xuefulu.ai | 下载 WorkBuddy https://xuefulu.ai/WorkBuddy.html

一、案例背景与采集目标

上一个案例我们采的是「此刻」的行情——一张快照,看完就旧了。真正有价值的,是历史:把一只股票过去一年的每个交易日都取回来,才能看趋势、算指标、做回看。

示范站点选东方财富网的历史行情页,以 600519 为例,地址 https://quote.eastmoney.com/sh600519.html。这只股票的页面里带有「历史行情」入口,能按日期区间取到每一交易日的开盘、最高、最低、收盘、成交量、成交额等日线数据。本案例要做的事是:批量取历史日线,落成 CSV 和 SQLite 两张表,并学会增量更新——只补没有的交易日,不重复下载已有的。

1.1 这个案例要拿到什么

1.2 为什么要「入库」

做法适合场景短板
只存 CSV小数据、人工查看数据量大时打开慢,查起来不方便
CSV + SQLite 双份既要人工看、又要程序查需要维护两份,但收益最大
只存 SQLite纯程序查询不打开数据库就看不了
每次全量重下偶尔采一次浪费、易错、无法增量
CSV 是给人看的,SQLite 是给程序看的。两样都留,既方便你直接用表格软件检查,也方便以后做批量计算。
声明照旧:本案例数据仅用于教学,不构成任何投资建议;采集的是公开的历史行情,非实时数据。

目标站点与交付产物

下表是本篇用到的真实站点。绿色是课堂可稳定复现的示范站点;橙色是延伸站点,多数有登录墙或风控,课堂上只讲结构、原理与合规边界,不教绕过。

项目内容
示范站点东方财富 · 个股行情(贵州茅台)
https://quote.eastmoney.com/sh600519.html
个股页带 K 线与历史行情入口,可按日期区间取日线;配合案例 13 的实时行情做「存量入库 + 增量更新」
延伸站点
  • 搜狐证券 · 历史行情(贵州茅台) https://q.stock.sohu.com/cn/600519/lshq.shtml(可按日期区间取历史行情,字段干净、页面轻)
  • AKShare · 股票数据接口文档 https://akshare.akfamily.xyz/data/stock/stock.html(开源数据接口,课堂只讲数据口径与合规边界)
交付产物
  • 数据明细.xlsx(日线明细 + 指标列)
  • 数据明细.html(K 线数据表格,按日期倒序)
  • 数据看板.html(收盘价折线 + 均线 + 涨跌幅柱)
  • SQLite 数据库文件(含主键与索引说明)
  • 技能压缩包(历史行情增量入库器,支持多代码批量)
难度★★☆ 中
合规提示同案例 13。另需注意:历史行情接口常有频次限制,批量取多只股票时要加延时。

二、数据源与字段设计

数据源:东方财富网历史行情页,示范股票 sh600519,地址 https://quote.eastmoney.com/sh600519.html。页面里的历史行情模块按日期区间返回日线数据,是「按代码 + 日期区间取数」的典型形态。

2.1 站点信息

项目内容
站点全称东方财富网 · 个股行情与历史行情(quote.eastmoney.com)
示范网址https://quote.eastmoney.com/sh600519.html
页面形态个股页顶部为实时行情,下方 K 线 / 历史行情区可按日期区间取日线数据,字段规整
代码前缀沪市用 sh、深市用 sz,如 sh600519、sz000001
规模说明单只股票上市以来通常数千个交易日;每股每日约 10 余个字段
访问约束公开数据,无需登录;批量取多只股票时要加延时,避免频率过高

2.2 延伸站点(可作对照)

站点网址教学用途
新浪财经 · 个股页(贵州茅台)https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml老牌公开行情页,可按代码查看历史数据,便于对照
AKShare 开源数据接口https://akshare.akfamily.xyz/开源数据接口,课堂只讲数据口径与合规边界

2.3 完整字段表(15 个字段)

示例值取自 600519(贵州茅台)2026-10-09 的真实日线;均线5 按最近 5 个交易日(2026-09-28 至 10-09)收盘计算。

字段名字段含义示例值口径与备注
日期交易日2026-10-09主键之一,统一成 YYYY-MM-DD
代码股票代码600519主键之一,六位数字
名称股票简称贵州茅台以官方披露为准
开盘当日开盘价1255.42单位:元
最高当日最高价1282.00单位:元
最低当日最低价1255.42单位:元
收盘当日收盘价1263.00单位:元,最常用
前收前一交易日收盘价1255.79单位:元,算涨跌幅的基准
涨跌幅相对前收的百分比0.57计算列:正涨负跌,单位 %
涨跌额相对前收的绝对变化7.21计算列:单位元,可与涨跌幅互校
成交量当日成交手数35111单位:手,1 手 = 100 股
成交额当日成交金额4453220000单位:元
振幅当日振幅2.12计算列:(最高−最低) ÷ 前收 × 100%
换手率换手率0.28单位 %;成交量 ÷ 流通股本
均线5最近 5 日收盘均价1251.37计算列:前 4 天凑不满 5 天,留空

2.4 数据表结构怎么设计

落地成 SQLite 时,表结构要提前定好。主键决定了一行数据的唯一性,日期要用统一格式而不是随便存文本。

表设计要素取值说明
表名daily_quote日线行情表
主键(代码,日期)两只股票同一天不会冲突
日期格式TEXT,格式 YYYY-MM-DD统一格式才能排序与比较
数值类型REAL(价格)/ INTEGER(成交量)价格用小数,成交量用整数
唯一约束代码 + 日期 唯一防止重复插入同一天

2.5 两个指标的公式

公式说明
① 日涨跌幅 = (今日收盘 - 昨日收盘) ÷ 昨日收盘 × 100%
   注意:第一行没有「昨日」,涨跌幅留空。

② 5 日均线 = 最近 5 个交易日收盘价的算术平均
   示例(2026-09-28 至 10-09 真实收盘):
   收盘价依次 1243.88、1235.58、1258.62、1255.79、1263.00
   均线5 = (1243.88 + 1235.58 + 1258.62 + 1255.79 + 1263.00) ÷ 5 ≈ 1251.37
   前 4 天凑不满 5 天,均线留空。
指标不是你手动算的,是让 AI 现算并解释公式。你只要确认:它用的公式对不对、边界(前两天、前四天)怎么处理。

AI 助手小贴士|让 AI 把指标公式用大白话讲一遍,再对照结果首尾几行看:涨跌幅第一行是不是空的、均线前四行是不是空的。

打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请用最通俗的话解释什么是 5 日均线,并说明数据开头几天为什么算不出来。

课程思政|工匠精神与严谨求实 · 主键定得好,重复无处跑

历史数据最怕重复。把「代码 + 日期」设成主键或唯一约束,就能从结构上杜绝同一天被插两次。设计数据结构时多花五分钟定好主键和类型,能省下日后几小时的数据清理——这就是严谨的价值。

三、零代码操作步骤

工具与技能|先看清三个角色,再动手

本篇全程零代码:你把要求说清楚,AI 去执行,你负责验收。三个角色分工如下——浏览器技能指的是腾讯开源的 BrowserSkill,它能让 AI 直接操作你电脑上真实的浏览器(可复用已经登录的状态),自己开一个独立窗口干活,不打扰你正在看的网页;遇到验证码、登录或确认弹窗,它会停下来交给你本人处理。

角色负责什么在本案例里具体做什么
你确认字段清单、验收结果、清洗与合规把关盯字段清单、核对结果、处理异常(如验证码)
WorkBuddy接中文指令:探字段 → 批量采 → 清洗 → 导出交付物拆解本篇的采集任务并跑完全量、产出交付物
浏览器技能
BrowserSkill
以真实浏览器打开页面:跑脚本渲染、滚动 / 翻页 / 点开详情、截图留证;可复用本机浏览器已登录状态,遇到验证码或登录弹窗会停下来交给你处理打开历史行情页,确认日期区间怎么选、表格怎么翻

五步操作主线(全课程统一,每一篇都按这个顺序推进):

  1. 定目标与字段:先看本篇第二节的字段表,把「要哪几列、每列什么口径、要多少条」说清楚——字段清单就是验收标准,说不清就会拿回一张字段乱七八糟的表。
  2. 现场踩点(浏览器技能 BrowserSkill):打开 https://quote.eastmoney.com/sh600519.html,确认历史行情的入口在哪、日期是什么格式。
  3. 小样试采(WorkBuddy):先取 2026 年 8 月 一个月的数据,确认字段与日期格式。
  4. 核对与清洗:① 涨跌幅第一行、均线前四行为空是不是合理的边界;② CSV 与 SQLite 的行数一致吗;③ 连跑两次增量更新,第二次应该是「0 条新增」。
  5. 导出与归档:导出交付物(数据明细表 / 可筛选明细页 / 数据看板 / 可复用的技能包),文件名带上采集日期,并写清数据来源、采集时间与已知局限。
起手一句话(可直接复制):用浏览器技能 BrowserSkill 打开 https://quote.eastmoney.com/sh600519.html(东方财富 · 个股行情(贵州茅台)),把这一页每条记录能采到的字段名和示例值列出来,先不要采集。
  1. 新建对话,粘贴提示词(见下一节),把历史行情页地址和股票代码填好。
  2. 先取一段试试。说「先取 2026 年 8 月一个月的数据」,确认字段与日期格式。
  3. 检查指标。看涨跌幅第一行、均线前四行是不是空的——空得对说明边界处理正确。
  4. 落成两张表。说「请把结果同时导出成 CSV 和 SQLite,表名 daily_quote」。
  5. 试一次增量更新。说「请只补充数据库里没有的交易日,已存在的不动」。
  6. 验证增量。再跑一次,如果条数没变,说明增量逻辑正确。
  7. 导出归档。说「CSV 名叫 daily_600519.csv,SQLite 名叫 market.db」。
验证增量更新有个小技巧:连跑两次,第二次应该「0 条新增」。如果第二次又插了一堆,说明去重没做好。

四、提示词模板与追问技巧

提示词
请帮我完成一个股票历史行情采集与入库任务。
【数据来源】东方财富网历史行情页:
https://quote.eastmoney.com/sh600519.html
【股票代码】600519(沪市,前缀 sh)
【时间范围】2025-10-09 至 2026-10-09
【需要字段】按这个顺序:
  1. 日期(YYYY-MM-DD)
  2. 代码
  3. 名称
  4. 开盘(元)
  5. 最高(元)
  6. 最低(元)
  7. 收盘(元)
  8. 前收(元)
  9. 涨跌幅(%,正涨负跌)
  10. 涨跌额(元)
  11. 成交量(手)
  12. 成交额(元)
  13. 振幅(%)
  14. 换手率(%)
  15. 均线5(元)

【处理要求】
  1. 计算「涨跌幅」= (今收 - 昨收) ÷ 昨收 × 100%,第一行没有昨收,留空
  2. 计算「均线5」= 最近 5 个交易日收盘价的平均,前 4 天凑不满 5 天,留空
  3. 落成两份:
     - CSV:daily_600519.csv
     - SQLite:market.db,表名 daily_quote
       主键为(代码,日期),日期用 TEXT 格式 YYYY-MM-DD
  4. 先取 2026-08-01 至 2026-08-31 给我验证,再取全年

【增量更新要求】
  以后我说「更新」,你只补充数据库里没有的交易日,
  已存在的日期一律不动,并告诉我新增了多少条。

4.1 三条追问指令

追问指令
追问一(讲清公式):
请用大白话解释均线5 是怎么算出来的,
并指出数据开头几行为什么是空的。

追问二(增量验证):
请再执行一次「更新」,如果数据库没有新交易日,
应该报告「新增 0 条」,不要重复插入。

追问三(改主键):
请确认 daily_quote 表的(代码,日期)是唯一的,
如果存在重复行,请只保留一条并告诉我删了几行。
让 AI「解释公式」,而不是「直接给数字」。数字你无法验证,公式你可以对照。学的正是这套能自己复核的能力。

AI 助手小贴士|做增量更新时,最怕「按行数判断」。让 AI 用日期集合做比对,才能准确知道缺哪几天。

打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请列出接口返回的全部交易日集合,和数据库里已有的日期集合做差集,告诉我缺少哪几天。

五、结果核对、清洗与保存

结果样例(节选,600519 真实日线,2026 年 9 月末至 10 月初;均线前 4 行为空是正常边界):

日期代码开盘最高最低收盘成交量涨跌幅均线5
2026-09-246005191250.011256.131231.051237.0031239-1.14
2026-09-286005191236.001244.011228.101243.88282180.56
2026-09-296005191244.601245.871230.881235.5826366-0.67
2026-09-306005191239.531268.001236.051258.62383311.86
2026-10-086005191252.901258.001242.001255.7925168-0.221246.17
2026-10-096005191255.421282.001255.421263.00351110.571251.37

5.1 四项核对

核对项正常表现发现问题怎么问
日期连续性按交易日递增,无重复「请找出重复日期并列出来」
涨跌幅全年第一行为空;样例各行与前收对得上「第 3 行涨跌幅与收盘价对不上,请复核」
均线前 4 行空,第 5 行起有值「均线5 请按最近 5 日收盘平均重算」
入库数据库行数与 CSV 一致「SQLite 和 CSV 的条数对不上,请核对」

5.2 保存与增量

文件命名
daily_600519.csv        ← 全量历史(人工查看用)
market.db               ← SQLite 数据库(程序查询用)
   表 daily_quote        主键(代码,日期)
daily_600519_log.txt    ← 日志:本次新增条数、日期范围、异常
每次增量更新都在日志里记一笔:本次新增了几条、覆盖哪段日期。日子久了,这份日志就是数据的「体检记录」。

AI 助手小贴士|定期抽查数据库里有没有重复日期或缺口,比等到做分析时才发现问题要主动得多。

打开 WorkBuddy 或任意 AI 对话工具,试试这样问:请检查 daily_quote 表:有没有重复的(代码,日期),有没有缺失的交易日,各列出来。

课程思政|科技自立自强 · 自己攒一个数据库

会取数据的人很多,会攒数据的人不多。把历史行情一点点存进自己的数据库,日积月累就形成了别人没有的资料库。数据能力不是会背多少公式,而是能不能持续、规范地积累和管理自己的数据资产。

六、常见问题与合规红线

现象原因怎么处理
同一天出现了两行增量更新没做去重以(代码,日期)为唯一键去重,只留一条
日期是乱序的未按日期排序要求按日期升序排列后再落库
均线算出来是空的开头行数不足 5 天,属正常确认只有前 4 行为空即可
SQLite 打不开用 Excel 直接打开了 .db 文件用支持 SQLite 的工具,或改成导出 CSV 查看
增量更新后条数反而变少误用了覆盖模式明确「只追加、不覆盖」,并保留备份
多只股票批量取时接口报错频率过高或参数有误加延时、核对代码前缀(sh/sz),失败就记录并跳过

6.1 三条规范

  1. 口径写进文档。涨跌幅、均线、复权方式的公式与边界处理要写成一句话留在文件里。
  2. 增量更新必须幂等。同一天执行两次,结果应完全一致。
  3. 数据仅用于教学。不构成投资建议;对外分享必须注明来源与口径。
警惕「看起来对」的指标。均线少算了几天、涨跌幅用了错误的昨收,表面上是数字,实际是错误结论。任何计算列都要抽查几行手工复算。

课程思政|数据安全与法治素养 · 数据库里的每一行都要讲得清

把数据落库,意味着它会被长期引用。日期格式、主键、口径说明,这些看似琐碎的规范,决定了数据是可用的资产还是一堆垃圾。规范不是束缚,是让数据在半年后还能被人信任、被人复现。

七、随堂自测(10 题)

点击选项即可判分,答错的题会立刻显示解析。

已答 0 / 10 · 正确 0 —

1本案例把历史行情落成哪两份文件?

  • A. 只存一份 Excel
  • B. CSV 与 SQLite 各一份
  • C. PDF 与 Word
  • D. 图片与文本
答案:B。CSV 方便人工查看,SQLite 方便程序查询,两份并存收益最大。

2日线行情表 daily_quote 的合适主键是?

  • A. (代码,日期)
  • B. 只按日期
  • C. 只按收盘价
  • D. 随便加一个自增序号即可
答案:A。同一只股票同一天只有一条记录,用(代码,日期)做主键能从结构上防止重复。

3数据库里的日期字段,更合适的做法是?

  • A. 存成「9月30日」这样的中文
  • B. 存成任意文本
  • C. 存成统一格式 YYYY-MM-DD 的文本或日期类型
  • D. 不存日期
答案:C。统一格式才能正确排序与比较,中英文混写会导致排序错乱。

4某股票连续 5 日收盘为 1243.88、1235.58、1258.62、1255.79、1263.00,5 日均线约为?

  • A. 1263.00
  • B. 1246.17
  • C. 1235.58
  • D. 1251.37
答案:D。五个数相加除 5:(1243.88+1235.58+1258.62+1255.79+1263.00)÷5≈1251.37。

5增量更新做对的话,同一天连续执行两次,第二次应该?

  • A. 新增 0 条
  • B. 新增全部行
  • C. 报错退出
  • D. 随便插几行
答案:A。增量更新应当幂等:没有新交易日时就是「新增 0 条」。

6涨跌幅这一列,第一行通常应该是?

  • A. 0
  • B. 100
  • C. 等于收盘价
  • D. 留空
答案:D。第一行没有「昨日收盘价」,无法计算涨跌幅,应留空而不是填 0。

7要确认数据库里缺了哪些交易日,最靠谱的办法是?

  • A. 看文件大小
  • B. 问 AI「你确定采全了吗」
  • C. 用接口返回的日期集合与库内日期集合做差集
  • D. 数一数有多少行
答案:C。集合差集能精确指出缺哪几天,比模糊判断可靠得多。

8关于本案例的数据用途,正确的说法是?

  • A. 可以直接作为买卖依据
  • B. 仅用于教学分析,不构成投资建议
  • C. 可以随意对外传播
  • D. 属于内部数据,需授权
答案:B。公开历史行情用于教学分析,任何情况下都不构成投资建议。

9指标(涨跌幅、均线)应该由谁算?

  • A. 让 AI 现算并解释公式,学生核对边界
  • B. 必须学生手写全部公式
  • C. 随便估一个
  • D. 不用算
答案:A。零代码路线的重点是让 AI 计算并讲清公式,学生负责核对公式与边界是否正确。

10把每天的增量更新记进日志,主要目的是?

  • A. 让文件更多
  • B. 凑字数
  • C. 没有实际作用
  • D. 留痕可追溯,日后能查数据是怎么来的
答案:D。日志记录了新增条数与日期范围,是数据可追溯的重要凭据。