《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 11754|回复: 24
收起左侧

[讨论] 从通达信中生成日线与5分钟线数据的时间序列对象

    [复制链接]
发表于 2013-5-14 13:46:50 | 显示全部楼层 |阅读模式
       量化交易,首先要有数据,没有数据,也量化不起来。作为个人,要想收集起必要的数据,形成自己的金融数据库,是非常困难的。尤其这些数据都是变动的,或者不断增加的。所以机构在这些方面本来有很大的优势。
    金融数据数据首先就想到到行情数据,这还是比较容易收集的,比如股票行情,因为多数证券公司或者提供商,都免费提供level I的行情,我们可以比较方便地取得日线数据,分钟线数据,就是每天需要维护一下。有条件的话,还可以收集到实时的数据(可以从行情软件中用接口读取,也可以从一些网站上的实时行情中取得)。
    这里,我把从通达信目录下读取日线和5分钟线数据,做成了两个MATLAB函数:getday('通达信安装目录','市场','股票代码')和get5min('通达信安装目录','市场','股票代码'),其中目录不要最后一个'\',市场深圳为'sz',上海为'sh',股票代码为六位字符。
    使用时只要放在可以搜索的路径下,就可以直接调用。调用结果生成一个金融时间序列对象,而不是一系列数组。在matlab中金融时间序列对象已经有许多可用的工具函数,可以方便的使用,如果是数组的话,还要考虑日期时间,非常麻烦的。
    先说一下通达信的日线的数据结构,这个已经有不少人讨论过,我仅仅列出吧。
    通达信日线数据的每个记录为32字节,结构如下:
            日期:    uint32                 %把年月日字符串直接变成了整数字。在金融时间序列中要做处理和转换
            开盘价:  uint32                 %开盘价要除以100
                     最高价:  uint32                 %最高价要除以100
                     最低价:  uint32                 %最低价要除以100
                     收盘价:  uint32                 %收盘价要除以100
                     成交金额:float                    %成交金额是有小数的,这里用float,与其它字段不一样,matlab处理有些麻烦
            成交量:  uint32                 %成交量单位是股,如果 要变成手的话要除以每手的单位
                     备用:    uint32
         看了一些人写的读取方法,多数使用循环,其实在matlab中循环效率低,可以直接使用矩阵(矢量)读取,不用循环处理,一次就可以读出。但因为矢量或者矩阵都是同一种数据类型,这里有uint32和float两种类型,不能一次读取。所以分两次读取,一次用uint32,一次用float,注意读取float时,先用fseek(文件句柄,20,-1)路过了从日期到收盘价的20个字节,再用fread(文件句柄,数组,'float=>double',28),其中28是每读一次跳过的字节数,因为读了4 个字节(float),所以只有32-4=28了。这里路过的一定是字节数,而不是前面的变量类型,有些文章和书上的解释是错的。我上过当,后来还是直接查在线帮助才搞清楚的。程序见getday.m   
       再来看5分钟线数据结构,通达信的5分钟线数据结构网上也有人写过,不过是错的,至少在现在版本6下,我发现是错的。下面是我确认是正确的结构。
    每个记录仍然为32字节,结构如下:
            日期:        uint16             %设值为num,则year=floor(num/2048)+2004;
                                                                                                month=floor(mod(num,2048)/100);
                                                                                                day=mod(mod(num,2048),100);
            时间:        uint16             %从00:00:00开始的分钟数。
            开盘价:      float                %有的文章中把四个价格都当成了uint32,是错的
            最高价:      float
            最低价:      float
            收盘价:      float
            成交金额:    float
            成交量:      uint32              %这里没有用float,因为没有小数。但数据类型不一,处理也有点麻烦。
            备用:        uint32
    这个处理比较累,我干脆读了两次,一次用uint32读,取得了日期,时间和成交量。再用float读取,得到四个价格和成交金额。最后造成一个金融时间序列变量,date包括了日期和时间。程序为get5min.m
       金融时间序列对象胻民来方便多了,比如可以直接用字串时间来提取一段数据,可以直接用candle做K线图,金融时间序列工具包中的函数都可以用,很方便的了。
                           

评分

参与人数 1贝壳 +6 收起 理由
faruto + 6 感谢您分享自己珍贵的资料

查看全部评分

发表于 2015-7-12 20:45:42 | 显示全部楼层
Quantszfg 发表于 2015-5-6 16:56
n=d.bytes/32错在哪里?希望请教

同问~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2016-11-27 07:54:38 | 显示全部楼层
一点一点学习,是学会的脚印,谢楼主
回复 支持 反对

使用道具 举报

发表于 2016-9-27 21:44:22 | 显示全部楼层
开源精神,值得学习!
回复 支持 反对

使用道具 举报

发表于 2013-5-14 14:33:30 | 显示全部楼层
有相关的指标代码可以分享?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-15 16:38:31 | 显示全部楼层
有了数据和相关的指标公式,编一下应该可以的。可以自己看一下金融序列工具箱中的一些函数的原代码,学习一下,比如macd,可以直接edit macd就能看到。参考一下吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-22 09:44:19 | 显示全部楼层
     其实matlab中金融时间序列工具箱中有两个工具已经不错了,可以做简单的应用,也可以做自己编程的参考,一个是ftstool是做金融时间序列数据的可视化工具,可以通过这个工具生成金融时间序列对象。另一个是ftsgui,这个就比较好了,可以对ftsobj进行简单的操作和分析,已经有了不少指标可以直接选择作图了。比如macd,rsi等,有十多个。
    如果想要学习如何编写自己的GUI,编写自己的指标,都有可以做为例子学习的。GUI可以按自己的想法来实现,指标的编写方法还是很有参考价值的。
回复 支持 反对

使用道具 举报

发表于 2013-6-25 09:10:22 | 显示全部楼层
mycc 发表于 2013-5-22 09:44
其实matlab中金融时间序列工具箱中有两个工具已经不错了,可以做简单的应用,也可以做自己编程的参考, ...

多多指教了。~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2013-7-9 08:39:03 | 显示全部楼层
厉害厉害,先看看,再进一步交流
回复 支持 反对

使用道具 举报

发表于 2013-7-23 13:20:26 | 显示全部楼层
您好,请问您又没有可能接受实时行情阿,实习的时候有数据库,写了个高频的策略.自己在家没法用很捉鸡啊.求教大神!
回复 支持 反对

使用道具 举报

发表于 2013-7-23 13:21:36 | 显示全部楼层
发个帖也能这么倒霉??!!spacegoing 被钱袋砸中进医院,看病花了 4 贡献.???
回复 支持 反对

使用道具 举报

发表于 2013-8-4 23:38:43 | 显示全部楼层
这个帖子很不错,程序能够直接用,都不需调试了
回复 支持 反对

使用道具 举报

发表于 2013-10-21 17:19:40 | 显示全部楼层
谢谢。非常需要这个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-8-6 06:15 , Processed in 0.064532 second(s), 14 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表