金融數據下載及管理

本示例展示瞭如何使用qteasy模塊下載、管理及提取本地存儲的金融數據 QTEASY提供了一套比較完善的金融數據下載及管理工具,可以通過tushare服務器下載相當廣泛的金融數據,將數據存儲在本地,並在需要的時候自動從本地提取數據用於策略的回測或策略運行。

本地數據源對象DataSource

qteasy中定義了一個DataSource對象,這個對象定義了一個本地金融數據源,並提供了一系列內置的本地金融數據表和數據類型,用戶可以直接通過各種數據類型的ID來直接讀取相應的金融數據(前提是這些金融數據已經從網上下載並保存到了本地數據源中)。

大量常用的金融數據,例如’close』 『pe’都是預先定義並內置在qteasy中的,這些數據涵蓋了相當廣泛的範圍,包括:

  • 量價數據,如開盤價open、收盤價close、最高價high,交易量vol等等

  • 財務指標數據,如市盈率pe,市淨率pb

  • 財務報表數據,如ebidta、ebit等等

  • 公司基本資訊數據,如管理層姓名、公司行業資訊

上面的數據都是以“數據表”的形式內置並定義在系統中的,如果需要使用這些數據,必須首先下載數據至本地。DataSource對象定義了數據存儲的方式和位置。qteasy定義了一個默認的數據源對象QT_DATA_SOURCE,在不特殊指明的情況下,qteasy所操作及使用的數據都在這個數據源中。

DataSource對象可以將數據保存爲文件格式(csv、fth等),也可以將數據保存在mysql數據庫中,鑑於金融數據的體量,建議將數據保存在數據庫中。數據存儲方式及存儲位置可以在qteasyconfiguration中設置。

DataSource的兩種數據源類型

qt.DataSource(source_type, file_type='fth', file_loc='qteasy/data/', host='localhost', port=3306, user=None, password=None, db='qt_db')

對於一個DataSource對象,用戶可以選擇將數據存儲爲不同的形式,也叫數據源。DataSource目前支持兩種不同的數據源:

  • db: 數據庫,數據存儲在mysql/Maria DB數據庫中,通過建立數據庫連接來訪問

  • file: 文件,數據以文件的形式存儲在指定的文件夾中,支持csv、hdf5以及feather三種文件格式

鑑於金融數據的數據量較大(例如,所有股票的日K線歷史數據有超過一千萬行數據,分鐘級K線的數據量更加龐大),推薦使用mysql數據庫來存儲數據,如果使用本地文件存儲數據,數據交換的效率將會很低。

使用下面的參數建立一個連接到本地數據庫的DataSource對象:

import qteasy as qt
ds_db = qt.DataSource(source_type='db', host='localhost', port=3306, user='user', password='password', db='qt_db')

可以通過connection_type屬性瞭解DataSource對象的連接性質

print(ds_db.connection_type)
ds_db
db:mysql://localhost@3306/qt_db

DataSource('db', 'localhost', 3306)

使用下面的參數可以建立一個使用本地文件夾的DataSource對象

import qteasy as qt
ds_csv = qt.DataSource(source_type='file', file_loc='src/data', file_type='csv')

print(ds_csv.connection_type)
ds_csv
file://csv@qt_root/qteasy/data

DataSource('file', 'qteasy/data', 'csv')

使用qt.configuration可以查看當前的配置變量,使用qt.QT_DATA_SOURCE可以查看當前數據源的類型和參數

qt.configuration(config_key='local_data_source, local_data_file_type, local_data_file_path', default=False)
qt.QT_DATA_SOURCE
No. Config-Key            Cur Val        
-----------------------------------------
1   local_data_source     database
2   local_data_file_type  csv
3   local_data_file_path  qteasy/data/

DataSource('db', 'localhost', 3306)

歷史數據類型

qteasy可以管理多種不同的數據類型,自動下載這些類型的數據並儲存在本地,供交易策略調用。每一種數據都有一個內置的數據id(data_id),根據這個data_id,用戶可以查看、讀取、下載相應的數據。

