当前位置: 首页 > 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。

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

http://www.lryc.cn/news/399029.html

相关文章:

  • 【React】Google 账号之个性化一键登录按钮功能
  • MySQL已经连接对应数据库,但mapper中表名仍报错
  • CentOS 7:停止更新后如何下载软件?
  • MySQL GROUP_CONCAT 函数详解与实战应用
  • MATLAB Gazebo联合仿真
  • Vue3 pdf.js将二进制文件流转成pdf预览
  • 【机器学习】逻辑回归的原理、应用与扩展
  • Ubuntu22.04系统装好后左上角下划线闪烁不开机(N卡)
  • Leetcode刷题4--- 寻找两个正序数组的中位数 Python
  • springBoot(若依)集成camunda
  • 【微信小程序知识点】自定义构建npm
  • JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断
  • 新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧
  • C# Winform 自定义事件实战
  • Python通过继承实现多线程
  • 记一次项目经历
  • Elasticsearch 8 支持别名查询
  • 【Spring Cloud】 使用Eureka实现服务注册与服务发现
  • JDK安装详细教程(以JDK17为例)
  • 安装nodejs | npm报错
  • 聊点基础---Java和.NET开发技术异同全方位分析
  • 【C++】C++中SDKDDKVer.h和WinSDKVer.h函数库详解
  • uni-app 蓝牙传输
  • MBR10200CT-ASEMI智能AI应用MBR10200CT
  • 力扣 爬楼梯
  • java设计模式之:策略模式+工厂模式整合案例实战(一)
  • 国内Ubuntu安装 stable-diffusion教程,换成国内镜像
  • JAVA final详细介绍
  • 45、tomcat+课后实验
  • 设计模式的七大原则