自打入门量化分析起,就有相当部分的时间在与数据打交道,从数据的获取、清洗到使用,对分析而言既是繁琐的,也是必须的。有大牛曾经说,量化分析有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. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】

    题意 Frank是一个思想有些保守的高中老师.有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅行中萌生爱意.为了降低这种事情发生的概率,他决定确保带出去的任意两个学生至少要满足下面四条中的一条 ...

  2. Ros学习——Movebase源码解读

    1.总体框架 goal global planner-------global_costmap<——map server amcl local planner---------local_cos ...

  3. 410. Split Array Largest Sum 把数组划分为m组,怎样使最大和最小

    [抄题]: Given an array which consists of non-negative integers and an integer m, you can split the arr ...

  4. 404. Sum of Left Leaves 左叶子之和

    [抄题]: Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are ...

  5. 解决T4模板的程序集引用的五种方案

    在众多.NET应用下的代码生成方案中,比如CodeDOM,BuildProvider, 我觉得T4是最好的一种.关于T4的基本概念和模板结果,可以参考我的文章<基于T4的代码生成方式>.如 ...

  6. ubuntu下搭建android开发环境

    注意: google可能被和谐了,那就修改hosts sudo vim /etc/hosts 增加: #Google主页 203.208.46.146 www.google.com #这行是为了方便打 ...

  7. Mysql Join语法以及性能优化

    引言 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分.外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反 ...

  8. [C++] struct memory allocation

    MAX-byte alignment (最大单位对齐) typedef struct user USER; typedef struct employee E; struct user{ ]; //t ...

  9. 洛谷 P3112 [USACO14DEC]后卫马克Guard Mark

    题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...

  10. asp.net web api 2框架揭秘文摘

    第一章 概述 URI 统一资源标识符 URL 统一资源定位符 http方法:get,post,put,delete,head等 状态码:100-199,请求已被接受: 200-299,成功状态: 30 ...