python 通达信板块_python 适用通达信

本文介绍了一个Python脚本,用于将通达信的分笔数据转换为1分钟和5分钟的数据文件。脚本包括读取分笔数据、转化为1分钟和5分钟数据的功能,并提供了使用示例。此外,还包含了处理不同时间段数据的过滤方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:适用通达信,别的没测试,

使用:python 文件名.py -t 999999 20070101 20070131 表示 用文本文件转化为1分钟5分钟的数据文件,代码是上证指数,日期 20070101到20070131 生成的5分钟数据文件为 sh999999.lc5 ,一分钟文件为 sh999999.lc1

注意:能直接看5分钟的数据,但不能直接看1分钟的,可能的原因是1分钟的数据文件不是sh999999.lc1形式的,有知道的请告知;但是可以换个方法看1分钟的图,方法是sh999999.lc1更名为 sh999999.lc5 ,然后在5分钟图下看1分钟的K线了。

以下是代码

#!/usr/bin/python

#-*- encoding: gbk -*-

from __future__ import division

fromstructimport*

import os,time ,datetime,string,sys,math,re,shutil,glob

import zipfile,StringIO,getopt

#from readths2 import *

# 2010-09-02 by 厚朴

basedir = r"D:\2965\guosen" #如果你的安装路径不同,请改这里

exp_dir= basedir + r"\T0002\export"

#exp_dir= basedir + r"\T0002\export_back"

lc5_dir_sh = basedir + r"\Vipdoc\sh\fzline"

#lc5_dir_sh =r"D:\2965\ydzqwsjy\Vipdoc\sh\fzline"

lc5_dir_sz = basedir + r"\Vipdoc\sz\fzline"

day_dir_sh = basedir + r"\Vipdoc\sh\lday"

day_dir_sz = basedir + r"\Vipdoc\sz\lday"

stkdict = {} #存储股票ID和上海市、深圳市的对照

#############################################################

# read 通达信分笔数据

# example readfbtxt(readlines(),"20100831-600000.TXT")

# 返回的data格式为

# (stkid,datetime,price,amount,vol(股数),笔数,buy or sale) 的list

#############################################################

def readfbtxt(p_lines,p_name):

"""读通达信分笔数据 """

data = []

shortname = os.path.split(p_name)[1]

shortname = os.path.splitext(shortname)[0]

sDay,stkID = shortname.split("-")

if len(sDay) != 8 : return data

stky = int(sDay[0:4])

stkm = int(sDay[4:6])

stkd = int(sDay[6:8])

line_no = 0

for l in p_lines:

line_no += 1

if line_no <=3: continue

l = l.strip()

t = re.split("\s+",l)

k =datetime.datetime(stky,stkm,stkd,int(t[0][0:2]),int(t[0][3:5]))

p = float(t[1])#price

vol = int(t[2])*100#股数

amt = p * vol#成交量

bscnt = 0#笔数

bstag = ""#buy or sale

try:

bscnt = int(t[3])#笔数

bstag = t[4]#buy or sale

except IndexError,e:

pass

data.append((stkID,k,p,amt,vol,bscnt,bstag))

return data

#############################################################

# 将分笔数据转化为分笔数据

# p_data:传入参数 为readfbtxt所返回

# data:返回的数据格式为

# [stkid,datetime,open,high,low,close,amt,vol(股)]

#############################################################

def fbtxt2lc0(p_data):

"""分笔数据转化为1分钟数据"""

data = []

for i in p_data:

t = i[1]#datetime

p = i[2]#price

data.append([i[0],t,p,p,p,p,i[3],i[4]])

return data

#############################################################

# 将分笔数据转化为1分钟数据

# p_data:传入参数 为readfbtxt所返回

# data:返回的数据格式为

# [stkid,datetime,open,high,low,close,amt,vol(股)]

#############################################################

def fbtxt2lc1(p_data):

"""分笔数据转化为1分钟数据"""

data = []

for i in p_data:

t = i[1]#datetime

p = i[2]#price

lend = len(data)

j = lend - 1

while j >= 0:

