本篇旨在測試 pandas-ta 套件的 CO (Chaikin Oscillator, 柴京震盪) 指標與 CMF (Chaikin Money Flow, 柴京資金流) 指標函式 ta.adosc() 與 ta.cmf().
本系列全部文章索引參考 :
10. 計算 CO (Chaikin Oscillator) 與 CMF (Chakin Money Flow) 指標 :
華爾街著名的技術分析師 Marc Chaikin 於 1960~1980 年代陸續發明了 A/D, CMF, 與 CO 等技術指標, 成為技術分析從價格導向轉向成交量導向的領航人物, 其核心理念為 "量先價行" (成交量領先於價格, volume precedes price), 認為在股價大幅波動之前, 通常會先看到主力資金的進出.
最早將成交量與價格漲跌結合的指標是 Joe Granville 於 1963 年提出的 OBV (能量潮) 指標, 但 OBV 只看當天收盤價是漲還是跌, 卻忽略了當天價格在 "日內波幅" 中的位置 (例如收盤價雖然是漲了, 但如果是收在當天最低點附近的話其實是弱勢). Marc Chaikin 看到了 OBV 的這個缺點, 便於 1966 年提出了 A/D 指標, 用來判斷市場是 "買盤吸收" 還是 "賣壓出貨".
但是 A/D 是一個累積性指標, 其值沒有固定的上下限, 可以無限增加或減少, 這使其難以進行標準化比較, 無法單憑 A/D 的數值來判斷當前的買盤壓力是強勁還是微弱. 而且 A/D 對短期的價格變化反應緩慢, 它只呈現資金總量是增加還是減少, 無法告訴我們資金流動的動能是否正在加速或減速.
Marc Chaikin 後來在 A/D 的基礎上提出了 CO 和 CMF 指標用來解決 A/D 指標的局限性, 他引入類似 MACD 的概念, 將 A/D 進行快速與慢速 EMA 差分 (3 日 EMA 減去 10 日 EMA), 提出了 Chaikin Oscillator (CO) 指標, 解決 A/D 缺乏短期動能信號問題, 透過背離可以提前捕捉趨勢的反轉, 從而預測價格趨勢的轉折, 成為一個領先的動能指標.
另外 Marc Chaikin 還設計了 Chaikin Money Flow (CMF) 指標, 透過將資金流動成交量除以總成交量使 CMF 數值被限制在 +1 到 -1 之間, 解決了 A/D 缺乏標準化與壓力強度衡量的問題, 讓交易者可以設定閾值 (如 +0.25 或 -0.25) 輕鬆判斷機構資金流向的持續性和強勁度. 注意, CMF 並非累加, 而是在固定期間 (例如 20 天或 21 天) 計算資金流入/流出比例, 可用來觀察趨勢轉折和背離.
不過他提出 CO 和 CMF 的原因並不是要否定 A/D 的價值, 而是將 A/D 的原始資料進行二次加工, 使其具備動能分析 (CO) 和強度分析 (CMF) 的功能, 從而形成一個更全面更具實戰意義的資金流分析體系. 簡言之, A/D 用來計算累積資金流動的總量; CMF 用來測量資金流動的強度 (有界區間震盪指標); 而 CO 則是用來測量 A/D 累積總量的動能 (無界震盪指標).
CMF 是基於 A/D 加權的流動資金比率, 反映資金在一段期間內的進出強弱, 公式如下 :
先計算出 MFM :
MFM = ((Close − Low) − (High − Close)) / (High − Low)
= ((Close − Low) / (High − Low) × 2 − 1)
再計算 CMF :
CMF(n) = (∑(MFM × Volume) 過去 n 根) / (∑ Volume 過去 n 根)
CO 為 A/D 指標的 MACD 化振盪版本, 先定義兩條 A/D 移動平均線, 再比較短期與長期 A/D 平滑趨勢差異 :
先計算 A/D 值 :
A/D = ∑ (MFM × Volume)
再計算 A/D 的長短期 EMA 後求其差分 :
EMA_s = A/D 的短期 EMA (通常 s = 3)
EMA_l = A/D 的長期 EMA (通常 l = 10)
CHO = EMA_s(A/D) − EMA_l(A/D)
pandas-ta 套件提供 ta.adosc() 與 ta.cmf() 函式分別計算 CO 與 CMF 指標, 傳回值均為 Series 物件. 下面程式碼利用 yfinance 取得台股 0050 價量資料來計算 CO 與 CMF 指標, 並於 K 線圖的副圖中分別繪製這兩條曲線 :
# pandas-ta-co-cmf.py
import yfinance as yf
import pandas_ta as ta
from kbar import KBar
#=========================
# 下載資料
#=========================
df=yf.download('0050.TW', start='2024-11-06', end='2025-01-09', auto_adjust=False)
df.columns=df.columns.map(lambda x: x[0]) # 欄位單層化
#=========================
# 計算 Chaikin Oscillator(CO)
# pandas-ta 預設 fast=3 day, slow=10 day
#=========================
df['CO']=ta.adosc(
high=df['High'],
low=df['Low'],
close=df['Close'],
volume=df['Volume']
)
#=========================
# 計算 Chaikin Money Flow(CMF)
# pandas-ta 預設 length=20 天
#=========================
df['CMF']=ta.cmf(
high=df['High'],
low=df['Low'],
close=df['Close'],
volume=df['Volume']
)
#=========================
# 建 KBar + 繪圖設定
#=========================
kb=KBar(df)
# Panel 2 ➜ CO(類似 A/D 的 MACD)
kb.addplot(df['CO'], panel=2, color='darkorange', width=1.2, ylabel='CO')
# Panel 3 ➜ CMF(判斷資金多空比)
# 設顏色:>0 用綠、<0 用紅
cmf_colors=['g' if v >= 0 else 'r' for v in df['CMF']]
kb.addplot(df['CMF'], panel=3, type='bar', color=cmf_colors,
alpha=0.4, ylabel='CMF')
#=========================
# 畫圖
#=========================
kb.plot(
volume=True, # Panel 1=Volume
mav=(5, 10), # K線主圖疊 5 & 10 MA
title='K 線圖與 CO, CMF 指標'
)
結果如下 :
從觀察 CO 和 CMF 曲線變化可知 :
- 早期確認信號 :
12 月上旬時 CO 率先穿越零軸, 發出動能轉強訊號; 隨後 CMF 轉正, 確認累積強度, 證明價格上漲是健康的. - 後期警示信號 :
2025 年初雖然價格創下新高, 但 CMF 迅速轉負 (表示強度不足), 且 CO 動能快速衰退並轉負 (速度減慢), 兩者同時發出強烈的資金背離警訊, 提示交易者應警惕潛在的回調風險.
總之, CMF 的核心意義反映某期間多空資金佔比強弱, 表示趨勢偏向多或空; 而 CO 則顯示資金動能是加速或減速, 可用來抓轉折訊號.
CO 指標的核心在於測量 A/D 線的資金流動動能而非價格動能, 因此它常被視為一個領先指標 (Leading Indicator), 用於提前預測趨勢的轉折. CO 的用法如下 :
- 從 0 軸穿越確認趨勢方向 :
當 CO 穿越 0 軸由負轉正, 表示買盤動能開始主導, 確認上漲趨勢或反彈, 適合順勢做多; 當 CO 由正轉負表示賣盤動能開始主導, 確認下跌趨勢或回調, 適合減倉或做空. - 從動能背離預測反轉轉折 :
價格創新低但 CO 未創新低, 表示資金流出動能已減弱, 預示底部即將反轉, 這是高勝率的買入信號; 當價格創新高但CO 未創新高, 表示資金流入動能已衰竭, 預示頂部即將反轉, 這是高勝率的賣出信號. - 從極值與回歸評估市場情緒 :
當 CO 達高點後回落, 表示資金累積動能達到極致, 須需警惕市場超買或動能放緩; 當 CO 達低點後回升, 表示資金派發動能達到極致, 須警惕市場超賣或動能轉強, 要觀察是否出現零軸穿越.
CO 被認為是最高品質的反轉訊號之一, 當價格創下新高, 但 CO 卻創下更低的波峰, 這不僅是價格動能減弱, 更是實質的機構投資人資金流入動能減弱. 當價格上漲中卻出現 CO 背離, 通常意味著主力資金已經停止追捧或正在派發 (抽離資金).

沒有留言 :
張貼留言