Python獲取本地通達信軟件的股票信息(一)


說明

在量化計算中,經常需要取得類似最新的股票代碼表等相關的股票信息。雖然可以網絡上可以很容易獲得這些信息,但當處於離線或網絡狀況不佳狀態時,我們可以從諸如《通達信金融終端》之類的本地數據中獲得此類信息。
后面的一系列隨筆,都是記錄如何從本地通達信軟件中取得相關的股票信息。

(一) 讀取股票代碼

  • 數據文件
    一般通達信的股票代碼文件,位於"通達信軟件的安裝目錄/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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM