MACD(移動平均収束拡散)は、市場の過去のデータを分析し、将来の価格動向を予測するために使用される方法の一つです。市場のトレンドとモメンタムの分析に幅広く利用されています。本稿では、"TA-Lib"を使用してMACDライン、シグナルライン、ヒストグラムの計算プロセスを紹介します。MACDを使用したトレンド分析、買い過ぎ/売り過ぎの判断基準についても詳しく検討します。TA-Libのインストール方法は[TA-Lib] #2: 技術的分析のためのTA-Libインストールで、MACDの基本概念は[TA-Lib] #5 MACD - MACD とは何か、指标としての役割の分析で確認できます。
MACD(移動平均収束拡散)の計算は、TA-Libライブラリを使用することで、容易に実行することができます。
TA-LibのMACDのデフォルトの式では、長期(通常26日間)の指数移動平均(EMA)と短期(通常12日間)のEMAとの差異が求められます。シグナルラインは、このMACDラインの9日間のEMAで構成されます。ヒストグラムはMACDラインとシグナルラインとの差であり、市場の勢いを評価するために使用されます。
# ライブラリのインポート
from yahooquery import Ticker
import talib
import pandas as pd
# トヨタ自動車株式会社 (7203.T) の株価データの取得
google = Ticker('7203.T')
df = google.history(period='2y') # 2年間のデータ
# 基本設定でのMACDの計算
macd_line, signal_line, histogram = talib.MACD(df['close'])
# DataFrameへの結果の追加
df['macd'] = macd_line
df['signal'] = signal_line
df['histogram'] = histogram
# 結果の印刷
print(df.tail())
macd signal histogram
date
2023-08-18 09:00:00+09:00 30.848448 44.090851 -13.242404
2023-08-21 09:00:00+09:00 26.079412 40.488564 -14.409151
2023-08-22 09:00:00+09:00 26.832112 37.757273 -10.925162
2023-08-23 09:00:00+09:00 26.637422 35.533303 -8.895881
2023-08-24 12:58:02+09:00 25.303834 33.487409 -8.183575
移動平均の期間をカスタム設定したい場合は、TA-LibのMACD関数のfastperiod
、slowperiod
、signalperiod
パラメーターを調整できます。
# カスタム移動平均期間での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 09:00:00+09:00 20.638677 35.780924 -15.142247
2023-08-21 09:00:00+09:00 15.803763 31.785492 -15.981729
2023-08-22 09:00:00+09:00 17.633748 28.955143 -11.321395
2023-08-23 09:00:00+09:00 18.152848 26.794684 -8.641837
2023-08-24 12:58:02+09:00 17.210154 24.877778 -7.667624
上記のコードを通じて、各移動平均の期間をさまざまな市場状況と戦略に合わせて調整することで、MACD分析を実行できます。
MACDラインとシグナルラインのクロスオーバーは、市場の変動を認識するための重要なシグナルとなります。これらのクロスオーバーを把握することで、トレンドの変化の可能性を見極め、投資判断を行うことができます。
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-18 09:00:00+09:00 True False
...
2023-07-31 09:00:00+09:00 True False
デッドクロス:
goldenCross deadCross
date
2021-10-12 09:00:00+09:00 False True
...
2023-08-14 09:00:00+09:00 False True
ヒストグラムのサイズを使用したトレンド分析は、次の2つの重要な方法で実施できます:
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-01-11 09:00:00+09:00 True False False False
...
2023-06-15 09:00:00+09:00 True False False False
強勢空頭趨勢的起始點:
strong_bull strong_bear weak_bull weak_bear
date
2022-02-17 09:00:00+09:00 False True False False
...
2023-08-18 09:00:00+09:00 False True False False
弱勢多頭趨勢的起始點:
strong_bull strong_bear weak_bull weak_bear
date
2021-11-25 09:00:00+09:00 False False True False
...
2023-08-09 09:00:00+09:00 False False True False
弱勢空頭趨勢的起始點:
strong_bull strong_bear weak_bull weak_bear
date
2021-12-07 09:00:00+09:00 False False False True
...
2023-07-21 09:00:00+09:00 False False False True
このコードは、ヒストグラムのサイズの5回以上の連続増減を追跡してトレンドを分析します。この方法に従うことで、市場のトレンドをより正確に見極め、戦略を正確に調整することが可能となります。
MACDは市場の買い過ぎと売り過ぎの状態を判断するために使用できます。MACDラインとシグナルラインとの間の乖離を分析したり、ゼロラインとの交差を計算したりすることで、市場の状態を見極めることができます。
MACDラインとシグナルラインの間の乖離は、両ライン間の距離として捉えることができ、市場の状態を分析するための基準となります。広い距離は市場が過熱している(買い過ぎ)ことを示す可能性があり、売却の機会を示唆するかもしれません。逆に、距離が狭い場合は、売り過ぎの市場状態を示し、買い付けの機会である可能性があります。
乖離の基準は市場の状況や資産の特性によって異なる場合があります。以下のコード例では、現在の乖離が過去30日間の最大乖離の80%以上であれば、二つのラインが離れすぎていると判断され、売却のタイミングとされます。逆に、現在の乖離が過去30日間の最小乖離の120%未満であれば、二つのラインが近すぎると判断され、買い付けのタイミングとされます。
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 09:00:00+09:00 True False
...
2023-08-02 09:00:00+09:00 True False
売り過ぎ
Empty DataFrame
Columns: [sell_signal, buy_signal]
Index: []
80%と120%は試験値であり、個別の市場状況と戦略に応じて調整することができます。
MACDラインが上向きまたは下向きにゼロラインを交差する場合、重要な取引のシグナルとなることがあります。上向きの交差は買い付けの機会を、下向きの交差は売却の機会を示すかもしれません。
# ゼロライン交差を計算する
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
2022-03-28 09:00:00+09:00 True False
...
2023-05-02 09:00:00+09:00 True False
ゼロラインを下向きに交差
cross_zero_line_up cross_zero_line_down
date
2022-02-15 09:00:00+09:00 False True
...
2023-04-06 09:00:00+09:00 False True
MACDは、投資判断に欠かせない指標として、トレンドとモメンタム分析に優れたツールです。この記事を通じて、TA-Libを使用してMACDを簡単に計算し分析する方法を学びました。これにより、様々な市場の状況と戦略に合わせた分析を行うことができ、より精確な投資判断が可能となります。
CloneCoding
1行のコードから始まる革新!