qt.find_history_data(s, match_description=False, fuzzy=False, freq=None, asset_type=None, match_threshold=0.85,)

qt.find_history_data()可以查找qteasy內置的所有數據類型,列出數據的id,資產類型和頻率,以及數據的詳細說明。 使用qt.get_history_data()並將找到的數據id作爲參數傳入,則可以直接查看已經下載的歷史數據

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 data_id:
------------------------------------------------------------------------
           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                  股票技术指标 - 动态市盈率
========================================================================
import qteasy as qt
qt.get_history_data('pe', '000001.SZ', start="20220101", end="20220201")
Out[16]: 
{'000001.SZ':
                  pe
 2022-01-04  11.1761
 2022-01-05  11.5048
 2022-01-06  11.4847
 2022-01-07  11.5384
 2022-01-10  11.5317
 2022-01-11  11.6792
 2022-01-12  11.4042
 2022-01-13  11.3908
 2022-01-14  10.9547
 2022-01-17  10.8809
 2022-01-18  11.0822
 2022-01-19  11.0688
 2022-01-20  11.6256
 2022-01-21  11.6390
 2022-01-24  11.5384
 2022-01-25  11.3036
 2022-01-26  11.1694
 2022-01-27  10.9346
 2022-01-28  10.6193
 2022-01-31  10.6193
 2022-02-01  10.6193}

檢查本地數據源的數據

使用qt.get_table_overview()可以查看當前數據源中已經下載的數據量 當數據量較大時,需要花費幾分鐘時間分析所有的數據,並列印本地數據源中數據表的數據量、佔用磁盤空間以及數據範圍

本地數據存儲在若干張數據表中,也可以通過qt.get_table_info()來獲取某一張數據表的詳細資訊 包括數據表的主鍵類型和取值範圍以外,還包括各數據列的名稱、含義和數據類型

qt.get_table_info(table_name, data_source=None, verbose=True)

獲取一張數據表的資訊,包括數據量(數據行數),佔用磁盤空間大小、數據主鍵的名稱及數據範圍 如果設置verbose=True,還可以查看數據表中的數據列完整資訊,包括列名、數據類型和說明

qt.get_table_overview(data_source=None)

統計數據源中所有數據表的數據量並列印總覽

使用qt.get_table_info()可以獲取一張數據表的資訊:

qt.get_table_info('stock_15min', verbose=True)
<stock_15min>, 15.85GB/100.9M records on disc
primary keys: 
-----------------------------------
1:  ts_code:       *<CRITICAL>*
    <unknown> entries
    starts: 000001.SZ, end: 689009.SH
2:  trade_time:
    <unknown> entries
    starts: 20090105, end: 20220323

columns of table:
------------------------------------
      columns       dtypes remarks
0     ts_code  varchar(20)    证券代码
1  trade_time     datetime  交易日期时间
2        open        float     开盘价
3        high        float     最高价
4         low        float     最低价
5       close        float     收盘价
6         vol       double  成交量(股)
7      amount       double  成交额(元)

使用qt.get_table_overview()可以檢查並顯示DataSource中保存的所有本地數據的總覽

