解析同花顺日线文件:Python读取本地K线数据实战指南

发布时间:2026/9/9 0:35:52

解析同花顺日线文件:Python读取本地K线数据实战指南 简介面向金融数据分析初学者与Python开发者这份资源聚焦同花顺.day二进制日线文件的高效解析。同花顺日线文件以固定长度记录存储日期、开盘、收盘、最高、最低、成交量及成交额等关键行情字段直接读取需要自行处理字节偏移与数据类型转换。压缩包内共2个文件一个600000.day示例数据文件一份getAllData.py解析脚本整体仅4KB携带和部署非常方便。已有2237人学习下载适合希望快速上手股票历史数据提取的读者。借助脚本可快速掌握二进制解析的核心思路二进制模式打开、头信息读取、记录循环、struct解包等约20行Python代码即可完成基础解析理解后还可进一步扩展错误处理、多文件批量解析或对接Pandas做深入分析为后续量化研究打下基础。 最近一段时间在做本地行情数据的整理绕来绕去还是回到了一个经典动作解析同花顺日线文件。如果你试过把同花顺里的历史K线完整导出大概会明白我的处境——界面导出有各种限制复制粘贴又只覆盖最近一段想要拿到干净、连续、能批量喂给策略回测的日线数据最直接的办法就是自己动手把本地的 .day 文件读一遍。做这件事的典型人群有两类。一类是做量化策略的需要把任意股票的历史日线数据拉出来做回测但第三方接口要么收费、要么字段不全另一类是纯做复盘的想把同花顺里积累多年的数据沉淀成自己的数据库方便跨软件迁移或者做自定义统计。我自己属于前者偏后者的状态所以选择从文件格式入手而不是继续依赖界面操作。这篇文章会把同花顺日线文件的存储位置、二进制结构、解析原理、Python实操代码、常见踩坑点以及应用扩展整个链路讲清楚。基于常见实践的补充说明我会明确标注方便不同版本、不同数据下载工具的朋友对照排查。1. 项目概述为什么要自己动手解析同花顺日线文件1.1 日线文件能做什么解决什么问题同花顺本身是提供K线查看的但“看”和“用”是两回事。界面上的K线数据只能一条条看或者通过受限导出拿一小段一旦涉及跨标的、跨周期、长时间的统计就必须有一份本地化、结构化、自己能控制格式的数据。日线文件解析本质上就是把同花顺客户端下载下来的 .day 二进制文件转换成 CSV、DataFrame 或其他可编程处理的数据格式。做完之后你可以批量读取几百只股票的完整历史日线数据再做均线、涨幅、回撤、突破信号之类的计算也可以直接作为本地量化回测的数据源。这个需求不是偶尔用一次而是高频、刚性的。尤其是当你想把某只票从上市第一天到现在的每一天K线都拉出来对比时靠手动操作几乎不可能。解析本地文件成了最省力、最稳定的一条路。1.2 文件位置与命名规则先找到你机器上的数据在哪不同版本的同花顺安装路径有差异但目录结构基本一致。以 Windows 系统为例默认路径通常是C:\同花顺\vipdoc\sh和C:\同花顺\vipdoc\sz也有安装在C:\new_jy这种目录下的。你可以直接在安装目录里搜vipdoc文件夹。vipdoc下按市场分成子目录sh放上海市场sz放深圳市场有的版本还有bj北交所目录。每个目录里是大量.day后缀的文件文件名规则是“市场前缀 六位代码”比如sh600000.day浦发银行sz000001.day平安银行sh000001.day上证指数这里有一个非常容易踩的坑指数文件也混在同目录里。sh000001.day是上证指数sz399001.day是深证成指如果你只想分析个股靠文件后缀判断不了需要在代码里按代码段过滤。后面批量解析部分我会给过滤规则。2. 数据格式拆解与解析原理2.1 二进制记录的字段排布一条K线占32字节我实测过的同花顺 .day 文件每条日线记录固定占 32 字节按顺序排列如下字段占用字节类型说明日期4 字节整型常见格式为 YYYYMMDD如 20230101开盘价4 字节整型通常放大了100倍读出来要除以100最高价4 字节整型放大100倍最低价4 字节整型放大100倍收盘价4 字节整型放大100倍成交额4 字节浮点型单位因软件版本而异成交量4 字节整型常见单位是手保留字段4 字节整型通常填0或预留为什么价格要用放大100倍的整数存这是老式行情数据格式的通用做法。早期为了节省存储空间、加快读写速度浮点运算成本又比现在高直接用整数存“分”级别精度既保持固定字节长度也保证数据一致。解析时只要记得除以100还原成元就不会出错。2.2 字节序、日期格式与单位陷阱二进制解析最容易翻车的两个点是字节序和日期存储格式我一个个说。字节序方面常见的 .day 文件是小端序little-endian也就是低位字节在前。Python 的struct.unpack里用前缀指定小端序例如IIIIIfII。不要想当然用去读否则日期和价格会变成一串毫无意义的大数字。跨平台时尤其要注意虽然绝大多数 Windows 和 Linux 机器都是小端序但显式写是最稳妥的。日期格式方面我这里描述的是最主流的 YYYYMMDD 整数格式比如 20230101 表示 2023年1月1日。但我也见过个别老版本数据文件把日期存成“相对于某基准日的偏移天数”读出来会是一个几千、几万的小数字而不是八位数。判断方法很简单解出来的第一个字段如果是 8 位数且前四位看着像年份就是 YYYYMMDD如果是一个不规律的小整数就说明这个文件的日期列可能用了偏移格式。遇到这种情况建议先用十六进制编辑器看看文件头或者拿一条日期已知的记录反推偏移不要直接套用 YYYYMMDD 逻辑。单位方面价格除以100基本通用但成交量和成交额的单位不是统一的。同一份文件里成交量有可能是“手”也可能是“股”成交额可能是“元”也可能被缩放过。我的做法是解析完先拿一只熟悉股票的数据去和同花顺K线页面核对数值如果成交量差了100倍做一次乘法换算就行。实用补充单位不统一不影响文件解析流程但会影响后续计算所以这个核对步骤不能省略。2.3 复权数据的正确认知.day 文件里基本是不复权价这是整个解析项目里最需要提前建立认知的地方。本地 .day 文件保存的通常是“不复权”的原始交易数据也就是当天实际成交的开高低收、成交量和成交额。你看到某个股票历史价格中有突然向下跳空的大缺口不是数据错了是中间发生过除权除息。因此如果你要计算长期收益率、回撤这类对价格连续性敏感的指标直接拿不复权价算会出现明显失真比如贵州茅台历史上多次十送十不复权的长期涨幅曲线看起来就没那么顺畅。正确做法是另外维护一份除权除息/复权因子表在应用层做前复权或后复权处理而不是寄希望于 .day 文件里直接给出复权价。3. Python 解析实操从单文件到批量处理3.1 环境准备与依赖安装解析 .day 文件只需要 Python 标准库里的struct和os就够了但为了后续数据处理方便我建议装上pandas一个是做表格工具一个是本地数据框。另外可以装一个numpy计算指标时更高效。pip install pandas numpy3.2 实现单文件日线解析下面是一段可以直接跑通的完整代码。我加了比较详细的注释方便你对照前面讲的字段排布理解import struct import pandas as pd def parse_day_file(filepath): 解析同花顺 .day 文件返回包含日线数据的 DataFrame。 基于常见 32 字节记录格式实现价格字段放大100倍。 records [] # 以二进制只读方式打开文件 with open(filepath, rb) as f: while True: # 每条记录固定32字节 chunk f.read(32) if len(chunk) 32: break # 按小端序解析日期、开、高、低、收、成交额(float)、成交量、保留字段 date, open_p, high_p, low_p, close_p, amount, volume, _ struct.unpack(IIIIIfII, chunk) # 简单的合法性过滤如果日期明显不是YYYMMDD说明格式可能不对直接停 if date 19900101 or date 21000101: break records.append({ date: int(date), open: open_p / 100.0, high: high_p / 100.0, low: low_p / 100.0, close: close_p / 100.0, amount: amount, volume: volume, }) df pd.DataFrame(records) df[date] pd.to_datetime(df[date], format%Y%m%d) return df # 示例用法 if __name__ __main__: df parse_day_file(C:/同花顺/vipdoc/sh/sh600000.day) print(df.head()) print(df.tail()) print(总记录数:, len(df))这段代码有三个关键设计我说一下为什么这么做。第一循环读文件而不是一次性读整个文件。虽然 .day 文件单个也就几MB但保持按记录读取更贴近二进制格式本质也方便中途校验和调试。第二日期合法性判断。如果不做判断一旦遇到文件末尾的脏数据或者版本异常会往 DataFrame 里塞进一堆数值异常的行。这个if实际上是第一道安全网。第三pd.to_datetime把整数日期转成时间对象。后续做时间索引、按年筛选、画K线图都方便。3.3 批量解析整个市场加上个股过滤规则单文件解析只是开胃菜批量处理才是这个项目的常态。我会写一个遍历vipdoc目录、自动解析所有 .day 文件并汇总成一张大表的脚本。import os import pandas as pd def is_stock_code(code): 判断是不是个股代码过滤掉指数和其他特殊标的。 依据常见代码段 - 沪市主板600/601/603/605 - 深市主板000/001/002/003 - 创业板300/301 - 科创板688/689 return code.startswith((600, 601, 603, 605, 000, 001, 002, 003, 300, 301, 688, 689)) def batch_parse_day_files(root_dir): 递归遍历 root_dir解析所有 .day 文件。 返回 DataFrame列包括股票代码、日期、开高低收、成交额、成交量。 all_dfs [] for dirpath, _, filenames in os.walk(root_dir): for fname in filenames: if not fname.endswith(.day): continue market fname[:2] # sh / sz / bj code fname[2:8] # 六位代码 # 只保留股票过滤指数等特殊文件 if not is_stock_code(code): continue filepath os.path.join(dirpath, fname) df parse_day_file(filepath) if df.empty: continue df[symbol] f{market}{code} all_dfs.append(df) if not all_dfs: return pd.DataFrame() return pd.concat(all_dfs, ignore_indexTrue) # 示例用法 if __name__ __main__: result batch_parse_day_files(C:/同花顺/vipdoc) print(result.sample(5)) print(标的数量:, result[symbol].nunique()) print(总行数:, len(result))这里最容易被忽略的是is_stock_code。如果少了这个过滤指数、基金、债券文件会混进来后续做股票筛选时会发现结果里莫名其妙多出“上证指数”“沪深300”这些标的。另外不同版本的目录也有可能包含sh、sz、bj之外的文件夹所以用os.walk递归遍历更保险。3.4 与行情软件核对数据这一步别偷懒解析完之后强烈建议拿一只你熟悉的股票做核对。比如你常看的某只票打开同花顺界面找到最近一个交易日的开高低收再对比脚本解析出来的同一行数据重点看三点收盘价是否一致、成交金额数量级是否一致、日期是否逐日连续。成交量单位尤其值得核对。假设某只票当天成交了 100 万股.day 文件里读出来的 volume 是 10000那就说明文件单位是“手”需要乘以100换算成“股”。同花顺界面默认显示的成交量多是以“手”为单位但不同软件版本和不同数据源处理不同所以拿实际数值直接对比是最靠谱的。这个步骤只要做一次后续所有文件都按统一逻辑处理就行。4. 常见问题与排查技巧4.1 高频踩坑问题整理我把实际解析过程中遇到过的典型问题做成了一张速查表按“症状、可能原因、解决办法”的顺序排列症状可能原因解决办法日期读出 1900 年或多年以前的年份字节序反了把改成确认小端序或用 hexdump 查看头部前4字节日期是一串几千几万的小数而不是八位数日期存储为偏移天数反推基准日期或换另一份数据源确认价格看起来是几百万没有除以100或价格放大倍数不同统一除以100如果仍异常检查文件版本成交量和同花顺界面差100倍文件单位是股界面单位是手或反过来用最新一天数据对比乘以或除以100某只股票只有很短历史本地下载的数据不完整在同花顺里下载完整日线数据后重新解析停牌期间日期缺失正常现象停牌日无交易记录不要补0按实际交易日对齐读出的数据包含指数没有做代码过滤用代码段前缀过滤掉指数和特殊标的文件读到一半报错文件被占用或损坏复制一份再解析不要直接读原始文件4.2 数据异常时的自查顺序如果你解析出来的数据怎么看都不对别急着改代码先按顺序排查。第一步用十六进制编辑器或xxd查看 .day 文件头几十字节对照表格确认字段布局是不是 32 字节一条。这一步能排除 99% 的版本问题。第二步打印前两条原始struct.unpack出来的整数看看日期、价格的数量级是否符合预期。如果日期和价格全都异常优先怀疑字节序如果只有价格异常优先怀疑缩放倍数。第三步挑一只刚上市不久的股票历史记录少方便逐条对照。拿最近五个交易日的K线去和同花顺界面比逐一核对开高低收和成交量基本能定位问题在哪。第四步如果单个文件正常但批量汇总后异常检查是不是把不同市场的文件混在一起处理了比如北交所数据和沪深数据在字段定义上可能有细微差异。我的建议是先把 sh、sz、bj 分开解析确认单独正常后再合表。5. 解析结果的落地应用让数据真正为策略服务5.1 快速计算技术指标一个20日新高筛选示例数据解析完成后马上可以做一些有实用价值的计算。我拿一个最简单的“20日收盘价新高”筛选来举例这类逻辑在短线复盘里很常用。# 假设 result 是 batch_parse_day_files 返回的 DataFrame # 先排序再按股票分组计算20日新高等 result result.sort_values([symbol, date]) result[pct_chg] result.groupby(symbol)[close].pct_change() * 100 result[high_20] result.groupby(symbol)[high].rolling(20).max().reset_index(level0, dropTrue) # 筛选出最新交易日创20日新高的股票 latest_date result[date].max() today_df result[result[date] latest_date] new_high_stocks today_df[today_df[high] today_df[high_20]] print(new_high_stocks[[symbol, date, close, high_20]].head(20))这里有一个容易踩的细节groupby之后做rolling索引会重新对齐需要reset_index或者按 sanity 顺序处理否则会有错位。我上面写法是按symbol分组后对high做 20 日滚动再把结果对齐回去。有了这个列表每天收盘后可以自动跑一遍找出哪些股票创了阶段新高再结合自己的交易系统做下一层判断。整个过程从文件解析到输出候选名单几十秒就能完成。5.2 把数据接入本地数据库或回测框架再进一步你可以把解析结果落地成 SQLite、ClickHouse 或其他数据库表也可以直接输出成 CSV 给第三方回测平台用。SQLite 是一个很轻量的选择不需要单独配置服务端import sqlite3 conn sqlite3.connect(daily_data.db) result.to_sql(daily_kline, conn, if_existsreplace, indexFalse) # 查询示例取某只股票最近30个交易日 query SELECT * FROM daily_kline WHERE symbolsh600000 ORDER BY date DESC LIMIT 30; print(pd.read_sql_query(query, conn))落到数据库之后后续可以做跨标的横截面分析、存增量更新、对接更复杂的回测流程。如果你已经有自己的可视化系统也可以把 .day 文件解析作为数据入口把本地分析链路彻底跑通。最后分享一个我自己的小习惯解析前先打开同花顺把目标的日线数据从上到下刷新一遍确认没有缺口再用脚本批量读取。很多诡异的数据问题其实不是解析代码的锅而是上游数据没下载完整。数据底子打牢了后面所有计算才有意义。顺便说一句如果你只是临时想看某只股票的历史收盘价不必写整套工程解析出一个 DataFrame 后用to_clipboard()直接粘到 Excel 里就够了灵活运用工具才是效率最大化的关键。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/9/9 0:35:52

