LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

この記事は「証券のリスクとリターンを計算するアプリケーションを作ろう」のヒストリカルデータ取得機能の詳細について記したものです。
ヒストリカルデータは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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0