MACDの計算と表示は以下でもやっている。
これをpytiというライブラリを使ってやってみる。
コード
import pandas as pd
import datetime
import mplfinance as mpf
from pyti.moving_average_convergence_divergence import moving_average_convergence_divergence as macd_func
df = pd.read_csv('./temp_historical_data/USDJPY.csv', nrows=500)
df.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
# 5分足再計算
df5 = pd.DataFrame()
rule = '5T'
df5['Open'] = df['Open'].resample(rule).first()
df5['Close'] = df['Close'].resample(rule).last()
df5['High'] = df['High'].resample(rule).max()
df5['Low'] = df['Low'].resample(rule).min()
# MACD計算(本題)
macd = pd.DataFrame()
macd['Close'] = df5['Close']
data = macd['Close'].values.tolist()
macd['MACD'] = macd_func(data, 12, 26)
macd['Signal'] = macd['MACD'].ewm(span=9).mean()
macdplot = mpf.make_addplot(macd[['MACD', 'Signal']])
mpf.plot(df5, type='candle', addplot=[macdplot],
datetime_format='%Y/%m/%d %H:%M', xrotation=90, style='yahoo', savefig=dict(fname='./figures/draw_macd.png',dpi=100))
所感
残念ながらシグナルは計算してくれないのでそちらは従来通りの計算方法。pandasだけで使って計算するより2行くらい短くなった(白目)