企业微信

为什么你需要自己下载股票日线数据

做股票复盘、写量化策略、回测交易信号,都绕不开一个东西:历史日线数据。很多人一上来就跑去问“哪个软件能看到K线”,看和用是两码事。看盘软件里的数据你导不出来,或者导出来缺胳膊少腿。自己下载日线数据,核心目的是把开盘价、最高价、最低价、收盘价、成交量、成交额这些字段拿到手,存成CSV或者数据库,随时调用。

市面上数据源分三类:免费开源接口、券商自带导出、付费专业终端。免费的开源库适合散户和初学者,付费的适合机构。今天重点讲免费且能用的股票日线数据下载方法。

免费下载股票日线数据的几个主流渠道

AkShare:最省事的Python库

AkShare是一个开源金融数据接口库,安装一行命令:pip install akshare。下载单只股票日线数据,用stock_zh_a_hist函数。代码演示如下:

股票日线数据下载到底该怎么弄?手把手教你从零获取历史行情


import akshare as ak

# 下载平安银行日线数据,前复权

df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20200101", end_date="20241231", adjust="qfq")

print(df.head())

df.to_csv("pingan_daily.csv", index=False)

这段代码会把平安银行从2020年初到2024年底的日线数据拉下来,字段包括日期、开盘、收盘、最高、最低、成交量、成交额、振幅、涨跌幅、换手率。adjust参数控制复权方式:qfq前复权,hfq后复权,空字符串不复权。

AkShare的优点是免费、字段全、更新及时。缺点是依赖上游网站结构,偶尔接口会失效,需要更新库版本。

Tushare:老牌数据社区

Tushare需要注册获取token,有积分门槛。基础日线数据对积分要求不高,普通用户做股票日线数据下载够用。调用方式类似:


import tushare as ts

ts.set_token('你的token')

pro = ts.pro_api()

df = pro.daily(ts_code='000001.SZ', start_date='20200101', end_date='20241231')

Tushare返回的字段是英文列名,需要自己映射成中文。它的优势是数据质量稳定,适合做严肃回测。

Yahoo Finance:美股和港股日线数据

做美股或者港股,yfinance库最方便。pip install yfinance,然后:


import yfinance as yf

df = yf.download("AAPL", start="2020-01-01", end="2024-12-31", interval="1d")

df.to_csv("aapl_daily.csv")

A股数据用yfinance也能拿到,代码是600519.SS这种格式,但数据完整性和复权处理不如AkShare。

下载日线数据必须搞清楚的几个坑

复权方式选错,回测全白费

股票日线数据下载时,复权是最容易被忽略的细节。不复权的数据在除权除息日会出现价格跳空,比如某股票10送10,价格从20块变成10块,K线图上直接腰斩。你用这种数据跑均线策略,系统会误判为暴跌信号。

前复权是以最新价格为基准,把历史价格调整过来。后复权是以上市首日为基准,把后续价格调整上去。做短线回测用前复权,做长期持有收益计算用后复权。

停牌日和缺失值怎么处理

A股停牌期间没有日线数据,下载下来就是缺失的日期。回测框架里需要自己补全交易日历,把停牌日标记出来,否则策略会在不该交易的日子发信号。

数据字段够不够用

只下载开高低收四个价格,做不了精细回测。成交量、成交额用来判断流动性,换手率用来过滤小盘股,涨跌幅用来计算动量因子。AkShare默认返回的字段比较全,Tushare需要自己拼接口。

期货日线数据下载有什么不同

期货和股票在数据下载上有三个核心差异。

期货有主力合约和连续合约之分。股票只有一个代码,期货每个品种同时有多个合约月份。做趋势策略要用主力连续合约,AkShare里用futures_main_sina接口。

期货有夜盘交易。日线数据的时间戳归属不同交易所规则不一样,上期所夜盘算下一个交易日,大商所和郑商所也各有规定。下载数据时要注意日期对齐。

期货没有复权概念,但有换月跳空。主力合约切换时价格会跳空,需要做后向复权处理,把换月缺口抹平。


import akshare as ak

# 下载螺纹钢主力连续日线

df = ak.futures_main_sina(symbol="RB0", start_date="20200101", end_date="20241231")

df.to_csv("rb_main.csv", index=False)

下载完之后数据怎么存

小规模数据存CSV够用,几千只股票几千个交易日,文件多了之后CSV管理起来很痛苦。建议用SQLite或者DuckDB存本地数据库,查询速度快,支持SQL过滤。

按股票代码分表,或者按年份分表。每天增量更新,不要每次全量下载。AkShare支持按日期范围拉取,维护一个最后更新日期的记录,下次只拉新增部分。

数据质量检查不能省。下载完随机抽几只股票,对照行情软件看看收盘价和成交量是否一致。复权因子有没有正确应用,除权日前后价格是否连续。

付费渠道值不值得用

Wind、Choice、聚宽这些付费终端,数据质量和稳定性确实好,但一年几万到几十万的费用对散户不友好。做量化私募或者机构研究,付费买的是时间和确定性。个人投资者用AkShare加Tushare组合,覆盖A股、港股、美股的日线数据下载需求,成本为零。

关键不是数据源多高级,而是你清不清楚自己要什么字段、什么复权方式、什么时间粒度。搞明白这些,免费数据一样能跑出靠谱的策略。