225銘柄×約2年×10戦略を検証中|AI株システムの長期実証で最初に止まった理由
結論から言うと、225銘柄×約2年×10戦略の実証は、2026年9月25日時点でまだ最終成績まで到達していません。
途中でデータ期間の境界、上場時期の違い、J-Quants取得エラーが見つかり、条件を緩めて無理に結果を出すのではなく、そこで止めて修正しています。
この記事では「最終的に何%勝ったか」ではなく、2年実証を成立させるまでに何を確認し、なぜ止まり、どう直しているかを公開します。最終結果が出たら、同じ検証条件のままこの記事へ追記します。
今回の2年実証でやりたいこと
短期間で良く見えた売買ルールが、本当に別の期間や多くの銘柄でも通用するのかを確認するのが目的です。
- 対象:固定した225銘柄の検証用ユニバース
- 期間:約2年の日足データ
- 戦略:事前に固定した10戦略(DAILY10)
- 分割:時間順に60% / 20% / 20%
- 約定:既存のnext-openルール
- コスト:既存の売買コスト設定を使用
- 評価:平均ネットリターン、Profit Factor、最大ドローダウン相当など
重要:この225銘柄は、記事上では検証用の JAPAN-TEST-225 として扱います。「日経225そのものを完全再現したデータ」とは表現しません。
なぜ2年に広げるのか
短期間の検証だけでは、たまたまその相場に合っていただけなのか、ある程度再現性があるのかを分けにくいためです。
この実験室では、勝率だけでなく次も確認します。
- 期待値
- Profit Factor
- 最大ドローダウン
- Walk-forward
- 未使用期間でのOOS評価
最初の壁①:無料データの2年境界は固定ではなかった
J-Quants Freeの取得可能期間をOwner PCで実測したところ、2026年9月24日の確認では次の状態でした。
| 日付 | 取得確認 |
|---|---|
| 2024-06-28 | HTTP 400 |
| 2024-07-01 | HTTP 400 |
| 2024-07-02 | 取得可能を確認 |
| 2024-07-03 | 取得可能を確認 |
| 2024-07-04 | 取得可能を確認 |
| 2025-01-06 | 取得可能を確認 |
ところが無料枠の取得窓はローリングするため、翌日の実行でも同じ境界が使えるとは限りません。そこで「毎回こっそり開始日をずらす」のではなく、検証条件をバージョンとして固定して扱う設計へ変更しました。
最初の壁②:225銘柄あっても、全銘柄に2年分の履歴があるとは限らない
次に見つかったのが、後から上場した銘柄です。
選定日時点では条件を満たしていても、2年前にはまだ上場していない銘柄が混ざると、225銘柄すべてで同じ2年パネルを作れません。
実際に初期版では、後発上場銘柄がランキングへ入り、Stage Dの履歴取得で「2年分を持てない」ことが分かりました。
そこで後続版では、ランキングする前に検証開始日の有効な日足が存在することを条件へ追加しています。欠損を埋めたり、足りない銘柄をそのまま通したりはしません。
最初の壁③:本番取得でHTTP 400
2026年9月25日の実ランでは、225×約2年の本番検証フローまで進みましたが、J-Quantsの日足取得で止まりました。
status = BLOCKED stage = JQUANTS_FETCH reason = HTTP 400 for /equities/bars/daily
ここで重要なのは、225銘柄の一部だけ取得して10戦略の大会へ進めなかったことです。部分データを「ほぼ成功」として扱わず、全条件がそろわなければBLOCKEDにしています。
「失敗」ではなく、何が分かった?
今回の途中結果から、少なくとも3つ分かりました。
- データ提供期間は、コードに固定日を書くだけでは不十分。
Freeプランのローリング境界を実測し、条件を明示する必要があります。 - 銘柄選定と履歴取得は別問題。
選定日に条件を満たしていても、検証開始日に存在したとは限りません。 - 不完全な225銘柄で結果を出さない仕組みが必要。
224銘柄や途中欠損で戦略評価へ進むと、比較条件そのものが変わってしまいます。
現在の修正版 v1.3
現在は JAPAN-TEST-225-v1.3 として、無料枠の取得境界を新しいバージョンへ固定する修正を進めています。
- 検証開始:2024-07-03
- 検証終了:2026-06-30
- 選定日:2026-06-30
- 225銘柄すべてに開始日時点の有効な履歴を要求
- 過去バージョンの生データは上書きしない
- APIキーや生OHLCVをGitHubへ出さない
- 不完全な取得はfail-closedで停止
修正版 v1.3 は2026年9月25日にCIで 1208 passed / 1 skipped を確認し、mainへマージ済みです。そのうえで225銘柄×約2年×10戦略の本番検証を再実行しています。最終成績表はまだ未確定です。
最終結果が出たら公開する数字
次回更新では、次を公開予定です。
- 225銘柄すべての取得成否
- 1銘柄あたりの日足本数の最小・中央値・最大
- 10戦略それぞれの評価件数
- 平均ネットリターン
- Profit Factor
- 最大ドローダウン相当
- 期間別・年別の成績差
- 60/20/20各区間での再現性
- 採用 / 不採用 / 保留の判定
勝率だけ良い戦略を採用することはしません。
初心者向け:60/20/20って何?
データを時間順に3つへ分ける方法です。
- 最初の60%:ルールの確認に使う期間
- 次の20%:途中確認の期間
- 最後の20%:できるだけ触っていない状態で確認する期間
全部の期間を見ながらルールを作ると、「過去にだけピッタリ合うルール」を作りやすくなるためです。
この実験室が2年実証で守っていること
- 結果を見てから戦略条件を変えない
- 未来の情報を過去の売買判断に混ぜない
- 売買コストを無視しない
- 225銘柄そろわなければ止める
- 取得不能を0や負けに置き換えない
- 良い結果だけ記事にしない
自分で指標を試す
関連記事
まとめ
2年実証で最初に見つかったのは「勝てる戦略」ではなく、長期検証を壊すデータ条件でした。
短期間なら見逃せる欠損や上場時期、無料APIの取得窓も、225銘柄×約2年へ広げると無視できません。だからこそ、結果が出る前の失敗も残します。
最終成績が確定したら、成功・不合格に関係なくこのページへ追記します。
検証状況:2026年9月25日現在。この記事は過去データを用いた研究・学習記録です。特定銘柄の売買推奨、利益保証、将来成績の予測ではありません。