Skip to main content

a tools for downloading futures data from chinese commodity exchange!

Project description

akshare(python3.7.3)

作者: Albert King

主页链接

建议安装方法

pip install akshare

升级方法

pip install akshare --upgrade

最新版本

0.1.1
修复 receipt 接口不能访问的问题

0.1.2
更新 README.md 文档, 更新原 fushare 接口的英文拼写错误

目录

akshare库的特色

akshare 后期主要改进如下:

  1. 语法更符合 PEP8 规范, 尤其在函数命名上,. 原 fushare 库有部分命名问题, 如 receipt 错误拼写为 reciept; 本次进行修正
  2. 仅支持 Python 3.7.3 以上版本的 Python
  3. 后续加入 asyncio 和 aiohttp 做异步爬虫加速
  4. 修正函数不能运行的问题
  5. 增加更多的网络数据采集功能

akshare库的初衷

传统的 CTA 策略以趋势为主, 但是自从 2017 年以来, 无论是长线还是短线的趋势策略都受制于商品波动率的降低, 面临了多多少少的回撤, 同时市场也逐渐趋于机构化理性化, 因此在传统CTA策略的基础上加入基本面的因素显得迫在眉睫. 近几年各券商的研报陆续提出了许多依赖于趋势行情以外的有效信号, 它们的表现都与趋势策略有着很低的甚至负的相关性, 这样通过多种不同类型的信号对冲得到的策略, 就有机会在市场上取得非常棒的夏普率和稳定的收益.

akshare 库的公开就是为了向各位同仁提供一个爬虫接口, 避免各个研究组、机构重复造轮子爬取相关数据的资源浪费.

展期收益率

展期收益率是由不同交割月的价差除以相隔月份数计算得来, 它反映了市场对该品种在近期交割和远期交割的价差预判.

通过 get_roll_yield_bar 接口下载展期收益率, 这里展期收益率列表的序列类型分为三种, 分别可以通过 type="date"、"symbol"、"var"获取. 其中 "date" 类型是由某商品品种在不同日期的主力合约次主力合约的价差组成, 调用方法例子为:

import akshare as ak
ak.get_roll_yield_bar(type="date", var="RB", start="20180618", end="20180718",plot=True)

展期收益率1

其中 "symbol" 类型是由某商品品种在某天的所有交割月合约价格组成, 可以很方便的观察该品种从近期到远期的展期结构, 调用方法例子为:

ak.get_roll_yield_bar(type="symbol", var="RB", date="20180718",plot=True)

展期收益率2

其中 "var" 类型是由某交易日, 所有品种的主力次主力合约展期收益率的组合, 可以方便的找到展期收益率高的品种和低的品种, 调用方法例子为:

ak.get_roll_yield_bar(type="var", date="20180718", plot=True)

展期收益率3

利用 get_roll_yield 接口, 可以找到特定合约特定日期的主力合约次主力合约展期收益率, 或通过 symbol1、symbol2 变量自定义某两个合约的展期收益率.

ak.get_roll_yield(date="20180718", var="IF", symbol1="IF1812", symbol2="IF1811"), 如下图所示: 

展期收益率4

注意:

主力合约和次主力合约的定义, 是由该日的各交割月合约持仓量由大到小排序得到.

注册仓单

注册仓单是由各交易所的公布的日级数据, 在一定程度上可以反映市场的库存变化. 调用例子如下:

ak.get_receipt(start="20180712", end="20180719", vars=["CU", "NI"])

下图有错误, fushare 的原作者把 receipt 打错字为 recipet, 目前在 akshare 已经修正为 receipt 注册仓单

注意:

  1. vars 变量接上需要爬取的品种列表, 即使是一个品种, 也需要以列表形式输入; 由于 vars 为 Python 内置, 后续将被移除

  2. 在研究仓单的方向变化时, 需要考虑一些品种的年度周期性, 如农产品的收割季、工业品的开工季等;

  3. 需考虑到交割日的仓单变化.

现货价格和基差

基差是商品期货非常重要的基本面因素. 这里提供两种获取基差的方法: 获取当天的基差数据

ak.get_spot_price("20180712")

返回值分别为品种、现货价格、最近交割合约、最近交割合约价格、主力合约、主力合约价格、最近合约基差值、主力合约基差值、最近合约基差率、主力合约基差率.

现货价格和基差1

获取历史某段时间的基差值

ak.get_spot_price_daily(start="20180710", end="20180719", vars=["CU", "RB"])

现货价格和基差2

注意:

