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
}