通达信软件系统目录结构及文件数据格式

Published

html标签

html5标签

标题标签

章节标签

html4标签

一、通达信软件系统目录结构
┌ yxhj 运行环境目录,存放当日行情数据
├ vip8 分析系统执行程序和系统配置库
├ block 系统板块公用存盘文件
├ doc 通达信文档
│ ┌ fzline 分钟
tdx 通达信 ┤ ├ lday 日线
│ ┌ sz 深圳 ┼ lwek 周线
│ │ └ lmon 月线
│ │ ┌ fzline 分钟线
│ │ ├ lday 日线
└ vipdoc 历史数据 ┼ sh 上海 ┼ lwek 周线
│ └ lmon 月线
├ sav6 v6版工作站信息
│ ┌ fzline 分钟线
│ ├ lday 日线
├ qh 期货 ┼ lwek 周线
│ └ lmon 月线
├ tick 历史成交明细
└ sav 跨越2000工作站信息

D:\Thirdprogram\new_gtja_qq\ ---------- root
 ├── Tc.exe ---------- 国泰君安锐智版网上交易V6.01交易程序
 ├── TdxW.exe ---------- 主程序
 ├── base.dbf  ---------- 
 ├── incon.dat  ----------  风格、概念、指数板块代码数据文件,用二进制格式存储.板块名称和板块代码在D:\ThirdProgram\new_gtja_qq\incon.dat  定义。如:A|农业 A01|农业 A0101|种植业
 ├── common.props ---------- common.props
 ├── LICENSE ---------- LICENSE
 ├── Meowv.Blog.sln ---------- Solution
 ├── README.md ---------- README.md
 ├── .github ---------- github config
 ├── T0002\    
 │   ├── blocknew\ ---------- 板块目录
 │   │       ├── blocknew.cfg ---------- 应用服务缓存
 │   │       └── zxg.blk ---------- 用于README.md展示图片的图片文件夹
 │   ├── diary\ ---------- 投资日记
 │   │       ├── sz\002930.idx ---------- 日记标题
 │   │       └── sz\002930.cnt---------- 日记内容
 │   ├── hq_cache\---------- 投资日记
 │   │      ├── base.dbf ---------- 通达信基本财务数据(含总股本、流通股等);含地域板块信息;
 │   │      ├── block_fg.dat       风格板块
 │   │      ├── block_gn.dat      概念板块
 │   │      ├── block_zs.dat       指数板块
 │   │      └── tdxhy.cfg             每个股票对应通达信行业和申万行业
 │   ├── vipdoc\---------- 历史数据目录,下载或缓存的历史数据目录
 │   │              ├── sh\
 │   │              │      ├── sh\lday\sh000001.day ---------- 上海日线K线数据
 │   │              │      ├── sh\fzline\sh000001.lc5 ---------- 上海5分钟线线数据
 │   │              │      └── sh\minline\sh000001.lc1 ---------- 上海1分钟线线数据
 │   │              └── cw\---------- 通达信财务数据
 │   │                      ├── \vipdoc\cw\gpsh603093.dat y ---------- 通达信财务数据D:\new_tdx\vipdoc\cw\gpsh603093.dat 
 │   │                      └── sh\minline\sh000001.lc1 ---------- 上海1分钟线线数据
 │   ├── tdxline.dat ---------- 画线数据文件,T0002\tdxline.dat
 │   ├── dlls\ ---------- 通达信DLL股票插件编程,存放自己开发的dll
 │   ├── Meowv.Blog.Domain.Shared ---------- 领域层,一些常量,枚举等
 │   ├── Meowv.Blog.EntityFrameworkCore ---------- 集成EF Core,仓储接口实现
 │   ├── Meowv.Blog.EntityFrameworkCore.DbMigrations ---------- EF Core数据库迁移
 │   ├── Meowv.Blog.HttpApi ---------- API控制器
 │   ├── Meowv.Blog.HttpApi.Hosting ---------- WebApi项目,依赖于HttpApi,
 │   ├── Meowv.Blog.Swagger ---------- Swagger扩展、Filter
 │   └── Meowv.Blog.ToolKits ---------- 公共的工具类、扩展方法
 ├── incon.dat ---------- 板块代码数据文件,用二进制格式存储.板块名称和板块代码在D:\ThirdProgram\new_gtja_qq\incon.dat  定义。如:A|农业 A01|农业 A0101|种植业
 └── static ---------- 用于README.md展示图片的图片文件夹
