当前位置: 首页 > 工具软件 > BaoStock > 使用案例 >

【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)

郦良才
2023-12-01

金融量化交易,是时下最时髦的词。相对于人工股票,量化交易通过采集数据,定制交易策略,程序化执行,可以避免人工盯盘的辛劳,更能轻松解决人性中的很多牵绊对交易的影响,也是新一代股民的革命武器。很多人也因学习量化交易,学习了Python编程,学习了pandas数据分析,甚至学习了各种指标分析。

说到量化交易,不可避免的首先就是行情数据源的获取。虽然市面上各种量化平台众多,但大多聚焦于回测用的历史数据,实时行情数据要么需要付费,或者就需要在特定券商开户(一般有大资金量的要求)。那作为初入股市或者资金量不大的Python股民,就没有办法了吗?怎么会!这难不倒爱钻研的IT人。下面就说说几种常见的获取数据源是方式。

一、免费行情数据获取方式介绍

:以下平台均基于Python,建议安装Anaconda,一次性解决Python及数据分析常用pandas,numpy等包,省去很多麻烦,这对初学者很重要。Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包(数据分析用到的pandas)及其依赖项,下载地址https://www.anaconda.com/download/

以下几种方法都可以实现对股票行情数据的提取,返回pandas数据格式,方便进行数据分析和加工。

  1. Tushare ,网上最流行的免费数据源,新推出的Tushare Pro需要注册,并需要积分方可访问更多数据;支持http restful 采用post方式请求http://api.tushare.pro,可使用其它语言调用API获得数据;
  2. AKshare ,适合进阶,数据内容丰富,发布 AKTools 作为 AKShare 的 HTTP API 版本,可使用其它语言通过调用API获得数据;
  3. baostock ,适合入门,获取一般数据够用了;
  4. Ashare ,极简,A股实时行情数据API,可算做自制爬虫类,效率很高;
  5. Pytdx ,一款纯Python语言开发的类似TradeX的行情数据接口的实现;
  6. 其它爬虫 ,可自行编制爬虫,通过js获取东方财富网、新浪、网易等在线数据,难度较大,但效率高。有兴趣的朋友可以自行琢磨。

1.Tushare

简介

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。Pro版做了更大的改进。数据内容将扩大到包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。

安装

方式1:pip install tushare --upgrade
使用国内源安装:

pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn --upgrade

代码仓库

https://github.com/waditu/tushare

说明文档

Tushare :http://tushare.org/
Tushare Pro:https://tushare.pro/

2. AKshare

简介

AKShare 是基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。

AKShare 的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。

AKShare 后续会基于学术论文和研究报告来添加更多数据接口和衍生指标,并提供相应的计算代码,敬请关注。

安装

pip install akshare --upgrade
使用国内源安装:

pip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --upgrade

代码仓库

https://github.com/akfamily/akshare

说明文档

https://akshare.akfamily.xyz/

3. baostock

简介

证券宝www.baostock.com是一个免费、开源的证券数据平台(无需注册)。

提供大量准确、完整的证券历史行情数据、上市公司财务数据等。 通过python API获取证券数据信息,满足量化交易投资者、数量金融爱好者、计量经济从业者数据需求。

安装

方式1:pip install baostock --upgrade
使用国内源安装:

pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn --upgrade

说明文档

http://baostock.com/baostock/

4. Ashare(自制爬虫类)

简介

Ashare ( 开源 极简 A股实时行情数据API),项目库就一个文件Ashare.py,不用安装设置,可自由裁剪,随用随走 from Ashare import * 即可。

双内核封装,新浪财经,腾讯股票的实时行情数据,包括任意历史日线,周线,月线,分钟线,小时线等,已经稳定运行数年。双内核一主一备,自动热备,自动切换,Ashare即使用来做量化实盘行情源也可以满足。

安装

从Github下载Ashare.py文件,复制到自己的项目目录下即可。

代码仓库

https://github.com/mpquant/Ashare

说明文档

https://github.com/mpquant/Ashare

5. Pytdx

简介

Pytdx一款纯Python语言开发的类似TradeX的行情数据接口的实现,虽然目前已不再维护,但其仍可以使用。

安装

pip install pytdx --upgrade

代码仓库

