Python获取本地通达信软件的股票信息(一)
2024-09-07 09:50:04
说明
在量化计算中,经常需要取得类似最新的股票代码表等相关的股票信息。虽然可以网络上可以很容易获得这些信息,但当处于离线或网络状况不佳状态时,我们可以从诸如《通达信金融终端》之类的本地数据中获得此类信息。
后面的一系列随笔,都是记录如何从本地通达信软件中取得相关的股票信息。
(一) 读取股票代码
数据文件
一般通达信的股票代码文件,位于"通达信软件的安装目录/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)
最新文章
- Html中自定义鼠标的形状
- 从github拉取项目到myeclipse本地
- Python发布包到Pypi
- Populating Display Item Value On Query In Oracle Forms
- Recommender Systems引言
- 微软下一代云环境Web开发框架ASP.NET vNext预览
- promise(3) &#39;静态&#39;方法
- jeecg入门操作—模板配置(录入界面)
- Description Resource Path Location Type Java compiler level does not match the version of(编译问题)
- Hangfire定时任务设置CronExpression表达式
- Codeforces1023F Mobile Phone Network 【并查集】【最小生成树】
- python自动发送测试报告(五)
- 28、vSocket模型详解及select应用详解
- Bootstrap in ASP.NET MVC 5
- JSON.toJSONString中序列化空字符串遇到的坑
- .NET MVC下的日志文件生成法
- C++之旅(第一天)
- DB2 设置最大连接数
- python虚拟环境的搭建命令mkvirtualenv
- dd装机
热门文章
- requests库获取指定关键词的图片,并保存到本地
- Drift Programming | 漂移编程 | 哲学编程 | 架构设计 | TDD |DDD |Microservice
- 处理uniapp激励广告
- pj_0002_wbs_manager
- js格式转化
- T14 风扇狂转修整TPFanControl.ini 屏蔽pwr
- 尝试在virtualbox虚拟机中fedora30中实现文件夹共享
- C++ 17 遍历文件夹图片文件进行循环操作
- 3DMAX安装失败怎么办?安装3DMAX失败提示错误怎么解决?
- Spring Boot注册Servlet、Filter、Listener原理