C++读取通达信shm.tnf文件股票代码/名称

    之前用MFC写股票相关小工具,但shm.tnf(沪市)szm.tnf(深市)文件格式一直搞不清楚没法读到相关代码及名称,只能手动导出更新,麻烦得狠。

    周末无聊,重新在网上搜索相关信息,具体数据格式还是没搞明白,但已经可以读出想要的信息,贴出网上找的数据格式信息如下,供参考:

shm.tnf文件格式

TFileHelisting_Tnf = pair conditionerked record

IP: rear endortment[0…39] of char; //–IP地址

Unknown: word; //–未知

ddined: Integer; //–日期

time: Integer; //–时间

end;

PFileHelisting_Stock = ^TFileHelisting_Tnf;

TDfound ataRecord_Tnf = pair conditionerked record

StockCode: rear endortment[0…8] of char; //–股票代码

Unknown1: byte; //–未知

Unknown2: word; //–未知

Unknown3: single; //–代码未知

Unknown4: Integer; //–未知

Unknown5: Integer; //–未知

StockNwseeing ase: rear endortment[0…17] of char; //–股票名称

Unknown6: Integer; //–未知

Unknown7: rear endortment[0…185] of char; //–未知

Lseeing astClose: single; //昨收盘价

Unknown8: byte; //–未知

Unknown9: Integer; //–未知

StockNwseeing aseSX: rear endortment[0…8] of char; //–名称缩写

    有需要的友友可以直接参考以下代码读出相关信息,上面的数据格式多次尝试定义结构类型,始终不能准确读出结果,最后只好放弃定义结构。网上有很多信息提到现在的shm.tnf,前面50字节为文件相关信息,先偏移50,然后一条信息点314字节,每次读314字节,经多次尝试:代码为314中前9字节,名称为23开始的18个字节,缩写为285开始的9字节,或有不对,输出如下可以。

shm.tnf

    此调试用VS2017 C++编写,建立一个空项目,直接把内容贴到.cpp文件中即可。注:请自行修正文件路径,本机为string path = "D:\\new_tdx\\T0002\\hq_cache\\shm.tnf",对应修改此处。
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

void test()

{

	string path = "D:\\new_tdx\\T0002\\hq_cache\\shm.tnf";
	
	fstream ifs(path, ios::in | ios::binary);
	
	ifs.seekg(50);
	
	char buf[314];
	
	int nSh = 0;
	
	int nKcB = 0;
	
	cout << path << endl;
	
	cout << "------------------------------------------------------" << endl;
	
	//输出表头
	
	cout << "序 号" << "\t股票代码" << "\t股票名称" << "\t名称缩写" << endl;
	
	cout << "------------------------------------------------------" << endl;
	
	while (!ifs.eof())
	
	{
	
		ifs.read(buf, sizeof(buf));
		
		string strTwo(buf, 2);
		
		string symbol(buf, 0, 6);
		
		string name(buf + 23, 18);
		
		string mcsx(buf + 285, 9);
		
		if (strTwo == "60" | strTwo == "68" )
		
		{
		
			if(strTwo == "60")
		
				nSh++;
		
			else nKcB++;
		
		cout << nSh + nKcB << "\t" << symbol << "\t\t" << name << "\t" << mcsx << endl;
		
		}
		
		//memset(buf, 0, sizeof(buf));
	
	}
	
	cout << "------------------------------------------------------" << endl;
	
	cout << "沪市A股不含科创板:" << nSh << "只" << endl;
	
	cout << "沪市A股科创板:" << nKcB << "只" << endl;
	
	cout << "沪市A股合计:" << nSh + nKcB << "只" << endl;
	
	ifs.close();

}

int main()

{

	test();

}
	指数、板块等相关信息在调试中已屏蔽,需要用的可自行修改。有过类似经验的友友留言交流指导,谢谢!
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
缠论大师很多,在下才疏学浅,不到之处敬请点拔。另外声明一下,世间没有包赚钱的公式,只有适合的工具。想通过一个什么包赚钱的价格几万的公式来稳赚不赔,那股市就没有输家了。如果有缘份的话,本文最后将推出缠师最终没有告知大家的力度公式部分。真正得缠者,为见相非相,即见如来。 通达信版公式,因为定义不了全局变量、数组,以及没有循环语句等功能,相比大智慧在公式编程方面差了不少。但通达信的优势还是有的,在此推出一个通达信非DLL版本的缠论分笔公式,并在后续的文章中逐步讲解如何通过程序,将缠论转化公式。如果缠友仅想得到一公式而已,那就也无所谓细读本文。但凡得道,靠的是觉悟和缘份,在此也就不细说了。初学缠论的朋友也可以参考一些网站或专门的书籍,对阅读本文会有较大的帮助。 一、分形。 缠论集道氏、波浪、江恩学派于一体,结合浑沌理论,将K线形态以分形的方式进行规划,并以一套规则定义波浪起始点,以中枢的形式表达三角形调整(旗形、契形、钻石等形态,均是三角形形态的变种),以背驰的理论表述力度的衰竭。理论指导实战,行之有效。 分形分二种,一是顶分型,另一是底分型。分型也可以看成是酒田的三山形态,即中间K线高低点均高于二侧的,为顶分型,均低于二侧的,为底分形。当一根K线高低点均在前一根K线价格之类,或者前一根K线高低点均在本根K线价格之类,称为包含关系。在程序处理上,被前一根K线包含的,因为不可能作为分形的顶、底点,所以我们可以不进行处理。如果是后一种包含关系,则观察前一根K线处于什么分形关态,如果前一根是顶分形,则本根向上取值,作为顶分形处理,反之则向下处理为底分形。 但这里有一个特殊情况,在不成笔的情况下,如果这根K线的前一分形状态为低分形,但本K线高点却已经超出了前一个顶分形的顶点,应将这根K线作为顶分形处理,反之亦然。否则,笔的顶底点将不会处于笔内K线的高低点位置。同理,笔有被非笔打破高低点的情况,采取的也是这种办法,即笔的延伸。段亦如此,段被笔打破的,段仍然延续。所以,在最简单的顶底分形的处理上,也应如此。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值