通达信日线day文件格式详解(含港股)

最近在学习量化分析,需要采集一些历史数据,虽然途径有很多,但通达信自带的数据是不错的获取途径。
但现有网上的资料大多说明不清晰,导致浪费了不少时间。现把自己的解析写出来,为各位爱好者提供帮助。

这里只涉及日线历史数据,主要是以.day文件存在( 还有eday fzline minline 等其他指标,暂时不详细讨论),包括的途径:
vipdoc\sh\lday —上海
vipdoc\sz\lday —深圳
vipdoc\ds\lday —扩展

vipdoc\cw 和vipdoc\ot 两个目录尚未明白,如果有高人请指点一二。

内容格式:
每32个字节为一天数据
每4个字节为一个字段,每个字段内低字节在前。
但每个文件格式有所不同,这是比较坑人的地方。
00 ~ 03 字节:年月日, 整型
04 ~ 07 字节:开盘价
08 ~ 11 字节:最高价
12 ~ 15 字节:最低价
16 ~ 19 字节:收盘价
20 ~ 23 字节:成交额(元)
24 ~ 27 字节:成交量(手)
28 ~ 31 字节:保留,一般都是0

其中开盘价、最高价、最低价、收盘价, 在sh或sz 中是整数,其中基金或债券等需要除以1000,普通股票和指数等则除以100,而在扩展行情中则是浮点数。
特别需要解释的是:
在上证 sh\lday 中,sh204xxx 表示逆回购债券,sh5xxxxx 表示基金,sh88xxxx 表示上海板块指数,sh90xxxx表示上证B股,sh99xxxx表示指数,其余sh6xxxxx是上证A股,sh000xxx 上海指数,其中有几个指标需要注意,sh000001与sh999999其实都是上证指数,
在深证 sz\lday 中,sz2xxxxx深圳B股,sz1318xx 深圳逆回购债券,sz1xxxxx 表示债券、基金,sz0xxxx深圳A股,sz3xxxxx 创业板,
在扩展 ds\lday 中,文件格式为 xx#xxxxx.day , 其中#前2位代码分别表示属性,如31#xxxxx 表示港股主板,71#xxxxx 表示港股通,47#xxxx表示债券等。

几个重要的代码:
sh99999 sh000001 上证指数,真的有两个代码,一样的数据
sh39001 深证成指
27#HSI 港股恒生指数
47#00405 港股越秀房产基金
31#01810 港股小米集团
71#01508 港股中国再保险

示例代码如下():
详细完整代码和程序可参考 通达信day格式文件转换(含港股和基金等)

// 如果认准一个目标,那么就遇事要忍,出手要狠,善后要稳
//希冀一旦产生,除了实现它,别无他法
#include 
#include 
#include 
#include 

union data 
{
	int n;
	float m;
}

int main()
{
    FILE *fp;
    int nLen;
    int i=0;
    union data num[8];
    // 把任意一个day文件拷贝为s.day,并以二进制方式打开
    if( (fp=fopen("s.day","rb")) == NULL )
    {  
       printf("Fail to open file!");
        exit(0);
    }

    while(!feof(fp))
    {
        nLen = fread(num, sizeof(int), 8, fp);
        for(i=0;i<8;i++)
        {
        
            printf("i=%d  ",i);
            // 把day的数据显示出来,可看到具体的数据,分别显示原始16进制数据、整数型和浮点数
            printf("== %x and  %d  and %f \n",num[i].n,num[i].n,num[i].m);  
                       
        }
   }

    fclose(fp);
 
    return 0;

}

通达信日线day文件格式详解(含港股)_第1张图片
这是sz000631 在20180115的数据

通达信日线day文件格式详解(含港股)_第2张图片

这是小米公司的上市首日的数据

不同的股票取值不同。

你可能感兴趣的:(C语言,通达信,日线,day文件)