qt.get_table_overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]62/62-100.0%  Analyzing completed!or>>>>>ht>or>>
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         76K     1990-10-12   2022-12-31
stock_basic        True        1.5MB          5K           None         None
stock_names        True        2.4MB         13K     1990-12-10   2022-03-21
index_basic        True        4.5MB         11K           None         None
fund_basic         True        8.3MB         17K           None         None
future_basic       True        2.5MB          7K           None         None
opt_basic          True        4.5MB         10K           None         None
stock_15min        True      15.85GB      100.9M       20090105     20220323
stock_30min        True       6.66GB       38.9M       20090105     20220321
stock_hourly       True       3.41GB       38.3M       20090105     20220318
stock_daily        True       1.57GB       12.1M     1990-12-19   2022-03-22
stock_weekly       True      217.9MB        2.4M     1990-12-21   2022-03-18
stock_monthly      True       87.7MB        638K     1990-12-31   2022-02-28
index_15min        True       2.07GB       17.6M       20090105     20220323
index_30min        True       1.12GB        7.6M       20090105     20220318
index_hourly       True      602.0MB        7.1M       20090105     20220113
index_daily        True      357.0MB        2.2M     1990-12-19   2022-03-23
index_weekly       True       56.6MB        611K     1991-07-05   2022-03-18
index_monthly      True       22.5MB        139K     1991-07-31   2022-02-28
fund_hourly        True         16KB           0           None         None
fund_daily         True      165.3MB        1.6M     1998-04-07   2022-03-22
fund_nav           True      973.0MB       15.0M     2000-01-07   2022-03-22
fund_share         True       69.7MB        1.1M     1998-03-27   2022-03-18
fund_manager       True       84.7MB         40K     2000-02-22   2022-03-18
future_daily       True      384.0MB        2.0M     1995-04-17   2022-03-23
options_daily      True      753.0MB        5.3M     2015-02-09   2022-03-23
stock_adj_factor   True      688.0MB       11.0M     1990-12-19   2022-03-23
fund_adj_factor    True      112.7MB        1.9M     1998-04-07   2022-03-23
stock_indicator    True       2.31GB       11.6M     1999-01-01   2022-03-23
stock_indicator2   True      988.0MB        4.8M     2017-06-14   2022-03-23
index_indicator    True        5.5MB         45K     2004-01-02   2022-03-23
index_weight       True      841.9MB       10.5M     2005-04-08   2022-03-17
income             True       94.8MB        189K     1990-12-31   2021-12-31
balance            True      130.0MB        172K     1989-12-31   2021-12-31
cashflow           True      111.9MB        186K     1998-12-31   2021-12-31
financial          True      373.0MB        152K     1989-12-31   2021-12-31
forecast           True       50.6MB         86K     1998-12-31   2022-12-31
express            True        4.5MB         23K     2004-12-31   2021-12-31

HistoryPanel 与 get_history_data

在 qteasy 2.x 中,qt.get_history_data() 的推薦用法是直接返回 HistoryPanel

import qteasy as qt

hp = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH,000905.SH',
    start='20230101',
    end='20231231',
)
print(hp)

HistoryPanel 是一個三維數據容器,維度含義爲:

  • axis 0(shares):標的列表,例如股票或指數代碼;

  • axis 1(hdates):時間軸,每一行對應一個時間點(如交易日或分鐘);

  • axis 2(htypes):歷史數據類型,例如 openhighlowclosevol 等。

使用 hp[...] 按軸切片時,結果類型爲 HistoryPanel(帶正確的軸標籤),不再直接得到 ndarray。需要裸矩陣時請使用 hp['close'].valueshp['close'].to_numpy(copy=True);具名切片與默認拷貝行爲見 hp.subpanel(..., copy=True)

研究向布爾掩碼與後續帶 mask= 的 API 可使用 hp.where(condition):返回與 hp.values 同形的 dtype=bool 數組(不改變 hp),詳見 HistoryPanel API 參考 與教程 使用 HistoryPanel 操作和分析歷史數據

2.2.8 起還可:合法標識符列名用只讀屬性(如 hp.close,等價 hp['close']);比較運算(如 hp.close > 100、兩列子面板比較)得到 numpy 布爾數組,可直接作爲 hp.where(...) 的輸入;按 交易日(時間軸) 篩選可用 hp.loc[key](等價 hp[:, :, key],與 pandas 僅類比)。邊界說明見 API 頁「列屬性訪問、比較與 loc」與教程 §6.1。

這樣,策略與可視化都可以在同一份結構化數據上工作,避免重複轉換。

當你已有 DataFrame 或字典形式的數據時,可以使用 qt.dataframe_to_hp() 將其適配爲 HistoryPanel,再複用同一套 API。

從 HistoryPanel 到可視化

