自打入门量化分析起,就有相当部分的时间在与数据打交道,从数据的获取、清洗到使用,对分析而言既是繁琐的,也是必须的。有大牛曾经说,量化分析有8成的开发时间都在处理数据。

为了节省时间,将更多精力投入到策略的开发,数据的来源和初始的质量就尤为重要。
方便的数据渠道和整洁的数据编排,可以节省大量时间。
这里我们以大A股为例,分享3种获取行情交易数据的方法,推荐程度为由低到高。

一、从行情软件手动搬运

通达信、大智慧、同花顺等行情软件都会将数据储存在本地。
1、一些比较基本的数据(如日线、分钟线等)通常在行情软件中会开放相应的导出功能;
2、有些数据例如分时、分笔交易数据,需要使用外部工具进行导出,这方面大多数是针对于大智慧软件,如有需要,可在某宝上搜索。实际上某宝上很多店铺直接贩卖的数据就是由此方法获得;
3、逐笔成交明细数据、10挡(5挡)盘口记录数据、挂单撤单记录数据等,这部分是最难免费获取的数据之一,除上述外部工具外,还需要目标软件已开通level-2权限才能获取,也可在某宝上购买现成数据。
很多人可能不明白这部分数据的用途价值,这部分其实是抓资金行为脉络的关键所在。
优点:简单易上手
缺点:没有定制性,而且每天的数据更新很难自动化,大多依靠手动导出,我初期曾尝试过用pyautogui等键鼠操作模拟的库,把导出的操作强行做成自动化,后因觉得太傻而放弃。

二、万能的爬虫

爬虫是我的大爱,因为它是几乎万能的。
目前可以爬取交易数据的主流数据网站有:新浪、东方财富、百度、腾讯等。
之所以选择国内主流网站,是因为首先它们在境内(雅虎什么的速度实在要炸了),然后它们的访问量大、服务器够结实,因此也不会过多的“反爬”你。
这里以腾讯为例,分享几个实用的数据链接:
5分钟
30分钟
60分钟
五日 只有收盘价和成交量
日数据 640为一年,如三年要640*3
周数据 128为一年,如三年要128*3
月数据 12为一年,如三年要12*3
以python为例,在知道这些链接以后,
1、用urllib.request.urlopen(...).read().decode()即可取得页面信息;
2、然后用re.compile().findall()提取数据部分;
3、用pandas库将数据整齐的码进dataframe中,再to_csv()保存至本地。
由于是编程实现,可以写成每日定时运行。
 
优点:爬虫是近乎万能的
缺点:开发相对繁琐,一旦某日网站做了更新,你的爬虫代码就需要大改甚至作废重来。

重写代码是需要时间的,因此,为了让数据更新每日不间断,你需要常备一个备选方案,也就是2个爬虫,万一某天你的try不成功,它还可以执行except完成任务,同时,你需要让它把信息及时反馈给你,为此,你需要写一个好的log生成方法。

三、神器Tushare

tushare是一个在国内非常火的python库,它的强大就在于它既能全面的提供金融分析所需的各类数据,而且速度超快,也能完美结合到各种自定义的使用场景,几乎可以说是没有缺点。

关于tushare,最不可思议的一点就是,一个这么火这么强大的库,竟然是以个人性质开发的,而且完全免费,而且多年如一日运行稳定。

当然,这里不说心路历程,只聊干货。

1、Tushare一代

http://tushare.org 点开这个贯彻了极简主义美学的链接,一个精彩的世界就浮现在你眼前。

