Pythonでローソク足チャートを表示する

前回はOANDA API V20 を使って為替のデータを取得しました。

OANDA API V20とPythonを使って為替データを取得する

今回は、OANDA APIで取得したデータを使ってローソク足のチャート
をmatplotlibでプロットしました。

OANDAとは

まずOANDAですが、OANDAはアメリカのFX会社です。
OANDA Japan

Pythonから使えるAPIを提供しているので、
PythonでFX関連のことをしようとする人はよく使うと思います。
今回はOANDAからデータを取得して、ローソク足チャートをプロットするので
oandaの口座を持っている人前提の記事になります。

APIを使うためにはOANDAでデモ口座を作る必要があります。
デモ口座を作るだけなら無料できます。


以下の記事にデモ口座の作り方をまとめました。

OANDA API V20とPythonを使って為替データを取得する

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

OANDA API V20をPythonから使えるライブラリとして、oandapyv20を今回は用います。

https://github.com/hootnot/oanda-api-v20

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

インストール方法

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

pip install oandapyV20
OANDA APIを使うためにアクセストークンが必要になります!
アクセストークンの取得については以下の記事で紹介していますので、先に取得してください。

アクセストークンの取得の仕方

実装(ソースコード)

準備

まずmpl_financeという足をプロットするためのライブラリをインストールします。

pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

以下からはPythonになります。
必要なライブラリをimportします。

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

OANDA APIを使ってデータの取得

Oanda Apiを使ってデータを取得し、DataFrameに変換します。
access_tokenは自分のものに変更してください。

access_token = <> 

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

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

上述したデータの取得部分に関しては以下の記事を参照してください。

OANDA API V20とPythonを使って為替データを取得する

次にデータの時刻の情報(time)を変換します。
データの形式を合わせるために少し手間を加えています。

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)

ローソク足チャートのプロット

では、ローソク足チャートをプロットします。
candlestick_ohlcメソッドを使うことでチャートを表示することができます。

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")
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.show()

ソースコードの全体像

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

access_token = <> 

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

params = {
    "granularity": "D",  # 取得する足
    "count": 50,         # 取得する足数
    "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")
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()

参考文献

https://www.techtrekking.com/how-to-plot-simple-and-candlestick-chart-using-python-pandas-matplotlib/

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