[TA-Lib] #6: 使用TA-Lib分析和計算MACD

MACD(移動平均收斂和散漫)是用於分析市場過去數據以預測未來價格走勢的方法之一。它廣泛地用於分析市場趨勢和動能。在本文中,我們將介紹使用"TA-Lib"計算MACD線、信號線和柱狀圖的過程。我們還將全面檢查如何使用MACD進行趨勢分析,以及確定超買/超賣條件的標準。您可以在[TA-Lib] #2: 技術分析的TA-Lib安裝中找到如何安裝TA-Lib,以及在[TA-Lib] #5 MACD - 如何理解 MACD 指標及其在市場趨勢中的角色中找到MACD的基本概念。

使用TA-Lib計算MACD線、信號線和柱狀圖

使用TA-Lib庫可以輕鬆地計算MACD(移動平均收斂和散漫)。

使用基本設定計算MACD

TA-Lib中的MACD默認公式涉及長期(通常為26天)指數移動平均(EMA)與短期(通常為12天)EMA之間的差異。信號線由此MACD線的9天EMA組成。柱狀圖作為MACD線和信號線之間的差異,用於評估市場的動能。

python
# 導入庫
from yahooquery import Ticker
import talib
import pandas as pd

# 獲取台積電(2330.TW)股票數據
google = Ticker('2330.TW')
df = google.history(period='2y')  # 2年數據

# 使用基本設定計算MACD
macd, signal, histogram = talib.MACD(df['close'])

# 將結果添加到DataFrame
df['macd'] = macd
df['signal'] = signal
df['histogram'] = histogram

# 打印結果
print(df.tail())
                               macd    signal  histogram
date                                                    
2023-08-18 08:00:00+08:00 -7.826629 -6.007324  -1.819306
2023-08-21 08:00:00+08:00 -8.168350 -6.439529  -1.728821
2023-08-22 08:00:00+08:00 -8.023905 -6.756404  -1.267501
2023-08-23 08:00:00+08:00 -6.941803 -6.793484  -0.148319
2023-08-24 11:57:31+08:00 -5.376716 -6.510130   1.133414

使用自定義設定計算MACD

如果您希望自定義移動平均的期間,可以調整TA-Lib的MACD函數中的fastperiodslowperiodsignalperiod參數。

python
# 使用自定義移動平均期間計算MACD
# 例如,將fast_period更改為10,slow_period更改為22:
macd_line_custom, signal_line_custom, histogram_custom = talib.MACD(df['close'], fastperiod=10, slowperiod=22)

# 將結果添加到DataFrame
df['macdCustom'] = macd_line_custom
df['signalCustom'] = signal_line_custom
df['histogramCustom'] = histogram_custom

# 打印結果
print(df.tail())
                           macdCustom  signalCustom  histogramCustom
date                                                                
2023-08-18 08:00:00+08:00   -7.955613     -6.539785        -1.415829
2023-08-21 08:00:00+08:00   -8.202992     -6.872426        -1.330566
2023-08-22 08:00:00+08:00   -7.878654     -7.073671        -0.804982
2023-08-23 08:00:00+08:00   -6.468320     -6.952601         0.484281
2023-08-24 11:57:31+08:00   -4.553591     -6.472799         1.919208

通過上述代碼,您可以通過調整每個移動平均的期間來適應各種市場條件和策略,執行MACD分析。

使用TA-Lib進行MACD分析

趨勢跟隨

辨識MACD線和信號線交叉點

MACD線和信號線之間的交叉被視為識別市場波動的重要信號。通過捕捉這些交叉點,您可以辨識趨勢變化的可能性,並相應地作出投資決策。

  • 黃金交叉:當MACD線從下方穿過信號線時會發生此現象。這一現象通常代表上升趨勢的開始,可以理解為購買的機會。
  • 死亡交叉:當MACD線從上方穿過信號線時會發生。這一信號可能表明下降趨勢的開始,可以視為賣出點。
python
import talib

macd, signal, _ = talib.MACD(df['close'])
df['macd'] = macd
df['signal'] = signal