一切股票交易相关的数据应有尽有,任何数据只要一行代码即可取得。
Tushare的另一个优势在于,它可以无缝对接pandas库,使用Tushare所导出的任何数据都可以pandas库的dataframe对象形式保存,可以立刻方便的使用pandas库进行分析和运算。这一点是绝大多数同类型库所无法实现的。
因此,如果用于A股行情数据,Tushare是毋庸置疑的首选。
其中一些著名的function可谓火遍大街小巷,业内无人不晓,诸如:
get_h_data()
get_today_all()
以及后面退出的get_k_data()等等,
传入股票代码、起止日期等参数就可以一次性取得某股票详尽的时间序列数据。(具体可点击官网进行了解,在此不赘述。)
其实,一代Tushare的底层实现方法就是我们上文所说的爬虫,但正如我们所提到,爬虫是一个分析、编写过程繁杂,且需要精力去维护的工具,在没有收费的情况下运维如此之多的爬虫,实属不易。
经过了对数据质量的反复检测和不断推敲筛选,最终封装成了一个个好用的api。Tushare把辛苦、繁琐留给了自己,把简约和高效给了大家。

这个基于爬虫的数据服务平台,就是一代的Tushare,也是Tushare的初心。

2、Tushare二代

https://tushare.pro 与一代一脉相承的极简画风,带有科技感的主页设计,以及不变的初衷。

二代在数据的质量、稳定性等方面作了大幅提升,而它依然免费开放。
二代的Tushare不再依赖爬虫,而是通过自建服务器、自行整理和储存数据供大家下载使用,由创始人米哥等大牛负责运营,这种方式彻底克服了爬虫和第三方数据源与生俱来的缺点,但所需倾注的精力和付出非常巨大,以至于我很担心他们的身板还顶不顶得住。

可以说,当前的Tushare作为一个免费数据平台,所提供的是不逊于国内一流收费平台的服务,这里我举几个自己常用的作为例子。

(1)打开姿势

新版Tushare的打开姿势与旧版有所不同,

1、引入模块后,在正式调用前,需要先传入你的token(在官网登录后点击个人中心即可查看和复制,每个ID对应的token是唯一的),它是用户的身份识别机制
2、生成一个pro_api()的对象,很多高级功能是通过pro.xxx()来调取的,而非像旧版直接使用ts.get_xxx()
1 import Tushare as ts
2 ts.set_token('**********************************')
3 pro = ts.pro_api()
4
5 #取000001的前复权行情
6 df = ts.pro_bar(ts_code='000001.SZ', adj='qfq', start_date='20180101', end_date='20181011')
7
8 #查询当前所有正常上市交易的股票列表
9 data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
重要提示:
不要使用多进程!
是的,我们爬东方财富、新浪的时候,可以随手multiprocessing.Pool(),甚至连ip代理都可以不开。(别问我是怎么知道的)
Tushare新版是通过自己的服务器提供服务的,来之不易,要有所节制的使用。

如果突破了单位时间内访问频率限制,服务器会拒绝你的访问,甚至……。

(2)积分体系

之所以多了token这一步,正是因为新版Tushare引入了积分系统,积分决定着你在新版平台上的权限高低。

看到这里你以为TS走向商业化就大错特错了,因为积分是无法用金钱购买的。这也是我认为它非常牛逼的地方。
没错,既不是“花钱充点卡,氪金买优越”的庸俗,也不是“屠龙宝刀,极品一秒刷爆”的肤浅。

积分不靠买,而靠挣!

邀请、分享、撰文等多种方式都可以增加积分,如是一来,积分表达的一名用户对社区的贡献程度。

既是最高明的模式,也是最善意的模式!

如同以氪金为标尺可以对用户的购买力进行阶梯式分级一样,以贡献作为标尺所建立的积分体系,也从另一层面实现了对用户的精准筛选和正向引导。
时至今日,Tushare依然有着极度活跃的社区、爆好的口碑和越来越强大的功能。
发展到今天这样的强大,仍然没有向商业化屈膝,始终保有着那份初衷,不得不说这是个奇迹。
在这个三流游戏外挂都要卖钱的世道里,Tushare就像一个侠客,有侠道、有傲骨,任世事变迁,初心犹然不改。

未来,希望Tushare越来越好。