if data[j][1] == t:break

j -= 1

if j < 0:#没有找到该时间

data.append([i[0],t,p,p,p,p,i[3],i[4]])

else:#找到该时间

if p > data[j][3]:#high

data[j][3] = p

if p < data[j][4]:#low

data[j][4] = p

data[j][5] = p#close

data[j][6] += i[3]#amout

data[j][7] += i[4]#vol

#data.sort(key = lambda x:x[1])#以datetime 排序

return data

#############################################################

# 一个时间对应的5分钟区间段

# dt 传入参数 为一个datetime.datetime or datetime.time

# 返回datetime 或time<

<think>好的,我现在需要帮助用户解决如何使用Python读取通达信new_tdx文件中的板块数据的问题。首先,用户提到了引用[2]中的pytdx库,这应该是关键工具。我需要回忆一下pytdx的文档和使用方法。记得pytdx有一个BlockReader类,专门用来处理板块数据,比如block_zs.dat这样的文件。 接下来,用户的具体需求是读取板块数据,而引用[2]中的示例代码已经展示了使用BlockReader读取block_zs.dat文件的例子。可能需要确认文件路径是否正确,通常通达信板块数据存储在T0002/hq_cache目录下,例如block_zs.dat对应的是指数板块,block_gn.dat是概念板块,block_fg.dat是自定义板块。 然后,我需要检查用户提供的引用内容。引用[2]中的代码使用了BlockReader().get_df("路径"),并打印了结果。这应该可以直接用来读取板块数据。但需要注意路径中的反斜杠在Python字符串中需要转义,或者使用原始字符串(r前缀)。 另外,用户可能遇到的常见问题包括文件路径错误、文件不存在,或者编码问题。需要提醒用户检查路径是否正确,尤其是不同版本的通达信可能目录结构不同。此外,可能需要安装最新版的pytdx库,以确保兼容性。 还有,用户可能需要将读取的数据保存为其他格式,比如CSV,或者进行进一步的处理。可以建议使用pandas的to_csv方法,如示例中的df.to_csv('block_zs.csv')。 最后,确保回答结构清晰,步骤明确,并包含代码示例和常见问题解答,帮助用户顺利解决问题。</think>### Python读取通达信板块数据的方法 通过`pytdx`库可以高效读取通达信本地板块数据,主要依赖`BlockReader`类实现。以下是具体步骤: --- #### **1. 安装依赖库** ```bash pip install pytdx pandas ``` --- #### **2. 文件路径定位** 通达信板块数据存储在`new_tdx/T0002/hq_cache/`目录下,主要文件包括: - `block_zs.dat`(指数板块) - `block_gn.dat`(概念板块) - `block_fg.dat`(自定义板块) --- #### **3. Python代码实现** ```python from pytdx.reader import BlockReader # 指定文件路径(示例为指数板块) file_path = r"C:\new_tdx\T0002\hq_cache\block_zs.dat" try: # 读取数据并转换为DataFrame df = BlockReader().get_df(file_path) print(df.head()) except FileNotFoundError: print("文件路径错误或文件不存在") ``` --- #### **4. 输出结果解析** 输出的DataFrame包含以下字段: | 字段名 | 说明 | |--------------|--------------| | `code` | 股票代码 | | `name` | 股票名称 | | `block_type` | 板块分类标识 | --- #### **5. 保存为CSV文件** ```python df.to_csv('block_zs.csv', index=False, encoding='gbk') # 兼容中文路径 ``` --- #### **常见问题处理** 1. **文件路径错误** 检查路径是否包含中文字符,建议使用英文路径或添加`r`前缀声明原始字符串。 2. **数据字段缺失** 更新`pytdx`到最新版本:`pip install --upgrade pytdx`。 3. **板块分类混淆** 不同`.dat`文件对应不同板块类型,需根据需求选择文件。 --- ### 相关引用 - `pytdx`库支持读取通达信多种数据格式,包括日线、分钟线和板块数据[^2]。 - 读取`.lc1`分钟线数据的方法类似,但需使用`TdxLCMinBarReader`类[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值