今回は指数移動平均線をPythonとTA-Libを使ってプロットします。
指数移動平均とは
指数移動平均(EMA)は、指数関数的に各データの重みを減少させていく平均値です。
最初に得られたデータの重みを指数関数的に減少させていきます。
例えば、時刻\(t=0\)におけるデータの重みには以下のグラフのように減少していきます。
引用先:https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87
では、指数移動平均の更新式を見てみましょう。
時刻\(t \)における指数移動平均値\(EMA_{t}\)は以下のように計算できます。
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)は
チャートを分析用のライブラリで、様々なテクニカル分析を行うことができます。
インストール方法などは以下の記事を参考にしてください。
ソースコード
では、実装していきましょう。
まず、必要なモジュール等をインポートします。
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を使えばかなり簡単に様々なテクニカル指標をプロットできるので助かります。