HistoryPanel 提供統一的可視化入口 hp.plot(),根據面板中已有的 htypes 自動選擇合適的圖表類型(K 線、成交量、MACD 或普通折線),並支持多標的對比:

import qteasy as qt

hp = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH',
    start='20230101',
    end='20231231',
)

# 静态 K 线 + 成交量
hp.plot(interactive=False)

# 交互式 K 线(在 Jupyter 中体验更好)
hp.plot(interactive=True)

HistoryPanel.plot 交互式可視化(Plotly)

當你使用 hp.plot(interactive=True) 時,qteasy 會使用 Plotly 生成交互式圖表,支持縮放、平移與懸停查看數據。在 Notebook 中,如果你的環境支持 FigureWidget(通常需要安裝 ipywidgetsanywidget),qteasy 會優先返回更完整的交互體驗;否則會回退到 HTML 方式展示。你也可以通過 plotly_backend_app='auto'|'FigureWidget'|'html' 明確指定輸出方式。

依賴與安裝

  • 基礎交互(Plotly Figure)

pip install plotly
  • Notebook 更完整交互(FigureWidget + 回調)

pip install ipywidgets anywidget

注意:若未安裝 Plotly,調用 interactive=True 會直接拋出英文錯誤提示(例如包含 “requires plotly” 的資訊);這是爲了讓依賴缺失問題儘早暴露,避免生成一個不可交互的“空圖”。

plotly_backend_app:輸出方式與回退

plotly_backend_app 僅在 interactive=True 時生效:

  • plotly_backend_app='auto':在 Notebook 中優先使用 FigureWidget;否則回退到 HTML 包裝;在腳本環境中也可能返回原始 Plotly Figure。

  • plotly_backend_app='FigureWidget':強制使用 FigureWidget;若當前不是 Notebook 或缺少依賴會直接報錯(英文提示)。

  • plotly_backend_app='html':強制使用 HTML 包裝;若當前不是 Notebook 也會直接報錯(英文提示)。

關鍵交互能力(用戶視角)

  • 縮放/平移一致性:HTML 與 FigureWidget 在縮放/平移時遵循同一套 x 軸約束:保持最少可見 bar 數、越界時按 pan 語義平移回數據域。

  • 頂部 OHLC 摘要:當面板中存在完整 OHLC 主圖(蠟燭圖)時,會顯示頂部摘要;交互圖初始爲最後一根 bar,點擊某根 bar 會更新摘要。無 K 線主圖(例如僅 close 折線)時不顯示該摘要區。

  • 兩標的 overlay:當你用 layout='overlay' 對比兩隻標的時,點擊某根 bar 會切換主次標的:主次透明度與線寬會聯動更新;如果你啓用了 highlight,高亮點默認僅對當前主標的可見,並隨主次切換。

  • 選中態十字交叉線:點擊後在主價格圖上顯示選中態十字交叉線;縮放/平移時保持同步;當選中 bar 滾動出可見區域時會隱藏。

示例:最常用的兩種交互調用

示例 1:單標的交互式 K 線

hp.plot(interactive=True, plotly_backend_app='auto')

示例 2:兩標的 overlay + 高亮

hp2 = qt.get_history_data(
    htypes='open, high, low, close, vol',
    shares='000300.SH,000905.SH',
    start='20230101',
    end='20231231',
)
hp2.plot(
    interactive=True,
    layout='overlay',
    highlight='max',
    plotly_backend_app='html',
)

可視化層嚴格遵循“有什麼畫什麼”原則:

  • 只使用 HistoryPanel 中已經存在的列,不在繪圖層計算新的指標;

  • 是否繪製 K 線、成交量或 MACD,僅取決於面板中是否存在對應的 htypes。

典型 htypes 與默認圖表類型的對應關係如下:

圖表類型

依賴的 htype 示例

K 線

open, high, low, close

成交量

volvolume

MACD

macd_*, macd_signal_*, macd_hist_*

折線圖

其它任意一維序列(如 closepe 等)

