どうも、たぬきねこです。
今回はKu-Chartを実装したので、紹介しようと思います。
ちなみに本記事では、OANDA APIを使いますので、APIのアクセストークンを取得できるようにしてください。
Ku-Chartとは?
ここでは、簡単にしか紹介しませんが、
Ku-Chartは、通貨毎の強弱をグラフ化したものです。
基本的には、各通貨がの価格がどのように変化したかで強さを計算します
例えば、ユーロの強さはユーロドルとユーロ円の対数変化率を使うと以下のように近似的に表現できます。
- ユーロの強さ = ユーロドルの対数変化率+ユーロ円の対数変化率
- ドルの強さ = ユーロドルの対数変化率 + ドル円の対数変化率
ドルの場合にはユーロドルに-1を欠けて反転させてあげれば使えます。
詳細に関しては後日また別途記事にまとめようと思います。
実装
今回は円、ドル、ユーロ、ポンド、オージーを使ってKu-Chartを作ってしまおうと思います。
GitHubにもあげておきます。
では、実装していきます。
まずは今回使うモジュールをimportしておきます。
import matplotlib.pyplot as plt
import numpy as np
from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
from scipy.stats import rankdata
いつも通りOANDA APIを使って終値を取得する関数を書きます。
def get_close_list(instrument="USD_JPY"):
api = API(
access_token="********",
environment="live") # or practice
params = {
"granularity": "M5",
"count": 50,
"price": "B",
}
instruments_candles = instruments.InstrumentsCandles(
instrument=instrument, params=params)
api.request(instruments_candles)
response = instruments_candles.response
close_list = np.array([x["bid"]["c"] for x in response["candles"]])
close_list = close_list.astype(np.float64)
return close_list
access_tokenはご自身のtokenをお使いください。最初にも出しましたが、access_tokenの取得の仕方は以下の記事を参照してください。
この関数では基本的に、OANDA APIにリクエストして、終値を取得するだけです。今回はドル円の5分足のデータを取得しています。
次に先程作った関数で終値を取得して、対数変化率を計算して返す関数を作ります。
def get_logarithmic_change_rate(instrument):
"""
instrumentの終値を取得し、その終値の対数変化率を計算
"""
close_list = get_close_list(instrument)
logarithmic_change_rate = np.log(close_list/close_list[0])
return logarithmic_change_rate
ここでは、基準の値を終値の最初の値として、そこからの変化率を求めて使います。
最後に今まで作った関数を使ってKu-Chartを作っていきます。
まずは各通貨の変化率を取得します。
# 各通貨ごとの対数変化率を取得する
# ユーロシリーズ
eurusd = get_logarithmic_change_rate("EUR_USD")
eurjpy = get_logarithmic_change_rate("EUR_JPY")
euraud = get_logarithmic_change_rate("EUR_AUD")
eurgbp = get_logarithmic_change_rate("EUR_GBP")
# ドルシリーズ
usdjpy = get_logarithmic_change_rate("USD_JPY")
audusd = get_logarithmic_change_rate("AUD_USD")
gbpusd = get_logarithmic_change_rate("GBP_USD")
# ポンドシリーズ
gbpjpy = get_logarithmic_change_rate("GBP_JPY")
gbpaud = get_logarithmic_change_rate("GBP_AUD")
# オージーシリーズ
audjpy = get_logarithmic_change_rate("AUD_JPY")
取得した各通貨の強さを最初に言った方法で計算します。
# ku-chartの計算
ku_aud = (euraud * (-1)) + audusd + (gbpaud * (-1)) + audjpy
ku_eur = euraud + eurusd + eurgbp + eurjpy
ku_gbp = (eurgbp * (-1)) + gbpusd + gbpjpy + gbpaud
ku_jpy = eurjpy * (-1) + (gbpjpy * (-1)) +(audjpy * (-1)) + (usdjpy * (-1))
ku_usd = (eurusd * (-1)) + (audusd * (-1)) + (gbpusd * (-1)) + usdjpy
最後にプロットします。
# ku-chartを表示する
fig, ax = plt.subplots()
x = np.arange(len(ku_aud))
ax.plot(x, ku_aud, label="aud")
ax.plot(x, ku_eur, label="eur")
ax.plot(x, ku_gbp, label="gbp")
ax.plot(x, ku_jpy, label="jpy")
ax.plot(x, ku_usd, label="usd")
ax.legend()
plt.savefig("ku-chart.png")
plt.show()
すると、以下のようなチャートが表示されます。
終わりに
今回はKu-chartを実装したので、紹介してみました。
早く実装しよう、しようと思いながらなかなかできなかったので、良かったです。
では、