背景
在进行金融工程和量化交易的时候,如何获取准确的数据来为我们模型和后期的判断提供支撑和依据成为了比较关键的一个点。对这个问题有几个方面的要求。第一,获取的数据的准确性,第二,大批量数据获取的接口稳定程度,第三,对于分钟和秒级别频率的实时支持程度。
API接口对比
名称 | TuShare | AKShare | Efinance | Qstock |
---|---|---|---|---|
是否收费 | 部分接口收费 | 开源 | 开源 | 开源 |
数据来源 | 新浪、东财 | 新浪、东财 | 东财 | 东财 |
实时K线 | V | V | V | V |
历史K线 | 不支持分钟K线 | V | V | V |
基本面数据 | V | V | X | 部分支持 |
板块数据 | V | V | X | V |
特色数据 | V | V | X | X |
说明文档 | V | V | V | X |
对比四种不同的框架获取K线数据的速度
python
import tushare as ts
import akshare as ak
import efinance as ef
import qstock as qs
import time
token = '你的token'
def tushare_stock_history():
pro = ts.pro_api(token)
return pro.daily(ts_code='000651.SZ')
def akshare_stock_history():
return ak.stock_zh_a_hist(symbol="000651", period="daily")
def efinance_stock_history():
return ef.stock.get_quote_history('000651')
def qstock_stock_history():
return qs.get_data('000651')
def default():
pass
stockDataSourceDict = {
"tushare": tushare_stock_history,
"akshare": akshare_stock_history,
"efinance": efinance_stock_history,
"qstock": qstock_stock_history
}
def getStockDataSoucre(source):
fun = stockDataSourceDict.get(source, default)
return fun()
# 任务:比较四个框架的日线行情接口返回数据时间
if __name__ == '__main__':
# 获取开始时间
start = time.perf_counter()
getStockDataSoucre("qstock")
# 结束时间
end = time.perf_counter()
runTime = round(end - start, 2)
print(f"运行时间:{runTime} ,秒")
关于其中的token获取方式需要通过tushare官网获取
注意目前tushare这个框架对于权限的要求较高,可以理解为会员,详细解释:
akshare基本操作
因此主要使用akshare作为主要的数据获取框架和接口。
下面使用akshare实现分钟级别的数据获取:
python
'''
获取分钟实时数据 以30分钟为例
'''
ak_hist_df = ak.stock_zh_a_hist_min_em(symbol='000651',
start_date='2023-05-04 10:30:00',
end_date='2023-06-02 15:00:00', period='30')
# print(ak_hist_df)
ef_hist_df = ef.stock.get_quote_history(stock_codes='000651', beg='20230504', end='20230602', klt=30)
print(ef_hist_df)
实时行情数据
python
# 实时行情数据-东财
# 沪深京 A 股
# http://quote.eastmoney.com/center/gridlist.html#hs_a_board
import akshare as ak
# 实时行情数据-东财
# 沪深京 A 股
# 单次返回所有沪深京 A 股上市公司的实时行情数据
def em_spot():
stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()
print(stock_zh_a_spot_em_df)
# 实时行情数据-东财
# 沪 A 股
# http://quote.eastmoney.com/center/gridlist.html#sh_a_board
def em_sha_spot():
stock_sh_a_spot_em_df = ak.stock_sh_a_spot_em()
print(stock_sh_a_spot_em_df)
# 实时行情数据-东财
# 深 A 股
# http://quote.eastmoney.com/center/gridlist.html#sz_a_board
def em_sza_spot():
stock_sz_a_spot_em_df = ak.stock_sz_a_spot_em()
print(stock_sz_a_spot_em_df)
# 实时行情数据-东财
# 京 A 股
# http://quote.eastmoney.com/center/gridlist.html#bj_a_board
def em_bja_spot():
stock_bj_a_spot_em_df = ak.stock_bj_a_spot_em()
print(stock_bj_a_spot_em_df)
# 实时行情数据-东财
# 新股
# http://quote.eastmoney.com/center/gridlist.html#newshares
def em_new_spot():
stock_new_a_spot_em_df = ak.stock_new_a_spot_em()
print(stock_new_a_spot_em_df)
# 实时行情数据-东财
# 科创板
# http://quote.eastmoney.com/center/gridlist.html#hs_a_board
def em_kc_spot():
stock_kc_a_spot_em_em_df = ak.stock_kc_a_spot_em()
print(stock_kc_a_spot_em_em_df)
# 实时行情数据-新浪
# http://vip.stock.finance.sina.com.cn/mkt/#hs_a
def xl_a_spot():
stock_zh_a_spot_df = ak.stock_zh_a_spot()
print(stock_zh_a_spot_df)