若需要 MA/布林帶/MACD 等指標,應在 HistoryPanel 上調用相應方法 (例如 hp.kline.ma()hp.kline.bbands()hp.kline.macd()), 將結果列追加進面板後再調用 hp.plot()

qt.candle 與 HistoryPanel 的關係

qt.candle() 是更高層的快捷入口,用於“一行代碼畫出某個標的的 K 線圖”, 其內部邏輯可以概括爲:

  1. 解析 stockstartend 等參數,從本地數據源取數;

  2. 將價格數據適配爲單標的 HistoryPanel

  3. 在 HistoryPanel 上追加用戶需要的指標列(如 MA、布林帶、MACD);

  4. 調用 hp.plot(...) 繪製圖表。

因此,你可以在保留現有 qt.candle 調用方式的同時,直接在 HistoryPanel 上 做更細粒度的控制。

常見用法示例:

import qteasy as qt

# 快速绘制日 K 线(内部走 HistoryPanel 可视化)
df = qt.candle(
    stock='000300.SH',
    start='2023-06-01',
    end='2023-12-01',
    asset_type='IDX',
    plot_type='candle',
    interactive=True,
)

print(df.head())  # df 为用于绘图的价格数据

其中 plot_type 的意義爲:

  • 'candle' / 'c':使用 OHLC 繪製蠟燭圖;

  • 'ohlc' / 'o':行爲與 'candle' 接近,僅作爲輕量別名保留;

  • 'line' / 'l':只繪製一維價格折線(通常爲 close);

  • 'none' / 'n'只取數不繪圖,直接返回 DataFrame,方便你用 其它工具自行可視化。

Renko 圖('renko' / 'r')在新版中已不再內置支持;若需要 Renko 圖, 建議使用專門的技術分析或畫圖庫。

獲取歷史數據,並將數據保存在DataSource中

如果DataSource中沒有數據,那麼qteasy將很難發揮所長,因此,首先需要將數據保存到DataSourceDataSource類提供了_fetch_table_data_from_tushare()函數,來獲取並存儲歷史數據到DataSource中,在這個函數的參數中可以直接給出一個DataFrame、一個csv文件名或excel文件名,同樣也可以連接網絡數據提供商的API獲取數據。 使用DataSource對象獲取、更新數據的方法包括:

DataSource._fetch_table_data_from_tushare(table, channel, df=None, f_name=None, **kwargs)

從外部數據源獲取數據,調整清洗數據以使它與數據源中的數據表匹配

數據獲取渠道,指定本地文件、金融數據API,或直接給出local_df,支持以下選項:

  • 『df』 : 通過參數傳遞一個df,該df的columns必須與table的定義相同

  • 『csv』 : 通過本地csv文件導入數據,此時必須給出f_name參數

  • 『excel』 : 通過一個Excel文件導入數據,此時必須給出f_name參數

  • 『tushare』 : 從Tushare API獲取金融數據,請自行申請相應權限和積分

  • 『other』 : 其他金融數據API,尚未開發

DataSource.update_table_data()

檢查輸入的df,去掉不符合要求的列或行後,將數據合併到table中,包括以下步驟:

  1. 檢查下載後的數據表的列名是否與數據表的定義相同,刪除多餘的列

  2. 如果datasource type是」db」,刪除下載數據中與本地數據重複的部分,僅保留新增數據

  3. 如果datasource type是」file」,將下載的數據與本地數據合併並去重

DataSource.read_table_data()

通過本地文件獲取數據,並保存到DataSource中:

下面的示例代碼將存儲在DataFrame中的數據保存在DataSource

# stock_data 是事先准备好的股票价格数据,格式为pd.DataFrame
df = ds_csv._fetch_table_data_from_tushare(table='stock_basic', channel='df', df=stock_data)
ds_csv.update_table_data('stock_basic', df)
ds_csv.table_data_exists('stock_basic')

通過tushare獲取數據,並保存到DataSource中:

