PythonでMACDを計算する

MACD (Moving Average Convergence Divergence) | FX・証券取引のマネーパートナーズ -外為を誠実に-

このあたりを参考に、EMAはこんなかんじ。

def ema(l, t):
    result = []
    for p in l:
        i = len(result)
        if i < t: # t日目までは単純平均
            result += [float(sum(result) + p) / (i + 1)]
        else:
            last = result[-1]
            result += [last + 2. * (p - last) / (t + 1)]
    return result

あとは式通り。

ema12 = np.array(ema(prices, 12))
ema24 = np.array(ema(prices, 24))
macd = ema12 - ema24
signal = np.array(ema(macd, 9))

matplotlibで描画してみる。

x = np.arange(0, len(dates))
plt.figure(figsize=(150, 4)) # サイズは適当に調整
plt.xticks(x, dates[::-1])
plt.plot(x, macd)
plt.plot(x, signal)

ipython notebookとか使うと便利。