T0002\diary\sz

 

通达信在主图上用画线工具A这个文字注释工具做的文字注释系统自动保存在那个文件夹里:
1、画线工具A这个文字注释工具做的文字注释系统自动保存:都放在通达信软件目录:T0002\tdxline.dat这个文件里面。


2、ctrl+q文字注释的内容都放在T0002\mark.dat

 

通达信软件设计的一些解释

http://fk.tdx.com.cn/dispbbs.asp?boardid=19&Id=9523

vipdoc:下载或缓存的历史数据目录

diary:投资日志目录

RemoteSH:缓存的上海F10

RemoteSZ:缓存的深圳F10

Ycinf缓存的公告消息

安装目录下的SZ.*,SH.*是缓存的盘中数据文件

T0002:个人信息目录,内有公式和自选股,个人设置等信息

Advhq.dat 星空图相关个性化数据

Block.cfg 板块设置文件

cbset.dat 筹码分析个性化数据

colwarn3.dat 行情栏目和预警个性化数据

colwarnTj.dat 条件预警个性化数据

CoolInfo.Txt 系统备忘录

Line.dat 画线工具数据

MyFavZX.dat 资讯收藏夹数据

newmodem.ini 交易客户端个性化数据

padinfo.dat 定制版面个性化数据

PriCS.dat,PriGS.dat,PriText.dat 公式相关数据

recentsearch.dat 最近资讯搜索数据

Scheme.dat 配色方案

tmptdx.css 临时网页CSS文件

user.ini 全局个性化数据

userfx.dat K线图个性化数据

[blocknew] 板块目录

[cache] 系统数据高速缓存

[zst_cache] 分时图数据高速缓存

[coolinfo] 系统备忘录目录

[Invest] 个人理财数据目录

     SUPERSTK下的文件:SYS.DTA 存放系统提供的公式;

     USERDATA下的文件:AUTOBLK.CFG:自动板块设定;SELF.DTA 存放用户自编的公式;

     BLOCK文件夹下的文件: *.IBK 板块指数定义;*.BLK 板块定义;*.EBK 条件选股结果;

     SELF 文件夹下的文件:   *.WSV 保存页面文件;ALERT.DAT 历史预警纪录;EXTDATA.INF 扩展数据定义;

                                      *.CEP 保存组合条件选股条件;TEMPCMPD.CEP测试附加条件;*.INV 用户个人投

                                      资纪录;*.TPT 保存指标模板;SELF年月日.DTA 每日自动公式备份文件;

     TEST 文件夹下的文件: *.TST 存放系统测试结果;*.OPT 存放参数优化的结果;

     PARAM参数指引文件夹: *.PRM 存放参数指引的结果;

     TABLE文件夹下的文件:*.ESS数据表文件;*.ESD数据表文件(带数据保存);

     SelfData文件夹下的文件:*.str 字符串数据;*.oth 与股票无关序列值数据;

     Pattern 文件夹下的文件:  *.PIN 模式匹配设计;*.PWT模式匹配方法;

     SpotAna文件夹下的文件:  *.SPT 定位分析结果;

     Relate文件夹下的文件:    *.RTL 相关分析结果;

     Posible文件夹下的文件:   *.PSB 预测分布设计;

     DATA件夹下的文件:      DAY.DAT 日线数据;EXTDAY.DAT 扩展数据;MIN.DAT 5分钟线数据;REPORT.DAT

                                        当天的分笔成交数据;STKINFO.DAT 代码表/即时行情数据/财务数据/除权数据;*.PRP

                                        历史回忆数据,一天一个文件;

      NEWS文件夹下的文件:*.TXT 财经报道、上交所公告、深交所公告

     通达信小常识:

      1. 自选股放在通达信软件 \T0002\blocknew/zxg.blk  文件中目录下

      2. 通达信备份可用通达信自身工具数据维护工具自己备份:工具栏选 系统——数据维护工具 (许多使用通达信的朋友不能

          下载5分钟数据了,实际上股软并没有出现问题,只是原有的数据已满,将tdx\vipdoc\sh\fzline,tdx\vipdoc\sz\fzline,

           将两个文件原有的数据清空(删除)后就可以继续下载了),各种版本的通达信股软,新下载安装的由于【fzline】没有分时

           数据的记录,可以随时下载5分钟数据.

 

