Python量化交易实战-06如何通过PythonAPI获取股票数据

auto-trade xuhss 1664℃ 0评论

一、如何获取股票数据

  • 爬虫:雅虎财经、东方财富等
  • 数据服务商:Wind、彭博、炒股软件等
  • 免费接口:量化交易平台、开源代码库

我们采用第三种方式:

https://www.joinquant.com/view/community/list?listType=1

点击数据字典,看到它提供很多种类型的数据

20210531060147 - Python量化交易实战-06如何通过PythonAPI获取股票数据

股票数据包括行情、财务、基本面等数据

20210531060252 - Python量化交易实战-06如何通过PythonAPI获取股票数据

我们主要用“股票数据”,点击进去我们可以看到它已经按照菜单等级给你区分好了。

20210531060501 - Python量化交易实战-06如何通过PythonAPI获取股票数据

除了这个入口,我们可以看到另一个更加直观的路口:

20210531060541 - Python量化交易实战-06如何通过PythonAPI获取股票数据

进入Python 这个API文档之后,我们要找怎么去使用它的初始化的步骤。

1.如何开通JQData

20210531060953 - Python量化交易实战-06如何通过PythonAPI获取股票数据

点击提交使用申请即可:

20210531061445 - Python量化交易实战-06如何通过PythonAPI获取股票数据

2.如何安装使用JQData

开通权限后,您可以在本地安装和使用JQData。Python用户请按以下教程安装使用,其他编程语言用户请查看JQData HTTP接口文档如在使用中遇到问题,还可以添加JQData管理员微信咨询,微信号:jqdata02,添加时请留言"JQData"。

  • 安装JQData: 如您本地已有python环境,打开本地cmd终端或Mac终端,将路径切换到python目录下,直接使用pip语法即可安装。在安装中出现任何问题,可查看JQData安装教程,内有详细解答。
  pip install jqdatasdk
  • 升级JQData:JQData预计每2周会发布一次迭代版本,增加更多维度的基础数据以及因子类数据,已有python环境的用户可以使用如下语句完成升级:
  pip install -U jqdatasdk

windows用户可以直接点击新版本链接下载安装。或打开cmd终端,切换到JQData所在路径下,通过下述语句升级到最新版本。

  C:\JQData>python.exe -m pip install jqdatasdk
  • 登录JQData:安装完成后,导入JQData,并认证用户身份。认证完毕显示“auth success”后即可使用,认证步骤如下:
  from jqdatasdk import *
  auth('账号','密码') #账号是申请时所填写的手机号;密码为聚宽官网登录密码,新申请用户默认为手机号后6位

3.实战

3.1创建项目

利用VsCode创建一个XuhssQuant的项目。

因为我们这个系列要实现的是数据端,所以创建文件夹Data。

然后在里面创建一个叫做Stock.py的获取数据的文件

20210531061930 - Python量化交易实战-06如何通过PythonAPI获取股票数据

3.2安装库

  pip install jqdatasdk

20210531062245 - Python量化交易实战-06如何通过PythonAPI获取股票数据

3.3登录JQData

20210531062554 - Python量化交易实战-06如何通过PythonAPI获取股票数据

3.4获取股票行情的数据

20210531062808 - Python量化交易实战-06如何通过PythonAPI获取股票数据

直接拿示例代码来运行:

20210531063321 - Python量化交易实战-06如何通过PythonAPI获取股票数据

运行结果:

                     open  close  high   low    volume      money
2015-01-30 13:57:00  8.91   8.90  8.91  8.90  298276.0  2656384.0
2015-01-30 13:58:00  8.90   8.90  8.91  8.90  341696.0  3041408.0
2015-01-30 13:59:00  8.91   8.91  8.91  8.89  463147.0  4121592.0
2015-01-30 14:00:00  8.91   8.90  8.91  8.89  472900.0  4208384.0

可以看到官网有对每个API的介绍:

  • XSHG-上海证券交易所;XSHE-深圳证券交易所。
get_price(security, start_date=None, end_date=None, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None)

参数

