2025年11月15日 星期六

Python 學習筆記 : 技術分析套件 pandas-ta 用法 (二)

本篇旨在檢視 pandas-ta 套件內容, 以便對套件有一個概括的認識. 

本系列全部文章索引參考 :


我將 AI 提供的資訊摘要整理如下 :  


4. 用自訂模組 members 檢視 pandas-ta 內容 :  

我之前寫了一個用來檢視物件內容的自訂模組 members.py, 可用其中的 list_members() 函式來檢視 pandas-ta 套件有哪些成員, 參考 : 


匯入 members.list_members() 來檢視 pandas-ta 套件內容 :

>>> import pandas_ta as ta 
>>> from members import list_members   
>>> list_members(ta)  
ALL_PATTERNS <class 'list'>
AllStrategy <class 'pandas_ta.core.Strategy'>
AnalysisIndicators <class 'type'>
BasePandasObject <class 'type'>
CANGLE_AGG <class 'dict'>
CDL_PATTERN_NAMES <class 'list'>
Category <class 'dict'>
CommonStrategy <class 'pandas_ta.core.Strategy'>
DataFrame <class 'type'>
DistributionNotFound <class 'type'>
EXCHANGE_TZ <class 'dict'>
Imports <class 'dict'>
List <class 'typing._SpecialGenericAlias'>
Optional <class 'typing._SpecialForm'>
PandasObject <class 'type'>
Path <class 'type'>
Pool <class 'method'>
RATE <class 'dict'>
Series <class 'type'>
Strategy <class 'type'>
Timedelta <class 'type'>
Timestamp <class 'type'>
Tuple <class 'typing._TupleType'>
aberration <class 'function'>
above <class 'function'>
above_value <class 'function'>
accbands <class 'function'>
ad <class 'function'>
adosc <class 'function'>
adx <class 'function'>
alma <class 'function'>
alphavantage <class 'module'>
amat <class 'function'>
ao <class 'function'>
aobv <class 'function'>
apo <class 'function'>
argmax <class 'numpy._ArrayFunctionDispatcher'>
argmin <class 'numpy._ArrayFunctionDispatcher'>
aroon <class 'function'>
atr <class 'function'>
av <class 'function'>
bbands <class 'function'>
below <class 'function'>
below_value <class 'function'>
bias <class 'function'>
bop <class 'function'>
brar <class 'function'>
cagr <class 'function'>
calmar_ratio <class 'function'>
candle_color <class 'function'>
candles <class 'module'>
category_files <class 'function'>
cci <class 'function'>
cdl <class 'function'>
cdl_doji <class 'function'>
cdl_inside <class 'function'>
cdl_pattern <class 'function'>
cdl_z <class 'function'>
cfo <class 'function'>
cg <class 'function'>
chop <class 'function'>
cksp <class 'function'>
cmf <class 'function'>
cmo <class 'function'>
combination <class 'function'>
coppock <class 'function'>
core <class 'module'>
cpu_count <class 'method'>
cross <class 'function'>
cross_value <class 'function'>
cti <class 'function'>
cycles <class 'module'>
data <class 'module'>
dataclass <class 'function'>
datetime <class 'type'>
decay <class 'function'>
decreasing <class 'function'>
dema <class 'function'>
df <class 'pandas.core.frame.DataFrame'>
df_dates <class 'function'>
df_error_analysis <class 'function'>
df_month_to_date <class 'function'>
df_quarter_to_date <class 'function'>
df_year_to_date <class 'function'>
dm <class 'function'>
donchian <class 'function'>
downside_deviation <class 'function'>
dpo <class 'function'>
drawdown <class 'function'>
ebsw <class 'function'>
efi <class 'function'>
ema <class 'function'>
entropy <class 'function'>
eom <class 'function'>
er <class 'function'>
erf <class 'function'>
eri <class 'function'>
fibonacci <class 'function'>
field <class 'function'>
final_time <class 'function'>
find_spec <class 'function'>
fisher <class 'function'>
fwma <class 'function'>
geometric_mean <class 'function'>
get_distribution <class 'function'>
get_drift <class 'function'>
get_offset <class 'function'>
get_time <class 'function'>
ha <class 'function'>
here <class 'pathlib.WindowsPath'>
high_low_range <class 'function'>
hilo <class 'function'>
hl2 <class 'function'>
hlc3 <class 'function'>
hma <class 'function'>
hwc <class 'function'>
hwma <class 'function'>
ichimoku <class 'function'>
increasing <class 'function'>
inertia <class 'function'>
is_datetime64_any_dtype <class 'function'>
is_datetime_ordered <class 'function'>
is_percent <class 'function'>
jensens_alpha <class 'function'>
jma <class 'function'>
kama <class 'function'>
kc <class 'function'>
kdj <class 'function'>
kst <class 'function'>
kurtosis <class 'function'>
kvo <class 'function'>
linear_regression <class 'function'>
linreg <class 'function'>
localtime <class 'builtin_function_or_method'>
log_geometric_mean <class 'function'>
log_max_drawdown <class 'function'>
log_return <class 'function'>
long_run <class 'function'>
ma <class 'function'>
macd <class 'function'>
mad <class 'function'>
massi <class 'function'>
max_drawdown <class 'function'>
mcgd <class 'function'>
median <class 'function'>
mfi <class 'function'>
mfloor <class 'builtin_function_or_method'>
midpoint <class 'function'>
midprice <class 'function'>
mom <class 'function'>
momentum <class 'module'>
mtd <class 'function'>
mul <class 'builtin_function_or_method'>
name <class 'str'>
natr <class 'function'>
non_zero_range <class 'function'>
npAll <class 'numpy._ArrayFunctionDispatcher'>
npAppend <class 'numpy._ArrayFunctionDispatcher'>
npArray <class 'builtin_function_or_method'>
npCorrcoef <class 'numpy._ArrayFunctionDispatcher'>
npDot <class 'numpy._ArrayFunctionDispatcher'>
npExp <class 'numpy.ufunc'>
npFabs <class 'numpy.ufunc'>
npLog <class 'numpy.ufunc'>
npLog10 <class 'numpy.ufunc'>
npNaN <class 'float'>
npNdArray <class 'type'>
npNdarray <class 'type'>
npSqrt <class 'numpy.ufunc'>
npSum <class 'numpy._ArrayFunctionDispatcher'>
nvi <class 'function'>
obv <class 'function'>
ohlc4 <class 'function'>
ones <class 'function'>
optimal_leverage <class 'function'>
overlap <class 'module'>
pascals_triangle <class 'function'>
pd <class 'module'>
pdist <class 'function'>
percent_return <class 'function'>
perf_counter <class 'builtin_function_or_method'>
performance <class 'module'>
pgo <class 'function'>
ppo <class 'function'>
psar <class 'function'>
psl <class 'function'>
pure_profit_score <class 'function'>
pvi <class 'function'>
pvo <class 'function'>
pvol <class 'function'>
pvr <class 'function'>
pvt <class 'function'>
pwma <class 'function'>
qqe <class 'function'>
qstick <class 'function'>
qtd <class 'function'>
quantile <class 'function'>
re_ <class 'module'>
real_body <class 'function'>
recent_maximum_index <class 'function'>
recent_minimum_index <class 'function'>
reduce <class 'builtin_function_or_method'>
rma <class 'function'>
roc <class 'function'>
rsi <class 'function'>
rsx <class 'function'>
rvgi <class 'function'>
rvi <class 'function'>
seterr <class 'function'>
sflt <class 'sys.float_info'>
sharpe_ratio <class 'function'>
short_run <class 'function'>
signals <class 'function'>
signed_series <class 'function'>
simplefilter <class 'function'>
sinwma <class 'function'>
skew <class 'function'>
slope <class 'function'>
sma <class 'function'>
smi <class 'function'>
sortino_ratio <class 'function'>
squeeze <class 'function'>
squeeze_pro <class 'function'>
ssf <class 'function'>
statistics <class 'module'>
stc <class 'function'>
stdev <class 'function'>
stoch <class 'function'>
stochrsi <class 'function'>
supertrend <class 'function'>
swma <class 'function'>
symmetric_triangle <class 'function'>
t3 <class 'function'>
tal_ma <class 'function'>
td_seq <class 'function'>
tema <class 'function'>
thermo <class 'function'>
to_utc <class 'function'>
tos_stdevall <class 'function'>
total_time <class 'function'>
trend <class 'module'>
trima <class 'function'>
triu <class 'numpy._ArrayFunctionDispatcher'>
trix <class 'function'>
true_range <class 'function'>
tsi <class 'function'>
tsignals <class 'function'>
ttm_trend <class 'function'>
ui <class 'function'>
unsigned_differences <class 'function'>
uo <class 'function'>
utils <class 'module'>
variance <class 'function'>
verify_series <class 'function'>
version <class 'str'>
vhf <class 'function'>
vidya <class 'function'>
volatility <class 'function'>
volume <class 'module'>
vortex <class 'function'>
vp <class 'function'>
vwap <class 'function'>
vwma <class 'function'>
wcp <class 'function'>
weights <class 'function'>
willr <class 'function'>
wma <class 'function'>
xsignals <class 'function'>
yahoofinance <class 'module'>
yf <class 'function'>
ytd <class 'function'>
zero <class 'function'>
zlma <class 'function'>
zscore <class 'function'>

