今回はPythonとテクニカル分析用のライブラリTA-LIBを使って加重移動平均をプロットしてみます。
加重移動平均とは
加重移動平均(WMA)は、各データの重みを徐々(線形的に) に減少させた平均値のことをいいます。
例えば、時刻\(t=0\)における各データの重みは以下のグラフのように減少していきます。
では、加重移動平均の更新式を見てみましょう。
区間\(n\)として、時刻\(t \)における指数移動平均値\(WMA_{t}\)は以下のように計算できます。
WMA _{t} = \frac{ n d_t +(n-1)d_{t-1}+(n-2)d_{t-2}+\cdots + 2d_{d-n+2} +d_{d-n+1}}{n+(n-1)+\cdots + 2+1}
\end{aligned}$$
\(d \)は値段です。
例えば、\(n=5\), \(t=10\)のときは
WMA _{10} = \frac{5 d_{10} +4d_{9}+3d_{8}+2d_{7}+ d_{6}}{5+4+3+2+1}
\end{aligned}$$
となります。
実装
今回は、データはOANDA APIから取得し、
TA-Lib(Technical Analysis Library)という
チャートを分析用のライブラリを使って指数移動平均を求めます。
実装する前に必要なデータとライブラリのインストール方法について紹介します。
使うデータ(OANDA API)
為替データ(チャート)はONADA APIを使って取得します。
OANDA APIからのデータの取得の仕方については以下のページで紹介しています。
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.WMA によって求めることができます。
さっそくソースコードを見てみます。
times = df["time"].values wma_25 = talib.WMA(df["c"].values, timeperiod=25) # 25日加重移動平均 ax.plot(times, wma_25, label="25") wma_75 = talib.WMA(df["c"].values, timeperiod=75) # 75日加重移動平均 ax.plot(times, wma_75, label="75") wma_200 = talib.WMA(df["c"].values, timeperiod=200) # 200日加重移動平均 ax.plot(times, wma_200, label="200")
talib.WMAの第一引数に時系列データ、第二引数に区間を指定します。
ここでは、短期(25)、中期(75)、長期(200)の加重移動平均を求めています。
あとは、グラフを表示します。
x軸を時間にするために、 ax.xaxis.set_major_formatter(mdates.DateFormatter(‘%Y-%m-%d’)) を記述しています。
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) plt.legend() plt.show()
上述したコードを実行すると以下のようなチャートがプロットされます。
終わりに
今回はTA-Libを使って加重移動平均を求めてプロットしました。
TA-Libを使えばかなり簡単に様々なテクニカル指標をプロットできるので助かります。
その他にも以下のページでFXをPythonや機械学習で攻略する試みをしていますので、ぜひご覧ください。
https://www.tcom242242.net/fx%e3%83%bb%e6%a0%aa%e9%96%a2%e9%80%a3/