J-Quantsで日本株225銘柄を約2年検証|無料枠で止まった理由と現在地

結論から言うと、225銘柄×約2年の本番検証は、2026年9月25日時点で「最終結果の直前」まで来ています。ただし、まだ成績は確定していません。

この実験では、J-Quantsの無料枠を使い、独自に定義した225銘柄の検証ユニバース「JAPAN-TEST-225」に対して、日足データを約2年分そろえ、10個の固定戦略(DAILY10)を同じ条件で比較する仕組みを作っています。

この記事では、初心者向けに「何を2年間検証するのか」「なぜ途中で止まったのか」「現在どこまで進んでいるのか」を、確認できている事実だけで整理します。

今回の「2年実証」は何をする?

やることはシンプルです。

  1. 225銘柄を固定する
  2. 各銘柄の日足を約2年分そろえる
  3. 10個の売買戦略を同じデータへ当てる
  4. 未来の情報を使わず、時系列順に検証する
  5. 勝率だけでなく、期待値・Profit Factor・最大ドローダウンなどを見る
  6. 未使用期間(OOS)やWalk-forwardでも崩れないか確認する

ポイントは、結果を見てから条件を都合よく変えないことです。

「225銘柄」とは何か

今回の対象は、サイト内ではJAPAN-TEST-225と呼んでいます。

これは、特定の株価指数の公式構成銘柄一覧をそのまま名乗るものではありません。2026年6月30日時点の条件から、価格・流動性・履歴の条件を満たす銘柄を選び、75銘柄×3グループ=225銘柄に固定する独自の研究用ユニバースです。

後から都合の良い銘柄だけを選ばないよう、選定日・条件・銘柄数を固定して検証します。

検証期間はどこからどこまで?

当初は、2024年7月1日から2026年6月30日までを取得する予定でした。

しかし、Owner PCからJ-Quants無料枠を実測すると、取得できる過去データの境界が固定ではなく、ローリングしていることが分かりました。

  • 2024年6月28日:取得不可(HTTP 400)
  • 2024年7月1日:取得不可(HTTP 400)
  • 2024年7月2日:2026年9月24日の確認では取得可能
  • 2024年7月3日:取得可能
  • 2024年7月4日:取得可能

そのため、2026年9月25日時点のv1.3では、2024年7月3日〜2026年6月30日を固定期間として扱う設計に更新しています。

ここは重要で、「2年」と言っても、無料枠で常に同じ開始日が取れるわけではありません。取得可能期間そのものを先に検証する必要がありました。

途中で見つかった1つ目の問題:新しい銘柄は2年分の履歴がない

最初の225銘柄選定では、2026年6月30日時点で条件が良い銘柄を選んでいました。

ところが、後から上場した銘柄が入ると、当然ながら2024年7月時点の株価は存在しません。

つまり、225銘柄を選んでから2年データを取りにいくと、途中で「この銘柄だけ2年分ない」という問題が起きます。

そこでv1.2以降では、検証開始日に有効な日足が存在することを先に確認し、その条件を満たす銘柄だけをランキング対象にする方式へ変更しました。

途中で見つかった2つ目の問題:無料枠の期間が1日ずつ動く

2026年9月24日には2024年7月2日が取得できましたが、翌25日の本番ランでは日足取得がHTTP 400で止まりました。

無料枠の過去データ期間がローリングするため、前日に使えた開始日を翌日もそのまま使えるとは限りません。

そこで現在のv1.3では、開始日を2024年7月3日に固定し、以前のv1.1 / v1.2データを上書きせず、新しいバージョンとして分離しています。

現在のテスト状況

2026年9月25日のv1.3修正では、J-Quantsの実データ取得そのものとは別に、コード側の安全性テストを実行しています。

直近CIでは、1207件がPASS、1件がFAIL、1件がSKIPでした。

FAILした1件は、開始日を2024年7月2日から7月3日へ変更したことで、テスト用データの「同じ開始日が何件あるか」という期待値がずれたものです。戦略成績の失敗ではなく、テストデータ側の整合性問題です。

この不一致はローカル修正後、対象テストで2件ともPASSすることを確認しています。現在はフルテストを再実行中です。

最終的に何を比較する?

225銘柄のデータがすべてそろったら、既存のDAILY10という10戦略を同条件で比較します。

  • 評価件数
  • 平均ネットリターン
  • Profit Factor
  • 最大ドローダウンの代理指標
  • 年別の平均リターン
  • 期間別の平均リターン
  • 採用・保留・不採用の判定

勝率だけで「良い戦略」と決めないのが、この実験室のルールです。

なぜここまで厳しく止めるのか

225銘柄のうち224銘柄しかそろっていない状態でバックテストを進めると、「欠けた1銘柄が結果へ影響したのか」が分からなくなります。

そのため、1銘柄でも必要データが不足すれば、検証はBLOCKEDとして停止します。

同じように、APIの取得エラーや期間不一致があれば、推測で穴埋めしません。

初心者にとっての学び

今回の2年実証で分かったのは、「バックテストのコードを書くこと」よりも、比較できるデータを同じ条件でそろえることの方が難しいということです。

AIへ「2年分バックテストして」と頼むだけなら簡単です。でも実際には、次の確認が必要でした。

  • 取得できる期間は本当に2年あるか
  • 全銘柄に同じ期間のデータがあるか
  • 後から上場した銘柄が混ざっていないか
  • 欠損を勝手に補完していないか
  • 未来の情報を過去の判断へ混ぜていないか
  • 手数料や約定価格のズレを無視していないか

次にやること

  1. v1.3のフルテストをPASSさせる
  2. PR #459をmainへ反映する
  3. Owner PCから225銘柄×約2年の日足を取得する
  4. 225銘柄すべての期間・件数・チェックサムを確認する
  5. DAILY10を実行する
  6. 期待値・Profit Factor・最大ドローダウンを公開する
  7. 結果が悪くても、そのまま記事へ追記する

関連ページ

※この記事は2026年9月25日時点の検証途中経過です。最終的な225銘柄×約2年の戦略成績はまだ確定していません。過去データによる研究記録であり、特定銘柄の売買推奨や利益保証ではありません。

類似投稿