目录

通达信日K线.day、5分钟.rc5、1分钟.rc1历史数据格式

 

一、日K线数据格式

      下载安装通达信软件后,打开“系统”菜单,找到“盘后数据下载”选型,可下载日线.day、5分钟.rc5、1分钟.rc1历史数据。 如:日线数据下载后,存放位置在安装目录\vipdoc\sh\lday下(上证数据)和安装目录\vipdoc\sz\lday下(深证数据),每个股票对应一个文件。通达信的日线数据格式如下:每32个字节为一天数据每4个字节为一个字段,每个字段内低字节在前。

(一)通达信日线数据格式

00 ~ 03 字节   年月日,整型;
04 ~ 07 字节   开盘价*100,整型;
08 ~ 11 字节   最高价*100, 整型;
12 ~ 15 字节   最低价*100, 整型;
16 ~ 19 字节   收盘价*100, 整型;
20 ~ 23 字节   成交额(元),float型;
24 ~ 27 字节   成交量(股),整型;
28 ~ 31 字节   (保留)


(二) 通达信5分钟、1分钟数据格式
00 ~ 01 字节
日期,整型;计算方法为:year = floor(num/2048) + 2004;  month = floor(mod(num,2048)/100);   day = mod(mod(num,2048), 100);
02 ~ 03 字节
0点至目前的分钟数,整型
04 ~ 07 字节
开盘价*100,整型
08 ~ 11 字节
最高价*100,整型
12 ~ 15 字节
最低价*100,整型
16 ~ 19 字节
收盘价*100,整型
20 ~ 23 字节
成交额*100,float型
24 ~ 27 字节
成交量(股),整型
28 ~ 31 字节
(保留)

 

c++

 
struct TdxRecord {     // 日K线数据结构
  unsigned int date;   // e.g. 20100304
  int _open;           // *0.01 开盘价
  int _high;           // *0.01 最高价
  int _low;            // *0.01 最低价
  int _close;          // *0.01 收盘价
  float amount;        // 成交额
  int vol;             // 成交量(手)
  int reserved;       
 
  float open(){  return 0.01*_open; }
  float high(){  return 0.01*_high; }
  float low(){   return _low*0.01; }
  float close(){ return _close*0.01; }
};

 

Python实现批量解析通达信day文件,导出至CSV

Python