Windows平台跑通ORB-SLAM3:WSL2环境搭建与实战指南

简介:针对ORB-SLAM3在Windows平台难以直接编译运行的问题,这份项目实战资源提供了完整的适配与优化方案,面向SLAM研究者、机器人开发者以及需要快速搭建Windows端视觉SLAM环境的工程师。资源共2000个文件,以840个cpp、699个h源码文…

2026/9/9 0:35:52

Archify实战:用AI提示词生成可交互HTML架构图

1. 项目概述:Archify 到底在解决什么问题 先说结论:Archify 是一个利用 AI 生成交互式架构图的工具,核心玩法是“用一个高质量的提示词,让大模型输出可交互的 HTML 架构图”。这个项目在 GitHub 上拿到了 30k Stars,而…

2026/9/9 0:35:52

VKS118静态驱动段码屏实战:从选型到调试全解析

做产品这几年,凡是涉及段码屏显示的项目,我几乎都会先问一句:这块屏是静态驱动还是动态驱动?很多人一开始不太在意这个区别,等到画板、调驱动、做EMC的时候才回头改,那就非常被动了。VKS118这类静态液晶显示…

2026/9/9 1:35:59

基于STM32的五子棋对战平台:从LCD显示到AI联机的完整实现

简介:面向STM32开发者和嵌入式游戏爱好者,这是一套基于STM32F4原子探索者开发板的五子棋对战平台完整工程,代码模块划分清晰,覆盖LCD显示、触摸控制、棋局逻辑、人机AI与音量调节等环节。功能上支持触摸下子、人机对战、人人对战、…

