【Python】【テクニカル指標】GMMA(Guppy Multiple Moving Average)チャートを描画する

GMMA(Guppy Multiple Moving Average)チャートは、オーストラリアの投資家であるDaryl Guppy氏によって提唱されました。トレンド分析に有用で、指数平滑移動平均線(EMA)を一度に12本表示することで、メイントレンド(大局)とサブトレンド(目先)の関係をビジュアルに示してくれます。何日移動平均を使うのが良いのかといったパラメーターを個人投資家が悩まなくてもいいメリットがあると言われています。

長期投資家がどう見ているのか、短期投資家がどう見ているのかといった長期投資家と短期投資家の動きを長期群のEMAと短期群のEMAで比較考察できる大変すぐれたチャートであるようです。

大きく分類すると市場には短期売買で利益を上げる短期投資家と長期的視点で売買する長期投資家の2種類が存在します。短期投資家には、投機家、ディーラー、ヘッジファンドなどのプレイヤーが存在し、買ったらすぐに売り場を探し、売ったらすぐに買場を探します。したがって、短期投資家の買いは売り圧力となります。一方で、長期投資家には、投資家、機関投資家、実需筋などが存在し、買ったら長期間買いっぱなしです。したがって、長期投資家の買いは上昇力の基盤となります。

このような考えから、長期群EMAの方向、傾き、間隔短期群EMAの方向、傾き、間隔長期群と短期群EMAの関係性をビジュアルで把握することで、トレンドの強さやトレンド転換の可能性を判断しやすくなります。

ここでは株価データを取得し、mplfinanceを使用してローソク足チャートを描画し、ローソク足チャートにGMMAを追加ていきます。

なお、最低限のポイントのみの説明にするため、Pythonライブラリ、モジュール等のインストール方法については割愛させて頂きます。お使いのPC環境等に合わせてインストールしてもらえればと思います。




1.株価データを取得する

下記を参考にOHLCV(始値 / 高値 / 安値 / 終値 / 出来高)形式の日経平均株価(^NKX)データを取得します。データの取得期間は、2022年10月1日から現在の日付までです。
※stooqでデータ取得した場合、日付の降順にデータが並ぶようです。df.sort_index(inplace=True)で昇順に並び替えています。

import pandas_datareader.data as web
import datetime

start = '2022-10-01'
end = datetime.date.today()

df = web.DataReader('^NKX', 'stooq', start, end)

# 日付を昇順に並び替える
df.sort_index(inplace=True)

https://note.com/scilabcafe/n/n0060466ef5c3


2.ライブラリをインポートする

まず、mplfinance、talibをインポートします。mplfinanceを使用することで簡単にローソク足チャートを描画できます。また、Ta-Lib(Technical Analysis Library)を使用することでも指数平滑移動平均線(EMA)を算出することができます。Ta-Libはさまざまなテクニカル指標を計算するためのPythonのライブラリです。

import mplfinance as mpf
import talib as ta

https://note.com/scilabcafe/n/nd0719f248df0


3.短期群と長期群の指数平滑移動平均を算出する


GMMAは、以下の異なる期間の指数平滑移動平均線を使います:

①短期群EMA:
短期のトレンドを示すための移動平均線群であり、通常は3日、5日、8日、10日、12日、15日の移動平均線が含まれます。

②長期群EMA
長期のトレンドを示すための移動平均線群であり、通常は30日、35日、40日、45日、50日、60日の移動平均線が含まれます。

下記のコードでは、Ta-Lib(Technical Analysis Library)を使用して、短期群と長期群の指数平滑移動平均を算出しています。移動平均を算出する日数をtimeperiodで引渡します。

また、算出した移動平均値をdfのカラムに追加しています。

# 短期群EMAを計算してデータフレームに追加    
df['EMA_S3'] = ta.EMA(df['Close'], timeperiod=3)
df['EMA_S5'] = ta.EMA(df['Close'], timeperiod=5)
df['EMA_S8'] = ta.EMA(df['Close'], timeperiod=8)
df['EMA_S10'] = ta.EMA(df['Close'], timeperiod=10)
df['EMA_S12'] = ta.EMA(df['Close'], timeperiod=12)
df['EMA_S15'] = ta.EMA(df['Close'], timeperiod=15)

# 長期群EMAを計算してデータフレームに追加
df['EMA_L30'] = ta.EMA(df['Close'], timeperiod=30)
df['EMA_L35'] = ta.EMA(df['Close'], timeperiod=35)
df['EMA_L40'] = ta.EMA(df['Close'], timeperiod=40)
df['EMA_L45'] = ta.EMA(df['Close'], timeperiod=45)
df['EMA_L50'] = ta.EMA(df['Close'], timeperiod=50)
df['EMA_L60'] = ta.EMA(df['Close'], timeperiod=60)

追加したデータフレームdfを確認します。

df.head()

4.ローソク足チャートにGMMAを追加して描画する

3日、5日、8日、10日、12日、15日の短期のEMA、30日、35日、40日、45日、50日、60日の長期のEMAをaddplotで追加します。addplotの中には、リスト形式で表示したいデータを指定します。短期群EMAを赤色で、長期群EMAを青で描画するため、colorオプションでそれぞれの色を設定します。

  • panelオプションでパネル番号を指定

  • colorオプションでプロットの色を指定

  • widthオプションで描画の線の太さを設定

移動平均線は0番目のパネルに表示されます。

# スタイルを定義
my_style = mpf.make_mpf_style(
    base_mpf_style='binance',
    rc={
        'xtick.labelsize': 20,
        'ytick.labelsize': 20,
        'grid.alpha': 0.7,
    }
)


apd= [
    # GMMA(短期線)の各移動平均線   
    mpf.make_addplot(df['EMA_S3'], color='red', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_S5'], color='red', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_S8'], color='red', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_S10'], color='red', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_S12'], color='red', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_S15'], color='red', width=0.5, panel=0),

    # GMMA(長期線)の各移動平均線
    mpf.make_addplot(df['EMA_L30'], color='blue', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_L35'], color='blue', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_L40'], color='blue', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_L45'], color='blue', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_L50'], color='blue', width=0.5, panel=0),
    mpf.make_addplot(df['EMA_L60'], color='blue', width=0.5, panel=0),
]
    

# ラベルをつけてチャートを表示
fig, ax = mpf.plot(df, type='candle', volume=False, style=my_style, addplot=apd, title='GMMA chart',
                   returnfig=True, figsize=(12, 10), datetime_format='%Y/%m/%d', tight_layout=True)

    
# ラベルを追加
ax[0].legend(['EMA_S3', 'EMA_S5', 'EMA_S8','EMA_S10','EMA_S12','EMA_S15','EMA_L30','EMA_L35','EMA_L40','EMA_L45','EMA_L50','EMA_L60'])
    

# チャートを表示
fig.show()



ローソク足チャートの描画の参考

https://note.com/scilabcafe/n/nd0719f248df0

mplfinanceを使用してローソク足チャートにGMMAを追加し、異なる期間の移動平均線を組み合わせることでトレンドの強さや転換点を視覚的に表示しました。トレンドの強さや方向性の考察に関して補助的に利用でき、より詳細なテクニカル分析が可能になります。


この記事が気に入ったらサポートをしてみませんか?