AIを使いながら、日本株の売買判断を自動化するツールを作っています。
これまでの開発経緯は日本株AI自動売買ツール開発記録にまとめています。
前回は、100万円のバックテストで「本来は買えない株を買っていた」という問題を修正しました。
原因は、株式分割などを反映した調整済み株価を、そのまま「100株を買うために必要な金額」の計算にも使っていたことです。
そこで今回は、バックテストの対象銘柄そのものを見直しました。
これまでの20銘柄には、DISCOや東京エレクトロンなど、100株買うだけで100万円を大きく超えることがある値嵩株も含まれていました。
実運用では50万~100万円程度から始める予定です。
それなら、
「実際にその資金で買える銘柄を対象にしないと意味がない」
ということで、実運用向けの50銘柄を新たに構築しました。
ところが、50銘柄に広げてバックテストすると、別の問題が出てきました。
買えない株は減ったのに、今度は現金が余ったのです。
今回の検証では、銘柄を増やすだけではなく、100株単位・運用資金・最大保有銘柄数まで含めて考える必要があることが分かりました。
実運用向けの50銘柄を作る
今回作ったのは、単純に20銘柄へ30銘柄を追加したものではありません。
実運用を想定した「deployment universe」として、対象を50銘柄に組み直しました。
主な考え方は、
- 100株単位で現実的に購入できる
- 十分な流動性がある
- バックテスト用データを安定して取得できる
- 特定の業種や値嵩株だけに偏りすぎない
というものです。
特に重視したのが購入価格です。
直近20営業日の100株必要資金が50万円以下になるように選定した結果、50銘柄すべてで条件を満たしました。
最新データ時点では、
- 最小:約1.8万円
- 最大:約46.6万円
- 50万円超:0銘柄
となっています。
もちろん、これは「過去5年間のすべての日で50万円以下だった」という意味ではありません。
それでも、50万~100万円から実運用を始めるための候補群としては、以前の20銘柄より現実的になりました。
50銘柄すべてのバックテストデータを作り直す
銘柄を決めただけではバックテストできません。
50銘柄すべてについて、実際の売買や必要資金の計算に使えるデータを用意しました。
今回の検証では、
- realistic CSV
- manifest
- 調整済み価格
- 実売買用のEXEC価格
- 株式分割
- テクニカル指標
- BUY / HOLD / SELLシグナル
などを監査しています。
50銘柄すべてで、
- 必須データ欠損なし
- 日付重複なし
- 価格異常なし
- SIGNAL異常なし
- split処理異常なし
を確認しました。
株式分割があった銘柄は29銘柄、splitイベントは32件ありました。
前回の記事で問題になった「調整済み株価」と「当時実際に必要だった購入資金」も分離しています。
つまり今回から、
シグナルを見る価格と、実際にいくらで何株買えたのかを判断する価格を別々に扱える
ようになっています。
50銘柄にすれば資金効率も良くなると思っていた
ここからが今回の本題です。
もともとの考え方はかなり単純でした。
買える銘柄を増やす
↓
売買候補が増える
↓
現金を使いやすくなる
↓
資金効率が上がる
という想定です。
そこで、
- 初期資金100万円
- 100株単位
- 現物のみ
- 最大2銘柄保有
という条件で50銘柄をバックテストしました。
結果、狙いどおり改善した部分があります。
20銘柄のrealisticバックテストでは、NO_STOPで資金不足によるBUY見送りが120回ありました。
50銘柄では、
120回 → 12回
まで減りました。
「シグナルは出ているけれど100株買うお金がない」という問題は、大幅に改善しています。
ところが、別の数字を見ると想定外の結果になっていました。
資金不足は減ったのに、平均投資比率は37.84%
100万円・最大2銘柄・NO_STOPでの平均投資比率は、
37.84%
でした。
逆に言えば、平均すると資産の約62%が現金のままです。
買える銘柄は増えています。
しかも最大2枠はかなりの期間埋まっています。
それでも資金が余りました。
理由はシンプルです。
今回の仕組みでは、
1銘柄につき100株しか買わない
からです。
例えば10万円で100株買える銘柄を2つ持っても、使う資金は20万円です。
最大2銘柄という制限があれば、残り80万円を使うことはできません。
つまり問題が、
「買いたいけれど資金が足りない」
から、
「買えるけれど保有枠が足りない」
へ変わったことになります。
50銘柄に増やしても利益が増えたわけではない
もう一つ重要だったのが運用成績です。
100万円・最大2銘柄で比較すると、50銘柄版は次の結果になりました。
| 方式 | 最終資産 | リターン | 勝率 | 最大DD |
|---|---|---|---|---|
| NO_STOP | 1,360,710円 | +36.07% | 76.27% | -12.74% |
| FIXED15 | 1,488,572円 | +48.86% | 75.71% | -13.40% |
| TRAILING_F | 1,456,370円 | +45.64% | 77.42% | -11.08% |
| COMBINED_F | 1,468,137円 | +46.81% | 73.97% | -13.40% |
以前の20銘柄版では、NO_STOPの最終資産は約250万円でした。
50銘柄版では約136万円です。
ただし、これを
「50銘柄に増やしたら戦略が悪化した」
とは考えていません。
今回の50銘柄は、以前の20銘柄へ30銘柄を追加したものではなく、実運用しやすい価格帯を重視して構成を変えています。
以前は高価格の半導体株などが大きな利益を生むケースもありました。
一方、50銘柄版ではそうした銘柄の一部が対象外になっています。
比較しているポートフォリオそのものが違うのです。
その代わり最大DDは、NO_STOPで約-23.7%から-12.74%まで小さくなりました。
利益は減ったものの、実際に買いやすく、今回の約5年間では最大DDも小さいポートフォリオになった
と見る方が適切だと思います。
STOPを入れた方が最終資産が増えた
もう一つ興味深かったのがSTOPの結果です。
以前の20銘柄ではNO_STOPの最終資産が最も大きくなっていました。
ところが今回の50銘柄では、
FIXED15:+48.86%
COMBINED_F:+46.81%
TRAILING_F:+45.64%
NO_STOP:+36.07%
となりました。
固定STOP -15%を入れたFIXED15が最終資産トップです。
だからといって、
「-15%損切りが最適」
と結論づけるつもりはありません。
STOPによってポジションが早く空けば、その資金で別の銘柄を買えます。
対象銘柄が変われば、その資金回転の影響も変わります。
今回分かったのは、
STOPの評価は個々の取引だけではなく、ポートフォリオ全体の資金回転まで含めて考える必要がある
ということです。
現金を余らせたくない
今回の結果を見て、自分としては現金が大量に余る状態はあまり良くないと感じました。
今後は信用取引も使う予定です。
その段階で今のような資金配分のままだと、投資可能金額がさらに増える一方で、実際にはほとんど使えていないという状態になりかねません。
また、実運用を始めた直後は利益だけが目的ではありません。
実際の注文価格、約定価格、スリッページ、STOPの動作など、バックテストでは取れないデータを集める期間でもあります。
ある程度取引してくれた方が検証材料も増えます。
そのデータを使ってシステムを改善していくことが、最終的には資産増加にもつながると考えています。
もちろん、取引回数を増やすためにシグナルを緩めるつもりはありません。
まずは同じ50銘柄、同じ売買ルールのまま、資金の使い方を検証することにしました。
最大保有数を2銘柄から5銘柄まで増やしてみる
そこで次に変えたのが、
max_positions(最大保有銘柄数)
です。
対象50銘柄や売買シグナルは変更せず、
- 2銘柄
- 3銘柄
- 4銘柄
- 5銘柄
だけを比較しました。
さらに、実運用開始時に50万円からスタートする可能性もあるため、50万円での検証も行っています。