https://github.com/rainx/pytdx(已不再维护)

说明文档

https://rainx.gitbooks.io/pytdx/content/

二、行情数据获取测试(展示调用代码)

测试前准备

因测试代码需要使用以上包,请提前使用pip语句进行安装;Ashare需要下载Ashare.py,并将其和测试代码放在同一目录。

另外,为了方便数据展示,需要调用prettytable包,请测试前提前安装,以免报错。安装语句如下:

pip install -U prettytable

行情数据提取测试代码

(以提取300750代码,20210101~20220715,共371跟K线日线历史行情为例。耗时数据为单次结果,因涉及网速、数据列内容不一致,表格处理等,不具有统计意义,仅作参考,使用前请自行测试。)

import time

# ===============表格美化输出===============
def df_table(df,index):
    import prettytable as pt
    #利用prettytable对输出结果进行美化,index为索引列名:df_table(df,'market')
    tb = pt.PrettyTable()
    df = df.reset_index(drop = True)
    tb.add_column(index,df.index)
    for col in df.columns.values:#df.columns.values的意思是获取列的名称
        tb.add_column(col, df[col])
    print(tb)


# 测试计时开始,测试哪个就把if 后面的0改为1即可,其它改成0。
time1 = time.time()
print('开始提取数据')

if 0:
    # 1.Tushare
    import tushare as ts
    pro = ts.pro_api('6a0899533f8a5996f738183dbdf63c0afb3fcc931f08e1233575a339')#token,请注册后替换为自己的token。
    df = pro.daily(ts_code='300750.SZ', start_date='20210101', end_date='20220715')
    print('Tushare行情获取\n',df)
    # 单次提取股票数据耗时: 1.0941672325134277 秒

if 0:
    # 2.AKshare
    import akshare as ak
    df = ak.stock_zh_a_hist(symbol="300750", period="daily", start_date="20210101", end_date='20220715', adjust="qfq")
    print('AKshare行情获取\n',df)
    # 单次提取股票数据耗时: 2.899998426437378 秒

if 0:
    # baostock
    import baostock as bs
    import pandas as pd
    lg = bs.login()
    rs = bs.query_history_k_data_plus("sz.300750",
        "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
        start_date='2021-01-01', end_date='2022-07-15',
        frequency="d", adjustflag="3")
    
    data_list = []
    while (rs.error_code == '0') & rs.next():
        # 获取一条记录,将记录合并在一起
        data_list.append(rs.get_row_data())
    df = pd.DataFrame(data_list, columns=rs.fields)
    
    bs.logout()
    print('baostock行情获取\n',df)
    # 单次提取股票数据耗时: 0.9699969291687012 秒
    
if 0:
    # 4.Ashare
    from  Ashare import *
    df=get_price('sz300750',frequency='1d',count=371)  #默认获取今天往前5天的日线实时行情,count=371,表示获取371根K线。
    print('Ashare行情获取\n',df)
    # 单次提取股票数据耗时: 0.9399988651275635 秒


if 1:
    # 5.Pytdx
    from pytdx.hq import TdxHq_API
    api = TdxHq_API()
    # 数据获取接口一般返回list结构,如果需要转化为pandas Dataframe接口,可以使用 api.to_df 进行转化
    with api.connect('119.147.212.81', 7709):
        df = api.to_df(api.get_security_bars(9, 0, '300750', 0, 371)) 
        print('pytdx行情获取\n',df)
        # 单次提取股票数据耗时: 0.9504680633544922 秒



if __name__ == "__main__":

    df_table(df,'行情')
    time2 = time.time()
    print("单次提取股票数据耗时:",time2-time1,'秒')
    
    
    

三、综上所述

  • Tushare Pro,需要注册,需要积分,已获取积分的小伙伴可以自己再试试。毕竟是运行时间较长,稳定一些,速度也不错。
  • AKshare,无需注册,调用方便,数据获取内容丰富,效率再高点就好了。
  • baostock,无需注册,调用过程再简化一些就更好了,速度也不错。
  • Ashare,无需注册,单文件,足够简单,调用也方便,但数据单一,速度也很快。
  • Pytdx,无需注册,已不再维护,但可以使用,速度也很快。
  • 其它爬虫,自行研究,各有各的特点。
 类似资料: