python金融数据分析和可视化--05通过JoinQuant(聚宽)获取数据

1. 在JoinQuant研究环境中研究

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结构需要索引对齐)

参数:

  • security: 一支股票代码或者一个股票代码的list
  • count: 与 start_date 二选一,不可同时使用. 数量, 返回的结果集的行数, 即表示获取 end_date 之前几个 frequency 的数据
  • start_date: 与 count 二选一,不可同时使用. 字符串或者 datetime.datetime/datetime.date 对象, 开始时间.
    如果 count 和 start_date 参数都没有, 则 start_date 生效, 值是 '2015-01-01'. 注意:
    当取分钟数据时, 时间可以精确到分钟, 比如: 传入 datetime.datetime(2015, 1, 1, 10, 0, 0)
    或者 '2015-01-01 10:00:00'
    当取分钟数据时, 如果只传入日期, 则日内时间是当日的 00:00:00. 当取天数据时, 传入的日内时间会被忽略
  • 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结构需要索引对齐)

  • fq: 复权选项(对股票/基金的价格字段、成交量字段及factor字段生效) : 'pre' , 前复权, 默认是前复权 None ,不复权, 返回实际价格 'post' ,后复权
  • panel:在pandas 0.25版后,panel被彻底移除。获取多标的数据时建议设置panel为False,返回等效的dataframe
  • fill_paused:对于停牌股票的价格处理,默认为True;True表示用pre_close价格填充;False 表示使用NAN填充停牌的数据。
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

2. JoinQuant本地数据

1. 申请试用

python金融数据分析和可视化--05通过JoinQuant(聚宽)获取数据_第1张图片

2. 帮助文档

python金融数据分析和可视化--05通过JoinQuant(聚宽)获取数据_第2张图片python金融数据分析和可视化--05通过JoinQuant(聚宽)获取数据_第3张图片

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)

python金融数据分析和可视化--05通过JoinQuant(聚宽)获取数据_第4张图片

由于没法下载全数据,就不往数据库中存储了

你可能感兴趣的:(金融,数据分析,python)