【R】quantmodでファイナンスデータを取得

ファイナンスデータの取得・分析に強いquantmodのget系関数でできることをを挙げます。

toyota <- getSymbols("7203",src="yahooj",auto.assign=FALSE)

参考:
www.dmjtmj-stock.com

getSymbols.yahooj()を使って
getSymbols('7203.T',src='yahooj')でも可能ですね。

トヨタの10年間の4本値

YJ7203.Open YJ7203.High YJ7203.Low YJ7203.Close YJ7203.Volume YJ7203.Adjusted
2007-01-04 8110 8140 8060 8090 6986200 8090
2007-01-05 8100 8100 7860 7900 10876000 7900
2007-01-09 7900 7930 7810 7870 9750900 7870
2007-01-10 7890 7890 7660 7690 11632000 7690
2007-01-11 7750 7790 7630 7660 10417100 7660
2007-01-12 7740 7840 7720 7820 11302500 7820


getFX("USD/JPY")

過去半年間の為替レートが取得できます。

USD.JPY
2017-03-01 113.4712
2017-03-02 114.1899
2017-03-03 114.3148
2017-03-04 114.0033
2017-03-05 114.0050
2017-03-06 113.8457

getDividends("IBM", from = "1970-01-01", to = Sys.Date())

1970-01-01からのIBMの配当データが取得できます。
東証の株価データの取得については分かりませんでした。。

getFin('NASDAQ:AAPL')
viewFin(NASDAQ.AAPL.f, "CF", "A")

4半期分のファイナンスデータが取得できます。
Google Financeから取得しているとのことですが、
こちらも東証については取得方法がわからず…

2016-09-24
Net Income/Starting Line 45687
Depreciation/Depletion 10505
Amortization NA
Deferred Taxes 4938
Non-Cash Items 4210
Changes in Working Capital 484
Cash from Operating Activities 65824
Capital Expenditures -13548
Other Investing Cash Flow Items, Total -32429
Cash from Investing Activities -45977
Financing Cash Flow Items -1163
Total Cash Dividends Paid -12150
Issuance (Retirement) of Stock, Net -29227
Issuance (Retirement) of Debt, Net 22057
Cash from Financing Activities -20483
Foreign Exchange Effects NA
Net Change in Cash -636
Cash Interest Paid, Supplemental 1316
Cash Taxes Paid, Supplemental 10444
2015-09-26
Net Income/Starting Line 53394
Depreciation/Depletion 11257
Amortization NA
Deferred Taxes 1382
Non-Cash Items 3586
Changes in Working Capital 11647
Cash from Operating Activities 81266
Capital Expenditures -11488
Other Investing Cash Flow Items, Total -44786
Cash from Investing Activities -56274
Financing Cash Flow Items -750
Total Cash Dividends Paid -11561
Issuance (Retirement) of Stock, Net -34710
Issuance (Retirement) of Debt, Net 29305
Cash from Financing Activities -17716
Foreign Exchange Effects NA
Net Change in Cash 7276
Cash Interest Paid, Supplemental 514
Cash Taxes Paid, Supplemental 13252

getMetals("gold")

金/ドル相場
https://www.oanda.com/lang/ja/
から取得します。

getOptionChain()

secwords.com
だそうです。

getQuate()

現在の株価を取得できます。
今日は日曜日なので試してないです。

getSymbols.csv
getSymbols.FRED
getSymbols.google
getSymbols.MySQL
getSymbols.oanda
getSymbols.rda
getSymbols.SQLite
getSymbols.yahoo

その他ソースを指定して取得する関数たち

【R】SQLiteと連携

sqliteのDBへのデータ入出力についてです。

まず、sqlite本体からデータベースを作成して見ます。

https://sqlite.org/index.html
download→Precompiled Binaries for Windowssqlite-tools-win32-x86-3190300.zi
作業フォルダに解答。
コマンドプロンプトを起動→作業フォルダに移動

database1をデータベースとして作成し、
日次でドル円レートを入れるFXテーブルを作成
カラムは日付、始値、高値、安値、終値とする。

sqlite database1
CREATE TABLE FX(date,open,high,low,close);
.exit

rから接続してみます。

install.packages("RSQLite")
library("RSQLite")
con = dbConnect(SQLite(), "database1", synchronous="off")
dbListTables(con)#テーブル"FX"が取得できる

マネースクエアジャパンが同じ形式のデータを公開していますので、
こちらの、csvファイルをダウンロードして入れてみます。
[ヒストリカルデータ | マーケット情報(FX) | FX - マネースクウェア・ジャパン(M2J)]
http://www.m2j.co.jp/market/historical.php
ドル円日足ファイルcsvをダウンロード

