matlab 读取 通达信,Matlab 自动导入通达信板块文件

news/2025/2/23 1:08:47/

本文包括程序为作者原创。

通达信具有强大的板块处理能力,并且一些板块数据是动态更新的,做股票量化设计的时候,借助通达信的板块动态文件,取到事半功倍的效果,本文用实例说明如何利用通达信板块数据动态更新到自己的板块库。

一、 通达信的板块板块文件及其数据格式;

通达信针对股票的常用板块有风格板块、概念板块、指数板块,分别对应的文件为block_fg.dat;block_gn.dat;block_zs.dat

存储路径为 \T0002\hq_cache

三个板块的数据格式均为二进制文件,并且格式相同:

文件存储格式:

文件头:384字节

板块个数:2字节

各板块数据存储结构(紧跟板块数目依次存放),

每个板块占据的存储空间为2813个字节,可最多包含400只个股

板块名称:9字节

该板块包含的个股个数:2字节

板块类别:2字节

该板块下个股代码列表(连续存放,直到代码为空)

个股代码:7字节

二、 通达信板块数据更新频率;

通达信对不同的板块更新的频率不同,具体可以参考通达信的红宝书文件。为简单期间,本地数据库建议每天更新,更新时间设在上午9:00之后。

三、 Matlab对板块数据的储存格式

用table格式,table包括四个字段,分别为Date,fg,gn,zs;对应更新时间,风格板块,概念板块和指数板块三个板块类别。存储格式为N*2的元胞数组,N为该类别的板块数。

四、 自动更新设置

根据上交所交易日戳,如果table中的最后更新时间小于上交所日戳的最后时间,则自动更新。并且将自动更新的判断单独设立函数。在其他需要更新的地方也可正常调用。比如个股日线数据更新。

程序代码附后,剪贴板可能会有少数字符不能直接执行,需要修改。

网友如有更好优化,欢迎留言。

functionreadblock();

%%

批量读入通达信板块数据到表格

%

读入的板块文件分别为:block_fg.dat(风格板块);block_gn.dat(概念板块);block_zs.dat(指数板块)

%

文件位于

‘C:\new_jyqyb\T0002\hq_cache’目录下;

%

存储格式为表,表的域名分别为:日期,风格板块,概念板块,指数板块

%

后面的数据域为元胞数组,{nCount,nLevel,nIndexOffset,blName,blstocks},

%

分别对应的说明为:{板块数,版块分类,板块指针,板块名称,成分代码};

%

根据通达信的定义,有些板块成分股有固定的调整周期,所以为确保数据完整性,

%

板块数据也需要每天更新。

blockFile =

['block_fg.dat';'block_gn.dat';'block_zs.dat'];

blockNmae =

['风格板块';'概念板块';'指数板块'];

blockPathin

= 'C:\new_jyqyb\T0002\hq_cache'

;

blockPathout

= 'D:\Stock\Data';

blockFileout

= 'block.mat';

