欢迎光临
我们一直在努力

Python解析通达信DAT与BLK文件实战

以下是解析通达信dat(日线数据文件)与blk(板块数据文件)的Python实现方案,包含完整源码及注释:


1. DAT文件解析(日线数据)

通达信日线数据文件(.dat)采用二进制格式存储,结构如下:

  • 文件路径:TdxDir/data/sh|sz#lday/*.dat
  • 数据结构:
    • 每32字节为一条记录
    • 字段顺序:日期(4字节)、开盘价(4字节)、最高价(4字节)、最低价(4字节)、收盘价(4字节)、成交量(4字节)、成交额(4字节)、保留字段(4字节)

解析代码:

import struct
import os

def parse_dat_file(file_path):
records = []
with open(file_path, 'rb') as f:
while True:
chunk = f.read(32) # 每条记录32字节
if not chunk:
break
# 解包二进制数据(I表示4字节无符号整数)
date, open_price, high, low, close, volume, turnover, _ = struct.unpack('IIIIIIII', chunk)
records.append({
'date': date, # 日期(格式:YYYYMMDD)
'open': open_price / 1000.0, # 开盘价(需除以1000)
'high': high / 1000.0,
'low': low / 1000.0,
'close': close / 1000.0,
'volume': volume, # 成交量(股)
'turnover': turnover # 成交额(元)
})
return records

# 示例:解析上海市场股票600000的日线数据
data = parse_dat_file(r'C:\\通达信\\data\\sh#lday\\sh600000.dat')
print(data[:2]) # 打印前两条记录


2. BLK文件解析(板块数据)

.blk文件存储板块包含的股票代码列表,格式为纯文本:

  • 文件路径:TdxDir/blocknew/*.blk
  • 数据结构:每行一个股票代码(如sh600000)

解析代码:

def parse_blk_file(file_path):
stock_codes = []
with open(file_path, 'r', encoding='gbk') as f: # 注意编码可能为GBK
for line in f.readlines():
code = line.strip() # 去除换行符和空格
if code:
stock_codes.append(code)
return stock_codes

# 示例:解析"自选股1"板块
block_stocks = parse_blk_file(r'C:\\通达信\\blocknew\\自选股1.blk')
print(block_stocks) # 输出板块内所有股票代码


3. 关键注意事项

  • 文件路径适配:

    • 根据实际安装路径修改TdxDir(如C:\\通达信)
    • 市场标识:sh(沪市)、sz(深市)
  • 数据精度处理:

    • 价格字段需除以1000(如开盘价=123456表示123.456元)
  • 错误处理扩展:

    try:
    data = parse_dat_file('path/to/file.dat')
    except FileNotFoundError:
    print("文件不存在!")
    except struct.error:
    print("二进制解析错误!")


  • 4. 完整源码整合

    import struct
    import os

    def parse_dat_file(file_path):
    records = []
    try:
    with open(file_path, 'rb') as f:
    while True:
    chunk = f.read(32)
    if not chunk:
    break
    # 使用try-except避免异常数据中断
    try:
    date, open_price, high, low, close, volume, turnover, _ = struct.unpack('IIIIIIII', chunk)
    records.append({
    'date': date,
    'open': open_price / 1000.0,
    'high': high / 1000.0,
    'low': low / 1000.0,
    'close': close / 1000.0,
    'volume': volume,
    'turnover': turnover
    })
    except struct.error:
    continue
    except Exception as e:
    print(f"解析DAT文件出错: {e}")
    return records

    def parse_blk_file(file_path):
    stock_codes = []
    try:
    with open(file_path, 'r', encoding='gbk') as f:
    for line in f:
    code = line.strip()
    if code:
    stock_codes.append(code)
    except Exception as e:
    print(f"解析BLK文件出错: {e}")
    return stock_codes


    5. 应用场景

    • 日线数据分析:计算技术指标(如均线、MACD)
    • 板块监控:实时跟踪特定板块的股票表现
    • 数据备份:将二进制数据转换为CSV/数据库存储

    通过上述代码,可高效提取通达信本地数据,为量化交易策略提供底层支持。

    赞(0)
    未经允许不得转载:171主机测评 » Python解析通达信DAT与BLK文件实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址