2. 历史数据获取和管理
使用qteasy可以获取并管理大量的历史数据。qteasy可以管理的历史数据涵盖股票、基金、指数、期货等等,种类包含价格数据、技术指标、宏观经济、公司财报、宏观金融等等。
所有数据都可以通过tushare的接口获取,下载到本地之后,就可以通过qteasy的接口进行管理和调用了。
查找支持历史数据
使用 qt.find_history_data() 可以按名称、中文描述或通配符在全部已知历史数据类型中
进行搜索,并按需要返回兼容 get_history_data() 的 data_id 列表或结构化的 DataFrame
结果,便于探索可用的数据字段。
- qteasy.find_history_data(s: str, match_description: bool = False, fuzzy: bool = False, freq: Optional[str] = None, asset_type: Optional[str] = None, match_threshold: float = 0.85, table: Optional[Union[str, list[str]]] = None, as_data_frame: bool = False) Union[list[str], DataFrame][源代码]
根据输入的字符串,查找或匹配历史数据类型,并且显示该历史数据的详细信息。支持模糊查找、支持通配符、支持通过英文字符或中文 查找匹配的历史数据类型,支持以 DataFrame 形式返回更结构化的结果。
- 参数:
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) – 匹配度阈值,匹配度超过该阈值的项目会被判断为匹配
table (str or list of str, Default: None) – 数据表名称过滤条件,如果提供,则只匹配来自这些表的数据类型,可以是单个表名或逗号分隔字符串
as_data_frame (bool, Default: False) –
False: 返回历史兼容的 data_id 列表,并打印匹配到的数据类型信息
True: 返回包含匹配结果详细信息的 DataFrame,不强制依赖打印输出
- 返回:
data_id (list[str]) – 当 as_data_frame 为 False 时,匹配到的数据类型的 data_id 列表,可以用于 qt.get_history_data() 下载数据
pandas.DataFrame – 当 as_data_frame 为 True 时,返回一个 DataFrame,每一行对应一个匹配到的数据类型, 至少包含下列列:
name: 数据类型名称
description: 数据类型中文描述
freq: 频率
asset_type: 资产类型
table_name: 底层数据表名称
column: 对应的数据字段名
示例
>>> 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 上市公司财务指标 - 稀释每股收益同比增长率(%) ========================================================================
- 抛出:
TypeError – 输入的 s 不是字符串,或者 freq/asset_type/table 不是字符串或列表
下载历史数据
通过 qt.refill_data_source() 可以从远端金融数据 API 批量下载指定表或用途的数据
(支持按数据类型、频率、资产类型等筛选),并在本地 DataSource 中完成清洗与写入;
依赖表与交易日历的刷新会在内部自动处理,具体工作流与推荐参数组合见 manage_data 系列文档。
- 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[源代码]
从网络数据提供商的API通道批量下载数据,清洗后填充数据到本地数据源中
- 参数:
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) – 是否记录数据下载日志
- 返回类型:
None
示例
>>> import qteasy as qt >>> qt.refill_data_source(tables='stock_basic')
历史数据下载到本地之后,可以检查、管理、调用这些数据。
检查本地数据
- qteasy.get_table_info(table_name, data_source=None, verbose=True) dict[源代码]
获取并打印数据源中一张数据表的信息,包括数据量、占用磁盘空间、主键名称、内容以及数据列的名称、数据类型及说明
- 参数:
table_name (str) – 需要查询的数据表名称
data_source (DataSource) – 需要获取数据表信息的数据源,默认None,此时获取QT_DATA_SOURCE的信息
verbose (bool, Default: True,) – 是否打印完整数据列名称及类型清单
- 返回:
data_struct – 数据表的结构化信息: {
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最终记录
}
- 返回类型:
dict
示例
>>> 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) 是否沪深港通
获取已经下载的本地数据总览
qt.get_table_overview() 与 qt.get_data_overview() 会汇总展示本地数据源中各类
数据表当前是否有数据、占用磁盘空间、记录条数以及时间覆盖范围,适合作为检查数据准备
情况的入口。
- qteasy.get_table_overview(data_source=None, tables=None, include_sys_tables=False) DataFrame[源代码]
显示默认数据源或指定数据源的数据总览
- 参数:
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
- 返回类型:
pd.DataFrame
备注
用法示例参见get_data_overview()
- qteasy.get_data_overview(data_source=None, tables=None, include_sys_tables=False) DataFrame[源代码]
显示数据源的数据总览,等同于get_table_overview()
获取的信息包括所有数据表的数据量、占用磁盘空间、主键名称、内容等
- 参数:
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
- 返回:
pd.DataFrame
返回一个包含数据表的overview信息的DataFrame
示例
>>> 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
使用下载的数据——基础数据
qt.get_basic_info() 和 qt.get_stock_info() 提供按代码或名称查询股票/基金/指数等
基础信息的入口,可配合 filter_stock_codes() 与 filter_stocks() 构建资产池或
做前置筛选。
- qteasy.get_basic_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)[源代码]
等同于get_stock_info(),根据输入的信息,查找股票、基金、指数或期货、期权的基本信息
- 参数:
code_or_name (str) – 证券代码或名称: - 如果是证券代码,可以含后缀也可以不含后缀,含后缀时精确查找、不含后缀时全局匹配 - 如果是证券名称,可以包含通配符模糊查找,也可以通过名称模糊查找 - 如果精确匹配到一个证券代码,返回一个字典,包含该证券代码的相关信息
asset_types (str, list of str, optional) – 证券类型,接受列表或逗号分隔字符串,包含认可的资产类型: - E 股票 - IDX 指数 - FD 基金 - FT 期货 - OPT 期权
match_full_name (bool, default False) – 是否匹配股票或基金的全名,默认否,如果匹配全名,耗时更长
printout (bool, default True) – 如果为True,打印匹配到的结果
verbose (bool, default False) – 当匹配到的证券太多时(多于五个),是否显示完整的信息 - False 默认值,只显示匹配度最高的内容 - True 显示所有匹配到的内容
- 返回:
stock_basic – 当仅找到一个匹配时,返回一个dict,包含找到的基本信息,根据不同的证券类型,找到的信息不同: - 股票信息:公司名、地区、行业、全名、上市状态、上市日期 - 指数信息:指数名、全名、发行人、种类、发行日期 - 基金: 基金名、管理人、托管人、基金类型、发行日期、发行数量、投资类型、类型 - 期货: 期货名称 - 期权: 期权名称
- 返回类型:
dict
示例
>>> 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)[源代码]
- 等同于get_basic_info()
根据输入的信息,查找股票、基金、指数或期货、期权的基本信息
- 参数:
code_or_name (str) – 证券代码或名称, 如果是证券代码,可以含后缀也可以不含后缀,含后缀时精确查找、不含后缀时全局匹配 如果是证券名称,可以包含通配符模糊查找,也可以通过名称模糊查找 如果精确匹配到一个证券代码,返回一个字典,包含该证券代码的相关信息
asset_types (str or list of str, optional) – 证券类型,接受列表或逗号分隔字符串,包含认可的资产类型: - E 股票 - IDX 指数 - FD 基金 - FT 期货 - OPT 期权
match_full_name (bool, default False) – 是否匹配股票或基金的全名,默认否,如果匹配全名,耗时更长
printout (bool, default True) – 如果为True,打印匹配到的结果
verbose (bool, default False) – 当匹配到的证券太多时(多于五个),是否显示完整的信息 - False 默认值,只显示匹配度最高的内容 - True 显示所有匹配到的内容
- 返回:
stock_info – 当仅找到一个匹配时,返回一个dict,包含找到的基本信息,根据不同的证券类型,找到的信息不同: - 股票信息:公司名、地区、行业、全名、上市状态、上市日期 - 指数信息:指数名、全名、发行人、种类、发行日期 - 基金: 基金名、管理人、托管人、基金类型、发行日期、发行数量、投资类型、类型 - 期货: 期货名称 - 期权: 期权名称
- 返回类型:
dict
备注
用法示例参见:get_basic_info()
- qteasy.filter_stock_codes(date: str = 'today', **kwargs) list[源代码]
根据输入的参数调用filter_stocks筛选股票,并返回股票代码的清单
- 参数:
date (date-like str) – 筛选股票的上市日期,在该日期以后上市的股票将会被剔除:
kwargs (str or list of str) – 可以通过以下参数筛选股票, 可以同时输入多个筛选条件,只有符合要求的股票才会被筛选出来
- 返回类型:
list, 股票代码清单
- qteasy.filter_stocks(date: str = 'today', **kwargs) DataFrame[源代码]
根据输入的参数筛选股票,并返回一个包含股票代码和相关信息的DataFrame
- 参数:
date (date-like str) – 筛选股票的上市日期,在该日期以后上市的股票将会被剔除:
kwargs (str or list of str) – 可以通过以下参数筛选股票, 可以同时输入多个筛选条件,只有符合要求的股票才会被筛选出来 - index: 根据指数筛选,不含在指定的指数内的股票将会被剔除 - industry: 公司所处行业,只有列举出来的行业会被选中 - area: 公司所处省份,只有列举出来的省份的股票才会被选中 - market: 市场,分为主板、创业板等 - exchange: 交易所,包括上海证券交易所和深圳股票交易所
- 返回:
DataFrame
- 返回类型:
筛选出来的股票的基本信息
示例
>>> # 筛选出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
使用下载的数据——获取价格或技术指标
取数入口说明:日常分析、策略与可视化准备应优先使用 qt.get_history_data()。
qteasy.history.get_history_panel() 则面向已明确 DataType 列表与 DataSource、需要直接组装 HistoryPanel 的偏低层场景;用户文档以 get_history_data 为主线,详见 manage_data 中的 HistoryPanel 章节。
- 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)[源代码]
根据给定的标的、数据类型与频率,从本地数据源获取历史数据并组装为策略可直接使用的结构。
可以通过
htype_names或data_types指定需要的数据种类,并结合shares/symbols、时间区间与freq控制取数范围;根据as_data_frame与group_by的设置,函数返回 HistoryPanel 或按标的/数据类型分组的 DataFrame 字典。关于数据类型 推断、频率转换和 trade_time_only 等高级用法,详见文档「历史数据获取 get_history_data」 相关章节。- 参数:
htype_names (str or list of str, optional) – 需要获取的历史数据名称集合;可为逗号分隔字符串(如
'open, high, low, close') 或列表(如['open', 'high', 'low', 'close'])。若为空,系统会结合freq/asset_type等参数推断可用的 htypes。htypes (list of DataType, optional, deprecated) – 历史数据类型对象列表;语义与
htype_names类似,优先使用htype_names/data_types新接口。data_types (list of DataType, optional) – 需要获取的历史数据类型集合,必须是合法的数据类型对象。 如果给出了本参数,htype_names会被忽略,否则根据htype_names参数创建可能的htypes
data_source (DataSource, optional) – 需要获取历史数据的数据源
shares (str or list of str, optional) – 证券代码集合;可为逗号分隔字符串(如
'000001.SZ, 000002.SZ')或列表 (如['000001.SZ', '000002.SZ'])。symbols (str or list of str, optional) – 证券代码集合;可为逗号分隔字符串(如
'000001, 000002')或列表 (如['000001', '000002'])。start (str, optional) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的开始日期/时间(如果可用)
end (str, optional) – YYYYMMDD HH:MM:SS 格式的日期/时间,获取的历史数据的结束日期/时间(如果可用)
rows (int, default 10) – 获取的历史数据的行数,如果指定了start和end,则忽略此参数,且获取的数据的时间范围为[start, end] 如果未指定start和end,则获取数据表中最近的rows条数据,使用row来获取数据时,速度比使用日期慢得多
freq (str, optional) – 频率;支持
1min/5min/15min/30min等分钟周期,以及H/D/W/M等小时/日/周/月周期(如 K 线)。asset_type (str or list of str, optional) – 资产类型过滤;可用逗号分隔字符串(如
'E, IDX')或列表(如['E', 'IDX'])。 常见取值包括any、E、IDX、FT、FD等。adj (str, optional, deprecated) – 已弃用的复权选项(
none/n、back/b、forward/fw/f)。 新代码请在 htype 中显式使用复权列名(如close|b)。as_data_frame (bool, default True) –
True时返回HistoryPanel;False时返回DataFrame字典。group_by (str, default 'shares') – 返回 DataFrame 字典时的分组键;常用
'shares'/'share'/'s'或'htypes'/'htype'/'h'。**kwargs – 透传给底层取数/频率转换的附加参数(如
drop_nan、resample_method等)。 详细可选值与语义见文档「历史数据获取 get_history_data」及infer_data_types说明。
- 返回:
HistoryPanel – 当
as_data_frame为 False 时,返回包含所有请求数据的 HistoryPanel 对象。dict of pandas.DataFrame – 当
as_data_frame为 True 时,返回按group_by分组的 DataFrame 字典。
示例
>>> 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 }