tushare是一個網絡金融數據API,提供了大量的金融數據,不過某些數據需要積分才能獲取,請自行申請tushare賬號並獲取相應積分 tushare的說明文檔在這裏:https://tushare.pro/document/2

連接到tushare獲取數據的時候,只需要指定數據表的名稱即可,DataSource會自行調用相應的tushare API下載數據:

df = ds_csv._fetch_table_data_from_tushare(table='trade_calendar', channel='tushare')
ds_csv.update_table_data('trade_calendar', df)
ds_csv.table_data_exists('trade_calendar')

連接tushare下載數據並保存到本地數據源

qteasy提供了tushare數據接口,在獲取相應tushare權限後,可以直接從tushare批量下載金融數據,並將數據更新到本地數據源中 例如,下面的命令將2022年3月起到9月之間的所有股票日K線數據下載到本地: 在下載數據前檢察stock_daily表的資訊:

qt.refill_data_source(data_source, *args, **kwargs)

連接到tushare下載所需的數據並保存到相應的數據表,給出需要下載的數據表名稱,通過start_dateend_date限定數據的範圍,同時可以通過freqasset_type等指定不同的數據類型,即可下載表格數據並保存到合適的位置。 重複的數據會被忽略或覆蓋已有的數據。

qt.refill_data_source()tables參數指定需要補充的數據表; 除了直接給出表名稱以外,還可以通過表類型同時下載多個數據表的數據:

  • cal : 交易日曆表,各個交易所的交易日曆

  • basics : 所有的基礎資訊表,包括股票、基金、指數、期貨、期權的基本資訊表

  • adj : 所有的復權因子表,包括股票、基金的復權因子,用於生成復權價格

  • data : 所有的歷史數據表,包括股票、基金、指數、期貨、期權的日K線數據以及周、月K線數據

  • events : 所有的歷史事件表,包括股票更名、更換基金經理、基金份額變動等數據

  • report : 財務報表,包括財務指標、三大財務報表、財務快報、月報、季報以及年報

  • comp : 指數成分表,包括各個指數的成份股及其百分比

  • all : 所有的數據表,以上所有數據表,由於數據量大,建議分批下載

數據下載到本地後,可以使用qt.get_history_data()來獲取數據,如果同時獲取多個股票的歷史數據,每個股票的歷史數據會被分別保存到一個dict中。

例如,通過檢查發現,stock_daily表中的數據不夠完整,最新的數據僅更新到2022年3月22日,數據共有1210萬行:

qt.get_table_info('stock_daily', verbose=False)
<stock_daily>, 1.57GB/12.1M records on disc
primary keys: 
-----------------------------------
1:  ts_code:
    <unknown> entries
    starts: 000001.SZ, end: 873527.BJ
2:  trade_date:       *<CRITICAL>*
    <unknown> entries
    starts: 1990-12-19, end: 2022-03-22

此時使用qt.refill_data_source()函數,批量獲取2022年3月以後一直到10月底的stock_daily數據

qt.refill_data_source(tables='stock_daily', 
                      start_date='20220301',
                      end_date='20221031')

數據下載過程中會通過進度條顯示下載進度,同時顯示下載讀取的數據量和總耗時。由於數據需要分批下載,下載大量的數據可能非常耗時。默認情況下 qteasy會通過多線程並行下載提高速度,但下載頻率過快可能會導致tushare權限問題。

