はじめに
税務(法人税法)ではなく、
会計(金融商品に関する会計基準、第64項)の規定で、
有価証券を帳簿価額ではなく時価で評価しなければならない。
株価データ(決算期末の終値)が必要ですが、
Yahooファイナンスは(Webスクレイピング)禁止だし、
有料でデータを買うのもバカバカしいし、
国税庁は持ってるはずだけど公開してないようだし、
元ネタとしてJPX(東京証券取引所)から入手することとした。
株式相場表があれば、有価証券と突合するだけ!
だけどこれ、PDFなんですよ。。
PDF:株式相場表:をCSV(テキスト)に変換しました。
※これが一番大変
この記事が意味をなくす時が来ることを望む。
使い方
PDF:株式相場表:と言っても、
必要なのは「立会市場」だけ。
※PDFの右上「1-n」のページのみ抽出
source( file.path( なんとかディレクトリー,"PDF_株式相場表.R" ) )
f <- file.path( なんとかディレクトリー ,"stq_20200831.PDF" ) # ダウンロードした元ネタ
立会市場 <- 株式相場表.main( f )
# ⑥有価証券の内訳書(i06_e)ができてる前提で残高行のみ抽出
帳簿価額 <- i06_e[ !is.na(i06_e[,6]) & i06_e[,6] != 0,c(4,5,6,8)]
# ⑥有価証券の内訳書(帳簿価額)に時価カラムを追加する
有価証券 <- merge( 帳簿価額 ,立会市場[,c(1,11)] ,all.x=T ,by.x="種類=株式" ,by.y="コード=" )
# 目検
sapply( 有価証券 ,mode )
nrow(帳簿価額) ;nrow(有価証券)
# 微調整
有価証券[,3] <- as.integer( 有価証券[,3] ) # (列3)数量
有価証券[,4] <- as.integer( 有価証券[,4] ) # (列4)帳簿価額
有価証券[,5] <- as.integer( gsub( "," ,"" ,有価証券[,5] ) ) # (列5)時価
# 期末評価額(列6)=数量(列3)*時価(列5)
有価証券 <- cbind( 有価証券 ,"期末評価額="=有価証券[,3] * 有価証券[,5] )
# 差額(列7)=期末評価額(列6)ー 帳簿価額(列4)
有価証券 <- cbind( 有価証券 ,"差額="=有価証券[,6] - 有価証券[,4] )
# 会計(評価益、その他有価証券差額など)に反映
sum( 有価証券[,4] ,na.rm=T) # 帳簿価額
sum( 有価証券[,6] ,na.rm=T) # 期末評価額
sum( 有価証券[,7] ,na.rm=T) # 差額
# pdfデータをインポートするため
library( pdftools ) # install.packages( 'pdftools' )
株式相場表.init <- function( n=1 ) {
# 列数
df <- data.frame( matrix( NA ,0 ,16 ) )
# 列名
colnames( df ) <- c(
"コード=" # 列1
,"売買単位=" # 列2
,"銘柄名=" # 列3
,"午前.始値=" # 列4
,"午前.高値=" # 列5
,"午前.安値=" # 列6
,"午前.終値=" # 列7
,"午後.始値=" # 列8
,"午後.高値=" # 列9
,"午後.安値=" # 列10
,"午後.終値=" # 列11
,"最終気配=" # 列12
,"前日比=" # 列13
,"売買高加重平均価格=" # 列14
,"売買高=" # 列15
,"売買代金=" # 列16
)
switch( n
, "1" = { # 普通取引
# print( sapply( df ,mode ) )
}
, "2" = { } # 当日決済取引
, "3" = { } # 発行日決済取引
, "4" = { } # 立会外分売取引
, "5" = { } # ToSTNeT市場
, "6" = { } # 優先株等
, "7" = { } #
, "8" = { } # 内国投信等
, "9" = { } #
, "10" = { } # 外国株式
, "11" = { } #
, "12" = { } #
, "13" = { } #
, "14" = { } #
, "15" = { } # ToSTNeT市場 当日決済取引
)
return( df )
}
print( c( "株式相場表.init()" ,株式相場表.init ) )
# y抽出
yn <- function( page ,y ) {
# page:株価相場表の特定ページ
# y:明細行の"y"
r <- subset( page ,page[ ,"y"] == y ,select=c("x","text") )
o <- order( as.integer( r[,"x" ] ) )
r <- r[ o, ]
return( r )
}
print( c( "yn()" ,yn ) )
株式相場表.page <- function( page ) {
df_code <-subset( page ,page[ ,"x" ] == 74 ) # コード
mei <- 株式相場表.init()
if( nrow( df_code ) == 0 ) return( mei )
for( l in 1:nrow( df_code ) ) {
n <- as.integer( df_code[ l,"y" ] )
r <- yn( page ,n )
mei[ l,1:2 ] <- r[1:2 ,2 ]
mei[ l, 3 ] <- r[ 3 ,2 ]
switch( nrow( r ) - 16
,"1" = { mei[ l, 3] <- paste( r[ 3 ,2 ] ,r[ 4 ,2 ] ) }
,"2" = { mei[ l, 3] <- paste( r[ 3 ,2 ] ,r[ 4 ,2 ] ,r[ 5 ,2 ] ) }
,"3" = {
print( r )
}
)
mei[ l, 4:16] <- tail( r[ ,2 ] ,13 )
}
return( mei )
}
print( c( "株式相場表.page()" ,株式相場表.page ) )
株式相場表.main <- function( f ,n="1-") {
p <- pdf_info( f )$pages
df <- pdf_data( f )
stack <- 株式相場表.init()
for( i in 1:p ) {
page <- sapply( df[[ i ]] ,"[" )
s2 <- subset( page ,page[,"y"] == 71 ,select="text")[ 2 , ]
s3 <- subset( page ,page[,"y"] == 71 ,select="text")[ 3 , ]
print( paste( "page =" ,i ,s2 ,s3 ) )
if( s2 != "1-") break
r <- 株式相場表.page( page )
stack <- rbind( stack , r )
}
return( stack )
}
print( c( "株式相場表.main()" ,株式相場表.main ) )
#
元ネタ
JPX、よくあるご質問
Q5. 税金の申告に必要な過去の株価(終値)を知りたい。
https://www.jpx.co.jp/faq/stock_listed_company.html
【お問合せの前に】
●過去1年以内の株価につきましては →「東京証券取引所日報」をご利用ください。
東京証券取引所日報
https://www.jpx.co.jp/markets/statistics-equities/daily/