前回はOANDA API V20 を使って為替のデータを取得しました。
今回は、OANDA APIで取得したデータを使ってローソク足のチャート
をmatplotlibでプロットしました。
前提
環境
まず、私の環境は
- python 3.8
- oandapyV20 : 0.6.3
です。
OANDA APIを使うための環境構築
今回はOANDA APIを使います。
OANDA APIを使うためにデモ、もしくは本番口座を作成して、アクセストークンを取得しておく必要があります。以下の記事を参考にしてください。
また、oandapyV20をpipでインストールしておく必要があります。pipで簡単にインストールできます。
pip install oandapyV20
ローソク足を表示するためのライブラリのインストール
まずmpl_financeという足をプロットするためのライブラリをインストールします。
pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
実装(ソースコード)
今回のコードで使うモジュールを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 = "b613ed58fa1ad123bd87d8bf80a5dc3a-45cd3f0c61c2b69b427b0777ed213b8d"
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)
response = api.request(instruments_candles)
上述したデータの取得部分に関しては以下の記事を参照してください。
次にデータの時刻の情報(time)を変換します。
データの形式を合わせるために少し手間を加えています。説明についてはコメント等を参照してください。
# データの成形
ohlc = []
for r in response["candles"]:
time = r["time"].replace(".000000000Z", "") # 必要のない部分の削除
time = datetime.datetime.strptime(time, "%Y-%m-%dT%H:%M:%S") # datetimeに変換
time = mdates.date2num(time) # 数値に変換
r["bid"]["time"] = time
ohlc.append(r["bid"])
df = pd.DataFrame(ohlc)
df = df.astype(np.float64)
ローソク足チャートのプロット
では、ローソク足チャートをプロットします。
まず、表示するデータをチャートを表示するライブラリ用に合わせて変換します。
df = df[["time", "o", "h", "l", "c"]] # データの入れ替え
candlestick_ohlcメソッドを使って表示します。
# ローソク足のチャートの表示
fig, ax = plt.subplots(figsize=(10, 5))
candlestick_ohlc(ax, df.values, width=.6, colorup="green", colordown="red") # ローソク足チャートの描画
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()
また、ax.xaxis.set_major_formatterを使って、数値データを文字列の日付に変換しています。
ここまでのコードを実行すると以下のようにチャートがプロットされます
ソースコードの全体像
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)
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") # datetimeに変換
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()
終わりに
OANDA APIをPythonから使って、ローソク足チャートを表示する方法を紹介しました。
相変わらずOANDA APIは便利で助かります。
OANDAさんには感謝しかありません。
ちなみに本サイトでは、ニューラルネットワークで為替データの予測するプログラムの作成方法などをも紹介していますので、ぜひ見てみてください