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回もコールしているから?または、取得する株価データを最大にしているから?)
解説
※ 工事中です🤕
コメント