usdjpy <- read.csv("USDJPY.csv",header=T)
sql <- paste("insert into FX values('",usdjpy[1,1],"',",usdjpy[1,2],",",usdjpy[1,3],",",usdjpy[1,4],",",usdjpy[1,5],");",sep="")
#"insert into FX values('2007/04/02',117.84,118.08,117.46,117.84);"
dbSendQuery(con,sql)

これで一行目を入力できました。

dbGetQuery(con,"select * from FX")
dbReadTable(con,"FX")

で、今insertしたデータを確認できます。
dbReadTableは、テーブル名でアクセスができるのでSQLを発行する必要がありません。
この作業をループで全行に行えば全てのデータがinsertできますが、
データフレーム全てを入力できる便利な関数があります。

dbWriteTable(con, "USDJPY", usdjpy)
#新たに"USDJPY"テーブルを作成して、データフレームusdjpyを一括挿入できる

最後は、切断します。

dbDisconnect(con)#切断

【R】optionsでの設定一覧

options関数で様々なオプションを設定・確認できます
確認する場合は以下のコマンドを使用します。

options()
getOptions("option名")

設定する場合は、options(オプション名=設定値)で行います。
設定できるオプションについて以下にまとめました。

$add.smooth
[1] FALSE
→単回帰分析のグラフを滑らかにするオプション

$askpass
→options()askpass("enter your password!")を実行すると
ポップアップでパスワードの入力画面を作成できる

$browserNLdisabled
[1] FALSE
→ブラウザの改行を"n"として扱うか

$check.bounds
[1] FALSE

x <- 1:3
x[5] <- 6
TRUEにすると、上のような実行をした時に、warningが出る。代入自体はできる。