結果はかなり分かりやすく出ました。
50万円・NO_STOPの場合、平均投資比率は、
| 最大保有数 | 平均投資比率 |
|---|---|
| 2銘柄 | 57.38% |
| 3銘柄 | 66.42% |
| 4銘柄 | 75.19% |
| 5銘柄 | 79.40% |
となりました。
2銘柄では約43%が現金ですが、5銘柄まで増やすと現金比率は約21%まで低下します。
つまり、今回の50銘柄では、
対象銘柄をさらに増やすより、保有できる銘柄数を増やした方が資金を使える
という結果になりました。
50万円では保有枠の影響がかなり大きかった
次に最終資産を見ます。

NO_STOPだけを比較すると、
| 最大保有数 | 最終資産 | リターン | 最大DD |
|---|---|---|---|
| 2銘柄 | 678,700円 | +35.74% | -21.97% |
| 3銘柄 | 860,920円 | +72.18% | -21.02% |
| 4銘柄 | 1,050,050円 | +110.01% | -18.41% |
| 5銘柄 | 1,343,580円 | +168.72% | -18.23% |
50万円という小さな資金では、最大保有数の違いがかなり大きく結果へ影響しました。
2枠から5枠へ増やしたことで、平均投資比率だけでなく最終資産も大きく増えています。
しかも今回のNO_STOPでは、保有枠を増やしたからといって最大DDが悪化したわけではありませんでした。
ただし、この結果だけを見て、
「5銘柄保有が最適」
と決めるのはまだ早いと考えています。
バックテストには、まだ取引コストが入っていないからです。
取引数が増えれば、その分だけ手数料やスリッページの影響も大きくなります。
2枠と5枠では、5年間の資産推移も大きく変わった
最終資産だけでなく、日々の総資産がどのように推移したのかも比較してみました。
条件は50万円・NO_STOPで、最大保有数を2銘柄と5銘柄にした場合の比較です。

