chartを表示するmatplotlib.financeについてのメモ

chartを表示するためにmatplotlib.financeを使います。

チャートを表示用のメソッドはいくつかあります。

基本的な使い方

※OANDA APIを使うことを想定しています。

とりあえずチャートを表示するコード

times
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": 200,         # 取得する足数
    "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, colorup="green", colordown="red")

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

plt.show()

メモ

週をまたぐ時足や分足を表示する時

上述したコードでプロットすると、時足で週末をまたぐと以下のようにおかしくなります。

fig, ax = plt.subplots(figsize=(10, 5))
df = df[["time", "o", "h", "l", "c"]]
candlestick_ohlc(ax, df.values, colorup="green", colordown="red")

このような時の暫定策(最善策ではありません)として、時間を単純な整数にしてしまいます。

fig, ax = plt.subplots(figsize=(10, 5))
df = df[["time", "o", "h", "l", "c"]]
df["time"] = np.arange(len(df["time"].values))  # new
candlestick_ohlc(ax, df.values, colorup="green", colordown="red")

その他のメソッド

candlestick2_ochl

candlestick2_ohlc

candlestick_ochl

参考

https://matplotlib.org/api/finance_api.html
タイトルとURLをコピーしました