可見 pandas-ta 套件的內部核心架構由許多類別, 模組, 與函式組成, 其中絕大部分為技術指標函式 (約 90%), 其他為用來管理策略, 分類, 與擴充 pandas 物件等目的的類別與模組. 事實上, 使用者最常用到的類別只有 Strategy 而已 (CommonStrategy 類別r僅偶而會用到), 其他類別幾乎都是內部運作的基礎架構. 

整個套件架構可分為如下 10 大部分 :


(1). 核心類別 : 

pandas-ta 大部分的類別屬於內部使用, 開發者會用到的類別有三個 : 


常用類別 說明
Strategy 用來定義一組技術指標與其參數的策略物件(相當於配置表或指標群組模板)。可用來一次性套用多個指標到 DataFrame,例如同時產生 MACD、RSI 與布林通道等,並能設定每個指標的參數與輸出欄位名稱。
CommonStrategy pandas-ta 內建的一個預設策略,會載入一組常用且實務上常見的指標(例如 MACD、RSI、SMA/EMA、BBANDS 等)。方便快速取得常見指標集合,適合快速分析或測試。
AllStrategy 一個會嘗試產生(或註冊)套件內所有可用指標的預先定義策略。此策略會產生非常多欄位,計算量大且執行時間長,通常用於完整功能測試或探索,不建議在生產或大型資料集上直接執行。


