matlab 读取 通达信,Matlab 自动导入通达信板块文件
http://blog.sina.com.cn/s/blog_d6c58efd0102x0gx.html
通达信具有强大的板块处理能力,并且一些板块数据是动态更新的,做股票量化设计的时候,借助通达信的板块动态文件,取到事半功倍的效果,本文用实例说明如何利用通达信板块数据动态更新到自己的板块库。
一、 通达信的板块板块文件及其数据格式;
通达信针对股票的常用板块有风格板块、概念板块、指数板块,分别对应的文件为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
matlab 读取 通达信,Matlab 自动导入通达信板块文件相关推荐
- matlab读取二进制文件字符串,matlab读取内容为二进制的TXT文件
本方法同样适合读取十六进制和二进制以外的其他进制文件, txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言) 读取二进制txt文件: ...
- matlab读取hdf显示,matlab读取.hdf文件
matlab读取.hdf文件 打开hdf文件,以臭氧廓线数据为例 file = 'OMI-Aura_L2-OMO3PR_2009m0107t1808-o23846_v003-2009m1025t065 ...
- matlab读取grib2数据,matlab读取grib2数据
2018 基于通用模型的 GRIB 格式数据读取技术 王兵,李杰 (1. 南京航空航天大学 民航学院,江苏 南京 211106;2. 国家空管飞行流量技术重点实验室,江苏 南京 211106) 摘要: ...
- matlab读取trmm,基于Matlab的TRMM3B43数据处理的思维过程与技术流程
本文主要提供一套处理TRMM3B43数据的思维过程与技术流程,力求能够让读者在处理其他国际通用数据时也能够采用类似的方法来解决. 首先我们来看一下TRMM3B43数据的数据格式,是hdf格式的,相当于 ...
- matlab读取类别数据,Matlab-含有不同数据类型的csv文件的读取和输出
今天就来谈谈csv文件的读取和输出,此篇博文更偏重于自己学习过程的一个记录.平时习惯将数据输出为xlsx文件,但也有不少时候需要输出为csv,之前读取csv文件还是先使用bat程序将文件后缀改为txt ...
- matlab 读取csv_利用Pytorch进行数据加载1--CSV文件的读取和显示
import os # 文件处理模块,用于处理文件和目录 import torch # pytorch的深度学习框架 import pandas as pd #人脸识别库 from skimage i ...
- matlab读取时间数据,Matlab有关数据库读取及时间项的设定
Matlab有关数据库的读取需下载mysql-connector-java-5.1.26-bin.jar文件放到指定位置,并修改classpath.txt相关文件,具体可网上自行查找. 看一下实例: ...
- matlab读取图片亮度,Matlab中使用imagesc函数显示的亮度图像怎么和原图像的大小不一样?...
在matlab 2006上写的两个函数,这两个函数的调用格式为: 读DICOM图像数据: X = read_dicom(filename) 这个函数的作用是从filename所指定的文件中读取图像数据 ...
- 【小技巧】使用MATLAB读取quartusii中signaltapII保存的tbl格式数据文件
有的时候,我们需要将FPGA采集到的数据进行显示,通过MATLAB分析,那么需要读取FPGA的片上数据.我们以quartusii为例子,其片上数据采集到的文件格式为tbl文件,这个时候,我们编写如下程 ...
最新文章
- 大掌门2显示服务器繁忙,《大掌门2》二周年庆典开启 真传弟子潇洒归来
- 深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战
- Using Graphviz dot for ERDs, network diagrams and more
- 【错误记录】Android Studio 的 Flutter 代码界面没有 Logcat 面板
- DOM0,DOM2,DOM3事件,事件基础知识入门
- 020_泛型变量的类型限定
- python做数据分析难么_做统计学习,数据分析应该学Python还是R?
- python的应用论文_python 论文
- 三十二楼层选几层最好_买房楼层怎么选?建筑学家建议:一栋楼不管几层,最好避开这3层...
- 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
- 10 个非常酷的基于jQuery的菜单效果插件
- 【深度语义匹配模型 】原理篇一:表示型
- 洛谷P1134 阶乘问题[数论]
- JavaBean递归拷贝工具类Dozer
- ext4文件系统制作 - make_ext4fs 参数介绍【转】
- 2020 VIVO 面经
- vue2.x 父组件监听子组件事件并传回信息
- Mac 远程 屏幕共享 screen sharing
- UE4编辑器ToolBar扩展
- bzoj3144 切糕