自打入门量化分析起,就有相当部分的时间在与数据打交道,从数据的获取、清洗到使用,对分析而言既是繁琐的,也是必须的。有大牛曾经说,量化分析有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越来越好。