楼主: 半美人
3643 1

[实际应用] matlab 从 tushare 获取历史数据 [推广有奖]

  • 8关注
  • 0粉丝

硕士生

70%

还不是VIP/贵宾

-

威望
0
论坛币
68 个
通用积分
9.2555
学术水平
1 点
热心指数
6 点
信用等级
0 点
经验
26769 点
帖子
46
精华
0
在线时间
336 小时
注册时间
2015-1-19
最后登录
2025-9-30

楼主
半美人 发表于 2019-6-14 17:27:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
# 1. matlab 从 tushare 获取历史数据

- [1. matlab 从 tushare 获取历史数据(#1-matlab-从-tushare-获取历史数据)
  - [1.1. 引言(#11-引言)
  - [1.2. 准备工作(#12-准备工作)
    - [1.2.1. 注册 tushare 账号(#121-注册-tushare-账号)
    - [1.2.2. 获取 token(#122-获取-token)
    - [1.2.3. 下载 tushare_matlab_sdk(#123-下载-tushare_matlab_sdk)
    - [1.2.4. 特别提示(#124-特别提示)
  - [1.3. 获取数据实例(#13-获取数据实例)
    - [1.3.1. 获取股票日线行情数据(#131-获取股票日线行情数据)
    - [1.3.2. 通用行情调用股票行情数据(#132-通用行情调用股票行情数据)
    - [1.3.3. 获取每日基本指标数据(#133-获取每日基本指标数据)
    - [1.3.4. kmv 模型获取财务数据(#134-kmv-模型获取财务数据)
    - [1.3.5. 总结(#135-总结)

## 1.1. 引言


文章是vscode写的,第一次在经管之家发贴,不直接把md文档copy进来,字数超过限制删除了一部分。
想要查看完成内容请访问我的博客https://blog.csdn.net/m0_37639589/article/details/91986848。

做量化研究,数据是必不可少的,然而市面主流数据提供商的终端产品(wind之类),价格高昂,不是一般人(穷学生)能承受得起的。而自己写爬虫去搜集数据,一来是比较有技术含量,初学者一般难以做到这一点,二来也费时费力。

就目前而言,免费的数据源方面 tushare 无疑是最强的。非常感谢 tushare 的开发者们,为穷苦大众造了件神器 :smile:。

目前,可以通过 http,python,matlab,r等四种语言调用 tushare 数据。然而 tushare 官网对 matlab 调用 tushare 数据介绍过于简单(tushare_matlab_sdk 文档中的 readme.txt 介绍会详细一下)。初学者恐怕难以运用,于是我特此写这篇文章来分享 matlab 调用 tushare 数据的心得 :grimacing:。

## 1.2. 准备工作

### 1.2.1. 注册 tushare 账号

点击[这个连接(https://tushare.pro/register?reg=126259),进入 tushare 官网注册一个账号(顺便帮博主涨涨积分,权当写这个教程的奖励吧:smile:)。

### 1.2.2. 获取 token

注册完账号后,进入 tushare 网站的个人主页,找到**接口TOKEN**这一页面,复制你自己的 token 以便后续使用。

![20190607131110.png()

### 1.2.3. 下载 tushare_matlab_sdk

[官网页面(https://tushare.pro/document/1?doc_id=132)有提供下载方式,也可以到[我的csdn资源页面(https://download.csdn.net/download/m0_37639589/11230233)下载。

将下载好的资源解压,将文件所在的目录设为matlab搜索路径。具体做法为,打开 matlab 打开设置路径选项,然后添加你刚才解压的位置,如下:

![20190607132631.png()

或者等使用时,将其加载到matlab的工作目录中。总之要使 matlab 在调用该函数包内的函数时能搜索得到函数(我一般是选择后一种做法,后文讲解)。

### 1.2.4. 特别提示

* 虽然 tushare 是免费的,但是却是积分制,许多数据得有一定积分才能获取,并且每分钟内调取数据次数也是有限制的。每种数据限制不一,具体限制如何,得到官网查看。
* 要成功使用 matlab 从 tushare 中读取数据,必须使用 2016b 或者更新的版本。

## 1.3. 获取数据实例

### 1.3.1. 获取股票日线行情数据

这是第一个例子,我将详细讲解。学会了第一个,调取其他数据是照葫芦画瓢。首先,看官网对股票日线行情数据的描述:

![股票日线行情接口说明()

官网这边给的示例是 python 的,但是对于 matlab 而言参数方面其实是一样的,不同之处在于函数的写法。

假设当前的工作目录是 example(之前没有将函数包加入搜索路径) ,那么首先得将 matlab_tushare_sdk 解压到该目录下。

<span id = "picture1" >![20190607140418.png()</span>

具体编写的函数如下:

``` matlab
close all
clear
clc
% 加载tushare包
addpath(genpath(pwd));
% 替换成你自己的 token
token = '**************c7a25d89f63c0537ac*************************';
api = pro_api(token);
% 读取数据参数设定
start_time = '20180101';
end_time = '20181231';
%  股票代码
stockcode = '000001.SZ';
% 读取数据
df = api.query('daily', 'ts_code',stockcode, 'start_date',start_time, 'end_date',end_time);
```

其中 `addpath(genpath(pwd));` 这句的作用就是把当前目录下,所有的函数都临时加载至搜索路径中,这样我们就可以调用 tushare_matlab_sdk 了。所谓临时加载,就是说,你如果退出重启了 matlab 这次添加的路径就无效了,这个技巧可以记下,可以避免很多冲突。

运行代码,就可以看到,我们已经成功读取数据:

![20190607142338.png()

______________

可以继续拓展一下,如何批量读取呢?这个目前来看,只能循环读取(如果有好办法,请不吝赐教)。如下:

``` matlab
close all
clear
clc
%% load data
f = '股票名单.xlsx';
[~,stocklist] = xlsread(f);
% 加载tushare包
addpath(genpath(pwd));
% 替换成你自己的 token
token = '********************13c7a25d89f63******************';
api = pro_api(token);
% 读取数据参数设定
start_time = '20180101';
end_time = '20181231';
% 循环读取股票数据
nstock = length(stocklist);
% data = cell(1,nstock);
for i = 1:nstock
    df = api.query('daily', 'ts_code',stocklist{i}, 'start_date',start_time, 'end_date',end_time);
    data = flipud(df);
    writetable(data,['2018年 ',stocklist{i},' 数据.xls']);
end
```

这里读取的股票名包含十个股票代码:

![20190607141141.png()

这里随便提一下,因为 tushare 读出来的数据是,从离现在近的日期到远的日期,这与我平时使用的习惯不符,所以用了 `flipud` 翻转数据。然后 table 格式的数据,使用 `writetable` 保存非常方便。

特别注意,[上图(#picture1),中 `api.daily` 形式调用数据在 matlab 中是行不通的。另外图片中还提到了 `api.query` 形式调用的数据是不复权的。如果需要指定数据,前复权或者后复权则需要使用==通用行情接口==

### 1.3.2. 通用行情调用股票行情数据

通用行情接口的语法形式如下:`data = pro_bar(ts_code, pro_api, start_date, end_date, freq, asset, market, adj, ma, factors, retry_count);`

输入参数如下:
* 输入参数: 不能少于4个
* ts_code:证券代码,支持股票,ETF/LOF,期货/期权,港股,数字货币,如'000001.SZ','000905.SH'
* start_date:开始日期  YYYYMMDD, 如'20181001'
* end_date:结束日期 YYYYMMDD,''表示当前日期
* freq:支持1/5/15/30/60分钟,周/月/季/年, 如'D'
* asset:证券类型 E:股票和交易所基金,I:沪深指数,C:数字货币,F:期权/港股/中概美国/中证指数/国际指数,如'E'
* market:市场代码,默认''
* adj:复权类型,''不复权,'qfq':前复权,'hfq':后复权
* ma:均线,支持自定义均线频度,如:ma5/ma10/ma20/ma60/maN,如[],5,10,[5,10,20,有n个MA值,输出就会相应追加列,不足N天的均线值用填充
* factors因子数据,目前支持以下两种:
* vr:量比,默认不返回,返回需指定:factor=['vr'
* tor:换手率,默认不返回,返回需指定:factor=['tor'
* 以上两种都需要:factor=['vr', 'tor']
* retry_count:网络重试次数,默认3




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:matlab tushare 历史数据 量化数据

已有 2 人评分经验 热心指数 收起 理由
remlus + 100 精彩帖子
317792209 + 100 + 5 精彩帖子

总评分: 经验 + 200  热心指数 + 5   查看全部评分

酒逢知己饮,诗向美人吟

沙发
zwzhai 发表于 2019-6-19 23:36:39
很好的东西。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-10 02:55