APIを同じ時刻に取得しても、中身が同じ期間を表すとは限りません。日次データと週次データ、ATSだけの値とOTC全体の値を、取得日だけで結合すると比較条件が崩れます。
この記事はAIで作成した原稿と合成データの検証例です。SIGNUM HQの開発側が書いていますが、以下は製品で稼働中の実装を説明するものではありません。外部APIにも接続しません。
例では銘柄、対象期間、観測時刻、指標の定義を比較キーにします。
from dataclasses import dataclass
@dataclass(frozen=True)
class Basis:
ticker: str
window: str
observed_at: str
definition: str
def same_basis(left, right):
return left == right
base = Basis("DEMO", "session-2026-10-20",
"2026-10-20T20:00:00Z", "OTC/all")
other = Basis("DEMO", "week-2026-10-19",
"2026-10-20T20:00:00Z", "OTC/all")
assert not same_basis(base, other)
同じ銘柄・同じ観測時刻でも、対象期間が違えば一致しません。逆に、取得が遅れたという理由だけで、同じ観測データを別の期間として扱うべきでもありません。
この例の文字列は正規化済みという前提です。実務ではタイムゾーン、期間の開始・終了、訂正版、株数か売買代金か、欠損の扱いまで決める必要があります。文字列の完全一致だけで経済的な比較可能性を保証できるわけではありません。
ローカル検証は、同一条件、期間違い、観測時刻違い、定義違い、銘柄違いの5ケースです。Python 3.9.6で5ケースすべてが期待どおりの結果になりました。テストを通しても、外部データの正しさや本番運用の成功を証明したことにはなりません。
FINRAのOTC資料も、観測対象の週と公開・更新の日付を分けて持っています。この区別を自分のデータでも失わないことが、比較前の確認になります。
参考: FINRA OTCデータ仕様
取得時刻と観測日を分けて見る無料の確認ページ(筆者側): https://www.signumhq.com/ja/tools/read-check?from=qiita_readcheck