从零开始做量化(4)

系列文章目录

从零开始做量化(0)—— 引言
从零开始做量化(1)—— 交易框架
从零开始做量化(2)—— 开发环境搭建
从零开始做量化(3) —— 框架实现
从零开始做量化(4) —— 财经数据接口


持续更新中。。。


前言

本节介绍财经数据接口的实现,目前可用的财经数据接口繁不胜数,财经数据的接口主要分为三类:一类是由第三方社区提供的专门用于量化交易的财经接口,这类API返回的数据可读性、可操作性非常好,可以直接拿来用,但是“天下没有免费的午餐”,这些接口有些功能收费或者免费使用受限,如频次限制、权限限制、单日调用量限制等;第二类接口一般由国内外的财经证券大厂如新浪财经、腾讯财经、雅虎、东方财富等提供,实时性较强、免费且不受限制,但是请求返回的数据无法直接使用,需要额外进行解析处理。除此之外,还有极少数些信息比较冷门,上述两种API都不提供,这时可以通过网络爬虫的方式获取。三类API的实现难易程度上依次增加、稳定性和易用性依次降低,所以我们应该充分利用第一类接口,第一类无法提供的数据由第二类补充,迫不得已时才会使用爬虫的方式获取一些关键信息。本节先来介绍第一类、第二类数据接口的使用,爬虫方式只有在需要的时候我们再单独介绍。

1. 第一类数据接口介绍

第一类接口我们介绍两个,分别是 歪枣网和挖地兔tushare ,之所以介绍主要是因为它们提供的信息比较全面,而且它们的使用方式比较有代表性,如果后面用到其他第三方社区提供的财经API,我们也能按照同样的调用方式使用。

1.1 歪枣网接口

歪枣网是一个开放自由的社区,能够快速获取沪深股票、港股、大盘指数、基金净值、基金排行等财经数据,提供免费的财经数据下载接口。接口将提供txt、json、csv文件等多种数据形式,我们可以直接拿来使用。该网站需要注册,然后才能获取服务。如下图所示:

歪枣网数据接口后台
该接口最大的特点就是直接通过URL就可以请求到相应的数据,且能够自定义返回数据类型,支持json数据和txt数据。更方便的是,该接口支持根据需求在线生成示例代码!我们以获取某只/某些股票的基本信息为例,介绍该平台生成示例代码、返回请求数据的操作。如下图:
获取股票信息生成示例代码步骤

  1. 打开数据提取器;
  2. 设定要获取的股票代码(code)、请求返回数据类型(上面设定为返回json数据)、自己的token(如果是登录状态,该token会自动生成)、返回字段(我们选择股票代码和股票名称);
  3. 设置完毕后,直接点击下面的测试接口,即可返回数据,如下图:
    返回结果
  4. 最后还会在网页下面生成对应的示例代码,支持https/Java/Python/Shell,上图选择Python格式。

上面的Python示例代码是基于Python2.x的,我们只需要它生成的URL即可,代码我们重新自己编写,那么上面的示例代码就可以写为:

import requests
import json

def getStockBaseInfo(stock_code, ret_type = '1'):
    '''
    获取股票基本信息。
    传入参数:
        stock_code: 传入股票代码
        ret_type: 返回结果类型 0: txt-string, 
                              1: json-string, 
                              2: txt file
                              3: json file
                              4: csv file
    返回:
        若请求成功,返回相应的结果;
        请求失败,返回 None
    '''
    url_base = "http://api.waizaowang.com/doc/getStockHSABaseInfo?"
    url_code = stock_code
    url_fields = "all"
    url_exports = ret_type # json-string
    url_token = "" #填充自己的Token 

    url = url_base + \
        "code=" + url_code + "&" + \
        "fields=" + url_fields + "&" + \
        "export=" + url_exports + "&" + \
        "token=" + url_token
    
    request = requests.get(url)
    request_text = json.loads(request.text)   

    if request_text["code"] == 200 and request_text["message"] == "成功":
        return request_text["data"]
    else:
        return None

if __name__ == '__main__':
    print(getStockBaseInfo('000001'))

执行结果:
执行结果
除了获取股票基本信息之外,我们还可能需要获取A股/港股/美股等列表、每日行情、指数成分股等,所有相关接口我们可以做成一个python模块备用,除此之外如果需要基金等接口,我们也可以按照同样的方式做成模块,最终的代码可在文末获取。

1.2 挖地兔tushare接口

与歪枣网不同,挖地兔直接提供了Python第三方开发包,通过 “pip install tushare” 即可安装该包,然后可以直接使用里面的接口。为方便开发人员使用,Tushare社区网站提供了非常详细的开发说明文档。与歪枣网一样,该网站也需要注册才能使用接口,也支持在线生成示例代码,且生成的代码可直接使用!如下:

# 导入tushare
import tushare as ts
# 初始化pro接口
pro = ts.pro_api('') # 填充自己的token代码

# 拉取数据
df = pro.stock_basic(**{
    "ts_code": "",
    "name": "",
    "exchange": "",
    "market": "",
    "is_hs": "",
    "list_status": "",
    "limit": "",
    "offset": ""
}, fields=[
    "ts_code",
    "symbol",
    "name",
    "area",
    "industry",
    "market",
    "list_date"
])
print(df)
        