$continue
[1] "+ "
> cat("コンソールで

  1. 途中改行した場合表示される文字")

$defaultPackages
[1] "datasets" "utils" "grDevices" "graphics" "stats" "methods"
→デフォルトのパッケージ一覧

$digits
[1] 7
→数値の表示を7桁

$download.file.method
[1] "wininet"
→ファイルをダウンロードする方法
"internal", "wininet","libcurl", "wget" and "curl", が選べる

$editor
→options()$editor("vi")などの指定で、edit()で起動する
editorを指定できる

$encoding
→options()$encoding("encode")で、インプットアウトプットの
エンコードを指定する。デフォルトは、native.encであり、変換を行わない

$help.try.all.packages
[1] FALSE
→help("packages")で検索する際に、全てのパッケージから検索できる
help("packages", try.all.packages=TRUE) によっても可能

$max.print
[1] 1000
→最大の表示件数

$nwarnings
[1] 50
→warn=0のとき、保存しておくエラーの件数

$OutDec
[1] "."
→小数点の表記

$papersize
[1] "a4"
→PostScriptで使用する用紙デフォルトサイズ

$PCRE_limit_recursion
$PCRE_study
$PCRE_use_JIT
→PCRE - Perl Compatible Regular Expressions関連

$profvis.keep_output
$profvis.print
$profvis.prof_extension
$profvis.prof_output
→コード可視化パッケージprofivis関連

$prompt
[1] "> "
→console上でプロンプトを促す文字

$scipen
[1] 0
→指数表記(1e+05)を変更

$show.error.messages
[1] TRUE
→エラーメッセージ表示

$str
$str$strict.width
[1] "no"
→ページ幅へ従う度合い"no","cut","wrap"

$str$digits.d
[1] 3
str関数で表示させる桁数

$str$vec.len
[1] 4
→表示させるベクトル数

$timeout
[1] 60
→インターネット関連の処理でのタイムアウト秒数

$ts.eps
[1] 1e-05
→時系列tsの範囲

$warn
[1] 0
→-1の時全てのエラーを無視、0のときは関数の終了まで保存、+1のときはすぐに表示

$warning.length
[1] 1000
→切り捨てるエラーや警告の件数

$width
[1] 122
→表示文字数

【R】Excelファイルの読み込み

Excelファイルを読み込む場合はreadxlパッケージを使用します。
試しに政府統計の日本の人口データを読み込んでみます。

統計表一覧 政府統計の総合窓口 GL08020103

install.packages("readxl")
library(readxl)
xls <- read_excel("05k2-1.xls",sheet=1,range="D12:M32",col_names = FALSE,col_types = "text",)

range=で読み込み範囲を指定できます。
当該データのように、タイトル列は複数のデータ列にまたがるようなレイアウトだったり、セルの結合が行われているような場合は、列名とデータが合致しないため、
範囲指定でデータ部分だけ読み込んだあと、列部分を入力して作成するか別途読み込む必要があります。
読み込む場合は、skipとn_maxを組み合わせて1行だけ読み込んだら、列名にできますよ。

【R】RcppBDTパッケージ

前回に引き続き、日付を操作するパッケージRcppBDTをご紹介します。
私がよく使うのはgetNthDayOfWeekで、「今月の第3水曜日は何日」といったことを取得できます。

以下に例を挙げます。

install.packages("RcppBDT")
library(RcppBDT)
date <- today()
getEndOfBizWeek(date)#"2017-06-23"
getEndOfMonth(date)#"2017-06-30"
getYear(date)#2017
getMonth(date)#6
getDay(date)#19
getDayOfWeek(date)#1
getDayOfYear(date)#170
#先物・オプション取引の契約終了日=第3水曜日
getIMMDate(6,2017)#"2017-06-21"
#2017年6月の第3水曜
getNthDayOfWeek(3, Wed, 6, 2017)#"2017-06-21"
#2017年6月の最後の月曜日
getLastDayOfWeekInMonth(Mon, 6, 2017) #"2017-06-26"
#今日の次に来る水曜日は
getFirstDayOfWeekAfter(Wed, date)#"2017-06-21"


参考:Package ‘RcppBDT’
https://cran.rstudio.com/web/packages/RcppBDT/RcppBDT.pdf

【R】lubridateパッケージ

lubridateパッケージは日付の操作に役立つ様々な関数があります。
日付型からyear(),month(),day(),hour()などで
それぞれの部分を取り出せる関数がとても便利です。
他にも使用頻度が高いと思われるもののサンプルを紹介します。

#パッケージインストール
install.packages("lubridate")
#パッケージ読み込み
library(lubridate)
#システム時刻を取得
now <- Sys.time()#"2017-06-18 09:19:51 JST"
#午前か午後かを判定
am(now)#TRUE
pm(now)#FALSE
#うるう年判定
leap_year(now)#FALSE
#クオーター取得
quarter(now)#2
#先月末を取得
rollback(today())#"2017-05-31"

#day()
day(now) #18
wday(now,label=T)#sun
yday(now)#169 年初から
qday(nwo)#79 四半期から
#年初から何週目か
week(now)#25

#インターバル型を作る interval(x,start)
span <-interval(ymd("2017-01-01"),today())#
#インターバルの期間(秒)を計算
seconds <- as.duration(span)#"14515200s (~24 weeks)"
#インターバルの期間(日数)を計算
as.numeric(seconds,"days")#168
#期間(日数)をperiod型で計算
s.period(span,"days")#"168d 0H 0M 0S"
#秒表記をseconds_to_periodにより変換も可能
seconds_to_period(seconds)#"168d 0H 0M 0S"

参考
https://cran.r-project.org/web/packages/lubridate/lubridate.pdf

【R】Rをバッチ化し、定時起動して処理を行う

以下で作成した、webスクレイピングスクリプトを1日1回定時起動して、
毎日清算価格を取得しprice.txtへ出力できるようにします。
anpontan382.hatenablog.com

方針は以下の通りです。
コマンドプロンプトからRを実行できるようバッチ化
②タスクスケジューラーでバッチを定時起動するよう設定する。


①-1
以下の内容のgetprice.rをCドライブ直下に配置します。

options(encoding="CP932")
library(rvest)
library(readr)
html <- read_html("https://www.tfx.co.jp/")
div <- html_nodes(html,"div.chart_cel_03")
text <- html_text(div)
price <- as.numeric(text[16])
write_lines(price,"price.txt",append=T)

①-2
getprice.rをコマンドプロンプトで実行するにはRをインストールしたときに
一緒にインストールされるRscript.exeを使用します。
Rscriptは通常以下のディレクトリにあります。
C:\Program Files\R\R-3.4.0\bin\Rscript.exe
getprice.rを実行するgetprice.batを作成します

cd c:\
"C:\Program Files\R\R-3.3.2\bin\rscript.exe" getprice.r

①ー3
getprice.batを実行すると、Cドライブ直下にprice.txtが作成され
価格が入ることが確認できると思います。

②-1
ググれば詳しく記載がある記事がたくさんありますので、簡単に概要だけ。
ファイル名を指定して実行→「タスクスケジューラー」を起動
基本タスクの作成→ウィンドウに従い実行間隔、時間、実行スクリプトを設定。
getprice.rを毎日実行するように設定します。

これにより、毎日HPから価格を取得して、getprice.txtへ保存していくことができます。
当然パソコンの電源は入れといてね!