Pythonでボリンジャーバンドを表示する

今回はPythonを使ってボリンジャーバンドを表示してみます。
結果的にプロットできるのは以下のような図になります。

ボリジャーバンド

前提:OANDA

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

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

OANDA APIを使うために、デモ口座か本番口座を作る必要があります。

以下の記事はOANDA Japanでデモ口座か本番口座を作ってから読んでください。

ボリンジャーバンドとは

指定した期間の値のばらつきを見るための指標です。

正規分布を基準として、平均からどれだけ離れているかを標準偏差\(\sigma\)という統計学的に算出された数値を使います。

\(\pm 1\sigma\)の間に収まる確率が68.2%、\(\pm 2\sigma\)に収まる確率が95.4%、 \(\pm 3\sigma\)に収まる確率が99%となる性質があります。

このような性質を利用して、\(\pm 2\sigma\)であったら、値が大きく動きすぎていると判断して逆方向に動くと予想することができます。

ソースコード

では、実装していきます。

ここでは、TA-Libというライブラリを使って実装します。

TA-Libのインストール方法は以下の記事にまとめました。

まず、必要なライブラリをimportします。

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

次にOANDA API V20を使って為替データを取得します。

ちなみにOANDA API V20を使って為替データを取得するコードの解説はこの記事を参考にしてください。

今回はUSD_JPYの1分足をつかいます。

access_token = "your access token"

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

params = {
    "granularity": "M1",  # 取得する足
    "count": 500,         # 取得する足数
    "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)

ここで、ボリンジャーバンドを計算して表示します。

ボリンジャーバンドはtalib.BBANDS メソッドを使って計算することができます。

引数のnbdevup, nbdevdnによって\(\pm \sigma\)の設定をしてます。今回は\(\pm 1 \sigma\),\(\pm 2 \sigma\)を表示します。

fig, ax = plt.subplots(figsize=(10, 5))

times = df["time"].values
close = df["c"].values

# ボリンジャーバンドの表示
upper, middle, lower = talib.BBANDS(close, timeperiod=10, nbdevup=1, nbdevdn=1, matype=0)
ax.plot(times, upper, color="b")
ax.plot(times, middle, color="r")
ax.plot(times, lower, color="b")

upper, middle, lower = talib.BBANDS(close, timeperiod=10, nbdevup=2, nbdevdn=2, matype=0)
ax.plot(times, upper, color="g")
ax.plot(times, lower, color="g")

ax.xaxis.set_visible(False)

plt.show()
ボリジャーバンド

とりあえず表示できました!まだいろいろ調べることはありそうですが、今回は表示できたので良しとします。

終わりに

今回はTA-Libを使ってボリジャーバンドを表示してみました。

TA-Libは様々なテクニカル分析を簡単に試せるのでほんとに便利です。

他のテクニカル分析も試してみたいと思います。

ちなみにボリンジャーバンドは今作っているアプリに追加しました。

https://www.tcom242242.net/entry/fx/my-fx-app/

参考文献

https://money-campus.net/archives/4246

https://mrjbq7.github.io/ta-lib/func_groups/overlap_studies.html

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