龙空技术网

C++读取通达信个股历史数据

浅酒轻尝 1551

前言:

当前姐妹们对“通达信win10”都比较关怀,同学们都需要分析一些“通达信win10”的相关资讯。那么小编在网上收集了一些有关“通达信win10””的相关资讯,希望咱们能喜欢,小伙伴们一起来学习一下吧!

通达信历史数据存储在安装根目录下的vipdoc文件夹下,如D:\new_tdx\vipdoc\sh\lday,为沪市数据,深市数据为:D:\new_tdx\vipdoc\sz\lday,依各自通达信安装目录不同有差异。文件名为:"sh"或"sz"+代码+.day。数据格式如下结构,占32个字节:

struct stockData

{

unsigned int date;

int open;

int high;

int low;

int close;

float amo;

int vol;

int other;

};

八个数据分别为日期、开盘价、最高价、最低价、收盘价、成交金额、成交量、备用;数据是*100后的整数。为连续数据,

打开VS2019,新建一个TdxHistoryData的C++控制台空项目

新建空项目

双击打开TdxHistoryData.cpp源文件,添加修改如以下:

// TdxHistoryData.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#include <Windows.h>

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

using namespace std;

struct stockData

{

unsigned int date;

int open;

int high;

int low;

int close;

float amo;

int vol;

int other;

};

void getHistoryData(string filePath, vector<stockData>& Data_Vec)

{

Data_Vec.clear();

fstream ifs(filePath, ios::in | ios::binary);

if (!ifs.is_open())

{

MessageBox(NULL, TEXT("无法打开文件!"), NULL, MB_ICONINFORMATION | MB_YESNO);

return;

}

stockData stkData;

while (!ifs.eof())

{

ifs.read((char*)&stkData, sizeof(stockData));

Data_Vec.push_back(stkData);

}

if (Data_Vec[Data_Vec.size() - 1].date == Data_Vec[Data_Vec.size() - 2].date)

Data_Vec.pop_back();

ifs.close();

}

int main()

{

string filePath = "D:\\new_tdx\\vipdoc\\sh\\lday\\sh688981.day";

vector<stockData> vecData;

getHistoryData(filePath, vecData);

cout << "数据路径:" << filePath << endl;

cout << "----------------------------------------------------" << endl;

cout << "日期\t\t开盘价\t收盘价\t最高价\t最低价\t成交量\t金额"<<endl;

for (int i = 0; i < vecData.size(); i++)

{

cout << vecData[i].date << "\t" << (float)vecData[i].open / 100 << "\t" << (float)vecData[i].close / 100 << "\t" << (float)vecData[i].high / 100

<< "\t" << (float)vecData[i].low / 100 << "\t" << vecData[i].vol / 100 << "\t" << vecData[i].amo / 100000000 << "亿" << endl;

}

cout << "共计:" << vecData.size()<<"天数据";

}

整理好以上源文件,菜单调试---开始执行(不调试),直接编译运行,显示结果如下:

读取数据结果

读取数据每次读32字节,连续读完即可。中间有一个疑问,全部读完存入vector后,最后两个数据是重复的,不知什么原因,只好加一个判断,如重复则弹出一个。

注:需要每天下载通达信数据,否则读到数据不完整 或没有。

欢迎沟通交流。

标签: #通达信win10