当前位置: 首页 > news >正文

使用 Akshare 下载国内的期货(主力连续)、股票和指数的历史行情数据

本文介绍如何使用 akshare 下载国内期货、股票和指数的历史行情数据。

Akshare 是一个丰富的金融数据查询的 Python 库,提供了大量的金融数据接口。本文将详细介绍如何使用 Akshare 下载期货、股票和指数数据,并提供完整的代码示例,以求大家能快速拿到数据少走弯路。

期货合约主要是主力连续合约的历史行情数据下载,并于进行回测分析使用。

安装 Akshare

请确保已安装 Akshare,如下命令安装:

pip install akshare

了解它的更多数据,可查看它的文档:akshare documentation

下载期货数据

我使用 akshare 的重要原因就是它提供了下载期货的主力或连续合约的历史数据。开始我想 tushare 实现,映射每天的主力合约并对应获取其历史数据和拼接,这个过程本身就比较繁琐。再就是 tushare 的频率限制严重,测试几次就没有额度了。

akshare 中的主力和连续合约的数据是从新浪财经下载的,它的 symbol 名称与标准的是不一致的,不过可以通过函数 futures_display_main_sina 拿到映射关系。具体我不演示了,我搞了一份表格,便于我平时查看。

如需查看,可访问 新浪期货名称关系表格。

有了主力和连续合约的 symbol 名称,就可以使用 futures_main_sina 函数下载历史数据。

data = aks.futures_main_sina(symbol="C0",start_date="20230101"
)

如上的 C0 表示的是玉米主力合约。

我们可以定义一个函数,参数接受 symbol 名称和长度,输出结果其转换为易读的格式。

def future_history_bar(symbol, length=100):start_date = datetime.now() - timedelta(days=length * 2)data = aks.futures_main_sina(symbol=symbol, start_date=start_date.strftime("%Y%m%d"))data = data.rename(columns={"日期": "date","开盘价": "open","最高价": "high","最低价": "low","收盘价": "close","成交量": "volume","持仓量": "open_interest","动态结算价": "settle_price",})data["open"] = data["open"].astype(float)data["high"] = data["high"].astype(float)data["low"] = data["low"].astype(float)data["close"] = data["close"].astype(float)return data.iloc[-length:]

上面的参数和输出的定义看个人习惯,我比较习惯这样的使用方式,便于我计算指标。

下载股票数据

A 股股票数据可使用 stock_zh_a_hist 下载,它的输入参数包括股票代码、周期、复权方式和起始日期等参数。

data = aks.stock_zh_a_hist(symbol="000001",period="daily",adjust="qfq",start_date="20230101"
)

我们的习惯,一般默认前复权即可。

为了使用方便,同样可定义一个函数,易于使用:

def stock_history_bar(symbol, length=100):start_date = datetime.now() - timedelta(days=length * 2)data = aks.stock_zh_a_hist(symbol=symbol,period="daily",adjust="qfq",start_date=start_date.strftime("%Y%m%d"),)return data.rename(columns={"日期": "date","股票代码": "symbol","开盘": "open","最高": "high","最低": "low","收盘": "close","成交量": "volume",})[["date","symbol","open","high","low","close","volume",]].iloc[-length:]

我们可以定义一个函数,下载特定指数的历史数据,并将其转换为更易读的格式:

下载指数数据

A 股指数数据可通过 index_zh_a_hist 函数实现。输入参数包括指数代码、周期和起始日期等参数。

data = aks.index_zh_a_hist(symbol="000001",period="daily",start_date="20230101",end_date="20231231"
)

将其实现为 history_bar 函数的形式,便于我的使用。如下所示:

def index_history_bar(symbol, length=100):start_date = (datetime.now() - timedelta(days=length * 2)).strftime("%Y%m%d")end_date = datetime.now().strftime("%Y%m%d")data = aks.index_zh_a_hist(symbol=symbol,period="daily",start_date=start_date,end_date=end_date,)return data.rename(columns={"日期": "date","开盘": "open","最高": "high","最低": "low","收盘": "close","成交量": "volume",})[["date","open","high","low","close","volume",]].iloc[-length:]

现在,我们就已经有了三种不同交易品种的历史数据获取方法。

主函数

最后,还可以定义一个主函数,根据输入的类型下载相应的历史数据:

def history_bar(symbol, length=100, equity_type="stock"):if equity_type == "stock":return stock_history_bar(symbol, length=length)elif equity_type == "future":return future_history_bar(symbol, length=length)elif equity_type == "index":return index_history_bar(symbol, length=length)else:raise ValueError(f"Unsupported equity type: {equity_type}")

现在,是不是使用起来就非常方便了。

示例使用

通过以下示例演示如何调用这些函数来获取不同品种的历史行情数据:

获取上证数据数据:

symbol = "000001"  # 上证指数
length = 100
equity_type = "index"
data = history_bar(symbol, length, equity_type)
print(data)

获取平安银行数据:

symbol = "000001"  # 平安银行
length = 100
equity_type = "stock"
data = history_bar(symbol, length, equity_type)
print(data)

获取甲醇行情数据:

symbol = "MA0"  # 甲醇主连
length = 100
equity_type = "stock"
data = history_bar(symbol, length, equity_type)
print(data)