现货价格是从生意社网站爬取获得, 仅支持从 2011 年至今每个交易日数据.

会员持仓排名

自从 "蜘蛛网策略" 问世以来, 会员持仓数据受到日益关注. 数据的爬取方式如下所示: 获取某段时间的会员持仓排名前 5、前 10、前 15、前 20 等总和.

ak.get_rank_sum_daily(start="20180718", end="20180719", vars=["IF", "C"])

会员持仓1

获取某交易日某品种的持仓排名榜

ak.get_dce_rank_table()、ak.get_cffex_rank_table()、ak.get_czce_rank_table()、ak.get_shfe_rank_table()

会员持仓3

注意:

因为每个交易所公布的持仓排名不同: 大连所只公布品种的总持仓排名, 没有按不同交割月划分;上海、中金交易所公布了每个交割月的持仓排名, 没有公布品种所有合约总排名, 因此这里的品种排名和是各合约加总计算得来;郑州交易所公布了各合约排名和品种排名, 因此这里都是交易所原始数据.

日线行情K线

通过爬取交易所官网信息, 可以获得各合约日线行情, 以及根据持仓量加权的指数行情, 用法如下:

ak.get_futures_daily(start="20190107", end="20190108", market="SHFE", index_bar=True)

日线行情

market 可以添为四个交易所的简称, 即 "dce" 代表大商所; "shfe" 代表上期所; "czce" 代表郑商所; "cffex" 代表中金所. index_bar为True时, 在生成的 pd.DataFrame 中通过持仓量加权合成指数合约, 如 RB99.

Anaconda环境配置

Anaconda 是集成了上千个常用包的 Python 发行版本, 通过安装 Anaconda 简化了环境管理工作, 非常推荐使用.

最新版 Anaconda 官方下载链接

建议选择成熟的 python3.7.3 版本, 即 Anaconda3-2019.07; 根据系统选择 windows 版、linux版或 mac 版, 64位. 红框为 64 位 windows 选择的版本 image

双击安装过程中有一个界面需要注意, 即下图把两个钩都选上, 以便于把安装的环境加入系统路径.

image

安装好后, 打开cmd窗口, 输入python, 如果如下图所示, 即已经在系统目录中安装好anaconda5.2.0(python3.6)的环境. image

用 ctrl+z 可以退出刚才的 Python 运行环境回到 cmd 命令下, 输入

pip install akshare

即在 Python 环境中安装了akshare 库(有网络情况下)

image

再次输入 python, 进入 python 环境, 输入

import akshare

即导入了 akshare 库, 再输入

akshare.__version__

可以查看当前安装的akshare版本号 image

每日监控下载配置

本地配置好 Anaconda, 以及通过 pip 安装好 akshare>=0.1.2 后, 在 github 上下载示例文件, 即按照下图选择.

https://github.com/jindaxiang/akshare

image

解压下载的文件, 然后来到 example 目录下, 设置 setting 配置文件 root 设置为 akshare 爬数据时存储的默认目录(需要保证目录存在), qqEmail 和 secret 为爬取到数据时把数据发送给自己的 qq 邮箱账号和密码. 需要开通SMTP服务, 如果不需要自己邮件提醒, 就不用设置(也不要改默认的qqEmail和secret). image

最后双击 monitor.cmd 即完成, 每日 17 点自动下载数据.

QQ邮箱SMTP服务设置

在利用 Python 程序发送 QQ 邮件时, 需要开启 QQ 邮件的 SMTP 服务, 操作方法如下, 第一步打开 QQ 邮箱, 点"设置".

image

找到"账户", 并下拉 image

开启以下的两项服务, 并生成授权码, 授权码为 Python 程序通过 SMTP 发送邮件的密码, 即上一节文档的 secret(不同于QQ邮箱登录密码) image

在启动服务的过程中, 如果该 QQ 账户没有绑定过手机号, 可能会需要验证, 这里不再赘述.

特别说明

致谢:

感谢 fushare, tushare 项目提供借鉴学习的机会; 感谢生意社网站的商品基差数据的公开.

交流:

欢迎加 QQ 群交流: 326900231

image

点击加入下面的图片自动 QQ 打开加入:

akshare官方

声明:

数据仅供参考, 不构成任何投资建议, 投资者请自行研究, 当然风险自担.

Project details


Release history Release notifications | RSS feed

This version

0.1.6

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for akshare, version 0.1.6
Filename, size File type Python version Upload date Hashes
Filename, size akshare-0.1.6.tar.gz (36.2 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page