【Python, FX】Ku-Chart実装してみた

どうも、たぬきねこです。

今回は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を実装したので、紹介してみました。

早く実装しよう、しようと思いながらなかなかできなかったので、良かったです。

では、

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