バナナでもわかる話

計量経済学・統計学が専門の大学院生です。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

株取引には必須?Rのquantmodパッケージで簡単に株価データを取得する方法

今回はデータの取得方法に関する話です。
お恥ずかしい話なのですが、私はあまりウェブスクレイピングの類のやり方がわからなくてですね。

株価に関して何か分析する際は、いつもヤフーファイナンスにて全選択~コピー~Excelにペースト~みたいな地道なことをやってたわけなんですが。


圧倒的情弱でした笑


Rのパッケージにヤフーファイナンスから株価データを習得できるものがあったようで、それを使ったらなんと一発で株価取得が出来て、しかもそのパッケージで結構キレイめな図まで描けてしまうということで、是非使い方と合わせてシェアしておきます。

※quantmodパッケージに関しては結構色々なブログが説明してくれているのですが、正直どのサイトを見てもあまりうまく使いこなせていない様子でした。というのも、どのサイトも某本のコピペをしているだけなんですけど、正直実際に使おうとするとそのコピペじゃあ使える範囲が限られてきます。色々いじっているうちに使い方がわかったのでそれも踏まえて説明させていただきます。



quantmodパッケージ

というわけでRのquantmodパッケージの使い方を説明していきます。
とりあえずパッケージを取り込みます

install.packages("quantmod")
library(quantmod)

何やら為替データや人口データ等も取得できるみたいですが、とりあえず株価データしか用事がないのでとりあえず株に関する話に留めておきます。


株価データの取得

取得方法ですが、まず、知りたい企業が海外企業であればその企業のティッカーシンボルを、日本企業なら証券コードを調べてコピーしておいてください。
企業名+ティッカーシンボル(or証券コード)でググれば出てきます。



※某R用参考書は基本的に海外版ヤフーファイナンスからの株価取得を目標としているので、ティッカーシンボルを取ってくるよう書いてあり、その辺に転がっているブログも皆その本のコピペであるため、ティッカーシンボルからの説明しかしていませんが、これだと日本企業の株価を取ってくることが出来ません。

ちなみに今回はソフトバンクとLARSEN & TOUBROで試してみます。ソフトバンクの証券コードは9984で、LARSEN & TOUBROは海外の企業でティッカーシンボルはLT.NSです。



そんでR画面に戻ります。
まず日本企業であるソフトバンクの株価取得から。
getSymbols関数を使うと株価を取り込むことが出来ます。

getSymbols("9984",src="yahooj",from = "2016-01-01",to="2017-01-01")

と、入力します。コードの説明ですが、


まず、src引数でヤフージャパンのヤフーファイナンスページからデータを取ってくることを指示しています。
更にfromとtoでいつからいつまでのデータを取ってくるか指定します。


そうすると恐らくこんな感じになります。
f:id:bananarian:20180903195158p:plain

このYJ9984が株価を格納する変数に変わります。どういうことかというと、要はYJ9984と打ち込んでやると次の画像のように株価が出力されます。
f:id:bananarian:20180903195511p:plain


海外のヤフーファイナンスから取得する場合にはsrcを指定する必要はありません。

getSymbols("LT.NS")


取得した株価データをcsv形式で保存したい場合は次のようにすれば保存できます。

stock_data=as.data.frame(YJ9984)
write.csv(stock_data,"Softbank.csv")


良い感じですね。
f:id:bananarian:20180903200734p:plain


ちなみにデータの各列についての説明ですが、
左から始値("Open"),高値("High"),安値("Low"),終値("Close"),出来高("Volume"),調整後終値("Adjusted")
となっております。



可視化する

quantmodパッケージにはかなり高精度の可視化機能も含まれています。物は試しでcharSeries関数を使ってみます。

chartSeries(LT.NS, subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201316p:plain

結構キレイですよね?ちなみにaddBBandsでボリンジャーバンドも付けられます。

chartSeries(LT.NS, TA="addBBands(n=20)",subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201451p:plain

ボリンジャーバンドとは要は、もし上がったり下がったりしてもこのくらいの幅に値動きが収まるよーという指標です。


更にtype="bar"と加えるだけでローソク足も加わります。

chartSeries(LT.NS, TA="addBBands(n=20)",type="bar", subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903201833p:plain
まあ、ローソク足についてはもっと期間を短くしないと見にくいですね。
緑色が上昇でオレンジ色が下落です。


TA引数に複数追加したい場合は、;で区切ります。今回はMACDも追加してみました。

chartSeries(LT.NS, TA="addBBands(n=20);addMACD()",type="bar", subset="2013-12-01::2014-12-01")

f:id:bananarian:20180903202300p:plain


めっちゃキレイじゃないですか?すごいですねquantmodパッケージ。


注意

ついでに財務情報も取得できると言うことでやってみたのですが、次のようになりました。
f:id:bananarian:20180903202935p:plain

どうやら財務情報についてはグーグルファイナンスから取ってきてたっぽいんですが、今年から提供してくれなくなってしまったようです。残念。

財務情報もいちいちEDINET等からダウンロードしてくるのは面倒なので、もし簡単に取ってこれるのならありがたいんですけどねー。