【Python量化金融实战】-第2章:金融市场数据获取与处理:2.1 数据源概览:Tushare、AkShare、Baostock、通联数据(DataAPI)
本章将详细介绍四大主流金融数据源(Tushare、AkShare、Baostock、通联数据(DataAPI)),分析其特点与适用场景,并通过实战案例展示数据获取与处理的全流程。
👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路
文章大纲
- 2.1.1 Tushare
- 2.1.2 AkShare
- 2.1.3 Baostock
- 2.1.4 通联数据(Data API)
- 2.1.5 选择建议与注意事项
- 2.1.6 常见问题解决方案
2.1.1 Tushare
Tushare 是国内最知名的开源金融数据接口之一,提供股票、期货、基金、外汇、数字货币等多种数据。其特点包括:
-
高频数据:提供
Level2行情、资金流向等特色数据 -
数据覆盖广:支持A股、港股、美股的历史行情、财务数据、市场新闻等。
-
易用性高:返回数据格式为Pandas DataFrame,便于直接分析与可视化。
-
免费与付费结合:基础数据(如日线行情)免费,但部分高频数据需通过积分或付费获取。
-
实战案例:获取A股行情与资金流分析

-
运行效果展示:

2.1.2 AkShare
AkShare 是完全开源且免费的金融数据接口库,数据源涵盖东方财富、新浪财经等多个平台,特点包括:
-
多维度数据:提供股票、期货、期权、宏观经济、区块链等数据,支持实时和历史行情。
-
社区活跃:通过官方微信群和文档持续更新,适合需要灵活爬取数据的用户。
-
局限性:部分高频数据(如分钟级)获取有限,需结合其他工具补充。
示例代码:import akshare as ak import pandas as pd import matplotlib.pyplot as plt import seaborn as sns# 获取 A 股日线数据,以平安银行(000001.SZ)为例 stock_daily = ak.stock_zh_a_daily(symbol="sz000001", start_date="20230101", end_date="20231231", adjust="qfq")# 数据统计:计算收盘价的均值、最大值和最小值 close_stats = stock_daily['close'].describe()[['mean', 'max', 'min']] print("收盘价统计信息:") print(close_stats)# 可视化:绘制收盘价折线图 plt.figure(figsize=(12, 6)) plt.plot(stock_daily['date'], stock_daily['close'], label='Close Price') plt.title('Ping An Bank Daily Close Price in 2023') plt.xlabel('Date') plt.ylabel('Close Price') plt.legend() plt.xticks(rotation=45) plt.show()# 可视化:绘制收盘价的箱线图 plt.figure(figsize=(8, 6)) sns.boxplot(y=stock_daily['close']) plt.title('Box Plot of Ping An Bank Daily Close Price in 2023') plt.ylabel('Close Price') plt.show()
2.1.3 Baostock
Baostock 是一个专注于国内证券数据的开源平台,无需注册即可使用,特点包括:
- 分钟级数据:免费提供股票、指数的分钟线数据,适合高频策略研究。
- 数据质量高:数据经过清洗和标准化,可直接用于回测和建模。
- 接口简洁:支持Python直接调用,返回结构清晰的DataFrame。
示例代码:
import baostock as bs
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+ lg.error_code)
print('login respond error_msg:'+ lg.error_msg)# 获取沪深 300 指数成份股
rs = bs.query_hs300_stocks()
hs300_stocks = []
while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起hs300_stocks.append(rs.get_row_data())
hs300_df = pd.DataFrame(hs300_stocks, columns=rs.fields)# 选择其中一只股票,如中国平安(601318.SH)
stock_code = 'sh.601318'
start_date = '2023-01-01'
end_date = '2023-12-31'# 获取股票历史 K 线数据
rs = bs.query_history_k_data_plus(stock_code,"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date=start_date, end_date=end_date,frequency="d", adjustflag="3")
data_list = []
while (rs.error_code == '0') & rs.next():# 获取一条记录,将记录合并在一起data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)# 数据类型转换
df['date'] = pd.to_datetime(df['date'])
df[['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']] = df[['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']].astype(float)# 数据统计:计算收盘价的均值、最大值、最小值
close_stats = df['close'].describe()[['mean', 'max', 'min']]
print("收盘价统计信息:")
print(close_stats)# 可视化:绘制收盘价折线图
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['close'], label='Close Price')
plt.title('Ping An Bank Daily Close Price in 2023')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 可视化:绘制收盘价的箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(y=df['close'])
plt.title('Box Plot of Ping An Bank Daily Close Price in 2023')
plt.ylabel('Close Price')
plt.show()# 可视化:绘制成交量柱状图
plt.figure(figsize=(12, 6))
plt.bar(df['date'], df['volume'], label='Volume')
plt.title('Ping An Bank Daily Volume in 2023')
plt.xlabel('Date')
plt.ylabel('Volume')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 可视化:绘制收盘价和成交量的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['close'], y=df['volume'])
plt.title('Scatter Plot of Ping An Bank Close Price and Volume')
plt.xlabel('Close Price')
plt.ylabel('Volume')
plt.show()# 登出系统
bs.logout()