(2). 技術指標函式 : 

這部分佔 pandas-ta 的 9 成以上, 是 pandas-ta 的主力, 這些函式實作了多達 200 種以上的技術指標, 是使用者最常用的 pandas-ta 函式, 分類如下表 : 


分類 技術指標函式
動能類 (Momentum)
<強弱、反轉、超買超賣>
rsi() 相對強弱指標 stoch() 隨機指標KD stochrsi() 隨機 RSI macd() 平滑異同移動平均線 ppo() 百分比價格震盪指標 roc() 變動率指標 mom() 動能指標 cmf() Chaikin 資金流量 cmo() Chande 動量振盪 pvo() 百分比成交量震盪 trix() 三重平滑指標 tsi() 真實強度指標 uo() 終極震盪指標 willr() Williams %R 指標 ao() Awesome Oscillator 極好震盪 bbands() 布林通道 ddx() Directional Deviation Index
趨勢類 (Trend)
<判斷漲跌多空>
sma() 簡單移動平均線 ema() 指數移動平均線 wma() 加權移動平均線 hma() Hull 移動平均線 zlma() Zero Lag 零延遲 MA kama() 考夫曼自適應 MA fwma() Friedman 加權 MA linreg() 線性回歸值 qstick() Qstick 趨勢指標 supertrend() 超級趨勢 adx() 平均方向指標 ADX aroon() Aroon 趨勢指標 psar() SAR 停損轉向點 ichimoku() 一目均衡表 vwma() 成交量加權 MA t3() 三次指數平滑 MA alma() ALMA 移動平均 vidya() Vidya 自適應移動平均
波動率類 (Volatility)
<風險大小、震盪價、格範圍>
atr() 真實波動幅度平均 natr() 標準化 ATR bbands() 布林通道 kc() Keltner 通道 donchian() 唐奇安通道 chop() Choppiness 指標 true_range() 真實區間
成交量類 (Volume)
<量價關係>
obv() 能量潮 aobv() 改良版能量潮 vwap() 量加權平均價 vpt() 成交量價格趨勢 pvi() 正量指標 nvi() 負量指標 mfi() 資金流量指標 adi() 累積/派發指標 cmf() Chaikin 資金流量 eom() Ease of Movement 移動容易指標 vzo() Volume Zone Oscillator pzo() Price Zone Oscillator vwap() 成交量加權均價
循環類 (Cycles) epf() Even Better Sine Wave ht_dcperiod() Hilbert Dominant Cycle Period ht_dcphase() Hilbert Phase ht_sine() 希爾伯特正弦波 ht_trendmode() 希爾伯特趨勢模式
價格轉換類 (Price Transform) log_return() 對數報酬 percent_return() 百分比回報 midprice() 中間價格 typical_price() 典型價格 weighted_close() 加權收盤價 median_price() 中位價格
統計類 (Statistics)
<統計與數學工具>
correlation() 相關係數 covariance() 協方差 zscore() Z 分數 entropy() 熵 skew() 偏度 kurtosis() 峰度 mad() 平均絕對偏差 stdev() 標準差 variance() 變異數
形態辨識類 (Patterns)
<K棒形態>
cdl_doji() 十字星 cdl_engulfing() 吞噬形態 cdl_hammer() 錘子線 cdl_shootingstar() 射擊之星 cdl_morningstar() 晨星 cdl_eveningstar() 暮星 cdl_hangingman() 吊人線 cdl_spinningtop() 旋轉陀螺 cdl_kicking() 蹴擊形態 (其餘 50+ 常見 K 線形態)
其他工具 (Utility) cross() 交叉偵測 signals() 訊號產生器 indicator_mixins() 指標混合工具 ta_summary() 指標摘要 (儀表板風格) squeeze() 布林 + Keltner 擠壓指標


