说明

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

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

(一) 读取股票代码

  • 数据文件

    一般通达信的股票代码文件,位于"通达信软件的安装目录/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)

最新文章

  1. Html中自定义鼠标的形状
  2. 从github拉取项目到myeclipse本地
  3. Python发布包到Pypi
  4. Populating Display Item Value On Query In Oracle Forms
  5. Recommender Systems引言
  6. 微软下一代云环境Web开发框架ASP.NET vNext预览
  7. promise(3) &#39;静态&#39;方法
  8. jeecg入门操作—模板配置(录入界面)
  9. Description Resource Path Location Type Java compiler level does not match the version of(编译问题)
  10. Hangfire定时任务设置CronExpression表达式
  11. Codeforces1023F Mobile Phone Network 【并查集】【最小生成树】
  12. python自动发送测试报告(五)
  13. 28、vSocket模型详解及select应用详解
  14. Bootstrap in ASP.NET MVC 5
  15. JSON.toJSONString中序列化空字符串遇到的坑
  16. .NET MVC下的日志文件生成法
  17. C++之旅(第一天)
  18. DB2 设置最大连接数
  19. python虚拟环境的搭建命令mkvirtualenv
  20. dd装机

热门文章

  1. requests库获取指定关键词的图片,并保存到本地
  2. Drift Programming | 漂移编程 | 哲学编程 | 架构设计 | TDD |DDD |Microservice
  3. 处理uniapp激励广告
  4. pj_0002_wbs_manager
  5. js格式转化
  6. T14 风扇狂转修整TPFanControl.ini 屏蔽pwr
  7. 尝试在virtualbox虚拟机中fedora30中实现文件夹共享
  8. C++ 17 遍历文件夹图片文件进行循环操作
  9. 3DMAX安装失败怎么办?安装3DMAX失败提示错误怎么解决?
  10. Spring Boot注册Servlet、Filter、Listener原理