ATR 指標是什麼?
ATR 指標(Average True Range,平均真實區間)是衡量一段期間內價格波動幅度的指標。它把每日的真實波動(True Range)做指數移動平均後,得到一條反映「這檔股票最近震得有多大」的數值,數字越大代表波動越劇烈。要特別留意的是,ATR 只描述波動的大小,不指出價格未來會往上還是往下。在程式交易裡,它常被用來依股性設定停損停利距離,或當作通道指標的頻寬。完整公式與用 Python 計算的步驟,見下方的 ATR定義 一節,也可參考程式交易是什麼的整體脈絡。
肯特納通道(Keltner Channel)是什麼?
肯特納通道(Keltner Channel)是以移動平均線為中軸、上下用 ATR 的倍數畫出通道的趨勢指標。中軸通常取 EMA,上下軌則是中軸加減某個倍數的 ATR,因此通道寬度會隨波動放大或收斂。它和布林通道的思路相近,差別在於肯特納通道用 ATR 當波動頻寬、用 EMA 當中線,相對標準差更穩定,較適合用來判斷趨勢與抱波段。本文後段會用 finlab 套件實際畫出通道並回測一個突破策略。
ATR定義
ATR指標全名為Average True Range(真實價格區間),指的是股價真實的波動幅度。
其算法是先計算每天的TR(True Range),再以EMA(指數移動平均)之方式計算N日TR平均值以取得ATR。 TR的算法如下:TRt = max((Ht – Lt),abs(Ct-1 – Ht), abs(Ct-1 – Lt)) 算法取下列三個數的絕對值中的最大值:
- 當日高低價之差額
- 前日收盤與當日最高價之差額
- 前日收盤與當日最低價之差額
第一點考量當日的波動。第2和第3點的數值將"跳空缺口"的概念考量在內,而不會有只看單一K棒的盲點,反映一個價格序列的真實最大波動。以EMA計算ATR,將TR做趨勢平滑,讓指標不易有暴起暴落的雜訊,也能較SMA (簡單移動平均)更能反應近日價格因子。
ATR如何解讀與使用
ATR指標的重點在只反映波動性,而不指出未來價格方向。須與價格趨勢一起搭配解讀波動動能。
- ATR指標和價格趨勢同步向上,代表向上波動加強,價格甩高機會變大。
- ATR指標和價格趨勢同步向下,代表向下波動加強,價格急跌機會變大。
- ATR指標向下,價格趨勢向上,代表向上動能漸弱,價格高檔震盪走向整理機會變大。
- ATR指標向上,價格趨勢向下,代表向下動能漸弱,價格急跌後出現反彈整理機會變大。
我們可以用finlab套件裡的繪圖程式功能畫出ATR技術指標。 以近期飆股6104創惟來舉例ATR與股價的關係,可見ATR方向與股價不一定趨勢同向:
顯示程式碼
from finlab import data
from finlab.plot import plot_tw_stock_candles
from finlab.data import indicator
overlay_func={
'ema_10':indicator('EMA',timeperiod=10),
'keltner_up':indicator('EMA',timeperiod=10)+2*indicator('ATR',timeperiod=10),
'keltner_down':indicator('EMA',timeperiod=10)-2*indicator('ATR',timeperiod=10),
}
technical_func={
'atr_10':indicator('ATR',timeperiod=10),
'atr_20':indicator('ATR',timeperiod=20)
}
plot_tw_stock_candles('6104',overlay_func=overlay_func,technical_func=technical_func)
股價波動率
ATR主要應用在停損停利設定與結合通道理論來操作。 每一檔股票的價格曲線當能藉ATR/股價 (波動率) 反應股性,高波動率的股票代表高波動震盪是常態,適合當作短線或當沖的標的,低波動率的股票適合不喜承受短線劇烈波動或尋找逐底期進場的投資人。把 ATR 換算成波動率後拿來選股的做法,在台股 ATR 波動率指標解析有更完整的範例。
6104短線波動率大,適合當作短線標的。
6263波動率小,不適合短線操作。
停損停利
停損停利改用ATR作為標準,能避免用固定的單一數值統一出場造成的粗糙結果。 例如整個策略統一用10%當停損點,但大波動的股票可能上下動動20%是常態,用10%當停損點會常被洗出場。若改用均線下2倍或其他倍數的ATR來出場,就能依照每支股票波動性設定不同的出場點,做更細膩的出場設定,降低被洗出的可能。想進一步用回測數據檢驗停損距離該設多遠,可參考MAE / MFE 分析與停損停利設定。
肯特納通道(Keltner Channel)
通道模型利用過去一段時間內的價格訊息,繪製出上下軌的通道,藉此設定股價的相對高、低界線,兩條通道線的距離也呈現股價的震盪幅度,震盪小時,通道窄,震盪大時,通道寬。通道模型將價格高低與波度幅度融合,成為判斷市場趨勢的指標,能過濾均線系統中假突破的訊號。 常見的通道模型為"布林通道"用股價的標準差當作波動頻寬,肯特納通道的概念也非常類似,主要差異在使用ATR當作波動頻寬,並使用EMA當中間線。
肯特納通道 V.S. 布林通道
2倍標準差的布林通道與2倍ATR的肯特納通道比較
由上面的比較圖可知,布林通道 (bband) 的缺點在標準差 (std) 收斂和發散快,數值跳動很大,在剛股價剛往上突破、通道剛開始發散時,為明顯訊號,但上軌不適合當趨勢線,由於數值發散快,只要股價動能稍弱,就很容易會跌破上軌,不適合作為抱波段或中途切入的指標。
ATR的波動則相較"標準差"穩定,數值不會太急速跳動,更適合當作抱長波段的指標,減低大飆股太早被洗出場的可能。布林通道標準差的概念可能較適合做逆勢策略,抓價格過高或過低的反轉點。
肯特納通道策略範例
策略條件
- 限定上市櫃普通股股票。
- 收盤價位剛站上肯特納上軌通道為買進條件。
- 收盤價位於肯特納上軌通道之上為持有條件,位於之下則賣出。
- EMA均線多頭排列。
- 換股頻率為兩週(短線)。
- 排除日均成交量過小標地。
顯示程式碼
from finlab.backtest import sim
from finlab import data
data.set_universe(market='TSE_OTC')
adj_close = data.get('etl:adj_close').loc['2012':]
ema_5=data.indicator('EMA', adjust_price=True, resample='D',timeperiod=5)
ema_10=data.indicator('EMA', adjust_price=True, resample='D',timeperiod=10)
ema_20=data.indicator('EMA', adjust_price=True, resample='D',timeperiod=20)
atr=data.indicator('ATR', adjust_price=True, resample='D',timeperiod=10)
keltner_up=ema_10+2*atr
vol=data.get('price:成交股數')/1000
vol_avg=vol.average(20)
cond1 = (adj_close > keltner_up) & (adj_close.shift() < keltner_up.shift())
cond2 = (ema_5 > ema_10) & (ema_10 > ema_20)
cond3 = vol_avg > 100
entries = cond1 & cond2 & cond3
exits = adj_close < keltner_up
position = entries.hold_until(exits,nstocks_limit=20, rank=vol_avg)
rr=sim(position,resample='2W',position_limit=0.05)回測結果
效果普通,多頭年份較強。可能要搭配其他指標應用。