其中 cross(), cross_value(), support(), resistance(), symmetrical_triangle(), combination() 等函式會產生交易訊號, 在量化投資中很常用. 


(3). 報酬與績效分析函式 : 

這部分的函式提供下列功能 :
  • 計算報酬率序列
  • 計算績效指標 (Sharpe, Sortino, MDD 等)
  • 做策略評估時的統計

函式名稱 說明
log_return() 對數報酬率(Log Returns),適合用於時間序列模型與連續報酬分析。
percent_return() 百分比報酬率(% Returns),即 (close - prev_close) / prev_close。
cumulative_return() 累積報酬率(Cumulative Returns),衡量長期投資報酬。
drawdown() 最大回撤(Drawdown),評估策略的風險與資金回落幅度。
max_drawdown() 最大歷史回撤(Maximum Drawdown),衡量策略可能的最大風險。
cagr() 年化成長率 CAGR(Compound Annual Growth Rate)。
sharpe() 夏普比率(Sharpe Ratio),衡量風險調整後報酬。
sortino() 索提諾比率(Sortino Ratio),只考慮下行風險的風險調整報酬指標。
calmar() Calmar Ratio(回報 / 最大回撤),回撤風險較嚴格的績效指標。
omega() Omega Ratio(收益機率 / 風險機率),風險報酬效率指標。


注意, 這些函式只是計算各種績效的結果而已, pandas-ta 缺乏紀錄交易, 倉位, 與回測引擎功能, 與 backtrader 那種具備回測引擎, 依據真實回測過程產生績效報告, 提供完整的交易模擬 + 紀錄的完整回測平台等級不同, pandas-ta 只能計算公式上的績效; 而 backtrader 則能計算交易後的真實績效. 


(4). 訊號類函式 (signal function) : 

這些函式不屬於策略導向工具 (技術指標函式則屬於數值工具), 其輸入為技術指標或價格序列的計算結果 (可複合多個指標), 輸出則是訊號序列, 通常是 0/1 或 True/False 或穿越點之數值, 主要用來判斷買入賣出訊號, 突破, 支撐, 或阻力等, 由於它們,生成交易訊號或模式觸發, 故可直接用於策略回測, 換言之, 訊號類函式的角色是把指標函式計算出來的數值結果轉換成可操作的訊號. 


