2. 历史数据获取和管理
使用qteasy可以获取并管理大量的历史数据。qteasy可以管理的历史数据涵盖股票、基金、指数、期货等等,种类包含价格数据、技术指标、宏观经济、公司财报、宏观金融等等。
所有数据都可以通过tushare的接口获取,下载到本地之后,就可以通过qteasy的接口进行管理和调用了。
查找支持历史数据
- qteasy.find_history_data(s, match_description=False, fuzzy=False, freq=None, asset_type=None, match_threshold=0.85)[source]
根据输入的字符串,查找或匹配历史数据类型,并且显示该历史数据的详细信息。支持模糊查找、支持通配符、支持通过英文字符或中文 查找匹配的历史数据类型。
- Paramètres:
s (str) – 一个字符串,用于查找或匹配历史数据类型
match_description (bool, Default: False) –
- 是否模糊匹配数据描述,如果给出的字符串中含有非Ascii字符,会自动转为True
False: 仅匹配数据名称
True: 同时匹配数据描述
fuzzy (bool, Default: False) –
- 是否模糊匹配数据名称,如果给出的字符串中含有非Ascii字符或通配符*/?,会自动转为True
False: 精确匹配数据名称
True: 模糊匹配数据名称或数据描述
freq (str, Default: None) – 数据频率,如果提供,则只匹配该频率的数据 可以输入单个频率,也可以输入逗号分隔的多个频率
asset_type (str, Default: None) – 证券类型,如果提供,则只匹配该证券类型的数据 可以输入单个证券类型,也可以输入逗号分隔的多个证券类型
match_threshold (float, default 0.85) – 匹配度阈值,匹配度超过该阈值的项目会被判断为匹配
- Renvoie:
data_id – 匹配到的数据类型的data_id,可以用于qt.get_history_data()下载数据
- Type renvoyé:
list
Exemples
>>> import qteasy as qt >>> qt.find_history_data('pe') matched following history data, use "qt.get_history_data()" to load these historical data by its name: ------------------------------------------------------------------------ freq asset table desc data_id initial_pe d E new_share 新股上市信息 - 发行市盈率 pe d IDX index_indicator 指数技术指标 - 市盈率 pe d E stock_indicator 股票技术指标 - 市盈率(总市值/净利润, 亏损的PE为空) pe_2 d E stock_indicator2 股票技术指标 - 动态市盈率 ========================================================================
>>> qt.find_history_data('ep*') matched following history data, use "qt.get_history_data()" to load these historical data by its data_id: ------------------------------------------------------------------------ freq asset table desc data_id eps_last_year q E express 上市公司业绩快报 - 去年同期每股收益 eps q E financial 上市公司财务指标 - 基本每股收益 ========================================================================
>>> qt.find_history_data('每股收益') matched following history data, use "qt.get_history_data()" to load these historical data by its data_id: ------------------------------------------------------------------------ freq asset table desc data_id basic_eps q E income 上市公司利润表 - 基本每股收益 diluted_eps q E income 上市公司利润表 - 稀释每股收益 express_diluted_eps q E express 上市公司业绩快报 - 每股收益(摊薄)(元) yoy_eps q E express 上市公司业绩快报 - 同比增长率:基本每股收益 eps_last_year q E express 上市公司业绩快报 - 去年同期每股收益 eps q E financial 上市公司财务指标 - 基本每股收益 dt_eps q E financial 上市公司财务指标 - 稀释每股收益 diluted2_eps q E financial 上市公司财务指标 - 期末摊薄每股收益 q_eps q E financial 上市公司财务指标 - 每股收益(单季度) basic_eps_yoy q E financial 上市公司财务指标 - 基本每股收益同比增长率(%) dt_eps_yoy q E financial 上市公司财务指标 - 稀释每股收益同比增长率(%) ========================================================================
- Lève:
TypeError – 输入的s不是字符串,或者freq/asset_type不是字符串或列表:
下载历史数据
- qteasy.refill_data_source(tables, *, channel=None, data_source=None, dtypes=None, freqs=None, asset_types=None, refresh_trade_calendar=False, refill_dependent_tables=True, symbols=None, start_date=None, end_date=None, list_arg_filter=None, reversed_par_seq=False, parallel=True, process_count=None, chunk_size=100, download_batch_size=0, download_batch_interval=0, merge_type='update', log=False) None[source]
从网络数据提供商的API通道批量下载数据,清洗后填充数据到本地数据源中
- Paramètres:
tables (str or list of str, default: None) – 数据表名,必须是database中定义的数据表,用于指定需要下载的数据表 可以给出数据表名称,如 “stock_daily, stock_weekly” 也可以给出数据表的用途,如 “data, basic”
data_source (DataSource, Default None) – 需要填充数据的DataSource, 如果为None,则填充数据源到QT_DATA_SOURCE
channel (str, optional, Default 'tushare') –
数据获取渠道,金融数据API,支持以下选项:
”tushare” : 从Tushare API获取金融数据,请自行申请相应权限和积分
’akshare” : 从AKshare API获取金融数据
’eastmoney” : 从东方财富网获取金融数据
tables – 数据表名,必须是database中定义的数据表,用于指定需要下载的数据表
dtypes (str or list of str, default: None) – 需要下载的数据类型,用于进一步筛选数据表,必须是database中定义的数据类型
freqs (str or list of str, default: None) – 需要下载的数据频率,用于进一步筛选数据表,必须是database中定义的数据频率
asset_types (str or list of str, default: None) – 需要下载的数据资产类型,用于进一步筛选数据表,必须是database中定义的资产类型
refresh_trade_calendar (Bool, Default False) – 是否更新trade_calendar表,如果为True,则会下载trade_calendar表的数据
refill_dependent_tables (Bool, Default True, New in v1.4.3) – 是否更新依赖表的数据,默认True,如果设置为False,则忽略依赖表,这样可能导致数据下载不成功
start_date (str YYYYMMDD) – 限定数据下载的时间范围,如果给出start_date/end_date,只有这个时间段内的数据会被下载
end_date (str YYYYMMDD) – 限定数据下载的时间范围,如果给出start_date/end_date,只有这个时间段内的数据会被下载
list_arg_filter (str or list of str, default: None 注意,不是所有情况下filter_arg参数都有效) –
限定下载数据时的筛选参数,某些数据表以列表的形式给出可筛选参数,如stock_basic表,它有一个可筛选 参数 »exchange »,选项包含 “SSE”, “SZSE”, “BSE”,可以通过此参数限定下载数据的范围。 如果filter_arg为None,则下载所有数据。 例如,下载stock_basic表数据时,下载以下输入均为合法输入:
- ”SZSE”
仅下载深圳交易所的股票数据
[“SSE”, “SZSE”]
- ”SSE, SZSE”
上面两种写法等效,下载上海和深圳交易所的股票数据
symbols (str or list of str, default: None) – 用于下载数据的股票代码,如果给出了symbols,只有这些股票代码的数据会被下载
reversed_par_seq (Bool, Default False) – 是否逆序参数下载数据, 默认False - True: 逆序参数下载数据 - False: 顺序参数下载数据
parallel (Bool, Default True) – 是否启用多线程下载数据 - True: 启用多线程下载数据 - False: 禁用多线程下载
process_count (int) – 启用多线程下载时,同时开启的线程数,默认值为设备的CPU核心数
chunk_size (int) – 保存数据到本地时,为了减少文件/数据库读取次数,将下载的数据累计一定数量后 再批量保存到本地,chunk_size即批量,默认值100
download_batch_size (int, default 0) – 为了降低下载数据时的网络请求频率,可以在完成一批数据下载后,暂停一段时间再继续下载 该参数指定了每次暂停之前最多可以下载的次数,该参数只有在parallel=False时有效 如果为0,则不暂停,一次性下载所有数据
download_batch_interval (int, default 0) – 为了降低下载数据时的网络请求频率,可以在完成一批数据下载后,暂停一段时间再继续下载 该参数指定了每次暂停的时间,单位为秒,该参数只有在parallel=False时有效 如果<=0,则不暂停,立即开始下一批数据下载
merge_type (str, Default 'update') – 数据写入数据源时的合并方式,支持以下选项: - “update” : 更新数据,如果数据已存在,则更新数据 - “ignore” : 忽略数据,如果数据已存在,则丢弃下载的数据
log (Bool, Default False) – 是否记录数据下载日志
- Type renvoyé:
None
Exemples
>>> import qteasy as qt >>> qt.refill_data_source(tables='stock_basic')
历史数据下载到本地之后,可以检查、管理、调用这些数据。
检查本地数据
- qteasy.get_table_info(table_name, data_source=None, verbose=True) dict[source]
- 获取并打印数据源中一张数据表的信息,包括数据量、占用磁盘空间、主键名称、内容
以及数据列的名称、数据类型及说明
2. Parameters:
- table_name: str
需要查询的数据表名称
- data_source: DataSource
需要获取数据表信息的数据源,默认None,此时获取QT_DATA_SOURCE的信息
- verbose: bool, Default: True,
是否打印完整数据列名称及类型清单
- returns:
- {
table name: 数据表名称 table_exists: bool,数据表是否存在 table_size: int/str,数据表占用磁盘空间,human 为True时返回容易阅读的字符串 table_rows: int/str,数据表的行数,human 为True时返回容易阅读的字符串 primary_key1: str,数据表第一个主键名称 pk_count1: int,数据表第一个主键记录数量 pk_min1: obj,数据表主键1起始记录 pk_max1: obj,数据表主键2最终记录 primary_key2: str,数据表第二个主键名称 pk_count2: int,数据表第二个主键记录 pk_min2: obj,数据表主键2起始记录 pk_max2: obj,数据表主键2最终记录
}
- rtype:
一个dict,包含数据表的结构化信息:
Exemples
>>> get_table_info('STOCK_BASIC') <stock_basic>, 1.5MB/5K records on disc primary keys: ----------------------------------- 1: ts_code: <unknown> entries starts: 000001.SZ, end: 873527.BJ columns of table: ------------------------------------ columns dtypes remarks 0 ts_code varchar(9) 证券代码 1 symbol varchar(6) 股票代码 2 name varchar(20) 股票名称 3 area varchar(10) 地域 4 industry varchar(10) 所属行业 5 fullname varchar(50) 股票全称 6 enname varchar(80) 英文全称 7 cnspell varchar(40) 拼音缩写 8 market varchar(6) 市场类型 9 exchange varchar(6) 交易所代码 10 curr_type varchar(6) 交易货币 11 list_status varchar(4) 上市状态 12 list_date date 上市日期 13 delist_date date 退市日期 14 is_hs varchar(2) 是否沪深港通
获取已经下载的本地数据总览
- qteasy.get_table_overview(data_source=None, tables=None, include_sys_tables=False) DataFrame[source]
显示默认数据源或指定数据源的数据总览
- Paramètres:
data_source (Object) – 一个data_source 对象,默认为None,如果为None,则显示默认数据源的overview
tables (str or list of str, Default: None) – 需要显示overview的数据表名称,如果为None,则显示所有数据表的overview
include_sys_tables (bool, Default: False) – 是否显示系统数据表的overview
- Type renvoyé:
pd.DataFrame
Notes
用法示例参见get_data_overview()
- qteasy.get_data_overview(data_source=None, tables=None, include_sys_tables=False) DataFrame[source]
显示数据源的数据总览,等同于get_table_overview()
获取的信息包括所有数据表的数据量、占用磁盘空间、主键名称、内容等
- Paramètres:
data_source (Object) – 一个data_source 对象,默认为None,如果为None,则显示默认数据源的overview
tables (str or list of str, Default: None) – 需要显示overview的数据表名称,如果为None,则显示所有数据表的overview
include_sys_tables (bool, Default: False) – 是否显示系统数据表的overview
- Renvoie:
pd.DataFrame
返回一个包含数据表的overview信息的DataFrame
Exemples
>>> import qteasy as qt >>> qt.get_data_overview() # 获取当前默认数据源的数据总览 Analyzing local data source tables... depending on size of tables, it may take a few minutes [########################################]62/62-100.0% Analyzing completed! db:mysql://localhost@3306/ts_db Following tables contain local data, to view complete list, print returned DataFrame Has_data Size_on_disk Record_count Record_start Record_end table trade_calendar True 2.5MB 73K 1990-10-12 2023-12-31 stock_basic True 1.5MB 5K None None stock_names True 1.5MB 14K 1990-12-10 2023-07-17 stock_company True 18.5MB 3K None None stk_managers True 150.4MB 126K 2020-01-01 2022-07-27 index_basic True 3.5MB 10K None None fund_basic True 4.5MB 17K None None future_basic True 1.5MB 7K None None opt_basic True 15.5MB 44K None None stock_1min True 42.83GB 273.0M 20220318 20230710 stock_5min True 34.33GB 233.2M 20090105 20230710 stock_15min True 14.45GB 141.2M 20090105 20230710 stock_30min True 7.78GB 77.1M 20090105 20230710 stock_hourly True 4.22GB 42.0M 20090105 20230710 stock_daily True 1.49GB 11.6M 1990-12-19 2023-07-17 stock_weekly True 231.9MB 2.6M 1990-12-21 2023-07-14 stock_monthly True 50.6MB 635K 1990-12-31 2023-06-30 index_1min True 4.25GB 27.6M 20220318 20230712 index_5min True 6.18GB 47.2M 20090105 20230712 index_15min True 2.61GB 26.1M 20090105 20230712 index_30min True 884.0MB 12.9M 20090105 20230712 index_hourly True 536.0MB 7.6M 20090105 20230712 index_daily True 309.0MB 3.7M 1990-12-19 2023-07-10 index_weekly True 61.6MB 674K 1991-07-05 2023-07-14 index_monthly True 13.5MB 158K 1991-07-31 2023-06-30 fund_1min True 5.46GB 55.8M 20220318 20230712 fund_5min True 3.68GB 12.3M 20220318 20230712 fund_15min True 835.9MB 3.9M 20220318 20230712 fund_30min True 385.7MB 1.9M 20220318 20230712 fund_hourly True 124.8MB 1.6M 20210104 20230629 fund_daily True 129.7MB 1.6M 1998-04-07 2023-07-10 fund_nav True 693.0MB 13.6M 2000-01-07 2023-07-07 fund_share True 72.7MB 1.4M 1998-03-27 2023-07-14 fund_manager True 109.7MB 37K 2000-02-22 2023-03-30 future_hourly True 32KB 0 None None future_daily True 190.8MB 2.0M 1995-04-17 2023-07-10 options_hourly True 32KB 0 None None options_daily True 436.0MB 4.6M 2015-02-09 2023-07-10 stock_adj_factor True 897.0MB 11.8M 1990-12-19 2023-07-12 fund_adj_factor True 74.6MB 1.8M 1998-04-07 2023-07-12 stock_indicator True 2.06GB 11.8M 1999-01-01 2023-07-17 stock_indicator2 True 734.8MB 4.1M 2017-06-14 2023-07-10 index_indicator True 4.5MB 45K 2004-01-02 2023-07-10 index_weight True 748.0MB 8.7M 2005-04-08 2023-07-14 income True 59.7MB 213K 1990-12-31 2023-06-30 balance True 97.8MB 218K 1989-12-31 2023-06-30 cashflow True 69.7MB 181K 1998-12-31 2023-06-30 financial True 289.0MB 203K 1989-12-31 2023-06-30 forecast True 32.6MB 98K 1998-12-31 2024-03-31 express True 3.5MB 23K 2004-12-31 2023-06-30 shibor True 16KB 212 None None
使用下载的数据——基础数据
- qteasy.get_basic_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)[source]
- 等同于get_stock_info()
根据输入的信息,查找股票、基金、指数或期货、期权的基本信息
- Paramètres:
code_or_name –
证券代码或名称:
如果是证券代码,可以含后缀也可以不含后缀,含后缀时精确查找、不含后缀时全局匹配
如果是证券名称,可以包含通配符模糊查找,也可以通过名称模糊查找
如果精确匹配到一个证券代码,返回一个字典,包含该证券代码的相关信息
asset_types (默认None) –
证券类型,接受列表或逗号分隔字符串,包含认可的资产类型:
E 股票
IDX 指数
FD 基金
FT 期货
OPT 期权
match_full_name (bool, default False) – 是否匹配股票或基金的全名,默认否,如果匹配全名,耗时更长
printout (bool, default True) – 如果为True,打印匹配到的结果
verbose (bool, default False) –
当匹配到的证券太多时(多于五个),是否显示完整的信息
False 默认值,只显示匹配度最高的内容
True 显示所有匹配到的内容
- Renvoie:
当仅找到一个匹配时,返回一个dict,包含找到的基本信息,根据不同的证券类型,找到的信息不同:
股票信息:公司名、地区、行业、全名、上市状态、上市日期
指数信息:指数名、全名、发行人、种类、发行日期
基金: 基金名、管理人、托管人、基金类型、发行日期、发行数量、投资类型、类型
期货: 期货名称
期权: 期权名称
- Type renvoyé:
dict
Exemples
>>> get_basic_info('000001.SZ') found 1 matches, matched codes are {'E': {'000001.SZ': '平安银行'}, 'count': 1} More information for asset type E: ------------------------------------------ ts_code 000001.SZ name 平安银行 area 深圳 industry 银行 fullname 平安银行股份有限公司 list_status L list_date 1991-04-03 -------------------------------------------
>>> get_basic_info('000001') found 4 matches, matched codes are {'E': {'000001.SZ': '平安银行'}, 'IDX': {'000001.CZC': '农期指数', '000001.SH': '上证指数'}, 'FD': {'000001.OF': '华夏成长'}, 'count': 4} More information for asset type E: ------------------------------------------ ts_code 000001.SZ name 平安银行 area 深圳 industry 银行 fullname 平安银行股份有限公司 list_status L list_date 1991-04-03 ------------------------------------------- More information for asset type IDX: ------------------------------------------ ts_code 000001.CZC 000001.SH name 农期指数 上证指数 fullname 农期指数 上证综合指数 publisher 郑州商品交易所 中证公司 category 商品指数 综合指数 list_date None 1991-07-15 ------------------------------------------- More information for asset type FD: ------------------------------------------ ts_code 000001.OF name 华夏成长 management 华夏基金 custodian 中国建设银行 fund_type 混合型 issue_date 2001-11-28 issue_amount 32.3683 invest_type 成长型 type 契约型开放式 -------------------------------------------
>>> get_basic_info('平安银行') found 4 matches, matched codes are {'E': {'000001.SZ': '平安银行', '600928.SH': '西安银行'}, 'IDX': {'802613.SI': '平安银行养老新兴投资指数'}, 'FD': {'700001.OF': '平安行业先锋'}, 'count': 4} More information for asset type E: ------------------------------------------ ts_code 000001.SZ 600928.SH name 平安银行 西安银行 area 深圳 陕西 industry 银行 银行 fullname 平安银行股份有限公司 西安银行股份有限公司 list_status L L list_date 1991-04-03 2019-03-01 ------------------------------------------- More information for asset type IDX: ------------------------------------------ ts_code 802613.SI name 平安银行养老新兴投资指数 fullname 平安银行养老新兴投资指数 publisher 申万研究 category 价值指数 list_date 2017-01-03 ------------------------------------------- More information for asset type FD: ------------------------------------------ ts_code 700001.OF name 平安行业先锋 management 平安基金 custodian 中国银行 fund_type 混合型 issue_date 2011-08-15 issue_amount 31.9816 invest_type 混合型 type 契约型开放式 -------------------------------------------
>>> get_basic_info('贵州钢绳', match_full_name=False) No match found! To get better result, you can - pass "match_full_name=True" to match full names of stocks and funds
>>> get_basic_info('贵州钢绳', match_full_name=True) found 1 matches, matched codes are {'E': {'600992.SH': '贵绳股份'}, 'count': 1} More information for asset type E: ------------------------------------------ ts_code 600992.SH name 贵绳股份 area 贵州 industry 钢加工 fullname 贵州钢绳股份有限公司 list_status L list_date 2004-05-14 -------------------------------------------
- qteasy.get_stock_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)[source]
- 等同于get_basic_info()
根据输入的信息,查找股票、基金、指数或期货、期权的基本信息
- Paramètres:
code_or_name – 证券代码或名称, 如果是证券代码,可以含后缀也可以不含后缀,含后缀时精确查找、不含后缀时全局匹配 如果是证券名称,可以包含通配符模糊查找,也可以通过名称模糊查找 如果精确匹配到一个证券代码,返回一个字典,包含该证券代码的相关信息
asset_types –
证券类型,接受列表或逗号分隔字符串,包含认可的资产类型:
E 股票
IDX 指数
FD 基金
FT 期货
OPT 期权
match_full_name (bool) – 是否匹配股票或基金的全名,默认否,如果匹配全名,耗时更长
printout (bool) – 如果为True,打印匹配到的结果
verbose (bool) –
当匹配到的证券太多时(多于五个),是否显示完整的信息
False 默认值,只显示匹配度最高的内容
True 显示所有匹配到的内容
- Renvoie:
当仅找到一个匹配时,返回一个dict,包含找到的基本信息,根据不同的证券类型,找到的信息不同:
股票信息:公司名、地区、行业、全名、上市状态、上市日期
指数信息:指数名、全名、发行人、种类、发行日期
基金: 基金名、管理人、托管人、基金类型、发行日期、发行数量、投资类型、类型
期货: 期货名称
期权: 期权名称
- Type renvoyé:
dict
Notes
用法示例参见:get_basic_info()
- qteasy.filter_stock_codes(date: str = 'today', **kwargs) list[source]
根据输入的参数调用filter_stocks筛选股票,并返回股票代码的清单
- Paramètres:
date (date-like str) – 筛选股票的上市日期,在该日期以后上市的股票将会被剔除:
kwargs (str or list of str) – 可以通过以下参数筛选股票, 可以同时输入多个筛选条件,只有符合要求的股票才会被筛选出来
- Type renvoyé:
list, 股票代码清单
Voir aussi
- qteasy.filter_stocks(date: str = 'today', **kwargs) DataFrame[source]
根据输入的参数筛选股票,并返回一个包含股票代码和相关信息的DataFrame
- Paramètres:
date (date-like str) – 筛选股票的上市日期,在该日期以后上市的股票将会被剔除:
kwargs (str or list of str) – 可以通过以下参数筛选股票, 可以同时输入多个筛选条件,只有符合要求的股票才会被筛选出来 - index: 根据指数筛选,不含在指定的指数内的股票将会被剔除 - industry: 公司所处行业,只有列举出来的行业会被选中 - area: 公司所处省份,只有列举出来的省份的股票才会被选中 - market: 市场,分为主板、创业板等 - exchange: 交易所,包括上海证券交易所和深圳股票交易所
- Renvoie:
DataFrame
- Type renvoyé:
筛选出来的股票的基本信息
Exemples
>>> # 筛选出2019年1月1日以后的上证300指数成分股 >>> filter_stocks(date='2019-01-01', index='000300.SH') symbol name area industry market list_date exchange ts_code 000001.SZ 000001 平安银行 深圳 银行 主板 1991-04-03 SZSE 000002.SZ 000002 万科A 深圳 全国地产 主板 1991-01-29 SZSE 000063.SZ 000063 中兴通讯 深圳 通信设备 主板 1997-11-18 SZSE 000069.SZ 000069 华侨城A 深圳 全国地产 主板 1997-09-10 SZSE 000100.SZ 000100 TCL科技 广东 元器件 主板 2004-01-30 SZSE ... ... ... ... ... ... ... 600732.SH 600732 爱旭股份 上海 电气设备 主板 1996-08-16 SSE 600754.SH 600754 锦江酒店 上海 酒店餐饮 主板 1996-10-11 SSE 600875.SH 600875 东方电气 四川 电气设备 主板 1995-10-10 SSE 601699.SH 601699 潞安环能 山西 煤炭开采 主板 2006-09-22 SSE 688223.SH 688223 晶科能源 江西 电气设备 科创板 2022-01-26 SSE [440 rows x 7 columns]
>>> # 筛选出2019年1月1日以后上市的上海银行业的股票 >>> filter_stocks(date='2019-01-01', industry='银行', area='上海') name area industry market list_date exchange ts_code 600000.SH 浦发银行 上海 银行 主板 1999-11-10 SSE 601229.SH 上海银行 上海 银行 主板 2016-11-16 SSE 601328.SH 交通银行 上海 银行 主板 2007-05-15 SSE
使用下载的数据——获取价格或技术指标
- qteasy.get_history_data(htypes=None, *, htype_names=None, data_types=None, data_source=None, shares=None, symbols=None, start=None, end=None, freq=None, rows=None, asset_type=None, adj=None, as_data_frame=None, group_by=None, **kwargs)[source]
- 从本地data_source获取所需的数据并组装为适应于策略
需要的HistoryPanel数据对象
需要获取的数据类型可以由data_types参数给出,如果不给出data_types参数,则可以通过htypes/htype_names等参数 结合freq和asset_type参数创建可能的htypes,如果给出了data_types参数,则htypes/htype_names参数将被忽略
- Paramètres:
htype_names ([str], str) –
需要获取的历史数据的名称集合,如果htypes为空,则系统将尝试通过根据历史数据名称和freq/asset_type参数创建 所有可能的htypes。输入方式可以为str或list:
str: “open, high, low, close”
list: [“open”, “high”, “low”, “close”]
htypes ([DataType], deprecated) – 需要获取的历史数据的名称集合,如果htypes为空,则系统将尝试通过根据历史数据名称和freq/asset_type参数创建 所有可能的htypes。输入方式可以为str或list:
data_types ([DataType],) – 需要获取的历史数据类型集合,必须是合法的数据类型对象。 如果给出了本参数,htype_names会被忽略,否则根据htype_names参数创建可能的htypes
data_source (DataSource) – 需要获取历史数据的数据源
shares ([str, list] 等同于symbols) –
需要获取历史数据的证券代码集合,可以是以逗号分隔的证券代码字符串或者证券代码字符列表, 如以下两种输入方式皆合法且等效:
str: “000001.SZ, 000002.SZ, 000004.SZ, 000005.SZ”
list: [“000001.SZ”, “000002.SZ”, “000004.SZ”, “000005.SZ”]
symbols ([str, list] 等同于shares) – 需要获取历史数据的证券代码集合,可以是以逗号分隔的证券代码字符串或者证券代码字符列表, 如以下两种输入方式皆合法且等效: - str: “000001, 000002, 000004, 000005” - list: [“000001”, “000002”, “000004”, “000005”]
start (str) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的开始日期/时间(如果可用)
end (str) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的结束日期/时间(如果可用)
rows (int, default: 10) – 获取的历史数据的行数,如果指定了start和end,则忽略此参数,且获取的数据的时间范围为[start, end] 如果未指定start和end,则获取数据表中最近的rows条数据,使用row来获取数据时,速度比使用日期慢得多
freq (str) –
- 获取的历史数据的频率,包括以下选项:
1/5/15/30min 1/5/15/30分钟频率周期数据(如K线)
H/D/W/M 分别代表小时/天/周/月 周期数据(如K线)
asset_type (str, list) –
限定获取的数据中包含的资产种类,包含以下选项或下面选项的组合,合法的组合方式包括 逗号分隔字符串或字符串列表,例如: “E, IDX” 和 [“E”, “IDX”]都是合法输入
any: 可以获取任意资产类型的证券数据(默认值)
E: 只获取股票类型证券的数据
IDX: 只获取指数类型证券的数据
FT: 只获取期货类型证券的数据
FD: 只获取基金类型证券的数据
adj (str, deprecated: adj is depreated since version 1.4 and will be removed) –
- Deprecated: 对于某些数据,可以获取复权数据,需要通过复权因子计算,复权选项包括:
none / n: 不复权(默认值)
back / b: 后复权
forward / fw / f: 前复权
从下一个版本开始,adj参数将不再可用,请直接在htype中使用close:b等方式指定复权价格
as_data_frame (bool, Default: True) – True时返回HistoryPanel对象,False时返回一个包含DataFrame对象的字典
group_by (str, 默认'shares') – 如果返回DataFrame对象,设置dataframe的分组策略 - “shares” / “share” / “s”: 每一个share组合为一个dataframe - “htypes” / “htype” / “h”: 每一个htype组合为一个dataframe
**kwargs –
用于生成trade_time_index的参数,包括: drop_nan: bool
是否保留全NaN的行
- resample_method: str
如果数据需要升频或降频时,调整频率的方法 调整数据频率分为数据降频和升频,在两种不同情况下,可用的method不同: 数据降频就是将多个数据合并为一个,从而减少数据的数量,但保留尽可能多的信息, 例如,合并下列数据(每一个tuple合并为一个数值,?表示合并后的数值)
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(?), (?), (?)]
数据合并方法: - “last”/”close”: 使用合并区间的最后一个值。如:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(3), (5), (7)]
- ”first”/”open”: 使用合并区间的第一个值。如:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(1), (4), (6)]
- ”max”/”high”: 使用合并区间的最大值作为合并值:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(3), (5), (7)]
- ”min”/”low”: 使用合并区间的最小值作为合并值:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(1), (4), (6)]
- ”avg”/”mean”: 使用合并区间的平均值作为合并值:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(2), (4.5), (6.5)]
- ”sum”/”total”: 使用合并区间的平均值作为合并值:
[(1, 2, 3), (4, 5), (6, 7)] 合并后变为: [(2), (4.5), (6.5)]
数据升频就是在已有数据中插入新的数据,插入的新数据是缺失数据,需要填充。 例如,填充下列数据(?表示插入的数据)
[1, 2, 3] 填充后变为: [?, 1, ?, 2, ?, 3, ?]
缺失数据的填充方法如下: - “ffill”: 使用缺失数据之前的最近可用数据填充,如果没有可用数据,填充为NaN。如:
[1, 2, 3] 填充后变为: [NaN, 1, 1, 2, 2, 3, 3]
- ”bfill”: 使用缺失数据之后的最近可用数据填充,如果没有可用数据,填充为NaN。如:
[1, 2, 3] 填充后变为: [1, 1, 2, 2, 3, 3, NaN]
- ”nan”: 使用NaN值填充缺失数据:
[1, 2, 3] 填充后变为: [NaN, 1, NaN, 2, NaN, 3, NaN]
- ”zero”: 使用0值填充缺失数据:
[1, 2, 3] 填充后变为: [0, 1, 0, 2, 0, 3, 0]
- b_days_only: bool 默认True
是否强制转换自然日频率为工作日,即: “D” -> “B” “W” -> “W-FRI” “M” -> “BM”
- trade_time_only: bool, default True
为True时 仅生成交易时间段内的数据,交易时间段的参数通过**kwargs设定
- include_start: bool, default True
日期时间序列是否包含开始日期/时间
- include_end: bool, default True
日期时间序列是否包含结束日期/时间
- start_am:, str
早晨交易时段的开始时间
- end_am:, str
早晨交易时段的结束时间
- include_start_am: bool
早晨交易时段是否包括开始时间
- include_end_am: bool
早晨交易时段是否包括结束时间
- start_pm: str
下午交易时段的开始时间
- end_pm: str
下午交易时段的结束时间
- include_start_pm: bool
下午交易时段是否包含开始时间
- include_end_pm: bool
下午交易时段是否包含结束时间
- Renvoie:
HistoryPanel – 如果设置as_data_frame为False,则返回一个HistoryPanel对象
Dict of DataFrame – 如果设置as_data_frame为True,则返回一个Dict,其值为多个DataFrames
Exemples
>>> import qteasy as qt # 给出历史数据类型和证券代码,起止时间,可以获取该时间段内该股票的历史数据 >>> qt.get_history_data(htype_names='open, high, low, close, vol', shares='000001.SZ', start='20191225', end='20200110') {'000001.SZ': open high low close vol 2019-12-25 16.45 16.56 16.24 16.30 414917.98 2019-12-26 16.34 16.48 16.32 16.47 372033.86 2019-12-27 16.53 16.93 16.43 16.63 1042574.72 2019-12-30 16.46 16.63 16.10 16.57 976970.31 2019-12-31 16.57 16.63 16.31 16.45 704442.25 2020-01-02 16.65 16.95 16.55 16.87 1530231.87 2020-01-03 16.94 17.31 16.92 17.18 1116194.81 2020-01-06 17.01 17.34 16.91 17.07 862083.50 2020-01-07 17.13 17.28 16.95 17.15 728607.56 2020-01-08 17.00 17.05 16.63 16.66 847824.12 2020-01-09 16.81 16.93 16.53 16.79 1031636.65 2020-01-10 16.79 16.81 16.52 16.69 585548.45 } >>> # 除了股票的价格数据以外,也可以获取基金、指数的价格数据,如下面的代码获取000300.SH的指数价格 >>> qt.get_history_data(htype_names='close', shares='000300.SH', start='20191225', end='20200105') {'000300.SH': close 2019-12-25 3990.87 2019-12-26 4025.99 2019-12-27 4022.03 2019-12-30 4081.63 2019-12-31 4096.58 2020-01-02 4152.24 2020-01-03 4144.96 } >>> # 以及基金的净值数据 >>> qt.get_history_data(htype_names='unit_nav, accum_nav', shares='000001.OF', start='20191225', end='20200105') {'000001.OF': unit_nav accum_nav 2019-12-25 1.086 3.547 2019-12-26 1.096 3.557 2019-12-27 1.091 3.552 2019-12-30 1.100 3.561 2019-12-31 1.105 3.566 2020-01-02 1.123 3.584 2020-01-03 1.127 3.588 } >>> # 不光价格数据,其他类型的数据也可以同时获取: >>> qt.get_history_data(htype_names='close, pe, pb', shares='000001.SZ', start='20191225', end='20200105') {'000001.SZ': close pe pb 2019-12-25 16.30 12.7454 1.1798 2019-12-26 16.47 12.8784 1.1921 2019-12-27 16.63 13.0035 1.2036 2019-12-30 16.57 12.9566 1.1993 2019-12-31 16.45 12.8627 1.1906 2020-01-02 16.87 13.1911 1.2210 2020-01-03 17.18 13.4335 1.2434 } >>> # 可以同时混合获取多只股票、指数、多种数据类型的数据,如果某些数据类型缺失,会用NaN填充,注意000001.SZ是股票平安银行,000001.SH是上证指数 >>> qt.get_history_data(htype_names='close, pe, pb, total_mv, eps', shares='000001.SZ, 000001.SH', start='20191225', end='20200105') {'000001.SZ': close pe pb total_mv eps 2019-12-25 16.30 12.7454 1.1798 3.163165e+07 NaN 2019-12-26 16.47 12.8784 1.1921 3.196155e+07 NaN 2019-12-27 16.63 13.0035 1.2036 3.227204e+07 NaN 2019-12-30 16.57 12.9566 1.1993 3.215561e+07 NaN 2019-12-31 16.45 12.8627 1.1906 3.192274e+07 1.54 2020-01-02 16.87 13.1911 1.2210 3.273778e+07 1.54 2020-01-03 17.18 13.4335 1.2434 3.333937e+07 1.54, '000001.SH': close pe pb total_mv eps 2019-12-25 2981.88 13.74 1.38 3.987686e+13 NaN 2019-12-26 3007.35 13.85 1.39 4.020871e+13 NaN 2019-12-27 3005.04 13.85 1.39 4.019086e+13 NaN 2019-12-30 3040.02 14.00 1.40 4.064796e+13 NaN 2019-12-31 3050.12 14.05 1.41 4.079249e+13 NaN 2020-01-02 3085.20 14.22 1.42 4.128453e+13 NaN 2020-01-03 3083.79 14.22 1.42 4.127933e+13 NaN } >>> # 通过设置freq参数,可以获取不同频率的K线数据,如设置freq='H'可以获取1小时频率的数据 >>> qt.get_history_data(htype_names='open:b, high:b, low:b, close:b', shares='000001.SZ', start='20191229', end='20200106', freq='H', asset_type='E') {'000001.SZ': open high low close 2019-12-30 10:00:00 1796.92174 1796.92174 1796.92174 1796.92174 2019-12-30 11:00:00 1790.37160 1800.19681 1758.71259 1786.00484 2019-12-30 14:00:00 1811.11371 1813.29709 1795.83005 1806.74695 2019-12-30 15:00:00 1805.65526 1808.93033 1793.64667 1808.93033 2019-12-31 10:00:00 1808.93033 1808.93033 1808.93033 1808.93033 2019-12-31 11:00:00 1806.74695 1806.74695 1780.54639 1788.18822 2019-12-31 14:00:00 1786.00484 1788.18822 1781.63808 1786.00484 2019-12-31 15:00:00 1786.00484 1796.92174 1783.82146 1795.83005 2020-01-02 10:00:00 1817.66385 1817.66385 1817.66385 1817.66385 2020-01-02 11:00:00 1819.84723 1848.23117 1807.83864 1840.58934 2020-01-02 14:00:00 1842.77272 1847.13948 1828.58075 1843.86441 2020-01-02 15:00:00 1843.86441 1844.95610 1836.22258 1841.68103 2020-01-03 10:00:00 1849.32286 1849.32286 1849.32286 1849.32286 2020-01-03 11:00:00 1849.32286 1879.89018 1849.32286 1877.70680 2020-01-03 14:00:00 1863.51483 1889.71539 1863.51483 1884.25694 2020-01-03 15:00:00 1884.25694 1884.25694 1872.24835 1875.52342 } >>> # 可以设置b_days_only参数来将价格填充到非交易日,形成完整的日期序列 >>> qt.get_history_data(htype_names='open, high, low, close, vol', shares='000001.SZ', start='20191225', end='20200105', b_days_only=False) {'000001.SZ': open high low close vol 2019-12-25 16.45 16.56 16.24 16.30 414917.98 2019-12-26 16.34 16.48 16.32 16.47 372033.86 2019-12-27 16.53 16.93 16.43 16.63 1042574.72 2019-12-28 16.53 16.93 16.43 16.63 1042574.72 2019-12-29 16.53 16.93 16.43 16.63 1042574.72 2019-12-30 16.46 16.63 16.10 16.57 976970.31 2019-12-31 16.57 16.63 16.31 16.45 704442.25 2020-01-01 16.57 16.63 16.31 16.45 704442.25 2020-01-02 16.65 16.95 16.55 16.87 1530231.87 2020-01-03 16.94 17.31 16.92 17.18 1116194.81 2020-01-04 16.94 17.31 16.92 17.18 1116194.81 2020-01-05 16.94 17.31 16.92 17.18 1116194.81 } >>> # 使用特殊的htypes,可以获取特定的数据,如指数权重数据,下面的代码获取000001.SZ在HS300指数重的权重数据,单位为百分比 >>> qt.get_history_data(htype_names='wt_id:000300.SH', shares='000001.SZ, 000002.SZ', start='20191225', end='20200105') {'000001.SZ': wt_idx:000300.SH 2020-01-02 1.1714 2020-01-03 1.1714, '000002.SZ': wt_idx:000300.SH 2020-01-02 1.3595 2020-01-03 1.3595 }