fo = [

blockPathout,'\',blockFileout];

if

~exist(fo,'file')

%判断板块数据表是否存在,

block =

table;

needUp

= 1;

else

load(fo)

%打开存在的板块数据表;

if

~isempty(block)

bd=block.Date(end);

if

~(strcmp(class(bd),'char'))

blockoldDate =

char(bd);

else

blockoldDate =

bd;

end

needUp

= Needupdata(blockoldDate);

else

needUp

= 1;

end

end

while

needUp

== 1

%如果需要更新

bnum =

length(blockFile(:,1));

for

bln =

1:bnum

bf =

[blockPathin,'\',blockFile(bln,:)];

blocktemp(bln,:) ={

readoneblock(bf)};

end

D1 =

datestr(now,'yyyy-mm-dd

HH:MM:SS');

blocktabletemp =

cell2table({D1,blocktemp(1,1),blocktemp(2,1),blocktemp(3,1)},...

'VariableNames',{'Date','fg','gn','zs'});

block =

[block;blocktabletemp];

save

(fo,'block');

needUp

= 0;

end;

function[nnblodk]

= readoneblock(blockfilename)

%%

取通达信板块数据

%

概念板块

%{

数据结构

文件存储路径:tdx\T0002\hq_cache\block.dat

文件存储格式:

文件头:384字节

板块个数:2字节

各板块数据存储结构(紧跟板块数目依次存放),

每个板块占据的存储空间为2812个字节,可最多包含399个个股

板块名称:9字节

该板块包含的个股个数:2字节

板块类别:2字节

该板块下个股代码列表(连续存放,直到代码为空)

个股代码:7字节

%}

fngn =

blockfilename;

fid =

fopen(fngn,'r','n','gb-2312');

szVersion =

char(fread(fid,64,'char'))';

%文件版本信息

szVersion(abs(szVersion)==0)=[];

%切除后面的无效字符

fseek

(fid,384,'bof');

nIndexOffset =

fread(fid,1,'uint16');

%板块个数

for

i =

1:nIndexOffset

fseek

(fid,386+(i-1)*2813,'bof');

ju =

1;

cc =

char(fread(fid,1,'char'));

for

k =

1:8

while

ju

cc1 =

char(fread(fid,1,'char'));

if

abs(cc1) >

0

cc =

[cc,cc1];

else

ju =

0;

end

end

end

szName(i,:) ={ cc

};

fseek

(fid,395+(i-1)*2813,'bof');

nCount(i) =

fread(fid,1,'uint16');

%fseek

(fid,397+(i-1)*2813,'bof');

nLevel(i) =

fread(fid,1,'uint16');

sztemp

= [char(fread(fid,[7,400],'char'))];

sztemp

= sztemp';

sztemp(int16(nCount(i)+1):end,:)=[];

sztemp(:,7)=[];

sz(i,1) =

{sztemp};

end;

nnblodk

= [szName,sz];

fclose(fid);

clear

nCount

nLevel

nIndexOffset

blName

blstocks

cc*

i

ju

k

sz*

ans

fngh;

function

[

Needs_updating] = Needupdata( endDate,cStock )

%%

根据给定的日期,确定数据是否需要更新,这里约定的输入参数格式为

‘yyyy-mm-dd

HH:MM:SS’

%

输出值为

逻辑型,1表示需要更新;0表示不需要;

%

原理: 1、取交易所交易日戳数据

%

2、得到最后一个交易日期,约定的更新日期为每天收盘后2小时;

%

3、如果最后更新时间小于最后一个交易日的;

%

4、默认为大盘或板块类,如果指定cStock,则取对应的股票交易日戳;

load

My %

My储存登陆信息’

ret =

gm.InitMD(My_username,

My_password,1);

if nargin<2

cStock = 'SHSE';

else

if

length(cStock)>6

cStock = str2symbol(cStock(end-5:end)) ;

end

end

start_time =

datestr(datenum(today)-300,'yyyy-mm-dd');

end_time =

datestr(today,'yyyy-mm-dd');

tradedate =

gm.GetCalendar( cStock, start_time, end_time );

td1 =

char(tradedate.strtime(end));

td =

[td1(1:10),'

09:01:00'];

if length(endDate)==10

endDate = [endDate,'

00:00:00'];

else

if

datenum(endDate,'yyyy-mm-dd

HH:MM:SS')'yyyy-mm-dd

HH:MM:SS')

Needs_updating = 1;

else

Needs_updating = 0;

end;

end;

function

[symb_11]

= str2symbol(str6)

%%

股票代码转化为掘金量化代码’

if

strcmp(str6(1),'6')

symb_11 = ['SHSE.',str6];

else

symb_11 = ['SZSE.',str6];

end


http://www.ppmy.cn/news/901451.html

相关文章

怎样测试通达信软件,如何测试通达信指标成功率?

如何测试通达信指标成功率&#xff1f; 通达信作为一款功能齐全的免费软件肯定很多人使用&#xff0c;包括我&#xff0c;那么我们无论是朋友还是网上找到一款指标导入之后他具体的功能怎么样&#xff1f;实用性如何我们一时半刻单单用眼睛看是看不出来的&#xff0c;那么通达信…

如何用python获取通达信数据_Python读取通达信本地数据

一、介绍 python获取股票数据的方法很多,其中 Tushare 财经数据接口包很好用,当然,也可以通过通达信本地的数据获取,这样更为方便。 日线数据存在这路径下 D:\通达信\vipdoc\sh\lday(我的通达信安装目录是D盘) 接着我们需要的就是解析这些数据,在分别存为 csv 格式的数据就…

通达信c语言编程,通达信编程实例100个;

《通达信编程实例100个;》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《通达信编程实例100个;(4页珍藏版)》请在人人文库网上搜索。 1、通达信编程实例1、放量a、今日比昨日的成交量放大了1倍&#xff1a;VOL/REF(VOL, 1)2;b、今日的五日均量比五天前的五日均量放大…

通达信 c语言,通达信if语句用法,通达信公式编写

Q1:通达信公式编写 算术函数IF(逻辑判断)语句相当于我们平时所说的”如果.....那么“。 IF---根据条件求不同的值. 用法: IF(X,A,B)若X不为0则返回A,否则返回B 例如:IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值 时间函数HOUR---小时 取得该周期的小…

python量化交易通达信_通达信交易策略,通达信量化交易

内容导航&#xff1a; Q1&#xff1a;通达信交易策略公式 满足gg后出现aa卖出 DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); MACD:(DIF-DEA)*2; 两个条件用and&#xff1f;那是同时满足。 大于号小于号&#xff1f; 你要的是“满足gg后出现aa”。 满足gg后多少天&#xf…

CV常用注意力机制总结

本文总结了近几年CV领域常用的注意力机制&#xff0c;包括&#xff1a;SE&#xff08;Squeeze and Excitation&#xff09;、ECA&#xff08;Efficient Channel Attention&#xff09;、CBAM&#xff08;Convolutional Block Attention Module&#xff09;、CA&#xff08;Coor…

Mysql——三大范式

三大范式 什么是范式&#xff1f;常用的三大范式举例说明3NF&#xff1a;1NF2NF3NF 什么样的表越容易符合3NF&#xff1f; 什么是范式&#xff1f; 范式是数据库设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 常用的三大范式 第一范式(1NF)&#xff1a;属性…

惠普ERP解决方案

目标客户 和佳公司使命&#xff1a;以发展民族软件产业为己任&#xff0c;引领中国企业走向世界!北京和佳软件技术有限公司是国内专业的ERP软件供应商&#xff0c;公司创始人陈佳先生是国内最早的ERP倡导者及实践者&#xff0c;十余年一直坚守在ERP战线&#xff0c;坚持自主开发…