执行结果:
tushare执行结果
美中不足的是,上述两类接口尽管提供的数据接口非常丰富且稳定,但是二者都采用了积分制,导致无法完全免费、无限制地获(bai)取(piao)数据,因此还需要其他接口。

2. 第二类接口介绍

第二类API最大的优势就在于免费、可无限制使用,而且实时性也不错。本节以新浪财经接口为例,演示如何获取金融数据。

2.1 新浪财经数据

获取某港股股票涨跌幅:

import requests
def HK_market_getStkUpdowns(stk_list):
	'''
	获取港股股票涨跌幅。
	输入参数:
		stk_list: 港股股票代码列表;
	返回:
		若请求失败,返回None;否则按照传参顺序返回相应的涨跌幅。
	'''
    url_base = "http://hq.sinajs.cn/list=hk"
    headers={'Referer':'https://finance.sina.com.cn/'}
    res = []
    for stk in stk_list:
        url = url_base + stk
        request_text = requests.get(url,headers = headers).text # return <class 'str'>
        li_text = request_text.strip().split(",")

        if len(li_text) > 2:
            res.append(li_text[8])
        else:
            print("请求港股数据失败")
            res.append("None")
    return res   

if __name__ == "__main__":
	print(HK_market_getStkUpdowns(['00700']))

需要注意的是,新浪财经接口最近有新的变动,如果不加headers,返回的将是“Kinsoku jikou desu!”字样!
新浪财经接口非常齐全,不仅有A股、港股的数据,甚至还有国外股市数据。再贴一个新浪财经获取美股涨跌幅的代码:

def US_market_getStkUpdowns(stk_list):
	'''
	获取港股股票涨跌幅。
	输入参数:
		stk_list: 港股股票代码列表;
	返回:
		若请求失败,返回None;否则按照传参顺序返回相应的涨跌幅。
	'''
    url_base = "http://hq.sinajs.cn/list=gb_"
    headers={'Referer':'https://finance.sina.com.cn/'}
    res = []
    for stk in stk_list:
        url = url_base + stk.lower()
        request_text = requests.get(url,headers = headers).text # return <class 'str'>
        li_text = request_text.strip().split(",")
        if len(li_text) > 2:
            res.append(li_text[2])
        else:
            print("请求美股数据失败")
            res.append("None")
    return res

当然除了新浪财经接口,还有腾讯财经、东方财富等,这些数据请求方式类似,后面仍会封装成一个独立的模块开源出来。

2.2 其他接口推荐

在开源网站上,许多优秀的前辈们分享了自己实现的金融数据接口,由于数量较多,只挑选了一部分并统一整理成下表,具体使用方法请移步至相应的网址:

名称网址简介
yfinancehttps://github.com/ranaroussi/yfinance雅虎金融数据接口
stock_extractorhttps://github.com/ZachLiuGIS/stock_extractor提取最新的股票信息和股市数据
wallstreethttps://github.com/mcdallas/wallstreet实时股票和期权数据
iexfinancehttps://github.com/addisonlynch/iexfinance实时金融数据
exchangehttps://github.com/akarat/exchange货币汇率
chinesestockapihttps://pypi.org/project/chinesestockapi/国内股价
easyquotationhttps://github.com/shidenggui/easyquotation快速获取新浪/腾讯的全市场行情
findatapyhttps://github.com/cuemacro/findatapy用于通过 Bloomberg、Quandl、Yahoo 等下载市场数据
googlefinancehttps://github.com/hongtaocai/googlefinance从 Google Finance API 获取实时股票数据
yahoo-financehttps://github.com/lukaszbanasiak/yahoo-finance雅虎金融数据接口
APIpyhoofinancehttps://github.com/innes213/pyhoofinance快速查询 Yahoo Finance 的多个股票代码并返回键入的数据进行分析
yfinance-apihttps://github.com/Karthik005/yfinance-api金融API
yql-financehttps://github.com/slawek87/yql-finance简单快捷,返回当前时间段的股票收盘价和当前股票代码
ystockquotehttps://github.com/cgoldberg/ystockquote从雅虎财经检索股票报价数据
Stockexhttps://github.com/cttn/Stockex雅虎金融数据接口
finsymbolshttps://github.com/skillachie/finsymbols获取 SP500、AMEX、NYSE 和 NASDAQ 的股票代码和相关信息
tiingohttps://github.com/hydrosquall/tiingo-python实时数据
iexfinancehttps://github.com/addisonlynch/iexfinance实时数据

上表摘自《和金融相关的python包汇总》,作者“ SharkFin.top ” 。(非商业引用,如有侵权,联系删除!)

2.3 efinance模块(补充)

在搜索相关资料时发现的一个开源宝藏,感谢efinance作者“顺手牵羊”提供的开源代码和开发文档(如有侵权,联系删除),一款非常非常好用的财经接口!
获取方式很简单:

pip install efinance

开发文档分享出来,感谢作者的无私奉献!

3. 总结与下文预告

拿到第一手的数据还不够,因为我们实现的接口是为后面的策略服务的,所以还需要把它们组织起来,必要的信息还需要本地化缓存下来。下一篇文章介绍数据的本地化缓存与API实现。

感谢您的耐心阅读,文章创作不易,转发请注明出处!系列文章首发于个人微信公众号“24K纯学渣” ,学习资源与源码将第一时间共享在该平台,欢迎关注!

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值