下载数据
我们将股票数据分享在百度网盘上供下载,每工作日更新。
目前可供下载的数据有 A 股的日 K 线数据、股票代码列表和上市公司的基本面数据
下载链接:
百度网盘
下载数据的文件格式为 btx,是 SPL 的特有二进制格式。
btx 称为集文件,是一种简单、开放的二进制文件格式,它覆盖了 csv 文件的所有功能,并且性能要比 csv 文件快 4-5 倍。
SPL 可以支持 btx 文件的操作计算,也支持各种数据源与 btx 之间的相互转换。
股票日 K 线
文件名: yyyy.trade.btx。
yyyy.trade.btx 文件为yyyy当年的 A 股日线行情;
每天晚上 7、8 点左右会把当天的 A 股日线归并到当年的yyyy.trade.btx 文件中
数据示例:
数据结构:
字段名 | 字段类型 | 含义 |
code | Integer | 股票代码 |
tdate | Date | 日期 |
open | Double | 开盘价 |
close | Double | 收盘价 |
low | Double | 最低价 |
high | Double | 最高价 |
volume | Long | 成交量 |
amount | Double | 成交金额 |
pfactor | Double | 当日价格复权因子 |
注意,股票代码用了整数,而不是常规的字符串,这里 1 表示 000001,2 表示 000002…以此类推。整数的运算性能会远高于字符串。
指数日 K 线
文件名: yyyyMMdd.index.btx, yyyy.index.btx。
yyyyMMdd.index.btx 文件为yyyyMMdd日之前的指数日线行情;
yyyy.index.btx 文件为yyyy当年的指数日线行情;
每天晚上 7、8 点左右会把当天的指数日线归并到当年的yyyy.index.btx 文件中
数据示例:
数据结构:
字段名 | 字段类型 | 含义 |
code | Integer | 股票代码 |
tdate | Date | 日期 |
open | Double | 开盘价 |
close | Double | 收盘价 |
low | Double | 最低价 |
high | Double | 最高价 |
volume | Long | 成交量 |
amount | Double | 成交金额 |
pfactor | Double | 当日价格修正因子 |
注意,股票代码用了整数,而不是常规的字符串,这里 1 表示 000001,2 表示 000002…以此类推。整数的运算性能会远高于字符串。
公司基本面
文件名称:company.btx。
提供 2007 年至今的财务数据,每季度一条。
数据示例:
数据结构:
字段名 | 字段类型 | 含义 |
code | Integer | 股票代码 |
statdate | Date | 财报统计的季度的最后一天 |
totalshare | Long | 总股本 |
liqashare | Long | 流通股本 |
netprofit | Double | 净利润 (元) |
mbrevenue | Double | 主营营业收入 (元) |
未来会再补充更多信息
股票代码列表
文件名称:stock.btx。
提供股票基础信息,包括股票代码、名称、所属行业、上市日期、退市日期等。
数据示例:
数据结构:
字段名 | 字段类型 | 含义 |
code | Integer | 股票代码 |
name | String | 股票名 |
exchanges | String | 中国三大交易所的简写 |
industry | String | 所属行业 |
ipodate | Date | 上市日期 |
outdate | Date | 退市日期 |
指数代码列表
文件名称:indexlist.csv。
提供指数基础信息,包括指数代码、名称、上市日期、退市日期等。
数据示例:
数据结构:
字段名 | 字段类型 | 含义 |
code | Integer | 股票代码 |
name | String | 股票名 |
exchanges | String | 中国三大交易所的简写 |
ipodate | Date | 上市日期 |
outdate | Date | 退市日期 |
数据读取
股票代码列表
读取股票列表可以用 T 函数全部读入。
| A |
1 | =T("stock.btx") |
运行效果:
指数代码列表
| A |
1 | =file("indexlist.csv").import@tc() |
运行效果:
股票日 K 线
将下载的所有yyyy.trade.btx 文件放到同一路径下。
读数脚本代码如下:
| A |
1 | =end=ifn(end,now()) |
2 | =to(year(start),year(end)).(file(~/".trade.btx")).select(~.exists()) |
3 | =if(cl, A2.( ~.iselect@b(cl,code)), A2.(~.cursor@b()) ) |
4 | =A3.merge(code,tdate).select(tdate>=start && tdate<=end) |
5 | return A4.fetch@x() |
脚本参数:
cl | 股票代码序列,如 [600000,600001];可以为单值,如 600000;填空表示全读 |
start | 开始日期,如 2024-01-01 |
end | 截止日期,如 2024-12-31。end 为空时截止到当前日期 |
脚本保存为 loadkday.splx,此脚本可返回一支或多支股票任意时间段的 K 线数据。
如读取一支股票的 k 线数据:
| A | |
1 | 600000 | 股票代码 |
2 | 2024-01-01 | 开始日期 |
3 | 2024-12-31 | 截止日期 |
4 | =call("loadkday.splx",A1,A2,A3) | 调用脚本,返回 600000 股票 2024 年数据 |
5 | =call("loadkday.splx",A1,A2) | end为空,截止到当前日期 |
运行效果:
读取多支股票数据,比如读取所有银行股或全部 A 股:
| A | |
1 | =T("stock.btx").select(industry=="J66货币金融服务 ").(code) | 读取银行股票代码列表 |
2 | 2024-01-01 | 开始日期 |
3 | 2024-01-10 | 截止日期 |
4 | =call("loadkday.splx",A1,A2,A3) | 调用脚本,返回银行股 2024 年数据 |
5 | =call("loadkday.splx",A1,A2) | end为空,截止到当前日期 |
6 | =call("loadkday.splx",,A2,A3) | cl为空,读取全部 A 股 |
运行效果:
对于经常使用的脚本,也可以用 register 登记成一个函数来使用。
代码示例:
| A | |
1 | =register("loadkday","loadkday.splx") | 将脚本登记为函数 |
2 | =T("stock.btx").select(industry=="J66货币金融服务 ").(code) | 读取银行股票代码列表 |
3 | 2024-01-01 | 开始日期 |
4 | 2024-01-10 | 截止日期 |
5 | =loadkday(A2,A3,A4) | 返回开始到截止日期的数据 |
6 | =loadkday(A2,A3) | end为空,截止到当前日期 |
7 | =loadkday(,A3,A4) | cl为空,读取全部股票 |
运行效果同上。
指数日 K 线
将下载的yyyy.index.btx 和yyyyMMdd.index.btx 文件放到同一路径下。
读数脚本代码如下:
| A |
1 | =year(now()) |
2 | =end=ifn(end,now()) |
3 | =if(year(start)<A1,(A1-1)*10000+1231)|if(year(end)==A1,A1) |
4 | =A3.(file(~/".index.btx")).select(~.exists()) |
5 | =if(cl, A4.( ~.iselect@b(cl,code)), A4.(~.cursor@b()) ) |
6 | =A5.merge(code,tdate).select(tdate>=start && tdate<=end) |
7 | return A6.fetch@x() |
脚本参数:
cl | 指数代码序列,如 [1,2];可以为单值,如 1;填空表示全读 |
start | 开始日期,如 2024-01-01 |
end | 截止日期,如 2024-12-31。end 为空时截止到当前日期 |
脚本保存为 loadkindex.splx,此脚本可返回一支或多支指数任意时间段的 K 线数据。
如读取一支指数的 k 线数据:
| A | |
1 | 1 | 指数代码 |
2 | 2024-01-01 | 开始日期 |
3 | 2024-12-31 | 截止日期 |
4 | =call("loadkindex.splx",A1,A2,A3) | 调用脚本,返回 000001 指数 2024 年数据 |
5 | =call("loadkindex.splx",A1,A2) | end为空,截止到当前日期 |
运行效果:
读取多个指数数据:
| A | |
1 | =[399001,399002] | 指数代码列表 |
2 | 2025-01-01 | 开始日期 |
3 | 2025-01-10 | 截止日期 |
4 | =call("loadkindex.splx",A1,A2,A3) | 调用脚本,返回多个指数 |
5 | =call("loadkindex.splx",A1,A2) | end为空,截止到当前日期 |
6 | =call("loadkindex.splx",,A2,A3) | cl为空,读取全部指数 |
运行效果:
对于经常使用的脚本,也可以用 register 登记成一个函数来使用。
代码示例:
| A | |
1 | =register("loadkindex","loadkindex.splx") | 将脚本登记为函数 |
2 | =[399001,399002] | 指数列表 |
3 | 2025-01-01 | 开始日期 |
4 | 2025-01-10 | 截止日期 |
5 | =loadkindex(A2,A3,A4) | 返回开始到截止日期的数据 |
6 | =loadkindex(A2,A3) | end为空,截止到当前日期 |
7 | =loadkindex(,A3,A4) | cl为空,读取全部指数 |
运行效果同上。
基本面
(1) 直接读入全部 btx 文件。
当数据文件不大时,可以直接全部读入内存。
代码示例:
| A | B |
1 | =T("company.btx") | 读入基本面数据 |
2 | =A1.select(code==600000 && statdate>=date("2024-01-01") && statdate<=date("2024-12-31")) | 选出 600000 股票 2024 年数据 |
运行效果:
A1
A2
(2) 只读取某些股票的基本面
也可以用脚本方式只读取某些股票的基本数据。
脚本代码:
| A |
1 | =file("company.btx") |
2 | =if(cl, A1.iselect@b(cl,code), A1.cursor@b()) |
3 | =end=ifn(end,now()) |
4 | =A2.select(statdate>=start &&statdate<=end) |
5 | =A4.fetch() |
6 | >A2.close() |
7 | return A5 |
脚本参数:
cl | 股票代码序列,如 [600000,600001];可以为单值,如 600000;也可为空表示全读 |
start | 开始日期,如 2024-01-01 |
end | 截止日期,如 2024-12-31。end 为空时截止到当前日期 |
脚本保存为 loadcompany.splx,此脚本可返回一支或多支股票任意时间段的基本面。
如读取一支股票的基本面:
| A | B |
1 | 600000 | 股票代码 |
2 | 2020-01-01 | 开始日期 |
3 | 2020-12-31 | 截止日期 |
4 | =call("loadcompany.splx",A1,A2,A3) | 调用脚本,返回 2020 年基本面 |
5 | =call("loadcompany.splx",A1,A2) | end为空,截止到当前日期 |
运行效果:
读入多支股票的基本面,如读取所有银行股或全部 A 股。
| A | B |
1 | =T("stock.btx").select(industry=="J66货币金融服务 ").(code) | 股票代码序列 |
2 | 2020-01-01 | 开始日期 |
3 | 2020-12-31 | 截止日期 |
4 | =call("loadcompany.splx",A1,A2,A3) | 调用脚本,返回银行股 2020 年基本面 |
5 | =call("loadcompany.splx",A1,A2) | end为空,截止到当前日期 |
6 | =call("loadcompany.splx",,A2,A3) | cl为空,读取全部股票 |
免费下载