文章目录
显示
一、如何获取股票数据
- 爬虫:雅虎财经、东方财富等
- 数据服务商:Wind、彭博、炒股软件等
- 免费接口:量化交易平台、开源代码库
我们采用第三种方式:
https://www.joinquant.com/view/community/list?listType=1
点击数据字典,看到它提供很多种类型的数据
股票数据包括行情、财务、基本面等数据
我们主要用“股票数据”,点击进去我们可以看到它已经按照菜单等级给你区分好了。
除了这个入口,我们可以看到另一个更加直观的路口:
进入Python 这个API文档之后,我们要找怎么去使用它的初始化的步骤。
1.如何开通JQData
点击提交使用申请即可:
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的获取数据的文件
3.2安装库
pip install jqdatasdk
3.3登录JQData
3.4获取股票行情的数据
直接拿示例代码来运行:
运行结果:
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)
得到对应数据
3.6测试数据的准确与否 对照平安银行
准确对应。成交量和成交额也是对应的。
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)
3.8如何获取所有A股的行情数据
get_all_securities 获取所有股票代码信息
#将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)
stocks[:5]
这样就获取到了所有的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)
这就是一个简单的获取行情的脚本了 后面我们会继续根据需求扩展代码。