通过以上代码,现在就有了轻松下载股票、指数和期货历史数据的能力。这为数据分析提供了有力的支持。

完成代码请查看 hist_data.py。

希望本文对您有所帮助。如果有任何问题或建议,欢迎随时联系我。

相关文章:

使用 Akshare 下载国内的期货(主力连续)、股票和指数的历史行情数据

本文介绍如何使用 akshare 下载国内期货、股票和指数的历史行情数据。 Akshare 是一个丰富的金融数据查询的 Python 库,提供了大量的金融数据接口。本文将详细介绍如何使用 Akshare 下载期货、股票和指数数据,并提供完整的代码示例,以求大家…...

【React】Google 账号之个性化一键登录按钮功能

“使用 Google 帐号登录”功能可快速管理网站上的用户身份验证。用户登录 Google 账号、表示同意,并安全地与平台共享其个人基础资料信息。 官方文档:链接 一、获取 Google API 客户端 ID 打开 Google API 控制台 中的凭据页面 创建或选择 Google API 项…...

MySQL已经连接对应数据库,但mapper中表名仍报错

如图所示,已经连接对应数据库但还要在其中选择,表多了一个个选会很麻烦 此时找到下图界面 选中对应数据库应用,项目中所有mapper就能找到对应表啦...

CentOS 7:停止更新后如何下载软件?

引言 CentOS 7 是一个广受欢迎的 Linux 发行版,它为企业和开发者提供了一个稳定、安全、且免费的操作系统环境。然而,随着时间的推移,CentOS 7 的官方支持已经进入了维护阶段,这意味着它将不再收到常规的更新和新功能,…...

MySQL GROUP_CONCAT 函数详解与实战应用

提示:在需要将多个值组合成一个列表时,GROUP_CONCAT() 函数为 MySQL 提供了一种强大的方式来处理数据 文章目录 前言什么是 GROUP_CONCAT()基本语法 示例使用 GROUP_CONCAT()去除重复值排序结果 前言 提示:这里可以添加本文要记录的大概内容…...

MATLAB Gazebo联合仿真

准备仿真环境:在Gazebo中设置仿真场景,包括机器人模型、环境布局、传感器和执行器等。编写MATLAB脚本:在MATLAB中编写控制算法和数据处理脚本,用于接收Gazebo中的传感器数据,并生成控制命令。建立通信:通过…...

Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西,19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件,如果Vue2换成Vue3了,顺带来一篇文章,pdf.js这个东西用来解决内网pdf预览,是个不错的选择。 首先去pdfjs官网,下载需要的文件 然后将下载…...

【机器学习】逻辑回归的原理、应用与扩展

文章目录 一、逻辑回归概述二、Sigmoid函数与损失函数2.1 Sigmoid函数2.2 损失函数 三、多分类逻辑回归与优化方法3.1 多分类逻辑回归3.2 优化方法 四、特征离散化 一、逻辑回归概述 逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y a X b \mathbf{Y}…...

Ubuntu22.04系统装好后左上角下划线闪烁不开机(N卡)

折腾了半天以为是ubuntu的系统和硬件不匹配, 最后发现的确有点关系, 就是显卡驱动的问题 解决办法: 1. 进入到safty模式下, 然后配好网络环境 2. 移除所有的驱动相关的包, sudo apt-get remove --purge nvidia* 3.…...

Leetcode刷题4--- 寻找两个正序数组的中位数 Python

目录 题目及分析方法一:直接合并后排序方法二:二分查找法 题目及分析 (力扣序号4:[寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/description/) 给定两个大小分别为 m 和 n …...

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …...

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…...

JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNN-MATTGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分…...

新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧

前言 在日常开发中,MongoDB作为一种灵活高效的NoSQL数据库,深受开发者喜爱。然而,如何高效地进行数据的批量插入和更新,却常常让人头疼。今天,我们将一起探讨如何使用MongoDB的bulk_write方法,简化我们的数据管理流程,让代码更加简洁高效。 常规做法:find、insertone…...

C# Winform 自定义事件实战

在C#的WinForms中&#xff0c;自定义事件是一种强大的工具&#xff0c;它允许你创建自己的事件&#xff0c;从而在特定条件下通知订阅者。自定义事件通常用于封装业务逻辑&#xff0c;使代码更加模块化和易于维护。下面我将通过一个实战例子来展示如何在WinForms中创建和使用自…...

Python通过继承实现多线程

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程&#xff0c;并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位&#xff0c;每个工位需要测试产品的电参数&#xff1b; 2、每个另外加四个位置温度&#xff1b; 3、显示4个通道电流曲线&#xff0c;16个通道温度曲线&#xff1b; 4、可切换工艺参数&#xff1b; 5、常规判定&#xff0c;测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…...

JDK安装详细教程(以JDK17为例)

一、JDK的下载 1. 前往oracle官网下载JDK Java Archive Downloads - Java SE 17 在这里选择对应的JDK版本&#xff0c;我这里就直接选择JDK17的版本了。 然后下载对应的软件包&#xff0c;我这里采用的是Windows的安装程序。 点击上述圈起来的链接即可下载安装包&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...