2.1.4 通联数据(Data API)
通联数据通过优矿(UQER)等平台提供API接口,特点包括:
- 专业级数据:涵盖股票、因子、财报、行业大数据等,适合深度量化研究。
- 免费与开放:注册优矿账号后可免费获取大部分基础数据,部分高频数据需企业合作。
- 集成工具链:支持数据清洗、合并、标准化等操作,可直接在Notebook中分析。
示例代码(优矿平台):
import datapipe
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 替换为你自己的 API Token
token = "your_api_token"
client = datapipe.DatapipeClient(token)# 获取某只股票(如 000001.SZ 平安银行)在指定日期范围的日线数据
symbol = "000001.SZ"
start_date = "2023-01-01"
end_date = "2023-12-31"try:df = client.get_historical_bars(symbol, start_date=start_date, end_date=end_date)print("成功获取股票日线数据:")print(df.head())
except Exception as e:print(f"获取数据时出错:{e}")# 计算收盘价的基本统计信息
close_stats = df['close'].describe()
print("收盘价的基本统计信息:")
print(close_stats)# 计算成交量的总和与平均值
volume_sum = df['volume'].sum()
volume_mean = df['volume'].mean()
print(f"成交量总和: {volume_sum}")
print(f"成交量平均值: {volume_mean}")# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300# 绘制收盘价折线图
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['close'], label='Close Price')
plt.title(f'{symbol} 收盘价走势 ({start_date} - {end_date})')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 绘制成交量柱状图
plt.figure(figsize=(12, 6))
plt.bar(df['date'], df['volume'], label='Volume')
plt.title(f'{symbol} 成交量走势 ({start_date} - {end_date})')
plt.xlabel('日期')
plt.ylabel('成交量')
plt.legend()
plt.xticks(rotation=45)
plt.show()# 绘制收盘价的箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(y=df['close'])
plt.title(f'{symbol} 收盘价箱线图')
plt.ylabel('收盘价')
plt.show()# 绘制收盘价和成交量的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['close'], y=df['volume'])
plt.title(f'{symbol} 收盘价与成交量散点图')
plt.xlabel('收盘价')
plt.ylabel('成交量')
plt.show()
2.1.5 选择建议与注意事项
- 1. 免费性与适用场景:
Tushare和AkShare适合基础研究,Baostock适合高频数据需求,通联数据适合专业因子分析。
- 2. 数据更新与稳定性:
Tushare和AkShare依赖社区维护,可能存在接口变动风险;Baostock和通联数据由官方维护,稳定性更高。
- 3. 合规与限制:
- 部分接口(如
Tushare)需遵守数据调用频率限制,避免因超额请求被封禁。
- 部分接口(如
2.1.6 常见问题解决方案
API限制报错:- 使用
time.sleep(60)在循环中增加延迟 - 升级付费套餐或切换备用API密钥
- 使用
- 时区不一致:
# 统一为北京时间 data = data.tz_localize('UTC').tz_convert('Asia/Shanghai') - 中文乱码处理:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
- 学习路径建议
-
- 新手阶段:从Yahoo Finance开始练习基础数据处理
-
- 进阶阶段:通过Alpha Vantage学习实时数据接口调用
-
- 专业阶段:使用Tushare+Quandl构建A股多因子模型
-
- 高阶应用:结合多源数据进行宏观经济与市场的联动分析
-
通过灵活运用不同数据源,开发者可以构建覆盖全球市场的量化分析系统。实际应用中需特别注意数据授权协议与更新频率,确保策略的合规性与时效性。
相关文章:
【Python量化金融实战】-第2章:金融市场数据获取与处理:2.1 数据源概览:Tushare、AkShare、Baostock、通联数据(DataAPI)
本章将详细介绍四大主流金融数据源(Tushare、AkShare、Baostock、通联数据(DataAPI)),分析其特点与适用场景,并通过实战案例展示数据获取与处理的全流程。 👉 点击关注不迷路 👉 点击…...
Exoplayer(MediaX)实现音频变调和变速播放
在K歌或录音类应用中变调是个常见需求,比如需要播出萝莉音/大叔音等。变速播放在影视播放类应用中普遍存在,在传统播放器Mediaplayer中这两个功能都比较难以实现,特别在低版本SDK中,而Exoplayer作为google官方推出的Mediaplayer替…...
服务器间迁移conda环境
注意:可使用迁移miniconda文件 or 迁移yaml文件两种方式,推荐前者,基本无bug! 一、迁移miniconda文件: 拷贝旧机器的miniconda文件文件到新机器: 内网拷贝:scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…...
docker高级
文章目录 1.Docker Compose1.1 介绍1.2 compose文件1.3 常用命令1.4 安装1.5 项目说明和构建1.5.1 手工启动1.5.2 compose 编排启动1.5.3 完善 compose.yml1.5.4 加入前端容器 2.UI管理平台2.1 portainer 3.镜像发布3.1 阿里云3.2 Docker Registry3.2.1 介绍3.2.2 安装3.2.3 测…...
Redis Stream基本使用及应用场景
一、概念 Redis Streams是Redis5.0提供的一种消息队列机制,支持多播的可持久化的消息队列,用户实现发布订阅的功能,借鉴了kafka设计。 二、常用命令 命令名称描述XADD key ID field value [field value ...]添加一条消息 key:St…...
DAY40|动态规划Part08|LeetCode: 121. 买卖股票的最佳时机 、 122.买卖股票的最佳时机II 、 123.买卖股票的最佳时机III
目录 LeetCode:121. 买卖股票的最佳时机 暴力解法 贪心法 动态规划法 LeetCode:122.买卖股票的最佳时机II 基本思路 LeetCode: 买卖股票的最佳时机III、IV 基本思路 C代码 LeetCode:121. 买卖股票的最佳时机 力扣题目链接 文字讲解:121. 买卖股票的最佳时…...
【安装及调试旧版Chrome + 多版本环境测试全攻略】
👨💻 安装及调试旧版Chrome 多版本环境测试全攻略 🌐 (新手友好版 | 覆盖安装/运行/调试全流程) 🕰️ 【背景篇】为什么我们需要旧版浏览器测试? 🌍 🌐 浏览器世界的“…...
【Linux】进程间通信——命名管道
文章目录 命名管道什么是命名管道**命名管道 vs. 无名管道**如何创建命名管道 用命名管道实现进程间通信MakefileComm.hppServer.hppClient.hppServer.cppClient.cpp 效果总结 命名管道 什么是命名管道 命名管道,也称为 FIFO(First In First Out&#…...
Qt在Linux嵌入式开发过程中复杂界面滑动时卡顿掉帧问题分析及解决方案
Qt在Linux嵌入式设备开发过程中,由于配置较低,加上没有GPU,我们有时候会遇到有些组件比较多的复杂界面,在滑动时会出现掉帧或卡顿的问题。要讲明白这个问题还得从CPU和GPU的分工说起。 一、硬件层面核心问题根源剖析 CPU&#x…...
AI学习第六天-python的基础使用-趣味图形
在 Python 编程学习过程中,turtle库是一个非常有趣且实用的工具,它可以帮助我们轻松绘制各种图形。结合for循环、random模块以及自定义方法等知识点,能够创作出丰富多彩的图案。下面就来分享一下相关的学习笔记。 一、基础知识点回顾 &…...
[VMware]卸载VMware虚拟机和Linux系统ubuntu(自记录版)
记录一下,不是教程,只是防止我做错了可以回溯一下 我打开vscode,就会跳出下图 虚拟机,Linux还是很久之前学习安装的,种途可能卸载过(不太记得了),现在尝试彻底卸载 彻底卸载VMware虚拟机的详细步骤-CSDN博客虚拟机Vmware 转移 克隆 卸载及移除Linux系统_克隆的虚拟机怎么移除-…...
J-LangChain,用Java实现LangChain编排!轻松加载PDF、切分文档、向量化存储,再到智能问答
Java如何玩转大模型编排、RAG、Agent??? 在自然语言处理(NLP)的浪潮中,LangChain作为一种强大的模型编排框架,已经在Python社区中广受欢迎。然而,对于Java开发者来说,能…...
Cuppa CMS v1.0 任意文件读取(CVE-2022-25401)
漏洞简介: Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 漏洞环境: 春秋云镜中的漏洞靶标,CVE编号为CVE-2022-25401 漏洞复现 弱口令行不通 直接访问administrator/templates/defau…...
可以免费无限次下载PPT的网站
前言 最近发现了一个超实用的网站,想分享给大家。 在学习和工作的过程中,想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量,但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制࿰…...
STM32中使用PWM对舵机控制
目录 1、硬件JIE 2、PWM口配置 3、角度转换 4、main函数中应用 5、工程下载连接 1、硬件介绍 单片机:STM32F1 舵机:MG995 2、PWM口配置 20毫秒的PWM脉冲占空比,对舵机控制效果较好 计算的公式: PSC、ARR值的选取…...
使用插件 `vue2-water-marker`添加全局水印
使用插件 vue2-water-marker添加全局水印 效果图 1、安装插件 npm install vue2-water-marker --save2、全局注册 // main.js import Vue from vue import Vue2WaterMarker from vue2-water-markerVue.use(Vue2WaterMarker)3、在组件中使用 <template><div id&q…...
MySQL表约束的种类与应用
在MySQL数据库中,表约束是确保数据完整性的关键。约束限制了可以在表中插入或更新的数据类型,保证数据的准确性和可靠性。了解MySQL中的各种表约束对于数据库设计和数据维护至关重要。以下是MySQL支持的主要表约束类型及其应用的详细介绍。 1. 主键约束…...
【大模型+知识图谱】大模型与知识图谱融合:技术演进、实践应用与未来挑战
【大模型+知识图谱】大模型与知识图谱融合:技术演进、实践应用与未来挑战 大模型与知识图谱融合:技术演进、实践应用与未来挑战引言:为什么需要融合?一、技术融合的三重路径1.1 知识图谱增强大模型1.2 大模型赋能知识图谱1.3 协同推理框架二、工业级应用场景落地2.1 智能问…...
MS SQL 2008 技术内幕:T-SQL 语言基础
《MS SQL 2008 技术内幕:T-SQL 语言基础》是一部全面介绍 Microsoft SQL Server 2008 中 T-SQL(Transact-SQL)语言的书籍。T-SQL 是 SQL Server 的扩展版本,增加了编程功能和数据库管理功能,使得开发者和数据库管理员能…...
MySQL-MATCH ... AGAINST工具
在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜索和布尔搜索模式。以下是MATCH……AGAINST的详细用法和示例 一、全文索引的基本概念 全文索引适…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
