【TQuant 從 0 到 1 - Day 3】打造投資數據全視角:股票池篩選與 TejToolAPI 資料獲取

股票池
Photo by Carlos Muza on Unsplash

前言

在金融投資的世界中,掌握準確且全面的數據是一項不可或缺的技能,而有效管理股票池和股價資料的取得方式則是開啟這項技能的關鍵。透過 TQuant Lab 提供的工具與 API,我們可以輕鬆地定義篩選條件,快速建立符合需求的股票池,並下載相關的歷史股價資料。

本篇文章將帶您一步步完成環境設置與 API Key 的配置,並深入解析如何使用 get_universe 函數來獲取特定條件的股票樣本。無論您是投資新手還是數據分析的愛好者,都能藉此掌握自動化獲取數據的技巧,為未來的量化分析打下堅實基礎。我們將透過範例與實際操作,讓您輕鬆上手並應用到自己的投資策略中。

股票池是什麼 ?

股票池,就像是我們日常生活中的「購物清單」。想像一下,當您去超市購物時,貨架上有上千種商品,如果什麼都不篩選,可能會花很長時間在挑選上,甚至最後買了一堆不需要的東西。但如果您事先列好一張清單,比如「早餐食材」或「健身飲食」,那麼您就能快速在相關區域挑出需要的商品,省時又高效。

同樣地,股票池的作用就是幫助我們在浩瀚的股票市場中,挑選出符合特定條件的股票。比如,您可能會設定一個條件:「我要找台灣上市的半導體公司普通股」。這樣,股票池就像購物清單一樣,為您整理出一份符合條件的股票名單,您只需專注分析這些股票,而不用浪費時間在與目標無關的公司上。

簡而言之,股票池就是您投資過程中的「指南針」,讓您在複雜的市場中找到方向,並為決策提供可靠的基礎。

好的股票池帶來的好處

提升分析效率
市場上的股票數量龐大,如果沒有明確的篩選標準,很容易迷失在數據海洋中。而一個精心設計的股票池能讓您更快速聚焦在適合分析的標的,節省大量時間。

減少倖存者偏差的影響
透過建立符合條件的股票池,可以避免僅分析至今仍存活的公司,而忽略那些曾經失敗或消失的公司,從而在回測策略表現時能更全面地反映市場全貌。

自動化與量化應用
股票池的運用可以和量化策略結合,輕鬆進行回測與數據分析,確保您的策略基於經過篩選的可靠數據。

get_universe 的功能介紹

因此在進行量化分析或投資策略設計時,快速、準確地獲取股票池資料是關鍵的一步。而透過 TQuant Lab 提供的工具,我們能方便地使用 get_universe 函數,根據不同的篩選條件建立專屬的股票池,並為後續分析奠定基礎。

get_universe 函數主要用於篩選並返回符合條件的股票池(List of symbols)。它能在特定時間範圍內,根據市場別、產業別、證券種類等條件,快速生成股票名單,並可與量化策略或回測工具結合使用。
主要功能

  1. 股票池建立:自動篩選符合條件的股票,省去手動整理的麻煩。
  2. 條件化篩選:支持多種篩選條件,如市場、板塊、產業、指數成分等。
  3. 動態範圍:可以根據指定的日期範圍,返回在該期間內符合條件的股票。

get_universe(start,
end = datetime.datetime.now().date().strftime(%Y-%m-%d),
trading_calender = get_calender(‘TEJ_XTAI’),
**kwargs)

這些參數負責設定篩選的時間範圍和交易日曆:

start (datetime 或 str)

  • 用途:指定股票池篩選的起始日期。
  • 意義:返回在 startend 時間段內符合條件的股票。

end (datetime 或 str,選填,預設為當天日期)

  • 用途:指定篩選的結束日期。
  • 說明:若不填寫,系統會以執行日期作為結束日期。

trading_calendar (TradingCalendar,選填,預設為 TEJ_XTAI)

  • 用途:設置交易日曆,用於篩選日期範圍內的有效交易日。
  • 預設值TEJ_XTAI(台灣證券交易所的交易日曆)。

available kwargs properities (至少需要指定一個,若沒指定則返回全樣本)

這些參數決定了返回的股票池內容,包括市場別、板塊別(中)、板塊別(英)、證券種類(中)、證券種類(英)、主產業別(中)、主產業別(英)、子產業別(中)、子產業別(英)、指數名稱,可以根據需求靈活設置,詳細內容可以參考相關連結。

tejtoolapi
統整股票池內容關係

程式範例

這邊我們會透過九個範例來讓您更深入了解如何活用get_universe

首先就是Import跟設定

import pandas as pd
import datetime
import tejapi
import os
import numpy as np

# set tej_key and base
os.environ['TEJAPI_KEY'] = "your key" 
os.environ['TEJAPI_BASE'] = "https://api.tej.com.tw"

# set date
start='2024-01-01'
end='2025-01-01'

#Import get_universe
from zipline.sources.TEJ_Api_Data import get_universe

  • case1 取曾經在上市一般板+上櫃一般板的證券
get_universe(start, end, mkt_bd_e=['TSE','OTC'])

  • case2 取曾經在證券交易所/櫃買中心掛牌的證券
get_universe(start, end, mkt=['OTC'])
  • case3 取曾經上市+上櫃的普通股