参数名称 参数说明 注释
security 标的 可获取种类:股票、期货、基金、指数、期权
start_date 开始时间,不可与count同时使用。当'count'和'start_date'为None时, 默认值是 '2015-01-01 00:00:00' 当指定frequency为minute时,如果只传入日期,则日内时间为当日的 00:00:00
end_date 结束时间,如无指定,默认为'2015-12-31 00:00:00'。需与start_date或count同时使用 当指定frequency为minute时, 如果只传入日期, 则日内时间为当日的 00:00:00,所以返回的数据不包括 end_date这天。
count 表示获取 end_date 之前几个 frequency 的数据,与start_date不可同时使用。 返回的结果集的行数, 即表示获取 end_date 之前count个 frequency 的数据
frequency 单位时间长度,即指定获取的时间频级为分钟级(minute)或日级(daily),也可以指定为 '3m','10d' 等 daily'(同'1d'), 'minute'(同'1m'),点击查看get_price和get_bars的合成逻辑。如需5分钟,1小时等标准bar请使用get_bars
fields 所获取数据的字段名称,即表头。默认是None(返回标准字段['open','close','high','low','volume','money']) 可选择填入以下字段,字段说明可查阅下面fields表['open','close','low','high','volume','money','factor','high_limit','low_limit','avg','pre_close','paused','open_interest'],open_interest为期货持仓量
skip_paused 是否跳过不交易日期(含:停牌/未上市/退市后的日期) 如果不跳过, 停牌时会使用停牌前的数据填充,上市前或者退市后数据都为 nan。
fill_paused 对于停牌股票的价格处理,默认为True 默认为True,用pre_close价格填充);False 表示使用NAN填充停牌的股票价格。
fq 复权选项,默认为前复权(fq='pre') 'pre':前复权 / 'none':不复权, 返回实际价格 / 'post':后复权
panel 指定返回的数据格式为panel 默认为True;指定panel=False时返回dataframe格式;如果您的环境pandas大于0.25 ,将强制返回dataframe详见案例

fields内各字段属性

字段名称 中文名称 注释
open 时间段开始时价格
close 时间段结束时价格
low 时间段中的最低价
high 时间段中的最高价
volume 时间段中的成交的股票数量 单位股
money 时间段中的成交的金额
factor pre':前复权(默认)/None:不复权,返回实际价格/'post':后复权 前(后)复权数据=价格×前(后)复权因子;前(后)复权后的成交量=成交量 / 前(后)复权因子;成交不额处理
high_limit 时间段中的涨停价
low_limit 时间段中的跌停价
avg 时间段中的平均价 (1)天级别:股票是成交额除以成交量;期货是直接从CTP行情获取的,计算方法为成交额除以成交量再除以合约乘数;(2)分钟级别:用该分钟所有tick的现价乘以该tick的成交量加起来之后,再除以该分钟的成交量。
pre_close 前一个单位时间结束时的价格,按天则是前一天的收盘价 期货:pre_close--前一天结算;建议使用get_extras获取结算价;在分钟频率下pre_close=open
paused bool值,股票是否停牌; 停牌时open/close/low/high/pre_close;都等于停牌前的收盘价, volume=money=0

3.5测试修改参数

df = get_price('000001.XSHE', end_date='2021-05-30 14:00:00',count=100, frequency='daily', fields=['open','close','high','low','volume','money'])
print(df)

得到对应数据

20210531064227 - Python量化交易实战-06如何通过PythonAPI获取股票数据

3.6测试数据的准确与否 对照平安银行

20210531064551 - Python量化交易实战-06如何通过PythonAPI获取股票数据

准确对应。成交量和成交额也是对应的。

3.7如果获取每分钟的行情

只需要将frequency修改为1m

df = get_price('000001.XSHE', end_date='2021-05-30 14:00:00',count=100, frequency='1m', fields=['open','close','high','low','volume','money'])
print(df)

20210531065000 - Python量化交易实战-06如何通过PythonAPI获取股票数据

3.8如何获取所有A股的行情数据

get_all_securities 获取所有股票代码信息

#将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)
stocks[:5]

20210531065339 - Python量化交易实战-06如何通过PythonAPI获取股票数据

这样就获取到了所有的A股股票代码,我们来测试测试:

from jqdatasdk import *
import time
auth('*****403915','403915') #账号是申请时所填写的手机号;密码为聚宽官网登录密码,新申请用户默认为手机号后6位

#将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)

for stock_code in stocks:
    print("正在获取股票行情数据,股票代码为:", stock_code)
    df = get_price(stock_code, end_date='2021-05-30 14:00:00',count=5, frequency='1d', fields=['open','close','high','low','volume','money'])
    print(df)
    time.sleep(3)

20210531070409 - Python量化交易实战-06如何通过PythonAPI获取股票数据

这就是一个简单的获取行情的脚本了 后面我们会继续根据需求扩展代码。

转载请注明:xuhss » Python量化交易实战-06如何通过PythonAPI获取股票数据

喜欢 (38)

您必须 登录 才能发表评论!