2. 以標準化方式從數據表中提取資訊

前面的章節中,我們介紹了數據源和數據源的概念,並且介紹瞭如何往數據源中填充金融數據。在這一章節中,我們將介紹如何從數據源中提取對我們有用的資訊,而不僅僅是讀取數據。

QTEASY數據管理模塊: 數據獲取模塊結構

2.1. 資訊 != 數據

在量化交易中,我們需要準備大量的金融數據,然而,數據並不是最終的目的,我們需要從數據中提取有用的資訊。在交易策略中,我們使用這些資訊作出交易決策。

資訊不等於數據,有些資訊是可以直接從數據表中讀出來的,比如股票的收盤價,開盤價等。但是,有些資訊是需要通過一定的計算才能得到的,比如股票的復權價格等。

例如,我們在交易策略中需要用到股票的前復權價格,我們知道,復權價格是用股票的價格以及復權因子計算得到的,分別保存在下面兩張表中:

  • stock_daily:股票日K線行情表,包含了股票的開盤價、收盤價、最高價、最低價等資訊。

  • stock_adj_factor:股票復權因子表,包含了股票的復權因子資訊。

此時,上面兩張表中已經保存了我們需要的數據,但它們並不是我們需要的資訊,我們需要通過計算才能得到我們需要的資訊。

因此,爲了獲取復權價格這條資訊,我們無法避免繁瑣的計算過程。

而且,還必須考慮到,如果我們需要的不是復權日K線價格,而是復權後的小時K線價格,還需要把日K線數據轉換爲小時K線數據,這樣的計算過程更加複雜。

在交易策略的實現過程中,如果每次使用復權價格時都要考慮上面的轉換和計算過程,那麼會使得策略的實現變得複雜,而且容易出錯。也會讓我們把有限的精力 分散到這些瑣碎的計算過程中,而不是集中在策略的實現上。

因此,我們需要一種方法,能夠把這些瑣碎的計算過程封裝起來,使得我們在實現策略時,只需要關注策略本身,而不需要關注這些瑣碎的計算過程。

爲此,qteasy數據管理模塊提供了一種標準化的方式,用於從數據表中提取資訊。這種方式就是DataType對象。

2.2. DataType對象

DataType對象是QTEASY數據管理模塊中的一個重要對象,它在v1.4版本中正式引入,它封裝了標準化的數據處理邏輯,用於從數據表中提取資訊。使得用戶只要定義好一個DataType對象,就不需要再將精力分散在瑣碎的數據資訊獲取計算過程中,而是可以專注於策略的實現。

qteasy提供了大量內置預定義的DataType對象,用戶也可以根據自己的需求自定義DataType對象。

舉一個簡單的例子,假設我們需要獲取股票的後復權價格,可以直接使用內置的DataType: close|b對象,如下所示:

# 获取格力电器 2025-02-01 到 2025-02-27 的后复权收盘价
import qteasy
from qteasy.datatypes import DataType

close_b = DataType(name='close|b', asset_type='E', freq='D')
# 获取数据
close_b.get_data_from_source(
        datasource=qteasy.QT_DATA_SOURCE, 
        symbols='000651.SZ', 
        starts='2025-02-01', 
        ends='2025-02-27',
)

ts_code     000651.SZ
trade_date           
2025-02-05    9234.85
2025-02-06    9194.82
2025-02-07    9295.95
2025-02-10    9245.38
2025-02-11    9199.03
2025-02-12    9220.10
2025-02-13    9232.74
2025-02-14    9268.56
2025-02-17    9201.14
2025-02-18    9066.29
2025-02-19    8836.63
2025-02-20    8817.67
2025-02-21    8714.43
2025-02-24    8695.47
2025-02-25    8533.23
2025-02-26    8621.72
2025-02-27    8729.18

2.3. 所有 DataType 清單(羅列並簡短介紹)

qteasy 2.0 內置了大量 DataType,每種數據類型由 name(名稱)、freq(頻率)、asset_type(資產類型)唯一確定,並對應到具體數據表及列或計算方式。完整清單可通過 qteasy.datatypes.get_dtype_map() 獲取,返回的 DataFrame 索引爲 (dtype, freq, asset_type),列包含 description(用途描述)、acquisition_type(獲取方式)等。

獲取完整清單

import qteasy
from qteasy import datatypes

# 仅内置类型
dtype_map = datatypes.get_dtype_map()
print(dtype_map.head(20))

# 含用户自定义类型(若有)
dtype_map_all = datatypes.get_dtype_map(include_user_defined=True)

常見數據類型示例

name(名稱)

freq

asset_type

用途簡述

trade_cal

d

None

交易日曆

close|b

D

E

股票後復權收盤價

close|f

D

E

股票前復權收盤價

open, high, low, close, vol

D/1min/5min/…

E/IDX/FD 等

K 線開高低收、成交量

open|b, high|b 等

D

E

後復權開高低收

stock_symbol, stock_name, industry

None

E

股票代碼、名稱、行業等基本資訊

wt_idx|%

d

E

指數成分股權重

完整列表見 get_dtype_map() 輸出

上表中 freq 常用取值:D 日線,1min/5min 等爲分鐘線,None 表示與頻率無關(如基本資訊)。asset_typeE 股票,IDX 指數,FD 基金,None 表示不限定資產。每種類型的詳細說明、對應數據表及列見 get_dtype_map() 返回的 descriptionkwargs

當需要在同一時間軸上同時攜帶多隻標的、多種數據類型(例如 OHLC 與成交量一併參與計算或出圖)時,下一章 HistoryPanel(歷史數據面板) 介紹如何把 get_history_data 的結果收攏爲三維面板;製圖入口則見再下一章 HistoryPanel 可視化