【TA-Lib,FX】Pythonで為替データの移動平均線を表示する

今回はTA-Libというライブラリを使って、移動平均線をプロットしてみました。
作成する図は以下のような図になります。

基礎事項

移動平均(復習)

まず移動平均について復習しておきます。

移動平均は直近の\(n\)間の値の平均値です。
例えば時刻\(t\)においての直近\(n\)の移動平均\(a_t\)は、

$$\begin{aligned}
a_t = \frac{d_{t}+d_{t-1}+\cdots + d_{t-n}}{n}
\end{aligned}$$

で求められます。
ちなみに、\(d_t\)は時刻\(t\)のデータ(価格)を表しています。

チャートの各時間から\(n\)分前の移動平均をプロットしていくことで、チャートのトレンドを把握することができます。

OANDA API

本記事ではOANDA APIからデータをとってきてプロットします。

ちなみに、OANDAはFX会社です。
Pythonからも使えるAPIを提供してくれているので、非常に便利です。


OANDA APIを使うために、最低でもデモ口座を作る必要があります。
デモ口座の作り方は以下の記事で説明したので、参考にしてデモ口座を作ってAPIを使えるようにしておいてください。

OANDA APIのアクセストークンの取得方法

PythonからOANDA API V20を使えるライブラリ(oandapyV20)

今回はOANDA API V20をPythonから使えるライブラリoandapyv20を使っていきます。

公式のライブラリより使いやすく、よく使われています。

インストール方法

では、さっそくインストールしてみます。
PyPIでインストールできます。

pip install oandapyV20

TA-Lib

今回は、TA-Lib(Technical Analysis Library)という
マーケットの情報を分析するためのライブラリを使って移動平均を求めます。

TA-Libでは、移動平均以外にも様々なテクニカル分析をすることができます。
今後の記事で紹介していきます!

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

TA-Libのインストール方法については以下の記事で紹介しています。

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 = "your access_token"

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

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")

times = df["time"].values

もろもろ、データを成形しています。
解説は後日追記していきます。

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

# 移動平均を計算する
sma_25 = talib.SMA(df["c"].values, 25)  # 25移動平均
ax.plot(times, sma_25, label="25")

sma_75 = talib.SMA(df["c"].values, 75)  # 75移動平均
ax.plot(times, sma_75, label="75")

sma_200 = talib.SMA(df["c"].values, 200)    # 200移動平均
ax.plot(times, sma_200, label="200")

talib.SMAの第一引数に時系列データ、第二引数に区間を指定します。
ここでは、短期(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()

終わりに

今回はPythonで移動平均線を表示してみました。

TA-libを使うと移動平均を簡単に求められるので便利ですね。

TA-libには他にもテクニカルな指標を簡単に計算できるので、今後使っていきます。

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