df['upward'] = df['macd'] > df['signal']
df['downward'] = df['macd'] < df['signal']
df['goldenCross'] = (df['upward']) & (~df['upward'].shift(1).fillna(False))
df['deadCross'] = (df['downward']) & (~df['downward'].shift(1).fillna(False))

print('黃金交叉點:')
print(df[df['goldenCross']])

print('死亡交叉點:')
print(df[df['deadCross']])
黃金交叉點:
                           goldenCross  deadCross
date                                             
2021-10-15 08:00:00+08:00         True      False
...
2023-08-24 11:57:31+08:00         True      False


死亡交叉點:
                           goldenCross  deadCross
date                                             
2021-10-13 08:00:00+08:00        False       True
...
2023-07-18 08:00:00+08:00        False       True

使用柱狀圖大小分析趨勢

可以通過兩種重要方式,使用柱狀圖的大小進行趨勢分析:

  • 強勢趨勢:如果柱狀圖的大小逐漸增加,則表示當前趨勢(上升或下降)正在加強。這代表市場的強勢力量,可以增強投資策略的方向。
  • 趨勢削弱:如果大小正在減少,趨勢正在削弱,表明可能是調整頭寸的時候了。這暗示了需警惕趨勢的反轉並做出相應的反應。
python
macd, signal, histogram = talib.MACD(df['close'])
df['macd'] = macd
df['signal'] = signal
df['histogram'] = histogram

# 初始化趨勢欄位
df['strong_bull'] = False
df['strong_bear'] = False
df['weak_bull'] = False
df['weak_bear'] = False

consecutive_increase = 0
consecutive_decrease = 0
prev_hist_size = abs(df['histogram'][0])

for i in df.index:
    curr_hist_size = abs(df['histogram'][i])

    if curr_hist_size > prev_hist_size:
        consecutive_increase += 1
        consecutive_decrease = 0
    elif curr_hist_size < prev_hist_size:
        consecutive_decrease += 1
        consecutive_increase = 0

    if consecutive_increase >= 5:
        trend_col = 'strong_bull' if df['histogram'][i] > 0 else 'strong_bear'
        df.at[i, trend_col] = True
        consecutive_increase = 0

    if consecutive_decrease >= 5:
        trend_col = 'weak_bull' if df['histogram'][i] > 0 else 'weak_bear'
        df.at[i, trend_col] = True
        consecutive_decrease = 0

    prev_hist_size = curr_hist_size


print('強勢多頭趨勢的起始點:')
print(df[df['strong_bull']])

print('強勢空頭趨勢的起始點:')
print(df[df['strong_bear']])

print('弱勢多頭趨勢的起始點:')
print(df[df['weak_bull']])

print('弱勢空頭趨勢的起始點:')
print(df[df['weak_bear']])
強勢多頭趨勢的起始點:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2022-01-04 08:00:00+08:00         True        False      False      False
...
2023-05-22 08:00:00+08:00         True        False      False      False


強勢空頭趨勢的起始點:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2022-02-07 08:00:00+08:00        False         True      False      False
...
2023-07-24 08:00:00+08:00        False         True      False      False


弱勢多頭趨勢的起始點:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2021-10-29 08:00:00+08:00        False        False       True      False
...
2023-07-17 08:00:00+08:00        False        False       True      False


弱勢空頭趨勢的起始點:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2023-01-06 08:00:00+08:00        False        False      False       True
...
2023-08-21 08:00:00+08:00        False        False      False       True

這段代碼通過跟踪柱狀圖大小的五次或更多連續增加或減少,分析了趨勢。通過此方法,市場趨勢可以更精確地辨識,從而使策略調整更為精確。

買超/賣超

MACD可用來判定市場的買超和賣超狀況。透過分析MACD線與信號線之間的偏離度,或計算與零線的交叉點,可洞悉市場的現況。

MACD線與信號線之間的偏離度計算

MACD線與信號線之間的偏離度可視為兩線之間的距離,使我們能夠分析市場狀況。較大的距離可能表示市場過熱(買超),可能是賣出的機會。相反地,若距離較小,則可能表示市場賣超狀況,可能是購買的機會。

