LoginSignup
0
0

More than 1 year has passed since last update.

大量保有報告書XBRLを活用する

Posted at

自称XBRL系ダクトテーププログラマ、ぱにです。よろしくお願いします。
あやぱにというサイトの開発・運営をしています。

あやぱには、EDINETから取得した大量保有報告書をデータ化して閲覧・検索できるようにしたサービスです。あやぱにの開発を経験して学んだ(ハマった)こと、考慮したことなどを共有したいと思います。

というか、自分のための備忘録であります。

対象読者

大量保有報告書に興味がある人。EDINETと聞いてピンときた人。XBRLの基本的な知識があり、活用方法を知りたい人。

このページに書かないこと

具体的なプログラムは出しません。あやぱには Azure/C# で開発・運営していますが、そっち方面の説明はしません。設計レベルの話ばかりです。

データ取得(API)編

XBRLをEDINETからとってきますが、これがなぜか単純にはいかないんだなぁ。

過去分は5年まで

大量保有報告書は、EDINETで開示から5年間閲覧可能。APIで取得可能な期間も同じです。
それより古いものが欲しければ、、、有報キャッチャーなどから取得するしかないかな。

対応

  • 取得したデータ(XBRL)は捨てない。再取得は手間も時間もかかるし、いずれ取得できなくなる。

APIは403エラーをすぐに返す

EDINETは2023年1月からリニューアルされました。APIも同じ仕様のままアップデートされた模様で、それ以降なぜか「403 Forbidden」エラーが頻発するようになりました。(個人の感想です)

対応

  • APIは連打しないこと。少なくとも数秒程度間隔をあける。並列処理なんてもってのほか。
  • 403エラーは必ず拾って、ちょっと(最低数秒程度)待って、リトライする。最初からやり直ししてたら終わらない。
  • 取得したデータを捨てない。(大事なことなので2回目)

書類一覧のキーは書類管理番号ではない

これはAPIからデータを集めてデータベース化してから気づいたのですが、APIで取得した書類一覧のユニークキーは「連番」です。書類管理番号ではありません
同じ書類管理番号が日をまたいで出現することもありますし、同日に複数回出現することもあります。

対応

  • 書類一覧APIは日付をパラメータに渡すので、RDBに1書類1レコードで格納する場合、ユニークキーは「日付」「連番」の組み合わせにする。

書類は取り下げられる(一度開示された書類が非開示になる)ケースがある

withdrawalStatus(取り下げ区分)が"1"または"2"の書類は、その時点(書類一覧APIを呼び出した時点)でEDINET閲覧サイトでは開示されていないものです。取り下げデータの扱いをあらかじめ決めておこう。

大量保有報告書XBRL解析編

XBRLからほしい情報を取り出します。XBRLを必要以上に難しく考えるのはやめましょう。XBRLインスタンスからほしい要素名を指定して取ってくる、それだけでいいんです。XBRLを処理するためのライブラリなんていらない、シンプルで高速なXMLパーサを使えばいい。名前空間?なにそれ、おいしいの?

ほしい情報の要素名を探す

タクソノミ要素リストから探せます。
大量保有報告書に関連するのはシート1, シート29-32 です。
大量保有報告書は原則拡張しないので、想定外の要素が出現することはありません。

あやぱにが使用している主な要素は以下の通りです。

要素名 日本語
NameOfIssuer 発行者の名称
SecurityCodeOfIssuer 発行者の証券コード
StockListing 上場金融商品取引所
IndividualOrCorporation 個人・法人の別
Name 氏名又は名称
PurposeOfHolding 保有目的
TotalNumberOfStocksEtcHeld 保有株券等の数(総数)
HoldingRatioOfShareCertificatesEtc 株券等保有割合
HoldingRatioOfShareCertificatesEtcPerLastReport 直前の報告書に記載された株券等保有割合
TotalAmountOfFundingForAcquisition 取得資金合計

データの取得はXBRLインスタンスからが簡単

大量保有報告書はInlineXBRLという仕様で作成されたHTMLと、そのHTMLから作成されたXBRLインスタンス(拡張子が .xbrl のファイル)が同封されています。
HTMLファイルは複数ファイルに分かれていますが、XBRLインスタンスは1つです。HTMLの余計な情報がそぎ落ちてデータだけの状態になっているので、XBRLインスタンスからデータを取得したほうが簡単です。

XBRLインスタンスから値を取得する場合は、名前空間は気にせず要素名だけで参照して問題ありません。

コンテキストについて

大量保有報告書では、コンテキストは「FilingDateInstant」と「FilingDateInstant_(ほにゃらら)Holder(数字)Member」というのがあります。
「FilingDateInstant」は書類で1つの値、もしくは共同保有者の合計としての値のコンテキストです。例えば、発行者の名称(NameOfIssuer)なんかはこのコンテキストです。

対して「FilingDateInstant_(ほにゃらら)Holder(数字)Member」は、保有者の個々を示すコンテキストです。複数名の連名で大量保有報告書が出される場合がありますが、各人の保有割合(HoldingRatioOfShareCertificatesEtc)が、各コンテキストの値としてそれぞれ紐づいています。

むすびにかえて

ここまで読んでくれてありがとう!さあ、大量保有報告書を分析してみましょう。
大量保有報告書は株主からみた保有銘柄の情報ですが、データ化することで、銘柄からみた株主の情報も見ることができるようになります。
新しい発見があるかもしれません!!

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