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;
}