get_universe(start, end, mkt=['TWSE','OTC'], stktp_c=['普通股'])
  • case4 取子產業別曾經為”M2324 半導體業”的證券
get_universe(start, end, sub_ind_c=['M2324 半導體業'])
  • case5 取子產業別曾經為”M2324 Semiconductor”&”M2325 Computer and Peripheral Equipment”的證券
get_universe(start, end, sub_ind_e=['M2324 Semiconductor',
                                    'M2325 Computer and Peripheral Equipment'])
  • case6 取證券種類為”ETF”及”普通股”且掛牌於證券交易所的證券
get_universe(start, end, stktp_c=['ETF', '普通股'], mkt=['TWSE'])
  • case7 取曾經為”IX0002″(台灣50指數)成份股的證券
get_universe(start, end, idx_id='IX0002')
  • case8 取主產業別曾經為”M1100 水泥工業”且為”IX0006″(台灣高股息指數)成份股的證券
get_universe(start, end, main_ind_c='M1100 水泥工業', idx_id='IX0006')
  • case9 取非金融業的普通股
get_universe(start, end, main_ind_c=['一般產業']
             , stktp_c='普通股')

TEJToolAPI

成功建立並下載了符合條件的 股票池 後,我們已經獲得了一份篩選過的目標清單。然而,股票池本身只是投資數據的起點,要真正進行深入分析或制定策略,還需要補充更多的詳細資料。

這時候,TejToolAPI 就派上用場了。透過 TejToolAPI,我們可以高效地獲取與股票相關的歷史數據,包括財務資訊(如每股盈餘 EPS)、成長率、股息等多維度指標,讓股票池中的每支股票更具分析價值。

當我們Import 完TEJToolAPI後,我們可以透過TejToolAPI.get_history_data來取得證券相關貨交易相關等歷史資料,接下來我們就來說明TejToolAPI.get_history_data的parameters

TejToolAPI.get_history_data

ticker (iterable[str])

  • 用途:指定欲查詢的證券代碼。
  • 說明:支持多個代碼,例如 ["2330", "1101", "3711"],這邊也可以嘗試用看看上面我們教的選取股票池來決定我們需要的證券代碼喔。

columns (iterable[str])

  • 用途:指定欲查詢資料的欄位名稱。
  • 說明:欄位名稱可參考 TEJ 官方 API 文件。

transfer_to_chinese (boolean)

  • 用途:決定是否將欄位名稱轉換為中文。
  • 預設值False
  • 說明True 表示欄位名稱轉換為中文;False 則保持英文欄位名稱。

start (pd.Timestamp 或 str)

  • 用途:指定資料查詢的起始日期。
  • 格式"YYYY-MM-DD"pd.Timestamp("YYYY-MM-DD")
  • 說明:返回從 startend 時間範圍內的數據。

end (pd.Timestamp 或 str)

  • 用途:指定資料查詢的結束日期。
  • 格式"YYYY-MM-DD"pd.Timestamp("YYYY-MM-DD")
  • 說明:若未填寫,預設為執行日期。

fin_type (iterable[str])

  • 用途:設定資料型態。
  • 有效值
    • 'A':累積資料。
    • 'F':單季資料。
    • 'TTM':移動四季資料。
  • 說明:可同時選擇多個型態,例如 ["A", "TTM"]

include_self_acc (str)

  • 用途:決定是否包含自結與董事會決議數據。
  • 有效值
    • 'Y':包含自結財務與董事會決議數據。
    • 'N':僅包含投資用財務數據。
  • 預設值'N'
ticker = ["2330", "1101", "3711"]
columns = ["eps"]
TejToolAPI.get_history_data(
    ticker = ticker,
    columns = columns,
    transfer_to_chinese = True,
    start = pd.Timestamp("2021-07-02"),
    end = pd.Timestamp("2022-07-02"),
    fin_type = ["A", "Q", "TTM"],
    include_self_acc = "Y"
)
TEJToolAPI
數據圖表

透過 TejToolAPI,我們能輕鬆、高效地從 TEJ 資料庫中提取豐富的數據,包括財務指標、成長率以及其他多維度資料。這些數據不僅能幫助我們深入了解股票池中的每支股票,還能作為分析和策略設計的重要基石。

TejToolAPI 提供靈活的參數設置和全面的欄位選擇,讓我們能針對不同的投資需求進行精準查詢,並將數據快速整合到量化分析的流程中。

現在,您已經初步掌握了如何運用 TejToolAPI 獲取所需資料,我們也在相關連結附上更進階關於TejToolAPI的說明,未來只需結合這些數據進一步分析,便能為投資決策提供更強有力的支持。讓數據為您的投資策略賦能,迎接更加精準和高效的分析體驗!

歡迎投資朋友參考,之後也會持續介紹使用 TEJ 資料庫來建構各式指標,並回測指標績效,所以歡迎對各種交易回測有興趣的讀者,選購 TQuant Lab 的相關方案,用高品質的資料庫,建構出適合自己的交易策略。
溫馨提醒,本次分析僅供參考,不代表任何商品或投資上的建議。

【TQuant Lab 回測系統】解決你的量化金融痛點

全方位提供交易回測所需工具

下一篇 -【TQuant 從 0 到 1 – Day 4】(連結待補)

延伸閱讀

相關連結

返回總覽頁
Procesing