Python读取通达信一分钟K线数据(.lc1文件)

Python读取通达信一分钟K线数据(.lc1文件)

  • 1. lc1文件位置
  • 2. lc1文件内容的构成
  • 3. Python代码识别lc1文件
  • 4. 将识别结果输出为csv文件
  • 5. 最终结果展示
  • 在金融数据分析中,通达信软件提供的数据文件(如1分钟K线数据文件 .lc1)是非常宝贵的资源。本文将详细介绍如何使用Python读取和解析这些文件,并将解析结果输出为CSV文件,以便进行进一步的数据分析和处理。

    1. lc1文件位置

    通达信1分钟K线数据文件(.lc1文件)通常存储在通达信软件的安装目录下的vipdoc文件夹中。具体路径如下:
    上海证券交易所的1分钟K线数据:
    路径:[安装目录]\vipdoc\sh\minline
    示例:C:\new_tdx\vipdoc\sh\minline
    深圳证券交易所的1分钟K线数据:
    路径:[安装目录]\vipdoc\sz\minline
    示例:C:\new_tdx\vipdoc\sz\minline
    每个股票的1分钟K线数据文件名称格式为[市场代码][股票代码].lc1,例如,上证股票代码为600000的1分钟K线数据文件为sh600000.lc1,深证股票代码为000001的1分钟K线数据文件为sz000001.lc1

    2. lc1文件内容的构成

    通达信的1分钟K线数据文件(.lc1文件)是一种二进制文件,每条记录包含32字节的数据。每条记录的格式如下:

  • 年月日(2字节,整数)
  • 时间(2字节,整数)
  • 开盘价(4字节,浮点数)
  • 最高价(4字节,浮点数)
  • 最低价(4字节,浮点数)
  • 收盘价(4字节,浮点数)
  • 成交额(4字节,整数)
  • 成交量(4字节,浮点数),需要除以100
  • 保留字段(4字节,整数)
  • 3. Python代码识别lc1文件

    以下是一个完整的Python脚本,用于读取和解析通达信的1分钟K线数据文件(.lc1文件):

    import struct
    from datetime import datetime
    
        # 打开lc1文件
        with open(file_path, "rb") as ofile:
            data = ofile.read()
    
        # 初始化一个列表来存储解析后的数据
        kline_data = []
    
        # 每条记录的长度为32字节
        record_size = 32
        # 计算记录数量
        record_count = len(data) // record_size
    
        cols = ["date", "time", "open", "high", "low", "close", "amount", "vol"]
    
        # 遍历每条记录
        for i in range(record_count):
            # 计算记录的起始位置
            start = i * record_size
            # 解析记录
            record = data[start : start + record_size]
            # 使用struct模块解析二进制数据
            unpacked_data = struct.unpack("hhfffffii", record)
    
            # 解析后的数据格式为:
            # (年月日, 时间, 开盘价, 最高价, 最低价, 收盘价, 成交额, 成交量, 保留字段)
            year = str(int(unpacked_data[0] / 2048) + datetime.now().year + 10)
            month = str(int(unpacked_data[0] % 2048 / 100)).zfill(2)
            day = str(unpacked_data[0] % 2048 % 100).zfill(2)
            hour = str(int(unpacked_data[1] / 60)).zfill(2)
            minute = str(unpacked_data[1] % 60).zfill(2)
            second = "00"
            _open = round(unpacked_data[2], 2)
            _high = round(unpacked_data[3], 2)
            _low = round(unpacked_data[4], 2)
            _close = round(unpacked_data[5], 2)
            _amt = unpacked_data[6]
            _vol = unpacked_data[7] / 100.0
    
            # 将解析后的数据添加到列表中
            kline_data.append(
                {
                    cols[0]: f"{year}-{month}-{day}",
                    cols[1]: f"{hour}:{minute}:{second}",
                    cols[2]: _open,
                    cols[3]: _high,
                    cols[4]: _low,
                    cols[5]: _close,
                    cols[6]: _amt,
                    cols[7]: _vol,
                }
            )
    
        return kline_data, cols
    

    4. 将识别结果输出为csv文件

    解析完lc1文件后,我们可以将结果输出为csv文件,以便进行进一步的数据分析和处理。以下是一个将解析结果写入csv文件的函数:

    def write_to_csv(kline_data, cols, csv_file_path):
    	import csv
        # 打开CSV文件并写入数据
        with open(csv_file_path, "w", newline="") as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=cols)
            writer.writeheader()
            for kline in kline_data:
                writer.writerow(kline)
    

    5. 最终结果展示

    运行上述代码后,你将得到一个包含1分钟K线数据的csv文件。以下是一个示例输出(002354):

    date,time,open,high,low,close,amount,vol
    2025-01-17,09:31:00,6.26,6.3,6.13,6.18,99160632.0,159158.0
    2025-01-17,09:32:00,6.19,6.23,6.12,6.23,41464664.0,67194.0
    2025-01-17,09:33:00,6.22,6.22,6.18,6.21,35951556.0,57976.0
    2025-01-17,09:34:00,6.21,6.26,6.21,6.26,21300972.0,34142.0
    2025-01-17,09:35:00,6.26,6.26,6.2,6.2,19937316.0,31974.0
    ...
    

    作者:逝去的紫枫

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python读取通达信一分钟K线数据(.lc1文件)

    发表回复