2026/9/9 1:35:59

大模型推理能力如何选?火山引擎MaaS平台一站式落地解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/9 1:35:59

海康摄像头Chrome免插件预览方案:RTSP转HLS与部署实践

简介:面向网络视频监控开发人员,提供海康威视摄像头在 Chrome 等高版本浏览器下的无插件预览解决方案。资源核心是基于 MSE 与 WebRTC 技术的 WEB 无插件开发包,包含前后端调用示例、Nginx 流媒体服务配置及测试页面,便于快速集成…

2026/9/9 1:35:58

播客剪辑效率翻倍:四款语音转文字工具真实对比与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/9 1:35:58

单片机中断原理与实战:从GPIO到NVIC七步解析

1. 中断到底是什么?先别急着看代码,咱们从厨房烧水说起你有没有试过这样煮水:坐上锅,开火,然后就站在灶台前盯着水壶,眼睛一眨不眨,等它“咕嘟咕嘟”冒泡、等它“噗——”一声顶起壶盖&#xff…

2026/9/9 1:30:58

opencode 完全指南:从安装配置到实战排错

最近 AI 编程助手这个赛道卷得是真厉害,Claude Code、Codex CLI 一个接一个冒出来,而我实际用下来最顺手的,反而是这个叫opencode的开源工具。它不像某些产品那样绑死在一家模型上,也不强求你改变习惯去适应什么花哨的 IDE 插件&a…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/9 0:00:48

MHS模型硬件标准:让大模型像调用软件一样控制物理设备

让Claude真正看着显微镜说“这个细胞形态不太对”,或者让大模型自己调一版机械臂的运动轨迹,这事儿听上去已经很接近科幻片了。但你真上手试一次就会发现,模型不缺智商,缺的是一个能插进显微镜、机械臂、激光控制器里的“通用插座…

2026/9/9 0:00:48

AI五大核心方向详解:从机器学习到大模型,零基础转行选哪条?

会有人告诉我,他想转行学AI,但打开招聘网站一看直接傻眼:机器学习、深度学习、自然语言处理、计算机视觉、大模型应用……满屏都是这些词,好像每个都会一点,又好像每个都离自己很远。还有人上来就问“学Python还是学Ja…

2026/9/9 0:00:49

从50行最小循环到生产级AI引擎:工程化改造全解析

直接说干货。这一章我写的不是那种"hello world跑通某个模型"的教程,而是把AI引擎当做一个真正要上线、要被人调用、要扛流量的系统来聊。从最初只有50行的最小循环,到能够承载生产流量的AI引擎,中间差的不是代码量,而是…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码