目前全網沒有一個專門提供C++訪問股票接口並專門提供給僅僅使用歷史數據的人的資源
本資源付費獲取源碼,有需要的聯繫我本人。百度雲下載
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):
本地緩存數據:
股票名稱列表輸出到文件