最近アメリカ株式指標に連動する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といったところでしょうか。これをスプレッドシート以外で使用する方法がないか調べてみます。
コメント