超简单C++ 获取股票历史数据自动缓存本地二进制加速访问,省心 更新至2021-07-09

本文主要是介绍超简单C++ 获取股票历史数据自动缓存本地二进制加速访问,省心 更新至2021-07-09,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前全网没有一个专门提供C++访问股票接口并专门提供给仅仅使用历史数据的人的资源

本资源付费获取源码,有需要的联系我本人(首页微信)。

2021-07-09最新版本上传到百度云可下载
2019-08-03

增加当日数据获取:

市盈率、市净率

2019-07-21自动缓存本地

2019-09-01

2019-09-04

2019-09-05

2019-09-08(去掉了map)

支持全部历史数据一次性获取:

收盘价, 最高价, 最低价, 开盘价, 前收盘, 涨跌额, 涨跌幅, 换手率, 成交量, 成交金额, 总市值, 流通市值

下载全部历史数据缓存本地用时:4374个记录(个股和指数) 24分钟-> 20分钟 560MB磁盘空间

下载单个个股平均用时:0.7秒

加载全部用时:1分钟->24秒

更新全部并加载:3分钟

加载全部占用内存:1.9GB->1.8GB->1.3GB

加载2019年以后的数据:120MB->90MB

加载2019年以后的数据:4.5秒

2019-09-22

支持全部历史数据一次性获取:收盘价, 最高价, 最低价, 开盘价, 前收盘, 成交量

下载单个个股平均用时:0.4秒

 更新数据的核心逻辑:

std::shared_ptr<CStock> CStockMgr::GetUserStock(const string & id)
{auto itr = m_allUserStock.find(id);if (itr == m_allUserStock.end())//不存在则惰性加载{auto pStock = LoadOneStockFromLocalAndWeb(id, m_needUpdate);//加载优先使用本地缓存二进制文件auto file = Path::GetStockHistoryDataDir() + id;if (!Path::Exist(file))//还没缓存过则就地缓存{SaveOneUserStockToLocalDir(pStock);}}return m_allUserStock.at(id);
}

int main()
{//UpdateStockNameList();auto pStock = CStockMgr::Instance().GetUserStock("sz000858");//"五粮液"PrintStock(pStock.get(), "sz000858");pStock = CStockMgr::Instance().GetUserStock("sh000001");//"上证指数"PrintStock(pStock.get(), "sh000001");pStock = CStockMgr::Instance().GetUserStock("sz399001");//"深圳成指"PrintStock(pStock.get(), "sz399001");return 0;
}

使用二进制读写本地数据


void CStockItem::writeTo(ostream & out) const
{auto& item = *this;out.write(reinterpret_cast<const char*>(&item.m_date), sizeof(item.m_date));//日期out.write(reinterpret_cast<const char*>(&item.m_close), sizeof(item.m_close));//收盘价out.write(reinterpret_cast<const char*>(&item.m_high), sizeof(item.m_high));//最高价out.write(reinterpret_cast<const char*>(&item.m_low), sizeof(item.m_low));//最低价out.write(reinterpret_cast<const char*>(&item.m_open), sizeof(item.m_open));//开盘价out.write(reinterpret_cast<const char*>(&item.m_qianfuquan_close), sizeof(item.m_qianfuquan_close));//前复权out.write(reinterpret_cast<const char*>(&item.m_last_close), sizeof(item.m_last_close));//前收盘out.write(reinterpret_cast<const char*>(&item.m_chg), sizeof(item.m_chg));//涨跌额out.write(reinterpret_cast<const char*>(&item.m_percent_chg), sizeof(item.m_percent_chg));//涨跌幅out.write(reinterpret_cast<const char*>(&item.m_turnover), sizeof(item.m_turnover));//换手率out.write(reinterpret_cast<const char*>(&item.m_volume), sizeof(item.m_volume));//成交量out.write(reinterpret_cast<const char*>(&item.m_amount), sizeof(item.m_amount));//成交额out.write(reinterpret_cast<const char*>(&item.m_tcap), sizeof(item.m_tcap));//总市值out.write(reinterpret_cast<const char*>(&item.m_mcap), sizeof(item.m_mcap));//流通市值
}istream& operator >> (istream& in, CStockItem& item)
{in.read(reinterpret_cast<char*>(&item.m_date), sizeof(item.m_date));//日期in.read(reinterpret_cast<char*>(&item.m_close), sizeof(item.m_close));//收盘价in.read(reinterpret_cast<char*>(&item.m_high), sizeof(item.m_high));//最高价in.read(reinterpret_cast<char*>(&item.m_low), sizeof(item.m_low));//最低价in.read(reinterpret_cast<char*>(&item.m_open), sizeof(item.m_open));//开盘价in.read(reinterpret_cast<char*>(&item.m_qianfuquan_close), sizeof(item.m_qianfuquan_close));//前复权in.read(reinterpret_cast<char*>(&item.m_last_close), sizeof(item.m_last_close));//前收盘in.read(reinterpret_cast<char*>(&item.m_chg), sizeof(item.m_chg));//涨跌额in.read(reinterpret_cast<char*>(&item.m_percent_chg), sizeof(item.m_percent_chg));//涨跌幅in.read(reinterpret_cast<char*>(&item.m_turnover), sizeof(item.m_turnover));//换手率in.read(reinterpret_cast<char*>(&item.m_volume), sizeof(item.m_volume));//成交量in.read(reinterpret_cast<char*>(&item.m_amount), sizeof(item.m_amount));//成交额in.read(reinterpret_cast<char*>(&item.m_tcap), sizeof(item.m_tcap));//总市值in.read(reinterpret_cast<char*>(&item.m_mcap), sizeof(item.m_mcap));//流通市值return in;
}

本地二进制缓存(一个文件才230K左右,900个文件才200MB,所有上市公司连同指数的全部数据也才800MB):

本地缓存数据:

股票名称列表输出到文件

这篇关于超简单C++ 获取股票历史数据自动缓存本地二进制加速访问,省心 更新至2021-07-09的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423081

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作