J-Quants のティックを、契約で取れるぶん全部問い合わせました。2年ぶんで 18.9GB(圧縮のまま)・約20億行。解凍すれば 112GB です。そして調べていくうちに、日足・分足・ティックで遡れる範囲が全部違うことが分かりました。
- 1営業日ぶんは 圧縮45.1MB → 解凍266.7MB(5.92倍)・4,715,198行
- 2年ぶん全部で 18.9GB・約20億行(Parquetに直すと約12.8GB)
- 日次ファイルは今月ぶんしか無い。月が終わると月次1本に置き換わる
- 遡れるのは 日足5年・ティック2年・分足2年。同じ契約なのに別々
- ティックのほうが分足より18日ぶん多く取れる(実証しました)
何が配られているか
J-Quants のティックは、API を1本ずつ叩いて集めるのではなく、gzip 圧縮された CSV ファイルがまるごと置いてあるのを落とす形です。/bulk/list で一覧が取れ、/bulk/get で署名付きURLをもらって落とします。
# 配られているファイルの一覧を見る(落とす前に大きさが分かる)
r = jq.get("/bulk/list", endpoint="/equities/trades",
**{"from": "2026-06-01", "to": "2026-09-18"})
for f in r["data"]:
mb = int(float(f["Size"])) / 1048576
print(f'{f["Key"]:<48} {mb:>8.1f} MB')
# from は Python の予約語なので、辞書にして ** で渡す中身はこうなっています。列は7つだけです。
Date,Code,Time,SessionDistinction,Price,TradingVolume,TransactionId
2026-09-01,13010,09:00:00.061246,01,4775,900,000000000006
2026-09-01,13010,09:01:26.728973,01,4780,400,000000000015
2026-09-01,13010,09:02:07.342004,01,4785,300,000000000020Time はマイクロ秒まで入っています。Code は5桁(4桁の証券コードの末尾に 0 が付く)です。売り買いの方向は入っていません。「この約定は買いか売りか」は自分で推定するしかありません。実際にやってみると約定の54.0%は前と同じ値段で判定できず、扱い方で答えが2ポイント動きます。これは別記事にまとめています。
TransactionId は時刻より細かい順番を持っています。同じマイクロ秒に複数の約定が並ぶことがあるので、並べ替えは時刻ではなくこの番号でやります。詳しくは別記事に書きました。
1日ぶんの実寸
2026年9月1日ぶんを、解凍しながら数えました。
| 実測 | |
|---|---|
| 圧縮したまま | 45.1 MB |
| 解凍すると | 266.7 MB(5.92倍) |
| 行数 | 4,715,198 行(ヘッダ除く) |
| 解凍にかかる時間 | 1.0 秒(273 MB/秒) |
| 1行あたり | 約 57 バイト |
import gzip
# 解凍したときの大きさと行数を、ファイルに書き出さずに数える
raw, lines = 0, 0
with gzip.open("equities_trades_20260901.csv.gz", "rb") as f:
while True:
b = f.read(1 << 22)
if not b:
break
raw += len(b)
lines += b.count(b"\n")
print(f"解凍 {raw/1048576:.1f} MB / {lines-1:,} 行")
# → 解凍 266.7 MB / 4,715,198 行14営業日ぶんの行数はこうでした。
| 日付 | 行数 | 圧縮サイズ |
|---|---|---|
| 2026-09-01 | 4,715,198 | 45.1 MB |
| 2026-09-02 | 5,009,831 | 48.0 MB |
| 2026-09-03 | 4,672,629 | 44.8 MB |
| 2026-09-04 | 4,686,948 | 44.8 MB |
| 2026-09-07 | 4,341,661 | 41.4 MB |
| 2026-09-08 | 4,568,808 | 43.7 MB |
| 2026-09-09 | 4,752,243 | 45.4 MB |
| 2026-09-10 | 4,444,428 | 42.5 MB |
| 2026-09-11 | 4,864,348 | 46.6 MB |
| 2026-09-14 | 4,449,127 | 42.6 MB |
| 2026-09-15 | 4,225,995 | 40.4 MB |
| 2026-09-16 | 3,941,530 | 37.8 MB |
| 2026-09-17 | 4,134,490 | 39.7 MB |
| 2026-09-18 | 4,313,905 | 41.5 MB |
| 合計 14営業日 | 63,121,141 | 604.1 MB |
1営業日およそ 450万行。年間245営業日として 1年で約11億行という規模感です。
★ 日次ファイルは「今月ぶん」しか無い
ここが最初のつまずきどころでした。一覧を広い期間で問い合わせると、返ってくるものが途中で変わります。
| 問い合わせた期間 | 日次ファイル | 月次ファイル |
|---|---|---|
| 2026-09-01 〜 09-18(今月) | 14 本 | 0 本 |
| 2026-08-01 〜 08-31(先月) | 0 本 | 1 本(939.7 MB) |
| 2026-07-01 〜 07-31(2か月前) | 0 本 | 1 本(1,078.1 MB) |
| 2026-09-19 〜 09-21(土日祝) | 0 本 | 0 本 |
6月1日から9月18日までを一度に問い合わせると、こう返ります。
[monthly] equities_trades_202606.csv.gz 1103.3 MB
[monthly] equities_trades_202607.csv.gz 1078.1 MB
[monthly] equities_trades_202608.csv.gz 939.7 MB
[daily] equities_trades_20260901.csv.gz 45.1 MB
[daily] equities_trades_20260902.csv.gz 48.0 MB
...(9月18日まで14本)月が終わると、その月の日次ファイルは消えて月次1本に置き換わります。
つまり「日次で細かく落とすか、月次でまとめて落とすか」は選べません。過去を揃えるなら月次一択、今月ぶんは日次一択です。
これは実務では都合がよい面もあります。2年ぶんを揃えるのに必要な署名付きURLの発行は、日次なら490回のところ月次24回+今月14回=38回で済みます。ただし1本が最大1.1GBあるので、一度にメモリへ読み込まず、分割して処理する前提で組む必要があります。
★ 遡れる範囲が、日足・分足・ティックで全部違う
ここがいちばん大きな発見でした。Light プラン(月1,650円)+分足・ティックアドオン(月5,500円)=月7,150円の同じ契約なのに、データの種類ごとに遡れる範囲が別々に切られています。
境目は推測せず、エラー文に書いてある日付を読めば分かります。
# 契約の境目は、エラー文が教えてくれる
try:
jq.get("/equities/bars/minute", code="86970", date="2024-09-02")
except JQError as e:
print(e)
# HTTP 400
# {"message": "Your subscription covers the following dates: 2024-09-21 ~ .
# If you want more data, please check other plans: ..."}3種類それぞれで境目を詰めた結果です。
| データ | 遡れる範囲 | 切られ方 |
|---|---|---|
| 日足 | 2021-09-21 〜(約5年) | 日単位 |
| ティック | 2024-09 〜(約2年) | 月単位 |
| 分足 | 2024-09-21 〜(約2年) | 日単位 |
日足だけ5年、分足とティックは2年です。「Lightは5年」という理解で分足の検証を設計すると、3年ぶん足りません。
そして、ティックのほうが分足より18日ぶん多く取れる
表をもう一度見てください。ティックは 2024-09、分足は 2024-09-21 です。ティックは月単位で切られているので、2024年9月の月次ファイルには9月1日からの約定が入っているはずです。
確かめました。1本落として、中の Date 列を数えます。
| 結果 | |
|---|---|
| ファイル | equities_trades_202409.csv.gz(641.4 MB) |
| 入っていた営業日 | 19日 |
| いちばん古い日 | 2024-09-02 |
| いちばん新しい日 | 2024-09-30 |
| 行数 | 65,427,957 行 |
| 同じ日の分足 | HTTP 400(契約範囲外) |
2024年9月2日のティックは取れるのに、同じ日の分足は取れません。
ティックから1分足は自分で組めるので、境目の18日ぶんは、ティック経由なら分足として使えます。細かい話ですが、「2年ちょうど」で期間を区切る検証では効いてきます。
2年ぶん全部でいくらになるか
契約で取れるかぎり全部を一覧して足しました。落とさずに大きさだけ数えられるのがこの API のよいところです。
| 実測・推定 | |
|---|---|
| ファイル数 | 月次 24 本 + 日次 14 本 = 38 本 |
| 圧縮したまま | 18.9 GB |
| 解凍すると | 約 112 GB |
| 行数 | 約 20 億行(19.8〜20.3億) |
| 月次1本の大きさ | 最小 615 MB / 最大 1,103 MB / 平均 783 MB |
月ごとの大きさを並べると、出来高の多かった月が素直に大きいのが分かります。2025年4月が891MB(前月比+29%)、2026年6月が1,103MBで最大でした。ディスクの見積もりは平均ではなく最大で取っておくのが安全です。
落とす速さ
同じファイルを3回落として測りました。
| 1回目 | 2回目 | 3回目 | |
|---|---|---|---|
| 署名付きURLの発行 | 0.11 秒 | 0.10 秒 | 0.10 秒 |
| 41.5MB の転送 | 1.4 秒 | 1.3 秒 | 1.8 秒 |
| 速度 | 29.3 MB/秒 | 32.2 MB/秒 | 22.7 MB/秒 |
641.4MB の月次ファイルは 12.6秒(50.8 MB/秒)でした。大きいファイルのほうが速度が出ます。この調子なら 2年ぶん18.9GB は理論上7〜8分ですが、実際はレートリミット(1分あたり50本)と解凍・変換のほうが時間を食います。
署名付きURLは 417文字あり、有効期限があります。一覧を取ってから落とすまでに時間を空けると失効するので、URLはまとめて取らず、落とす直前に1本ずつ取るのが確実です。
どう置くか
CSV.gz のまま置いておくと、「銘柄 7203 の2年ぶんが欲しい」と思うたびに18.9GB を全部読むことになります。検証で使うなら列ごとに詰めた形(Parquet)に直して、銘柄ごとに並べ替えるのが実用的です。
1日ぶんで比べるとこうなりました。
| 形 | 大きさ | CSV.gz 比 |
|---|---|---|
| CSV.gz(配られたまま) | 45.1 MB | 100% |
| 解凍した CSV | 266.7 MB | 591% |
| Parquet(日付ごと・型を詰めて) | 30.5 MB | 68% |
2年ぶんに引き延ばすと、こういう見積もりになります。
- Parquet(日付ごと)= 約 12.8 GB
- 銘柄ごとに並べ替えたもの = 約 16.5 GB(4,000本以上のファイルに分かれるぶん圧縮が効きにくく、1.29倍になります)
- 元の CSV.gz を残すなら +18.9 GB
全部残すなら50GB近く見ておくことになります。作業中は変換前と変換後が同時に存在するので、余裕はもう少し要ります。
落とす前に確かめること
- 自分の契約でどこまで遡れるか。日足・分足・ティックで別々です。エラー文に日付が書いてあります
- 欲しい期間に日次が配られているか。先月以前は月次1本しかありません
- 置き場所は足りるか。2年ぶんで圧縮18.9GB、解凍112GB
- 1本1.1GBを一度に読まない造りになっているか
- 並べ替えは時刻ではなく
TransactionIdでやっているか - 値段が調整前であることを踏まえているか(分割をまたぐと飛びます)
まとめ
J-Quants のティックは、月7,150円の契約で2年ぶん・約20億行が取れます。個人が触れる日本株のデータとしては破格だと思います。
ただし「Lightは5年」は日足の話で、分足とティックは2年です。そして過去の月は日次で落とせません。どちらも公式の料金表からは読み取りにくく、実際に叩いて初めて分かりました。
検証の設計は、データの形が決めます。期間を決める前に、取れる範囲を自分の契約で確かめてください。
この記事の出どころ
- データ:J-Quants API V2 の
/bulk/list・/bulk/get(equities/trades)、および/equities/bars/minute・/equities/bars/daily - 契約:Light プラン(月1,650円)+分足・ティックアドオン(月5,500円)= 月7,150円
- 実測した範囲:行数・サイズは 2026-09-01〜09-18 の14営業日と equities_trades_202409.csv.gz を実際に読んだ値。2年合計の18.9GBは一覧が返す Size の合計。行数のみ行密度からの推定
- 遡れる範囲:月単位・日単位で二分探索して境目を確定。エラー本文も確認
- 回線:光回線・有線。速度は環境で変わります
- 環境:Windows 11 / Python 3.12 / pyarrow 21
- 測定日:2026年9月21日
- 注意:掲載したのは集計結果とファイルサイズです。取得したデータそのものは配布していません