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

前回は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さんには感謝しかありません。

ちなみに本サイトでは、ニューラルネットワークで為替データの予測するプログラムの作成方法などをも紹介していますので、ぜひ見てみてください

参考文献

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

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