GoogleFinance で指定した2銘柄の相関係数を取得する

備忘録

Googleスプレッドシート+ GoogleFinance を使う際の便利なテクニックの備忘録です。

今回は GoogleFinance を使って、任意の2銘柄の相関係数を取得する計算式について説明します。

結論から先に言いますと、計算式を作ることはできましたが、非常に非効率でかつ計算に時間がかかる方法となっています。
なので取得はできるけど、要改良のやり方である点にご注意ください。

相関係数の計算方法

対象とするデータ

相関係数を計算するための対象データとしては、日足を使用します。
また、相関係数を求める対象の2銘柄で日足の日付が同じもののみを対象データとして扱います。
どういうことかというと、例えば銘柄Aが2010/4/1に上場し、銘柄Bが2015/4/1に上場としたとすると、両方の銘柄が存在する2015/4/1以降のデータを使用するということです。(当たり前ですね)

計算方法

相関係数を求める計算式はそれなりに難しいのですが、備え付けの関数の CORRELを使います。
超便利ですね。
使い方は公式を参照してください。といっても、超シンプルなので使い方に困ることはないと思います。

[結論]任意の2銘柄の相関係数を取得するインライン計算式

相関係数自体は CORREL 関数ですぐ求まるのですが、インラインで相関係数を算出しようとすると、途端に複雑になりました。

今回はまず結果から掲載し、後に解説とします。

以下の計算式で取得できます。

// A1 に銘柄Aのティッカーコードを、B1 に銘柄Bのティッカーコードを記載しているとします
=CORREL(index(query({index(GOOGLEFINANCE($A$1, "close", DATE(1970,1,1), TODAY()),,2),iferror(ARRAYFORMULA(VLOOKUP(index(GOOGLEFINANCE($A$1, "close", DATE(1970,1,1), TODAY()),,1),GOOGLEFINANCE($B$1, "close", DATE(1970,1,1), TODAY()),2,false)))}, "where Col2 is not null"),,1),index(query({index(GOOGLEFINANCE($A$1, "close", DATE(1970,1,1), TODAY()),,2),iferror(ARRAYFORMULA(VLOOKUP(index(GOOGLEFINANCE($A$1, "close", DATE(1970,1,1), TODAY()),,1),GOOGLEFINANCE($B$1, "close", DATE(1970,1,1), TODAY()),2,false)))}, "where Col2 is not null"),,2))

とりあえず取得はできますが、考えうるだけで以下の課題点があります。

  • CORREL 関数のとる2つの引数に、それぞれ同じような内容を書いているのがダサい
  • 計算に時間がかかる(内部で GOOGLEFINANCE 関数を6回もコールしているから?または、取得する株価データを最大にしているから?)

解説

※ 工事中です🤕

コメント

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