import os
import struct
import datetime
def stock_csv(filepath, name):
data = [] with open(filepath, 'rb') as f:
file_object_path = 'D:/通达信/vipdoc/sh/pythondata/' + name +'.csv'
file_object = open(file_object_path, 'w+')
while True:
	stock_date = f.read(4)
	stock_open = f.read(4)
	stock_high = f.read(4)
	stock_low= f.read(4)
	stock_close = f.read(4)
	stock_amount = f.read(4)
	stock_vol = f.read(4)
	stock_reservation = f.read(4)  # date,open,high,low,close,amount,vol,reservation
	if not stock_date:
		break
        # 4字节如20091229
	stock_date = struct.unpack("l", stock_date)
         #开盘价*100
	stock_open = struct.unpack("l", stock_open) 
        #最高价*100
	stock_high = struct.unpack("l", stock_high)  
         #最低价*100
	stock_low= struct.unpack("l", stock_low) 
         #收盘价*100
	stock_close = struct.unpack("l", stock_close) 
        #成交额
	stock_amount = struct.unpack("f", stock_amount) 
         #成交量
	stock_vol = struct.unpack("l", stock_vol) 
         #保留值
	stock_reservation = struct.unpack("l", stock_reservation) 
        #格式化日期
	date_format = datetime.datetime.strptime(str(stock_date[0]),'%Y%M%d')
	list= date_format.strftime('%Y-%M-%d')+ "," + str(stock_open[0]/100)+","
                +str(stock_high[0]/100.0) +"," +str(stock_low[0]/100.0)+"," 
                + str(stock_close[0]/100.0)+"," + str(stock_vol[0])+"\r\n"
	file_object.writelines(list)
	file_object.close()
	path = 'D:/通达信/vipdoc/sh/lday/'
  	listfile = os.listdir('D:/通达信/vipdoc/sh/lday/')
	for i in listfile:
		stock_csv(path+i, i[:-4])

 

日记文件数据格式

 

struct TdxDiary_Idx {

  int   id;       // 0xffffffff = deleted, auto incr

  char  dummy1;   // = 0x00

  char  symbol[7]; // 7 char = 6 char symbol + 1 char '\0'

  int  date;     // 20110407

  int  time;     // 13:14:25 = 131425

  int  weather;   // 00 = 晴, 01=阴, 02=雨, 03=雪

  char  title[64]; // title

  int  offset;   // offset in "symbol.cnt"

  int  length;   // content length

  int  date2;    // date2 = date

  int  time2;    // time2 = time

 

  void set(const char *symbol, const char *title, int offset, int length){

   memset(this->symbol, '\0', 7);

   memset(this->title, '\0', 64);

   this->dummy1 = '\0';

   this->weather=0x03;

   strcpy(this->symbol, symbol);

   strcpy(this->title, title);

   this->offset = offset;

   this->length = length;

  }

  void datetime(int date, int time){

   this->date  = date; this->time  = time;

   this->date2 = date; this->time2  = time;

  }

};

 

c#

读写通达信日记文件 E:\thirdprogram\国泰君安锐智版\T0002\diary\sh\600732.idx 该文件只保留了文件标题信息 文件内容在600732.cnt中

 /// <summary>
    ///功能:读写通达信日记文件 E:\thirdprogram\国泰君安锐智版\T0002\diary\sh\600732.idx 该文件只保留了文件标题信息 文件内容在600732.cnt中
    /// </summary>
    public class TdxDiaryFileRecordStruct
    {
        //E:\thirdprogram\国泰君安锐智版\T0002\diary\sh\600732.idx
       //该文件只保留了文件标题信息
       //文件内容在600732.cnt中

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
       public struct DiaryFileRecordStruct    //RecordSize= 104,其他数字为第几次日记,包括修改
       {
           [MarshalAs(UnmanagedType.I4)] //4byte FF FF FF FF 或08 00 00 00  如果是0XFF FF FF FF则表示记录作废 其他为第几次 
           public Int32 ValidLable;

           [MarshalAs(UnmanagedType.I1)] //1byte 01
           public byte Unknow1;

           [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)] //6byte 36 30 30 30 30 30 
           public string StockCode;

           [MarshalAs(UnmanagedType.I4)] //,K线日期日期 B7 DE 32 01
           public Int32 KLineLableDate;
           [MarshalAs(UnmanagedType.I4)] //,K线时间     49 36 03 00
           public Int32 KlineLableTime;

           [MarshalAs(UnmanagedType.I4)] //,4 byte 未知 00 00 00 00
           public Int32 Unknow3;

           [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] //64 byte 文本内容
           public string DiaryTitle;


           [MarshalAs(UnmanagedType.I4)] //文本内容在600732.cnt 中的偏移字节数 91 01 00 00
           public Int32 CntFileOffsetPostion;
           [MarshalAs(UnmanagedType.I4)] // 文本内容在600732.cnt 中的字节数长度09 00 00 00
           public Int32 CntFileLength;

           [MarshalAs(UnmanagedType.I4)] //,最后修改日期20111031 B4 DE 32 01
           public Int32 UpdateDate;
           [MarshalAs(UnmanagedType.I4)] //,最后修改时间200604=20:06:04 49 36 03 00
           public Int32 UpdateTime;


       }
     
    }

