抓住自己最有兴趣的东西,由浅入深,循序渐进地学。
——华罗庚
引 言
数据获取是金融量化分析的第一步,找不到可靠、真实的数据,量化分析就无从谈起。随着信息技术的不断发展,数据获取渠道也越来越多,尤其是网络爬虫,近几年愈来愈火,网络培训视频和教程满天飞。然而,很多人毕竟精力有限,没有时间专门去学习网络爬虫技术。当然,不会网络爬虫不要紧,我们还可以借助的开源数据包(其本质也是网络爬虫),如:、、和等财经数据API,这样可以节省不少精力。本文将以股票行情数据为例,逐一、简要介绍如何使用这几个开源库获取数据并进行可视化。在介绍使用的API获取数据之前,本文首先给出了根据股票涨跌驱动因素,广泛获取求证信息来源,如下面图1、2、3所示,很多网站提供了非结构化的数据(信息),如股票论坛,信息含量非常大,后期考虑使用网络爬虫爬取股票论坛评论数据,建立舆情指标,探讨群体性交易情绪与股价走势的关系。本篇属于金融量化入门学习的分享之一,希望能起到抛砖引玉的作用。
图1 股票涨跌驱动因素
图2 公司基本面信息源
图3 知名股票论坛
01 社区
公众号上不少文章使用了库获取财经和股票交易数据,当时用的是旧版本()。社区目前主要维护新版本: pro,数据更稳定质量更高,可获取沪深股票行情、财务、市场参考等数据,以及指数(含国外股指)、基金、期货、期权、宏观经济、行业经济等财经数据,为金融量化爱好者节省了大量宝贵时间。此外,近期还增加了新闻联播的文本数据,为文本分析和数据挖掘提供了很好的素材。不过,新版本需要注册获取token才能免费使用,注册网址: 。安装(进入cmd模式):pip ,或升级:pip --。下面以股票行情数据为例,展示下如何获取数据。股票行情数据以股票行情数据为例,简要介绍如何获取数据。
#先引入后面分析、可视化等可能用到的库 as as pd . as plt#正常显示画图时出现的中文和负号from pylab .["font.sans-serif"]=[""]mpl.["axes."]=False#设置="你的token"#ts.(token)pro = ts.(token)
个股行情数据:
pro.()参数:is_hs:是否沪深港通标的,N否、H沪股通、S深股通;:上市状态,L上市、D退市、P暂停上市;:交易所 SSE上交所,SZSE深交所,HKEX港交所。 pro.daily(= 或 =)日行情:daily;周行情:;月行情:#获取当前上市的股票代码、简称、注册地、行业、上市时间等数据basic=pro.(="L")#查看前五行数据#basic.head(5)#获取平安银行日行情数据pa=pro.daily(=".SZ", ="", ="")#pa.head()#K线图可视化from .index=pd.(pa.)pa=pa.()v1=list(pa.loc[:,["open","close","low","high"]].)t=pa.=list(t.("%Y%m%d"))kline = Kline("平安银行K线图"=15)kline.add("", v0, =True, =[""], =["max", "min"], e=60, =["", ""] )#kline.("上证指数图.html")kline
#定义获取多只股票函数:def (): ={} for code in : [code]=pro.daily(=code, = =end) #保存本地def (): for in .items(): data.("c:/zjy//"+code+".csv", =True, index=False)=list(basic.)[:15]start=""end=""=()[".SZ"].tail()#将数据保存到本地()#读取本地文件夹里所有文件 os#文件存储路径file="c:/zjy//"g=os.walk(file)=[]for in g: for in : .(os.path.join())print()#将读取的数据文件放入一个字典中df={}#从文件名中分离出股票代码code=[name.split(".")[0] for name in ]for i in range(len()): =file+[i] df[code[i]]=pd.()#查看第一只股票前五行数据#df[code[0]].head()
指数数据:pro.(=)
def (): """是字典格式""" ={} for in .items(): df=pro.(=code) df.index=pd.(df.) [name]=df.() #获取常见股票指数行情={"上证综指": ".SH","深证成指": ".SZ", "沪深300": ".SH","创业板指": ".SZ", "上证50": ".SH", "中证500": ".SH", "中小板指": ".SZ","上证180": ".SH"}=()#["上证综指"].head()#对股价走势进行可视化分析 =list(.keys())#每个子图的 = [] # 每个子图的位置 = ["#","#", "#", "#", "#","#", "#", "#","#","#"]fig = plt.(=(16,18))fig.("A股股指走势"=18)for pos in np.(len()): ax = fig.([pos]) =[[pos]]["close"] b = ax.plot(=[pos]) ax.([pos]) # 将右上边的两条边颜色设置为空,相当于抹掉这两条边 ax = plt.gca() ax.["right"].("none") ax.["top"].("none") plt.show()
02 证券宝
也是免费、开源的证券数据平台。提供了大量准确、完整的证券历史行情数据、上市公司财务数据等。 通过 API获取证券数据信息,可以满足量化交易投资者、数量金融爱好者、计量经济从业者数据需求。返回的数据格式: 类型,以便于用/NumPy/进行数据分析和可视化。证券宝链接地址:文档 。安装:进入cmd模式,pipas bs
# 登陆系统#lg = bs.login()
# 获取历史K线数据## ()= ""rs = bs.("sh.", ="2000-01-01", ="2018-09-07", ="d", ="2") #="d"取日k线,="3"默认不复权,#1:后复权;2:前复权 = []while (rs. == "0") & rs.next(): # 获取一条记录,将记录合并在一起 .(rs.()) = pd.( =rs.).index=pd.(.date)
# 结果集输出到csv文件##.("c:/zjy/.csv", # ="gbk", index=False).head()
# 登出系统##bs.().info()#将某些转化=.apply(pd. ="").info().close.plot(=(16,8))ax = plt.gca() ax.["right"].("none") ax.["top"].("none") plt.show()
03 雅虎财经API
原来的雅虎财经开源库2018年后已不在维护,还好有大神推出了雅虎财经的修复版本,使用pip 安装。
as fyfy.()def (="2000-01-01", ="2019-01-07"): data = fy.(tick, start= end=) =["AAPL", "GOOG","AMZN","FB"] = {}for in : []=() = ["苹果公司股价走势","谷歌公司股价走势", "亚马逊公司股价走势","公司股价走势"] #每个子图的 = [] # 每个子图的位置 = ["#","#", "#", "#", "#","#", "#", "#","#","#"]fig = plt.(=(16,9))fig.("美股&指数走势"=18)for pos in np.(len()): ax = fig.([pos]) = [[pos]]["Adj Close"] b = ax.plot(=[pos]) ax.([pos]) ax = plt.gca() ax.["right"].("none") ax.["top"].("none") plt.show()
= { ".SS":"中国上证指数", "^DJI":"道琼斯工业平均指数", "^IXIC":"纳斯达克综合指数", "^N225":"日本日经225指数", "^HSI" :"香港恒生指数", "^FCHI":"法国CAC40指数", "^FTSE":"英国富时100指数", "^GDAXI":"德国法兰克福DAX指数"}={}for in .keys(): []=() =list(.())=list()#每个子图的 = [] # 每个子图的位置 = ["#","#", "#", "#", "#","#", "#", "#","#","#"]fig = plt.(=(16,18))fig.("全球股指走势"=18)for pos in np.(len()): ax = fig.([pos]) =[[pos]]["Adj Close"] b = ax.plot(=[pos]) ax.([pos]) ax = plt.gca() ax.["right"].("none") ax.["top"].("none") plt.show()