【OANDA,TA-Lib】Pythonでチャートに移動平均線を引く

前回の記事ではとりあえずローソク足チャートを表示しました。

今回の記事では最も基本的なチャート分析である移動平均線を引いてみます。
完成したチャートは以下のようなグラフになります。

移動平均線とは

移動平均線とは以下の青線のような線のことで、チャートを滑らかにして、トレンドなどを分析できるテクニカル分析の1つです。


移動平均線の各点は、その点からn前までのデータの平均を表しています。例えば、上の図の赤丸で言えば、黒い区間の平均が赤丸の数値になります。

実装

では、移動平均線を引いていきましょう。

前提

前提として、OANDA APIが使えるようになっていて、ta-libがインストールされていることが前提となっています。

環境

まず、私の環境は

  • python 3.8
  • oandapyV20 : 0.6.3

です。

OANDA APIを使うための環境構築

今回はOANDA APIを使います。

OANDA APIを使うためにデモ、もしくは本番口座を作成して、アクセストークンを取得しておく必要があります。以下の記事を参考にしてください。

また、oandapyV20をpipでインストールしておく必要があります。pipで簡単にインストールできます。

pip install oandapyV20

TA-Libとは

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

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 = "********************************************"

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)

response = api.request(instruments_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

これでとりあえず前回と同様にローソク足のチャートがプロットできました。

移動平均線を引く

次に移動平均線を引いていきましょう。
簡単にpandas等を使えば移動平均の計算はできるのですが、今回はTA-Libというテクニカル分析のライブラリを用いて計算してみます。

TA-Libを使って移動平均線を引く

では、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)の移動平均を求めています。

あとは、以下のコードでチャートを表示します。

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

plt.show()

x軸を時間にするために、

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

をおこなっています。

ここまでのコードを実行すると以下のように出力されてるはずです。

全ソースコード

ソースコードの全体像を以下に示しておきます。

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


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

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

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

instrument = "USD_JPY"   # 通貨ペア

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

response = api.request(instruments_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

# 移動平均を計算する
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")

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

plt.show()

終わりに

今回は前回プロットしたチャートに移動平均線を描いてみました。
なんとなくチャート分析ができるようになった感じがします笑

次回の記事では機械学習のテクニックを使って為替の値予想をやっていこうと思います。

単純なディープラーニングで為替を予想する
タイトルとURLをコピーしました