結合二次創高策略
融合hahow課程中的二次創高策略,將收盤價位於肯特納上軌通道之上為持有條件,位於之下則賣出,換股頻率改為2週。更加確認股價突破強度。

常見問題(FAQ)
ATR 指標怎麼計算?
ATR 的計算先求每天的真實波動 TR,再對 TR 取 N 日的指數移動平均。TR 取三個數值的最大值:當日高低價之差、前日收盤與當日最高價之差的絕對值、前日收盤與當日最低價之差的絕對值,第二與第三項把跳空缺口也納入考量。用 EMA 而非 SMA 來平滑,能讓指標較不易被單日暴衝的雜訊干擾,也較能反映近日的波動。實務上不必手刻公式,用 finlab 套件的 indicator('ATR', timeperiod=10) 一行就能算出,計算原理也可對照用 Python 計算 158 種常見技術指標。
ATR 可以用來做什麼?
ATR 最常見的兩個用途是設定停損停利與當作通道指標的頻寬。因為它反映的是每檔股票自己的波動股性,用 ATR 的倍數來設出場點,比所有股票統一用固定百分比更細膩,能降低大波動股票太早被洗出場的機會。把 ATR 除以股價換算成波動率,也可以用來區分適合短線或波段操作的標的。要提醒的是 ATR 只描述波動大小,不指出方向,需搭配價格趨勢一起解讀。
肯特納通道的參數怎麼設?
肯特納通道有兩個主要參數:中軸 EMA 的週期,以及上下軌使用的 ATR 倍數。本文範例用 EMA 10 當中軸、ATR 的 2 倍當上下軌寬度,倍數越大通道越寬、訊號越少但越不易被假突破洗出。週期短、倍數小會讓通道更敏感、進出更頻繁,適合短線;週期長、倍數大則偏向抱波段。參數沒有絕對最佳解,建議用回測在自己的選股池上比較不同組合。
肯特納通道和布林通道差在哪?
兩者結構類似,都是中線加上下軌構成的通道,差別在波動頻寬的算法。布林通道用價格的標準差,肯特納通道用 ATR,且中線通常取 EMA。標準差收斂與發散較快、數值跳動大,股價動能稍弱就容易跌破上軌,較適合抓過高過低的逆勢反轉;ATR 相對穩定、不易急速跳動,上軌更適合當趨勢線抱長波段。本文中段附有兩者疊在同一張圖上的比較。
風險提示
免責聲明:本文所有策略與回測結果僅供教學與研究用途,不構成投資建議。過去績效不代表未來表現。投資一定有風險,請審慎評估自身風險承受能力。
檔案分享
Reference
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始
