Googleスプレッドシートで株価取得

プログラミング知識
スポンサーリンク

最近アメリカ株式指標に連動するETFが人気ですね。私も個別株式で200万円ほど損をしておりますが、懲りずにレバレッジのかかったETFを購入しております。( ´∀` )

資産管理をしたいのですが、なかなかいいアプリが見つかりません。しかもアメリカ株式なので、日本語対応しているものもほとんどないですね。ならば自分で作ってやろう!と思ったのですが、株価を無料で提供してくれているサイトがないですね。

スクレイピングを使えば取得できますが、スクレイピングには苦い思い出があるので、避けます。

で、調べてみるとGoogleのスプレッドシートで、Google Financeのデータを取得できました。Googleスプレッドシートで株価データを取得して、そこからアプリに流す方法がないかな?と考えました。

ということで、今回はGoogleスプレッドシートで株価データを取得する方法を紹介します。

基本構文

=GOOGLEFINANCE(銘柄, [属性], [開始日], [終了日|日数], [間隔])

スプレッドシートのセルにこの構文で記述すると銘柄の情報を取得できます。取得する情報は[属性]で指定します。例えば、Googleの最新の株価を取得したい場合は、

=GOOGLEFINANCE("NASDAQ:GOOG", "price")
Code language: JavaScript (javascript)

Amazonの直近30日の株価を取得したい場合は、

GOOGLEFINANCE("NASDAQ:AMZN", "price", TODAY()-30, TODAY(), "DAILY")
Code language: JavaScript (javascript)

銘柄の”NASDAQ:”というところは省略できます。上場市場を指定する場合は記述します。

基礎構文

GOOGLEFINANCE(銘柄, [属性], [開始日], [終了日|日数], [間隔])

GOOGLEFINANCE("NASDAQ:GOOG", "price", DATE(2020,1,1), DATE(2020,1,31), "DAILY")

属性

属性には次のものが使用できます。よく使用しそうな属性を太字にしています。

“price” – リアルタイムの見積価格。最大20分まで遅延する場合があります。
“priceopen” – 当日の始値。
“high” – 当日の高値。
“low” – 当日の安値。
“volume” – 当日の取引量。
“marketcap” – 株式の時価総額。
“tradetime” – 最終取引の時刻。
“datadelay” – リアルタイム データの遅延度。
“volumeavg” – 1 日の平均取引量。
“pe” – 株価収益率。
“eps” – 1 株当たりの収益。
“high52” – 52 週高値。
“low52” – 52 週安値。
“change” – 前取引日の終値からの株価の変動。
“beta” – ベータ値。
“changepct” – 前取引日の終値からの株価の変動率。
“closeyest” – 前日の終値。
“shares” – 発行済み株式数。
“currency” – 証券の販売通過。通貨には取引可能な期間の設定がないため、この引数に対しては open、low、high、volume が返されません。
“open” – 指定した日付の始値。
“close” – 指定した日付の終値。
“high” – 指定した日付の高値。
“low” – 指定した日付の安値。
“volume” – 指定した日付の取引量。
“all” – 上記のすべて。

“date” – 純資産価値が報告された日付。
“returnytd” – 年初からの収益。
“netassets” – 純資産。
“yieldpct” – 流通利回り(過去 12 か月の所得分布(株式配当や債権利息の支払いなど)と純資産価値の増分の和を前月の純資産価値の数値で割った値)。
“returnday” – 1 日の総収益。
“return1” – 1 週間の総収益。
“return4” – 4 週間の総収益。
“return13” – 13 週間の総収益。
“return52” – 52 週間(年間)の総収益。
“return156” – 156 週間(3 年間)の総収益。
“return260” – 260 週間(5 年間)の総収益。
“incomedividend” – 直近の現金分配額。
“incomedividenddate” – 直近の現金分配の日付。
“capitalgain” – 直近のキャピタルゲイン分配額。
“morningstarrating” – モーニングスターの「スター」評価。
“expenseratio” – ファンドの経費率。

ポートフォリオを作ってみる

スプレッドシート上でポートフォリオを確認できるようにしてみます。目指す表示はこんな感じ。

ティッカー

まずティッカーには対象銘柄のティッカーを入力します。Googleで「銘柄 株価」などで調べると株価チャートが出てきますが、その隣にティッカーが記載されています。

右上にティッカーがあります。

最新価格

続いて現価格は最新の株価を入力するので、

=GOOGLEFINANCE(B2, "price")
Code language: JavaScript (javascript)

前日比

前日比は属性に”changepct”を指定します。変動価格の場合は”change”、変動率の場合は”changepct”です。単位に%を付けておきます。

=GOOGLEFINANCE(B2,"changepct")&"%"
Code language: JavaScript (javascript)

前週比と前々週日

前週比は、前週金曜日の価格で最新価格を割って求めます。前週金曜の価格を求めるのが若干複雑です。

まず前週金曜日の日付を求めます。SEQUENCE(7,1,TODAY()-7)で先週 一週間の日付を行列で取得します。そして WEEKDAY(SEQUENCE(7,1,TODAY()-7)) で各日付の曜日を数値で取得します。金曜の場合は6になります。最後にFILTERで先週一週間の日付のうち、WEEKDAYが金曜日のものだけ取得します。

FILTER(SEQUENCE(7,1,TODAY()-7),WEEKDAY(SEQUENCE(7,1,TODAY()-7))=6))

これを使って株価を取得してみます。

=GOOGLEFINANCE(B2,"close",FILTER(SEQUENCE(7,1,TODAY()-7),WEEKDAY(SEQUENCE(7,1,TODAY()-7))=6))
Code language: JavaScript (javascript)

前週金曜の終値を取得できましたが、欲しいのは右下の価格だけで、日付やらタイトル行などが邪魔ですので、INDEXを使って排除します。INDEX(行列,2,2)とすると2行2列目だけを取得できます。

最後に現価格を割れば前週比を求められます。

=B3/INDEX(GOOGLEFINANCE(B2,"close",FILTER(SEQUENCE(7,1,TODAY()-7),WEEKDAY(SEQUENCE(7,1,TODAY()-7))=6)),2,2)-1
Code language: JavaScript (javascript)

同様にして、前々週日は次のようになります。

=INDEX(GOOGLEFINANCE(B2,"close",FILTER(SEQUENCE(7,1,TODAY()-7),WEEKDAY(SEQUENCE(7,1,TODAY()-7))=6)),2,2)/INDEX(GOOGLEFINANCE(B2,"close",FILTER(SEQUENCE(7,1,TODAY()-14),WEEKDAY(SEQUENCE(7,1,TODAY()-14))=6)),2,2)-1
Code language: JavaScript (javascript)

まとめ

最後に株の保有数を手動で入れて、株価とかけ合わせたものをグラフ化すると出来上がります。

無料でこれだけの情報を取得できるのは、さすがGoogleといったところでしょうか。これをスプレッドシート以外で使用する方法がないか調べてみます。

コメント

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