函式名稱 說明
support() 由價格模式或高低點推算支撐位
resistance() 由價格模式或高低點推算阻力位
symmetrical_triangle() 三角收斂模式訊號,用於趨勢突破判斷
combination() 組合模式訊號,整合多個技術模式
cross() 穿越訊號,判斷兩序列交叉(如均線交叉)
cross_value() 穿越訊號,回傳交叉點的具體值



(5). 工具類函式 (utilities function) : 

這些工具函式主要用於數據處理與時間序列轉換等輔助功能, 這些函式收容於 pandas_ta.utils 子模組底下 :


函式名稱 說明
verify_series() 檢查並驗證輸入序列是否合法(數值型、無缺失值等)
is_datetime_ordered() 檢查時間序列是否按日期升序排列
is_datetime64_any_dtype() 檢查序列是否為 datetime64 類型
is_percent() 檢查序列是否為百分比數值(0~1 或 0~100)
get_time() 回傳當前時間(輔助函式)
to_utc() 將時間序列轉換為 UTC 時區
localtime() 回傳當前本地時間
cpu_count() 回傳可用 CPU 核心數,供多線程計算使用
Pool() 多線程 / 多進程計算的工具類別(加速指標計算)
here 回傳當前模組路徑,輔助檔案操作
sflt 浮點數精度設定與資訊


當匯入 pandas_ta 時, 它會自動為 DataFrame 添加一個 ta 屬性物件, 並且將所有指標相關函式放在此物件中, 其中 indicators() 方法會列出全部指標函式名稱, 例如 :

匯入 yfinance 與 pandas-ta 套件 : 

>>> import pandas as pd   
>>> import pandas_ta as ta   
>>> import yfinance as yf     

下載 yfinance 股票價量資料 : 

>>> df=yf.download('0050.TW', start='2024-11-06', end='2025-01-09', auto_adjust=False)   
[*********************100%***********************]  1 of 1 completed

呼叫 indicators() 方法 : 

>>> df.ta.indicators()   
Pandas TA - Technical Analysis Indicators - v0.3.14b0
Total Indicators & Utilities: 205
Abbreviations:
    aberration, above, above_value, accbands, ad, adosc, adx, alma, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_pattern, cdl_z, cfo, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, cti, decay, decreasing, dema, dm, donchian, dpo, ebsw, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hilo, hl2, hlc3, hma, hwc, hwma, ichimoku, increasing, inertia, jma, kama, kc, kdj, kst, kurtosis, kvo, linreg, log_return, long_run, macd, mad, massi, mcgd, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvr, pvt, pwma, qqe, qstick, quantile, rma, roc, rsi, rsx, rvgi, rvi, short_run, sinwma, skew, slope, sma, smi, squeeze, squeeze_pro, ssf, stc, stdev, stoch, stochrsi, supertrend, swma, t3, td_seq, tema, thermo, tos_stdevall, trima, trix, true_range, tsi, tsignals, ttm_trend, ui, uo, variance, vhf, vidya, vortex, vp, vwap, vwma, wcp, willr, wma, xsignals, zlma, zscore

Candle Patterns:
    2crows, 3blackcrows, 3inside, 3linestrike, 3outside, 3starsinsouth, 3whitesoldiers, abandonedbaby, advanceblock, belthold, breakaway, closingmarubozu, concealbabyswall, counterattack, darkcloudcover, doji, dojistar, dragonflydoji, engulfing, eveningdojistar, eveningstar, gapsidesidewhite, gravestonedoji, hammer, hangingman, harami, haramicross, highwave, hikkake, hikkakemod, homingpigeon, identical3crows, inneck, inside, invertedhammer, kicking, kickingbylength, ladderbottom, longleggeddoji, longline, marubozu, matchinglow, mathold, morningdojistar, morningstar, onneck, piercing, rickshawman, risefall3methods, separatinglines, shootingstar, shortline, spinningtop, stalledpattern, sticksandwich, takuri, tasukigap, thrusting, tristar, unique3river, upsidegap2crows, xsidegap3methods

"Abbreviations" 部分即技術指標函式; 而 "Candle Patterns" 部分則是 K 棒的型態函式, 參考 :


沒有留言 :