興味深いのは、5枠が最初から優位だったわけではないことです。
2022年末では、2枠が約68.0万円、5枠が約63.0万円と、むしろ2枠の方が資産は多くなっていました。
その後、2023年末ごろに5枠が逆転し、2024年以降は差が大きくなっていきます。
特に2025年に入ってから差がさらに広がり、最終的には、
- 2枠:約67.9万円
- 5枠:約134.4万円
となりました。
2枠では2024年に80万円台まで増えたものの、その後は長期間伸び悩んでいます。
一方、5枠では途中で大きく下落する場面はありながらも、その後も資産を伸ばしています。
最大DDも、
- 2枠:-21.97%
- 5枠:-18.23%
となっており、今回の条件では「保有枠を増やした分だけ単純にリスクも大きくなった」という結果ではありませんでした。
この結果を見ると、最終資産だけを比較するよりも、資産がいつ増え、いつ停滞したのかを見ることも重要だと分かります。
もちろん、これだけで「5枠が最適」と判断することはできません。
まだ手数料やスリッページを反映しておらず、取引数が増えることによる影響も確認する必要があります。
ただ今回の約5年間では、保有枠の違いが資金利用率だけでなく、長期的な資産推移にも大きく影響しました。
取引回数が増えることにはコストもある
50万円・NO_STOPでは、決済取引数も大きく変わりました。
- 2枠:57取引
- 3枠:85取引
- 4枠:116取引
- 5枠:141取引
5枠にすると、2枠の約2.5倍です。
バックテスト上では取引機会を多く拾えるため、資金効率が上がりました。
しかし実際の市場では、141回の売買がすべて理想どおりの価格で約定するわけではありません。
特にこのシステムは翌営業日の始値を使って売買する設計なので、寄り付きの値動きや注文状況による価格差を無視できません。
ここで、
「保有枠を増やした方が儲かった」
だけで設計を決めると、実運用との差が再び広がる可能性があります。
だからこそ、次の検証が必要になります。
今回の検証で「銘柄選び」から「資金をどう使うか」へ進んだ
今回の検証を始めたときの目的は、実運用に使える銘柄を増やすことでした。
しかし、実際に進めてみると問題は段階的に変わっていきました。
値嵩株が多く100万円では買いにくい
↓
実際に買える50銘柄を選ぶ
↓
cash不足が大幅に減る
↓
今度は保有枠が少なくcashが余る
↓
最大保有数まで含めて資金配分を考える
という流れです。
今回の検証を通して開発の考え方も変わりました。
以前は、
「銘柄数を増やせば取引機会が増えて資金効率も上がる」
と考えていました。
現在は、
universe・株価水準・100株単位・運用資金・最大保有数・lotをまとめて設計しなければならない
と考えています。
これは実運用へ移るうえで、かなり大きな変化でした。
deployment50は「完成形」ではなく実運用の土台
今回作った50銘柄を、最も利益が出るように選び直すつもりはありません。
バックテスト結果を見て、
「この銘柄は負けたから外そう」
「この銘柄を入れればもっと利益が出る」
と調整し始めると、実運用では再現しないバックテストになりかねません。
現時点のdeployment50は、
最も儲かる50銘柄ではなく、実際に運用できるかを検証するための50銘柄
という位置づけです。
50銘柄あれば、今のところ候補不足よりも資金配分の方が問題になっています。
そのため、すぐ100銘柄へ増やすこともしません。
まずはこの50銘柄を固定して、実運用に近づける検証を続けます。
次は「理想の価格で売買できる」という前提を壊す
今回の検証で、実運用向けの銘柄群と資金配分の基礎ができました。
次の検証では、
手数料とスリッページ
をバックテストに入れます。
特に重視するのはスリッページです。
現在は翌営業日の始値を基準に約定させていますが、実際には必ずその価格で買えるとは限りません。
そこで、
- 0bp
- 5bp
- 10bp
- 20bp
など複数条件で、約定価格が不利になった場合にどこまで成績が落ちるかを確認する予定です。
さらに次の検証では、約5年間の結果をまとめて見るだけではなく、年別や前半・後半など期間を分けて、成績が特定の時期に偏っていないかを確認します。
必要があれば、その後に上昇相場・下落相場など相場環境ごとの違いも検証する予定です。
ここまで終えたら、バックテストを延々と続けるのではなく、注文管理や証券会社との連携など、実際に動かすためのシステム開発へ進む予定です。
まとめ
今回の検証では、20銘柄から実運用向け50銘柄へ対象を見直しました。
その結果、資金不足によるBUY見送りは大きく減った一方、100株・最大2銘柄では現金が余りやすいという新しい問題が見つかりました。
さらに最大保有数を増やすと、50万円運用では投資比率が上がり、今回の約5年間では資産推移にも大きな差が出ています。
今回の一番大きな収穫は、
「買える銘柄を増やす」だけではなく、運用資金・100株単位・最大保有数まで含めて設計する必要がある
と分かったことです。
開発の視点は、「どの銘柄を売買するか」から、
「限られた資金をどう使うか」
まで一段進みました。



コメント