说明

在量化计算中,经常需要取得类似最新的股票代码表等相关的股票信息。虽然可以网络上可以很容易获得这些信息,但当处于离线或网络状况不佳状态时,我们可以从诸如《通达信金融终端》之类的本地数据中获得此类信息。

后面的一系列随笔,都是记录如何从本地通达信软件中取得相关的股票信息。

(一) 读取股票代码

  • 数据文件

    一般通达信的股票代码文件,位于"通达信软件的安装目录/T0002/hq_cache/"下。由 shm.tnf 和 szm.tnf 两个文件分别保存沪市和深市的股票代码信息。其中包括了在相应市场上的所有交易产品的代码和名称(股票AB,指数,基金等)。每个文件中的信息条目超过2万。

  • 文件格式

    数据文件是二进制字节格式,由文件头和数据体构成。

-- 文件头:包含 50 个Byte,其中

[ 0:40] -> 40个Byte,IPv4地址,记录软件最后登陆的行情主站IP地址,不足的字节由"\x00"填充,以"\x01'"结束;

[40:42] -> 2个Byte,端口号;

[42:46] -> 4个Byte,日期(YYYYMMDD);

[46:50] -> 4个Byte,时间(Hmmss);

-- 数据体:每个股票信息记录在 314 个Byte的数据块内,其中

[ 0: 6] -> 6个Byte,股票代码;

[23:41] -> 18个Byte,股票名称,不足的字节由"\x00"填充;

[276:280] -> 4个Byte,昨收盘价;

[285:293] -> 4个Byte,股票名称拼音字头

这个数据块内,其他位置有一些数据,比如 [86:90] 4个Byte不知道是什么含义,[76:78] 2个Byte永远都是"\xcbB",好像是表示 200Byte?之后有数据。
  • Python 代码

点击查看代码
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 2 17:04:16 2022
读取本地通达信股票文件
d:/new_tdx/T0002/hq_cache/shm.tnf,,szm.tnf
:文件头(<40sH2I) 50字节,IP-40字节,端口号-2字节,日期-4字节,时间-4字节
:股票或指数代码 314字节
@author: starleex
"""
import struct
import pandas as pd def get_stock_name_shm(mkt ='sz'): file = f'd:/new_tdx/T0002/hq_cache/{mkt}m.tnf' with open(file,'rb') as f :
buff = f.read() data = buff[50:]
l = len(data) // 314
fx =lambda x : str(x,encoding='gbk').strip('\x00')
sm = {'sz':('00','30'),'sh':('60','68')} stocks =[]
for x in [data[i*314 :(i+1)*314] for i in range(l)] :
code = fx(x[:6])
if code.startswith(sm[mkt]) :
name = fx(x[23:41])
lclose =round(struct.unpack('<f',x[276:280])[0],2)
attr = fx(x[285:293]) stocks +=[ [code,name,lclose,attr] ] data_head = buff[:50] return data_head,stocks if __name__ == "__main__": d,s = get_stock_name_shm()
df = pd.DataFrame(s,columns=['代码','名称','前收盘','简码']) # hd = struct.unpack('<40sH2I', d) # print(hd)

Python获取本地通达信软件的股票信息(一)的更多相关文章

  1. python获取本地时间戳

    import time print(time.time())#获当前时间的时间戳 print(time.localtime())#获取本地时间 print(time.strftime('%Y-%m-% ...

  2. python获取本地时间

    python本地时间 import time # 格式化成2016-03-20 11:45:39形式 now = time.strftime("%Y-%m-%d %H:%M:%S" ...

  3. python获取本地ip地址的方法

    #_*_coding:utf8_*_ #以下两种方法可以在ubuntu下或者windows下获得本地的IP地址 import socket # 方法一 localIP = socket.gethost ...

  4. python 获取本地语言和编码的代码

    #! /usr/bin/env python # encoding=utf8 import locale language, encoding = locale.getdefaultlocale() ...

  5. Python学习笔记(十五)用Python获取本地数据

    f1 = open(r'E:\Python\Data\data1.txt') #读取data1.txt文件,使用系统默认缓冲区大小, 为了读取快点,使用缓存吧! f = open(r'E:\Pytho ...

  6. 在有多个网卡,配置了多个IP的情况下,python 获取本地网卡的主IP

    如图所示有多个网卡 本地网卡配置了多个IP class Public_IPOp: @staticmethod def GetLocalIP(): rt = [False] # 根节点 reg_root ...

  7. Python 获取本地主机信息

    import wmi c = wmi.WMI() for sys in c.Win32_OperatingSystem(): #系统信息 print(sys.Caption) #系统版本号 print ...

  8. python获取本地时间,时间戳与日期格式相互转换

    附上代码与运行结果截图: import time # 获取当前时间 now = time.localtime() # 格式化日期 now_ = time.strftime('%Y-%m-%d %H:% ...

  9. python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  10. python 获取本机的IP

    python 获取本地的IP import socket import fcntl import struct def get_ip_address(ifname): s = socket.socke ...

随机推荐

  1. hexo部署和优化记录

    title: hexo部署和优化记录 date: 2020-06-14 09:00:03 前端 tags: hexo summary: Repository_Pages使用.Github仓库打造网页群 ...

  2. docker-compose重新启动单个容器

    这很简单:使用命令: docker-compose restart worker 您可以设置在杀死容器之前等待停止的时间(以秒为单位) docker-compose restart -t 30 wor ...

  3. 无界面Linux系统和Windows系统使用selenium爬取CNVD数据

    因为CNVD官网采用了反爬机制,所以使用selenium能够更容易的爬取漏洞数据 1.在Windows中使用 注意根据chrome版本下载对应chromedriver 2.在无界面的Linux中使用 ...

  4. system verilog与C语言的接口(包含使用方法以及实例)

    资料来源 (1) sv绿皮书; (2) vcs user guide; (3) https://www.cnblogs.com/studyforever/p/5169243.html (4) syst ...

  5. 百题计划-6 codeforces 651 div2 E. Binary Subsequence Rotation 01序列集合划分,2个队列处理

    https://codeforces.com/contest/1370/problem/E 队列元素以末尾字符为结尾的序列就好了,这里队列里的元素不重要,队列size重要 #include<bi ...

  6. centos5.7 x64,安装java17,提示 glibc 版本低

    安装java17,网站下载tar版本. 解压后,配置/etc/profile 的java_home,和path, 运行java -version  和 javac -version  提升缺少GLIB ...

  7. 实验室服务器运维踩坑o.0

    先说背景:实验室新配了一台Dell T640服务器,双3090, 512G内存, 5 x 8T硬盘(RAID5),2 x 1T固态(RAID1),配置很够用但就是搭建运维踩了很多坑,以下是主要完成的几 ...

  8. gitee 上传远程仓库失败

    1:添加本地id_rsa.pub文件内容到gitee SSH Keys (添加公开密钥) 2:设置本地的邮箱和用户名 git config --global user.name "MARS& ...

  9. linux 查看product_uuid,即主板id,机器识别码,需要root权限

    1. 用命令 sudo dmidecode  | grep UUID 或者 sudo lshw  | grep uuid 2. 直接查看文件描述 sudo cat /sys/class/dmi/id/ ...

  10. 写于vue3.0发布前夕的helloworld之三

    接上,watcher构造函数: var Watcher = function Watcher (     vm,     expOrFn,     cb,     options,     isRen ...