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, 股票代码清单

参见

filter_stocks

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_namesdata_types 指定需要的数据种类,并结合 shares / symbols、时间区间与 freq 控制取数范围;根据 as_data_framegroup_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'])。 常见取值包括 anyEIDXFTFD 等。

  • adj (str, optional, deprecated) – 已弃用的复权选项(none/nback/bforward/fw/f)。 新代码请在 htype 中显式使用复权列名(如 close|b)。

  • as_data_frame (bool, default True) – True 时返回 HistoryPanelFalse 时返回 DataFrame 字典。

  • group_by (str, default 'shares') – 返回 DataFrame 字典时的分组键;常用 'shares'/'share'/'s''htypes'/'htype'/'h'

  • **kwargs – 透传给底层取数/频率转换的附加参数(如 drop_nanresample_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
}