偏離度的判定標準可能因市場狀況和資產特性的不同而有所不同。在下方的程式碼示例中,如果當前的偏離度是過去30天最大偏離度的80%或更多,則認為兩條線相距過遠,被認為是賣出時機。相反地,如果當前的偏離度小於過去30天最小偏離度的120%,則認為兩條線過於接近,被認為是購買時機。

python
macd, signal, _ = talib.MACD(df['close'])
df['macd'] = macd
df['signal'] = signal

# 計算MACD線與信號線之間的偏離度。
df['divergence'] = df['macd'] - df['signal']

# 計算過去30天內的最大和最小偏離度。
df['max_divergence'] = df['divergence'].rolling(window=30).max()
df['min_divergence'] = df['divergence'].rolling(window=30).min()

# 賣出時機判定:當前偏離度是最大偏離度的80%或更多。
df['sell_signal'] = df['divergence'] >= df['max_divergence'] * 0.8

# 購買時機判定:當前偏離度小於最小偏離度的120%。
df['buy_signal'] = df['divergence'] <= df['min_divergence'] * 1.2

print('買超')
print(df[df['sell_signal']])

print('賣超')
print(df[df['buy_signal']])
買超
                           sell_signal  buy_signal
date                                              
2021-12-30 08:00:00+08:00         True       False
...                                ...         ...
2023-08-24 11:57:31+08:00         True       False


賣超
Empty DataFrame
Columns: [sell_signal, buy_signal]
Index: []

80%和120%是實驗性的值,可根據個人市場條件和策略進行調整。

零線交叉計算

當MACD線向上或向下穿越零線時,它可以是一個重要的交易信號。向上交叉可能表示購買機會,而向下交叉可能表示賣出機會。

python
# 計算零線交叉
df['cross_zero_line_up'] = (df['macd'] > 0) & (df['macd'].shift(1) <= 0)
df['cross_zero_line_down'] = (df['macd'] < 0) & (df['macd'].shift(1) >= 0)

print('向上穿越零線')
print(df[df['cross_zero_line_up']])

print('向下穿越零線')
print(df[df['cross_zero_line_down']])
向上穿越零線
                           cross_zero_line_up  cross_zero_line_down
date                                                               
2021-10-27 08:00:00+08:00                True                 False
...
2023-05-19 08:00:00+08:00                True                 False


向下穿越零線
                           cross_zero_line_up  cross_zero_line_down
date                                                               
2021-11-01 08:00:00+08:00               False                  True
...
2023-07-27 08:00:00+08:00               False                  True

MACD是趨勢和動量分析的優秀工具,是投資決策中的重要指標。通過本文,您已了解如何使用TA-Lib輕鬆計算和分析MACD,使您能針對各種市場情況和策略進行量身定制的分析,從而作出更精確的投資決策。


FAQs

  1. 我能否在TA-Lib的MACD功能中調整fastperiod、slowperiod和signalperiod以外的參數?
    • TA-Lib中的MACD功能通常允許調整這三個關鍵參數。除非在特殊情況下,通常不使用其他設置。
  2. 我應如何選擇用於MACD分析的期數?
    • MACD分析中使用的期數可能因策略和市場情況的不同而有所不同。常見的默認值是12、26和9天,但可以通過實驗找到特定市場或產品的最佳值。
  3. 我應如何解讀MACD柱狀圖為負的情況?
    • 如果MACD柱狀圖為負,表明MACD線低於信號線。這暗示了下跌趨勢的可能性更高,可以解讀為賣出信號。必須謹慎分析,因解讀可能因特定市場條件和策略而有所不同。
  4. 我如何使用yahooquery執行MACD分析?
  5. 如果我想在不安裝TA-Lib的情況下分析MACD,我應該怎麼辦?
    • 可以不使用TA-Lib計算MACD,儘管程式碼可能會變得更複雜。您可以直接使用Python中的Pandas等庫來實現。不過,建議安裝TA-Lib以享受其便利和高效。有關安裝信息,請參考[TA-Lib] #2: 技術分析的TA-Lib安裝
© Copyright 2023 CLONE CODING