股票代码和名称数据格式

 
struct TdxSymbolMap {
  char symbol[6];    // 6 digits
  char dummy1[18]
  char name[8];      // 4 characters in GB2312
  char dummy2[218];
}


read
void tdx_read_symbols(const char *file){

  FILE *fp=fopen(file.c_str(),"rb");

  fseek(fp, 50, SEEK_SET);

  char buf[250];

  while(250 == fread(buf,1,250,fp)){

   std::string symbol(buf,0,6);

   std::string name(buf+24,8);

  }

 fclose(fp);

}

 

通达信股票代码数据格式

文件位置

从通达信系统获取股票代码信息
 
 通达信系统股票代码信息保存在安装目录下T0002\hq_cache子目录
 
 文件名分别为shm.tnf、szm.tnf
 
 
 
 输出结果:pandas DateFrame
 
 列名含义:
 
 sc:市场代码,sh沪市,sz深市
 
 gpdm:股票代码(9位),如002294.SZ,索引
 
 gpmc:股票名称,如信立泰
 
 gppy:股票拼音,如XLT
 
 gplb:股票类别,如深市中小板A股

通达信V6.1股票代码文件格式分析:https://blog.csdn.net/starsky2006/article/details/5863438

 

概念板块数据结构

概念板块数据结构

    文件存储路径:tdx\T0002\hq_cache\block.dat
    文件存储格式:
        文件头:384字节
        板块个数:2字节
        各板块数据存储结构(紧跟板块数目依次存放)
            每个板块占据的存储空间为2812个字节,可最多包含399个个股
                板块名称:9字节
                该板块包含的个股个数:2字节
                板块类别:2字节
                该板块下个股代码列表(连续存放,直到代码为空)
                    个股代码:7字节


tdx\T0002\hq_cache\block.dat:
typedef struct _TDXBLOCKDATAFILEHEADER
{
    union
    {
       char     Header[0x182];
    };
}TDXBLOCKDATAFILEHEADER,*PTDXBLOCKDATAFILEHEADER;

typedef struct _TDXBLOCKDATA
{
    char           BlockName[9];
    unsigned short int  Num;
    unsigned short int  Data1;
    char           CodeName[400][7];
} TDXBLOCKDATA,*PTDXBLOCKDATA;

typedef struct _TDXBLOCKDATFILE
{
   TDXBLOCKDATAFILEHEADER    Header;
   TDXBLOCKDATA            Block[n];
}TDXBLOCKDATFILE,*PTDXBLOCKDATFILE;

 

自定义板块存储数据结

自定义板块存储数据结

板块名称文件:\tdx\T0002\block.cfg

    存储结构:

              空白:4字节

              板块名称:10字节字符串

              板块简码:5字节字符串

自定义的各板块个股存储

          文件名:tdx\T0002\blocknew\  +  自定义板块简码(与block.cfg文件中的各板块简码同)

      数据存储结构:

            个股分隔符:2字节

            个股属性代码:1字节(1:表示上证;0:表示深证)

            个股名称:6字节
自选股票T0002\blocknew\ZXG.blk

 

通达信基本财务数据结构

