1. 获取所有股票数据
获取平台支持的所有股票数据
调用方法
get_all_securities(types=['stock'], date=None)
参数
types:默认为stock,这里请在使用时注意防止未来函数。
date: 日期, 一个字符串或者 [datetime.datetime]/[datetime.date] 对象, 用于获取某日期还在上市的股票信息. 默认值为 None, 表示获取所有日期的股票信息
返回
display_name # 中文名称
name # 缩写简称
start_date # 上市日期
end_date # 退市日期,如果没有退市则为2200-01-01
type # 类型,stock(股票)
#将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)
#获得2015年10月10日还在上市的所有股票列表
df = get_all_securities(date='2023-03-17')
print(stocks)
df
2. 获取历史数据
get_price(security, start_date=None, end_date=None, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None, panel=True, fill_paused=True)
获取一支或者多只股票的行情数据, 按天或者按分钟,这里在使用时注意 end_date 的设置, 传入的值不要大于context.current_dt,否则会引入未来函数。
关于停牌: 因为此API可以获取多只股票的数据, 可能有的股票停牌有的没有, 为了保持时间轴的一致, 我们默认没有跳过停牌的日期, 停牌时使用停牌前的数据填充(请看 SecurityUnitData 的 paused 属性). 如想跳过, 请使用 skip_paused=True 参数, 注意当 panel=True 且获取多标的时不支持(panel结构需要索引对齐)
参数:
end_date: 格式同上, 结束时间, 默认是'2015-12-31', 包含此日期. 注意: 当取分钟数据时, 如果 end_date 只有日期, 则日内时间等同于 00:00:00, 所以返回的数据是不包括 end_date 这一天的.
frequency: 单位时间长度, 几天或者几分钟, 现在支持'Xd','Xm', 'daily'(等同于'1d'), 'minute'(等同于'1m'), X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据), 注意, 当X > 1时, fields只支持['open', 'close', 'high', 'low', 'volume', 'money']这几个标准字段,合成数据的逻辑见下文. 默认值是daily
fields: 字符串list, 选择要获取的行情数据字段, 默认是None(表示['open', 'close', 'high', 'low', 'volume', 'money']这几个标准字段), 支持SecurityUnitData里面的所有基本属性,,包含:['open', 'close', 'low', 'high', 'volume', 'money', 'factor', 'high_limit','low_limit', 'avg', 'pre_close', 'paused','open_interest'],其中paused为1表示停牌。
skip_paused: 是否跳过不交易日期(包括停牌, 未上市或者退市后的日期). 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看SecurityUnitData的paused属性), 上市前或者退市后数据都为 nan, 但要注意: 默认为 False
当 skip_paused 是 True 时, 获取多个标的时需要将panel参数设置为False(panel结构需要索引对齐)
df = get_price('000001.XSHE', start_date='2023-01-01', end_date='2023-03-17', frequency='1d',
fields=['open', 'close', 'low', 'high', 'volume', 'money', 'factor', 'high_limit','low_limit', 'avg', 'pre_close', 'paused','open_interest'])
df
3.获取数据保存到datas目录中
import os
#将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)
num = 0
for stock in stocks:
df = get_price(stock, start_date='1990-01-01', end_date='2023-03-17', frequency='1d',
fields=['open', 'close', 'low', 'high', 'volume', 'money', 'factor',
'high_limit','low_limit', 'avg', 'pre_close', 'paused'],
panel=False
)
df['datetime'] = df.index.values
df.set_index('datetime', drop=True, inplace=True)
file_name = os.path.join(os.path.join(os.getcwd(), "datas"), stock + ".csv")
df.to_csv(file_name)
print(stock)
# 下载存储量太多,聚宽内存不够,只下载10只股票数据试试
num += 1
if num > 10:
break
1. 申请试用
2. 帮助文档
3. 获取数据存储到本地
from jqdatasdk import *
import os
auth('xxxxxxxx', '*******') # 账号是申请时所填写的手机号;密码为聚宽官网登录密码
"""
获取所有标的信息
get_all_securities(types=[], date=None)
描述
获取平台支持的所有股票、基金、指数、期货、期权等信息
参数
属性 名称 字段类型 备注
types 类型 用list的形式过滤securities的类型, list元素可选: 'stock', 'fund', 'index', 'futures', 'etf','lof',
'fja', 'fjb','open_fund', 'bond_fund',
'stock_fund', 'QDII_fund', 'money_market_fund', 'mixture_fund'
types为空时返回所有股票, 不包括基金,指数和期货
date 日期 日期字符串或者
[datetime.datetime]/[datetime.date] 对象 用于获取某日期还在上市的股票信息.
默认值为 None, 表示获取所有日期的股票信息
返回结果
字段 名称 备注
display_name 中文名称
name 缩写简称
start_date 上市日期
end_date 退市日期 如果没有退市则为2200-01-01
type 类型 stock(股票),index(指数),futures(期货)
etf(ETF基金),fja(分级A),fjb(分级B),fjm(分级母基金),
mmf(场内交易的货币基金)open_fund(开放式基金),
bond_fund(债券基金), stock_fund(股票型基金),
QDII_fund(QDII 基金), money_market_fund(场外交易的货币基金),
mixture_fund(混合型基金), options(期权)
"""
"""
1天/分钟行情数据
正式账号数据范围:JQData数据范围及更新时间
试用账号数据范围:近一年(当前时间往前1年)【具体权限可点击查看】
get_price(security, start_date=None, end_date=None, frequency='daily', fields=['open','close','low','high','volume','money','factor',
'high_limit','low_limit','avg','pre_close','paused'], skip_paused=False, fq='pre', count=None)
描述
panel=True时且pandas<0.25时返回[pandas.Panel]对象 , panel= False 或 pandas>=0.25时返回[pandas.DataFrame]对象
当可以获取股票一天或一分钟行情数据,返回股票的开盘价、收盘价、最高价、最低价,成交的股票数量,时段中成交的金额、复权因子、时间段中的涨停价、时段中跌停价、时段中平均价,是否停牌,前一天收盘价等,同时也可以利用date数据查看所返回的数据是什么时刻的。
获取一支或者多只股票的行情
注意
当天 09:00 ~ 15:00 的行情在 15:00 之后可以获取 ,当end_date指定为当天尚未结束的交易时间时,会自动填充为上一个交易日的盘后15点时间
获取一支或者多只股票(2005年至今)1天或者1分钟行情;
frequency为非一天或者一分钟,请使用get_bars;
标识时间为09:32:00的1分钟k线,其数据时间为09:31:00至09:31:59;
当天 09:00 ~ 15:00 的行情在 15:00 之后可以获取 注意:当end_date指定为当天尚未结束的交易时间时,会自动填充为上一个交易日的盘后15点时间
关于停牌: 因为此API可以获取多只股票的数据, 可能有的股票停牌有的没有, 为了保持时间轴的一致 我们默认没有跳过停牌的日期, 停牌时使用停牌前的数据填充. 如想跳过, 请使用 skip_paused=True 参数, 注意当 panel=True 且获取多标的时不支持(panel结构需要索引对齐)
fq: 复权选项(对股票/基金的价格字段、成交量字段及factor字段生效)
get_price指定frequency为 非1m/1d时,fields选择'high_limit','low_limit','avg', 'pre_close', 'paused','factor'会报错
参数名称 参数说明 注释
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'。当end_date指定为当天尚未结束的交易时间时,会自动填充为上一个交易日的盘后时间 当指定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']
skip_paused 是否跳过不交易日期(含:停牌/未上市/退市后的日期) 如果不跳过, 停牌时会使用停牌前的数据填充,上市前或者退市后数据都为 nan。
fill_paused 对于停牌股票的价格处理,默认为True 默认为True,用pre_close价格填充);False 表示使用NAN填充停牌的股票价格。
fq 复权选项,默认为前复权(fq='pre') 'pre':前复权 / 'none':不复权, 返回实际价格 / 'post':后复权
注意:fq: 复权选项(对股票/基金的价格字段、成交量字段及factor字段生效)
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)天级别:股票是成交额除以成交量;
(2)分钟级别:用该分钟所有tick的现价乘以该tick的成交量加起来之后,再除以该分钟的成交量。
pre_close 前一个单位时间结束时的价格,按天则是前一天的收盘价
paused bool值,股票是否停牌; 停牌时open/close/low/high/pre_close;都等于停牌前的收盘价, volume=money=0
示例:
"""
# 将所有股票列表转换成数组
stocks = list(get_all_securities(['stock']).index)
for stock in stocks:
df = get_price(stock, start_date='1990-01-01', end_date='2023-03-17', frequency='1d',
fields=['open', 'close', 'low', 'high', 'volume', 'money', 'factor',
'high_limit', 'low_limit', 'avg', 'pre_close', 'paused'],
panel=False
)
df['datetime'] = df.index.values
df.set_index('datetime', drop=True, inplace=True)
file_name = os.path.join(os.path.join(os.getcwd(), "datas"), stock + ".csv")
df.to_csv(file_name)
print(stock)
由于没法下载全数据,就不往数据库中存储了