[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

# 獲取腾讯(0700.HK)股票數據
google = Ticker('0700.HK')
df = google.history(period='2y')  # 2年数据

# 使用基本设置计算MACD
macd_line, signal_line, histogram = talib.MACD(df['close'])

# 将结果添加到数据框
df['macd'] = macd_line
df['signal'] = signal_line
df['histogram'] = histogram

# 打印结果
print(df.tail())
                               macd    signal  histogram
date                                                    
2023-08-18 08:00:00+08:00 -2.620188 -0.864660  -1.755528
2023-08-21 08:00:00+08:00 -3.733181 -1.438364  -2.294816
2023-08-22 08:00:00+08:00 -4.482868 -2.047265  -2.435603
2023-08-23 08:00:00+08:00 -5.098915 -2.657595  -2.441320
2023-08-24 11:59:59+08:00 -4.949106 -3.115897  -1.833209

使用自定义设置计算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)

# 将结果添加到数据框
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   -3.059867     -1.184855        -1.875011
2023-08-21 08:00:00+08:00   -4.267299     -1.801344        -2.465955
2023-08-22 08:00:00+08:00   -5.006964     -2.442468        -2.564496
2023-08-23 08:00:00+08:00   -5.575221     -3.069019        -2.506203
2023-08-24 11:59:59+08:00   -5.228578     -3.500931        -1.727648

通过以上代码,你可以通过调整每个移动平均线的周期来适应不同的市场条件和策略,从而执行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-12 08:00:00+08:00         True      False
...
2023-07-25 08:00:00+08:00         True      False


死叉点:
                           goldenCross  deadCross
date                                             
2021-10-29 08:00:00+08:00        False       True
...
2023-08-08 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['strong_bear']])

print('减弱的熊市趋势起点:')
print(df[df['weak_bear']])
强劲牛市趋势的起点:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2022-04-01 08:00:00+08:00         True        False      False      False
...
2023-08-01 08:00:00+08:00         True        False      False      False


强劲熊市趋势的起点:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2021-12-20 08:00:00+08:00        False         True      False      False
...
2023-04-24 08:00:00+08:00        False         True      False      False


减弱的牛市趋势起点:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2021-10-27 08:00:00+08:00        False        False       True      False
...
2023-04-11 08:00:00+08:00        False        False       True      False


减弱的熊市趋势起点:
                           strong_bull  strong_bear  weak_bull  weak_bear
date                                                                     
2021-11-24 08:00:00+08:00        False        False      False       True
...
2023-06-26 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                                              
2022-01-04 08:00:00+08:00         True       False
...
2023-06-19 08:00:00+08:00         True       False


超卖
                           sell_signal  buy_signal
date                                              
2022-12-15 08:00:00+08:00        False        True
2022-12-16 08:00:00+08:00        False        True
2022-12-19 08:00:00+08:00        False        True

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-18 08:00:00+08:00                True                 False
...
2023-07-27 08:00:00+08:00                True                 False


向下穿越零线
                           cross_zero_line_up  cross_zero_line_down
date                                                               
2021-11-03 08:00:00+08:00               False                  True
...
2023-08-14 08:00:00+08:00               False                  True

MACD是进行趋势和动量分析的卓越工具,在投资决策中起着关键的指示作用。通过本文,您已了解如何轻松使用TA-Lib计算和分析MACD,使您能够根据各种市场情况和策略进行定制分析,从而作出更精确的投资决策。


常见问题解答

  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