本文へスキップ
AllTick
導入チュートリアル

相場データのデータベース格納:タイムスタンプ・重複排除

PostgreSQL を例に、UTC タイムスタンプと numeric 精度の統一、複合主キーによる冪等 Upsert、取引カレンダーを用いた欠損検知を解説します。

更新日時:
保守運営:AllTick 公式エンジニアリングチーム
対象読者:相場データパイプラインや時系列データベースを設計・運用するデータエンジニア

要約 · 30秒開発サマリー

相場データをデータベースに保存する際の基本原則は3つです:(1) 時刻はすべて UTC(timestamptz)かつ価格は numeric/decimal 型で保存する、(2)「銘柄コード+周期+時刻」を複合主キーとして冪等な Upsert を行う、(3) 取引カレンダーに基づいて欠損バーを検知し REST API で補完する。また長期保存前にデータ利用許諾を必ず確認してください。

01

推奨テーブルスキーマ設計

PostgreSQL スキーマ例sql
CREATE TABLE kline (
code text NOT NULL,
period text NOT NULL,
bar_time timestamptz NOT NULL,
open numeric(20, 8) NOT NULL,
high numeric(20, 8) NOT NULL,
low numeric(20, 8) NOT NULL,
close numeric(20, 8) NOT NULL,
volume numeric(28, 4),
turnover numeric(28, 4),
source text NOT NULL DEFAULT 'alltick',
ingested_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (code, period, bar_time)
);
  • 価格や出来高には浮動小数点ではなく numeric/decimal 型を使用し、丸め誤差の蓄積を防ぎます。
  • bar_time には timestamptz を使用し、ミリ秒タイムスタンプを UTC 時刻に変換して格納します。
  • source と ingested_at を保持し、データソースの追跡と障害調査を容易にします。

02

冪等書き込み(Upsert)と重複排除

sqlsql
INSERT INTO kline (code, period, bar_time, open, high, low, close, volume, turnover)
VALUES ($1, $2, to_timestamp($3 / 1000.0), $4, $5, $6, $7, $8, $9)
ON CONFLICT (code, period, bar_time)
DO UPDATE SET open = EXCLUDED.open, high = EXCLUDED.high, low = EXCLUDED.low,
close = EXCLUDED.close, volume = EXCLUDED.volume, turnover = EXCLUDED.turnover;

未確定の最新ローソク足は足が閉じるまで値が更新され続けます。ON CONFLICT DO UPDATE による Upsert を使えば、最新値への上書きや再接続時の重複取得・ページング境界の重なりを安全に吸収できます。

03

取引カレンダーに基づく欠損検知

1取引所カレンダーに基づき、対象期間内に「存在するはずのバー時刻」を生成する。
2データベース内の既存時刻との差分を取り、欠損候補リストを抽出する。
3休場時間、昼休み、祝日を除外して誤検知を防ぐ。
4実際の欠損区間に対して REST ローソク足 API で過去データを補完する。
5補完結果をログに記録し、解消しない欠損は手動確認へ回す。

04

保存前にデータ利用ライセンスを確認する

相場データの長期保存、第三者への再配信、外部ユーザーへの画面表示には利用規約上の条件が適用されます。本番環境でデータベース蓄積を開始する前に、契約プランの許諾範囲をご確認ください。

仕様出典と検証記録 · 2026-10-13

以下の一次資料で関連するエンドポイント、フィールド、取引所規則を確認しました。

今回の確認では実際の Token による AllTick 要求や本番エンドツーエンド試験は実行していません。再現時にプラン、ライブラリ版、取引時間、ret/trace、結果を記録してください。

導入前に再現する項目

  • 同じバッチを 2 回保存して行数を確認し、修正足で upsert を検査します。中断時のロールバックも試します。
  • 時刻単位と精度を保持し、休場と欠損を区別して出典、権利調整、商品識別を保存します。