[########################################]8/8-100.0%  <trade_calendar:SSE-INE>65417wrtn in 2'24"448
[########################################]163/163-100.0%  <stock_daily:20220301-20221031>786300wrtn in 2'42"199

下載完成後重新檢查stock_daily的數據:可以發現數據已經增加到1280萬行,增加了70萬行數據,數據覆蓋的日期也達到了2022年10月31日。

qt.get_table_info('stock_daily', verbose=False)
<stock_daily>, 1.57GB/12.8M records on disc
primary keys: 
-----------------------------------
1:  ts_code:
    <unknown> entries
    starts: 000001.SZ, end: 873527.BJ
2:  trade_date:       *<CRITICAL>*
    <unknown> entries
    starts: 1990-12-19, end: 2022-10-31

本地數據的獲取和可視化

只要本地數據源中有了數據,就可以非常容易地獲取這些數據,如果是量價數據,還可以非常容易地可視化(列印爲K線圖或價格曲線圖)

股票或資產的基本資訊數據

qt.get_basic_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)

獲取一個股票或證券的基本資訊,code_or_name可以是股票的代碼,或者股票名稱,默認情況下系統會進行全劇匹配查找匹配的證券,如‘000001’會匹配到多種不同的證券,所有匹配的證券都會被列出,除非在asset_type中指定一種或幾種證券類型。 如果設置match_full_name=True,則會通過股票或基金的全名來模糊匹配證券

qt.get_stock_info(code_or_name: str, asset_types=None, match_full_name=False, printout=True, verbose=False)

get_basic_info()的別稱

篩選股票代碼

qt.filter_stocks(date: str = 'today', **kwargs)

根據發行日期、地區、行業、規模、指數成份等多種可用的資訊篩選出一部分股票,列印出股票的資訊

qt.filter_stock_codes(date: str = 'today', **kwargs)

根據發行日期、地區、行業、規模、指數成份等多種可用的資訊篩選出一部分股票,返回股票的完整代碼

提取金融歷史數據

qt.get_history_data(htypes, shares=None, start=None, end=None, freq=None, asset_type=None, adj=None, as_data_frame=True, group_by=None, **kwargs)

這個函數從默認QT_DATA_SOURCE中提取數據,根據輸入的數據類型、股票代碼、日期範圍以及頻率等參數,輸出多個DataFrameHistoryPanel對象 這些DataFrame保存在一個dict中,這個dict的鍵爲股票代碼或數據類型,值爲按股票代碼或數據類型分組的數據框

量價數據的可視化

qt.candle(stock=None, start=None, end=None, stock_data=None, asset_type=None, freq=None, plot_type='candle', interactive=True, data_source=None, **kwargs)

這個函數從本地數據源中提取股票的價格數據,並生成一張完整的動態高級K線圖

示例:

查找證券的基本資訊

使用qt.get_basic_info()獲取證券的基本資訊 在DataSource中準備好相關的金融數據後,還可以方便地查找證券的資訊,通過證券代碼(六位數字)或證券的名稱搜索證券,並列印出詳細資訊。 使用證券名稱搜索時,支持模糊查找或使用通配符:

例如,通過六位代碼獲取證券資訊:

qt.get_basic_info('601728')
found 1 matches, matched codes are {'E': {'601728.SH': '中国电信'}, 'IDX': {}, 'FT': {}, 'FD': {}, 'OPT': {}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code       601728.SH
name               中国电信
area                 北京
industry           电信运营
fullname     中国电信股份有限公司
list_status           L
list_date    2021-08-20
-------------------------------------------

也可以直接通過證券名稱來查找證券,模糊查找匹配多個證券,例如:

qt.get_basic_info('中国证券')
Too many matched codes 128, best matched are
{'E': {'000728.SZ': '国元证券'}, 'IDX': {'100630.CIC': '中金证券'}, 'FD': {'001552.OF': '天弘中证证券保险A'}}
pass "verbose=Ture" to view all matched assets
More information for asset type E:
------------------------------------------
ts_code       000728.SZ
name               国元证券
area                 安徽
industry             证券
fullname     国元证券股份有限公司
list_status           L
list_date    1997-06-16
-------------------------------------------
More information for asset type IDX:
------------------------------------------
ts_code   100630.CIC
name            中金证券
fullname      中金证券指数
publisher       中金公司
category          其他
list_date       None
-------------------------------------------
More information for asset type FD:
------------------------------------------
ts_code        001552.OF
name           天弘中证证券保险A
management          天弘基金
custodian           国泰君安
fund_type            股票型
issue_date    2015-06-29
issue_amount        0.05
invest_type        被动指数型
type              契约型开放式
-------------------------------------------

通過證券名稱匹配證券時,支持通過通配符查找:

qt.get_basic_info('中国?通')
found 2 matches, matched codes are {'E': {'600050.SH': '中国联通', '601698.SH': '中国卫通'}, 'IDX': {}, 'FD': {}, 'count': 2}
More information for asset type E:
------------------------------------------
ts_code           600050.SH     601698.SH
name                   中国联通          中国卫通
area                     北京            北京
industry               电信运营          电信运营
fullname     中国联合网络通信股份有限公司  中国卫通集团股份有限公司
list_status               L             L
list_date        2002-10-09    2019-06-28
-------------------------------------------

默認情況下,並不會查找證券的全名,如果有必要,可以匹配全名,例如:

# 使用‘贵州钢绳’为关键字搜索股票代码,不匹配全名时,找不到匹配的结果:
qt.get_basic_info('贵州钢绳')

結果如下:

found 0 matches, matched codes are {'E': {}, 'IDX': {}, 'FD': {}, 'count': 0}
# 然而如果设置了匹配全名`match_full_name=True`,则能够找到匹配的代码:
qt.get_basic_info('贵州钢绳', match_full_name=True)

結果如下:

found 1 matches, matched codes are {'E': {'600992.SH': '贵绳股份'}, 'IDX': {}, 'FD': {}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code       600992.SH
name               贵绳股份
area                 贵州
industry            钢加工
fullname     贵州钢绳股份有限公司
list_status           L
list_date    2004-05-14
-------------------------------------------

qt.filter_stocks被用來根據某些標準篩選股票,例如:

# 筛选2000年以后发行的HS300指数成份股
qt.filter_stocks(date = '20000101', 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
... ... ... ... ... ... ... ...
603486.SH 603486 科沃斯 江苏 家用电器 主板 2018-05-28 SSE
605499.SH 605499 东鹏饮料 深圳 软饮料 主板 2021-05-27 SSE
688561.SH 688561 奇安信-U 北京 软件服务 科创板 2020-07-22 SSE
688599.SH 688599 天合光能 江苏 电气设备 科创板 2020-06-10 SSE
688981.SH 688981 中芯国际 上海 半导体 科创板 2020-07-16 SSE

397 rows × 7 columns

# 筛选行业为“航空或全国地产,且区域为‘上海、北京及山东“的股票
qt.filter_stocks(industry='航空, 全国地产', area='上海,北京,山东')
name area industry market list_date exchange
ts_code
000402.SZ 金融街 北京 全国地产 主板 1996-06-26 SZSE
000620.SZ 新华联 北京 全国地产 主板 1996-10-29 SZSE
002111.SZ 威海广泰 山东 航空 中小板 2007-01-26 SZSE
002829.SZ 星网宇达 北京 航空 中小板 2016-12-13 SZSE
002933.SZ 新兴装备 北京 航空 中小板 2018-08-28 SZSE
002985.SZ 北摩高科 北京 航空 中小板 2020-04-29 SZSE
300034.SZ 钢研高纳 北京 航空 创业板 2009-12-25 SZSE
300719.SZ 安达维尔 北京 航空 创业板 2017-11-09 SZSE
300965.SZ 恒宇信通 北京 航空 创业板 2021-04-02 SZSE
600118.SH 中国卫星 北京 航空 主板 1997-09-08 SSE
600372.SH 中航电子 北京 航空 主板 2001-07-06 SSE
600657.SH 信达地产 北京 全国地产 主板 1993-05-24 SSE
600708.SH 光明地产 上海 全国地产 主板 1996-06-06 SSE
600748.SH 上实发展 上海 全国地产 主板 1996-09-25 SSE
600760.SH 中航沈飞 山东 航空 主板 1996-10-11 SSE
600791.SH 京能置业 北京 全国地产 主板 1997-01-30 SSE
600823.SH 世茂股份 上海 全国地产 主板 1994-02-04 SSE