量化分析获取数据的3种姿势(压箱底的神器Tushare)的更多相关文章

  1. Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

    一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  2. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

  3. jQuery中通过JSONP来跨域获取数据的三种方式

    第一种方法是在ajax函数中设置dataType为'jsonp' $.ajax({ dataType: 'jsonp', url: 'http://www.a.com/user?id=123', su ...

  4. Ajax获取数据的几种格式和解析方式

    一.什么是ajax  AJAX的全称是Asynchronous JavaScript and XML(是异步的 javascript 和 XML).  ajax不是新的编程语言,而是一种使用现有标准的 ...

  5. file_get_contents无法获取数据的一种情况

    下面这段php代码突然不好使了,返回的 $html 为空,百思不得解.网上说法好多,但都是一家之言,解决不了我的问题.(我的解决方法也是一家之言,只能解决file_get_contents获取不到数据 ...

  6. .net 调用SAP RFC函数获取数据的两种方式

    方式1:使用客户端自带的组件 安装客户端以后,添加引用:SAPFunctionsOCX(.net 的Com列表里一般找不到,需要引用DLL[一般位于以下路径:Program Files\SAP\Fro ...

  7. request获取数据的几种方法

    1.request.getparameter(); String value=request.getparameter("key"); 2.request.getParameter ...

  8. 前端向后端获取数据的三种方法:ajax、axios、fetch

    1.jQuery中的ajax get方法: $.ajax({ url:"v4/api/film/now-playing?t=1539401039415&page=1&coun ...

  9. Day20-单表中获取表单数据的3种方式

    1. 搭建环境请参考:http://www.cnblogs.com/momo8238/p/7508677.html 2. 创建表结构 models.py from django.db import m ...

随机推荐

  1. 把http网站改为Https网站

    腾讯云申请完证书后添加到服务器的方法: https://www.qcloud.com/document/product/400/4143#2.-nginx.E8.AF.81.E4.B9.A6.E9.8 ...

  2. 欢迎加入本人建的QQ群,讨论技术,生活及每天都有招聘信息

    银狐AS3游戏2 3438131 银狐AS3Help 1803321 银狐U3D 167024653 银狐AS3转H5 467565102 本人在MSDN上的帐号 https://social.msd ...

  3. 16进制颜色转普通RGB

    做开发的会遇到很多时候UI给到的是16进制的颜色  然而很多时候我们需要把它转换成适合我们方法的RGB参数  当然通过网页转换也可以达到目的 但是我现在选择写一个分类来解决  一劳永逸~ 1.首先说下 ...

  4. CentOS JAVA安装及查看路径方法

    一.安装: 方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java[root@localhost ...

  5. jquery删除记录弹出提示框

    来自于<jquery权威指南> ------------------- 点击删除时,弹出提示框,并做相应的删除确定或取消 完整代码如下: <!DOCTYPE html PUBLIC ...

  6. ubuntu如何安装samba

    1.samba安装sudo apt-get install samba2.修改smb.confsudo gedit /etc/samba/smb.conf 文件最后增加如下代码:[share] pat ...

  7. [GO]使用go语言实现比特币的工作量证明

    之前的博文已经实现了区块连的基本的工作原理,但在比特币系统中有一个很重要的概念:工作量证明POW,在比特币系统中它的作用就是在十分钟左右的时间内只有一个有能够记帐并得到奖励 在之前的博文中,区块的哈希 ...

  8. YII2 自动 created_at created_by updated_by updated_at

    use yii\behaviors\TimestampBehavior; use yii\behaviors\BlameableBehavior; use yii\db\Expression; /** ...

  9. Spring框架总结(十)

    XML方式实现AOP编程 Xml实现aop编程: 1) 引入jar文件 [aop 相关jar, 4个] 2) 引入aop名称空间 3)aop 配置 * 配置切面类 (重复执行代码形成的类) * aop ...

  10. WCF服务编程 读书笔记——第1章 WCF基础(2)

    续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...