日付の扱い
kabukit では、API が返す DataFrame に Date カラムを追加します。Data カラムは、「その情報が株価に影響を与えうる日」を表現することを目的としています。
J-Quants API
J-Quants API で取得する株価情報には、Date が含まれます。これは、当然「その情報が株価に影響を与えうる日」を表現しています。
一方で、財務情報には、DisclosedDate と DisclosedTime が存在します。このため、15:30 を市場の取引時間後の閾値(スレッショルド)として Date を計算するロジックは比較的単純です。
- この時刻までに開示された情報は、当日の株価に影響を与えうるとみなします。Date は DisclosedDate と同じ値に設定されます。
- この時刻より後に開示された情報は、翌営業日の株価に影響を与えます。Date は DisclosedDate の翌営業日に設定されます。
EDINET API
EDINET API は、 submitDateTime(提出日時)しか提供していません。EDINET の仕様上、「提出」から「開示(ユーザーが閲覧可能になること)」までには未知のタイムラグが存在するため、「提出日時=開示日時」とみなすことはできません。この不確実性の中で、いかにして信頼性のある Date を決定するかが課題です。
リスク分析
Date の計算ロジックを設計する上で、考慮すべきリスクは以下の通りです。
- 最も避けるべきリスク: 本来は翌営業日の株価に影響する情報(例: 15:30 以降に開示された情報)を、当日の情報として誤って分類してしまうこと
- 許容されるリスク: 本来は当日の情報として扱えるもの(例: 14:00に開示された情報)を、安全側に倒して翌営業日扱いとしてしまうこと
kabukit では、「本当は翌日扱いなのに当日扱いしてしまう」リスクを最小化する、 保守的な (conservative) 方針を取ります。
解決策:安全マージンの導入
上記のリスク分析に基づき、以下のロジックで Date を決定します。
-
開示の最終デッドラインを 15:30 と定義する。 これは J-Quants における Date の決定ロジックと一貫性を保つためです。この時刻までに開示された情報は、当日の株価に影響を与えうるとみなします。
-
30分の「安全マージン」を設ける。 EDINET の「提出から開示までの未知のタイムラグ」を吸収するためのバッファとして、 30 分という安全マージンを設定します。
-
提出時刻の閾値を 15:00 に設定する。 上記から逆算し、提出時刻 (SubmittedTime) の閾値を「15:30 (デッドライン) - 30 分 (安全マージン) = 15:00」とします。
最終的な計算ルール
- SubmittedTime が 15:00 より前の場合、SubmittedDate を Date とします。
- SubmittedTime が 15:00 以降の場合、SubmittedDate の翌営業日を Date とします。
このロジックにより、不確実性を許容しつつ、最も合理的で防御可能な方法で Date カラムを導出します。