1.D:\Thirdprogram\new_gtja_qq\T0002\hq_cache\base.dbf

2.

/ 通达信格式财务数据
#define	TDX_FHEADER_SIZE	0x521
typedef struct tdx_basedata_t {
	char	m_szMagic;
	char	m_szMarket;						// 市场 '0' 深圳 '1' 上海
	char	m_szCode[6];
	char	m_szDate_modified[8];			// 更新日期
	char	m_szShare_count_total[14];		// 总股本 10000
	char	m_szShare_count_national[14];	// 国家股 10000
	char	m_szShare_count_orig[14];		// 发起股 10000
	char	m_szShare_count_corp[14];		// 法人股 10000
	char	m_szShare_count_b[14];			// B股 10000
	char	m_szShare_count_h[14];			// H股 10000
	char	m_szShare_count_currency[14];	// 流通股 10000
	char	m_szShare_count_employ[14];		// 职工股 10000
	char	m_szUnkown1[14];				// 
	char	m_szAsset[14];					// 总资产 1000
	char	m_szAsset_currency[14];			// 流动资产 1000
	char	m_szAsset_capital[14];			// 固定资产 1000
	char	m_szAsset_imma[14];				// 无形资产 1000
	char	m_szInvest_long[14];			// 长期投资 1000
	char	m_szDebt_currency[14];			// 流动负债 1000
	char	m_szDebt_long[14];				// 长期负债 1000
	char	m_szAcc_fund[14];				// 公积金 1000
	char	m_szNet_asset[14];				// 净资产 1000
	char	m_szMain_income[14];			// 主营收入 1000
	char	m_szMain_profit[14];			// 主营利益 1000
	char	m_szOther_profit[14];			// 其他利益 1000
	char	m_szBusiness_profit[14];		// 营业利益 1000
	char	m_szInvest_profit[14];			// 投资收益 1000
	char	m_szAllow_profit[14];			// 补贴收入 1000
	char	m_szOut_profit[14];				// 业外收支 1000
	char	m_szProfit_regulate[14];		// 损益调整 1000
	char	m_szTotal_profit[14];			// 利润总额 1000
	char	m_szProfit_aftertax[14];		// 税后利益 1000
	char	m_szNet_profit[14];				// 净利益 1000
	char	m_szProfit_ud[14];				// 未分利润 1000
	char	m_szNet_asset_ps_regulate[14];	// 每股净资2
	char	m_szUnknown2[3];				// 
	char	m_szUnknown3[4];				// 
	char	m_szUnknown4[2];				//
	char	m_szDate_begin[8];				// 上市日期
	char	m_szUnknown5[3];				// 
	char	m_szUnknown6[11];				// 
}TDX_BASEDATA, *PTDX_BASEDATA;

3.

//数据管理-通达信财务数据导入-选择文件-通达信财务板块数据导入
int CSelfDB::InstallBasetableTdx(const char * filename)
{
	if (NULL == filename || strlen(filename) == 0)
		return 0;
	
	int	nCount	= 0;

	CSPString	sRoot		= GetRootPath();
	CSPString	sFileNameSHSZ	= sRoot + self_chna_basetbl;
	CSPFile	fileSHSZ, fileTdx;
	if (fileSHSZ.Open(sFileNameSHSZ, CSPFile::modeWrite | CSPFile::modeCreate)
		&& fileTdx.Open(filename, CSPFile::modeRead))
	{
		fileTdx.Seek(TDX_FHEADER_SIZE, CSPFile::begin);

		TDX_BASEDATA	tdxblock;
		while(sizeof(tdxblock) == fileTdx.Read(&tdxblock, sizeof(tdxblock)))
		{
			BASEDATA	block;
			if (convert_TDX_BASEDATA_to_BASEDATA(&tdxblock, &block))
			{
				fileSHSZ.Write(&block, sizeof(block));
				nCount	++;
			}
		}
	}

	return nCount;
}