PythonとTA-Libで指数移動平均線(EMA)を引く

今回は指数移動平均線をPythonとTA-Libを使ってプロットします。

指数移動平均とは

指数移動平均(EMA)は、指数関数的に各データの重みを減少させていく平均値です。

最初に得られたデータの重みを指数関数的に減少させていきます。

例えば、時刻\(t=0\)におけるデータの重みには以下のグラフのように減少していきます。

undefined
引用先:https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87

では、指数移動平均の更新式を見てみましょう。
時刻\(t \)における指数移動平均値\(EMA_{t}\)は以下のように計算できます。

$$\begin{aligned}
EMA _{t} = \alpha \times d_{t} + (1-\alpha) \times EMA _{t-1}
\end{aligned}$$

\(d \)は値段、\( \alpha \)が平滑化係数と呼ばれるパラメーターで、得られたデータの重みの度合いを決めています。

実装

今回は、チャートデータをOANDA APIから取得し、
TA-Lib(Technical Analysis Library)という
チャートを分析用のライブラリを使って指数移動平均を求めます。

実装する前に必要なデータとライブラリのインストール方法について紹介します。

使うデータ(OANDA API)

為替データ(チャート)はONADA APIを使って取得します。

OANDA APIからのデータの取得の仕方については以下のページで紹介しています。

為替データを取得する

今回はドル円の5分足のデータを使います。

TA-Lib

TA-Lib(Technical Analysis Library)は
チャートを分析用のライブラリで、様々なテクニカル分析を行うことができます。

インストール方法などは以下の記事を参考にしてください。

TA-LIBのインストール方法

ソースコード

では、実装していきましょう。

まず、必要なモジュール等をインポートします。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mpl_finance import candlestick_ohlc
import datetime
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
import talib

次にデータの取得とローソク足をプロットします。
今回はUSD/JPYの日足のデータを2000個取得します。
データの取得のためにはOANDA API のアクセストークンが必要になります。

access_token = "**************"

api = API(access_token=access_token, environment="live")

params = {
    "granularity": "D",  # 取得する足
    "count": 2000,         # 取得する足数
    "price": "B",        # Bid
}

instrument = "USD_JPY"   # 通貨ペア

instruments_candles = instruments.InstrumentsCandles(
    instrument=instrument, params=params)

api.request(instruments_candles)
response = instruments_candles.response

df = pd.DataFrame(response["candles"])

ohlc = []
for r in response["candles"]:
    time = r["time"].replace(".000000000Z", "")
    time = datetime.datetime.strptime(time, "%Y-%m-%dT%H:%M:%S")
    time = mdates.date2num(time)
    r["bid"]["time"] = time
    ohlc.append(r["bid"])

df = pd.DataFrame(ohlc)
df = df.astype(np.float64)

# ローソク足のチャートの表示
fig, ax = plt.subplots(figsize=(10, 5))
df = df[["time", "o", "h", "l", "c"]]
candlestick_ohlc(ax, df.values, width=.6, colorup="green", colordown="red")

ここまででチャートデータを取得できました。

では、TA-libを使って移動平均をもとめていきます。
指数移動平均は talib.EMA によって求めることができます。
さっそくソースコードを見てみます。

times = df["time"].values
# 指数移動平均を計算する
ema_25 = talib.EMA(df["c"].values, timeperiod=25)  # 25指数移動平均
ax.plot(times, ema_25, label="25")

ema_75 = talib.EMA(df["c"].values, timeperiod=75)  # 75指数移動平均
ax.plot(times, ema_75, label="75")

ema_200 = talib.EMA(df["c"].values, timeperiod=200)  # 200指数移動平均
ax.plot(times, ema_200, label="200")

talib.EMAの第一引数に時系列データ、第二引数に区間を指定します。
ここでは、短期(25)、中期(75)、長期(200)の移動平均を求めています。

あとは、グラフを表示します。

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

plt.legend()
plt.show()

x軸を時間にするために、 ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) を記述しています。

これまでのコードを実行すると以下のようなチャートがプロットされます。

終わりに

今回はTA-Libを使って指数移動平均を求めてプロットしました。

TA-Libを使えばかなり簡単に様々なテクニカル指標をプロットできるので助かります。

参考文献

タイトルとURLをコピーしました