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 }