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

2 篇文章 0 订阅
2 篇文章 0 订阅

目前全网没有一个专门提供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):

本地缓存数据:

股票名称列表输出到文件

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值