Rを使ってYahoo! Financeから最長過去20年間のヒストリカルデータを取得する


この記事は「証券のリスクとリターンを計算するアプリケーションを作ろう」のヒストリカルデータ取得機能の詳細について記したものです。
ヒストリカルデータはtidyquant v1.0.2ライブラリのtq_get()関数を使用するので、まずはこの関数の仕様を詳しく見ていきましょう。

tq_get()関数

公式ページのまんまですが、tq_get()関数は定量的データをTibble形式で取得する関数です。
使用法

tq_get()
tq_get(x, get = "stock.prices", complete_cases = TRUE, ...)
tq_get_options()

必須の引数がxで、ここにはヒストリカルデータを取得したい単一の文字列、単一(または複数)の銘柄記号、金属記号、通貨の組み合わせ、FREDコードなどを表す文字ベクトルまたはティッカーを入力します。
第2引数のgetは任意で入力します。使用法に記載の通り、デフォルトの値は"stock.prices"です。
ちなみに、配当のヒストリカルデータを取得するオプションは"dividends"ですが、"stock.prices"と同時に使うことはできません。一つずつ取ってくる必要がありますね。

さて、この記事の主題である取得期間は、デフォルトで10年前の1月1日から関数を実行した日のようです。
過去20年間のヒストリカルデータを取得するためには、以下の引数を入力する必要があります。

  • from:YYYY-MM-DD形式で開始日を表す文字列
  • to:YYYY-MM-DD形式で終了日を表す文字列

fromには20年前の年-01-01を、toには1年前の年-12-31を入力したいので、動的に年を入力する必要があります。

年の計算

年の計算にはDateオブジェクトPOSIXltオブジェクトを使用します。
以下のサイトを参考にしました。

20年前の年は以下のコードで取得します。

> as.POSIXlt(Sys.Date())$year + 1880
[1] 2001

同じようにして、1年前の年は以下のコードで取得します。

> as.POSIXlt(Sys.Date())$year + 1899
[1] 2020

あとは、paste()関数で日付と連結すれば準備完了です。

start_date <- paste(as.POSIXlt(Sys.Date())$year + 1880, "-01-01", sep = "")
end_date <- paste(as.POSIXlt(Sys.Date())$year + 1899, "-12-31", sep = "")

まとめ

ということで、tq_get()関数を使って最長過去20年間のヒストリカルデータを取得するコードは以下の通りです。

# パッケージのインストール
install.packages("tidyverse", repos = "http://cran.us.r-project.org", dependencies=TRUE)
install.packages("tidyquant", repos = "http://cran.us.r-project.org", dependencies=TRUE)

# コマンドライン引数の入力
args <- commandArgs(trailingOnly = TRUE)
x <- args[1]

# ライブラリのロード
library(tidyquant)
library(tidyverse)

# ヒストリカルデータを取得
start_date <- paste(as.POSIXlt(Sys.Date())$year + 1880, "-01-01", sep = "")
end_date <- paste(as.POSIXlt(Sys.Date())$year + 1899, "-12-31", sep = "")
tq_get(x, from = start_date, to = end_date)