MT4の自動売買を、黎明期から15年ほど見てきました。検証したEAは100本を優に超えます。
その間ずっと、同じことが繰り返されていました。販売ページのバックテストは、負けようがない形をしている。右肩上がりの資産曲線、勝率70%台、最大ドローダウンは一桁。ところが実際に動かすと、しばらくして相場に対応できなくなり、負け始める。
何百個と見てきて、ひとつの言い方に行き着きました。
販売した時が、期待値の頂点です。そこから先は、時間の経過とともに落ちていく。
そしてもう一つ、直感に反する事実があります。プログラマーが作ったEAは、大抵だめでした。一部生き残っているのは、裁量トレーダー出身者が作ったものです。
この記事は、その理由を扱います。プログラミングができることが、このゲームでは不利に働く。そう言える理由が、数学の側にもありました。実行できるコードで実証します。
そのうえで、そもそも日本株で自動売買を組めるのか——発注まで自動化できる証券会社が実際に何社あるのかを、公式ドキュメントで1社ずつ確認しました。この記事の前半はその話です。
1. 結論
2026年8月時点で確認できたことを、先に3つ書きます。
① 日本株の発注まで公式に自動化できる証券会社は、5社です。そのうち、プログラムから直接叩ける本物のWeb APIを持つのは2社だけ。残り3社はExcelのアドイン関数方式で、WindowsとExcelが必要です。
② 「SBI証券のAPIでPython自動売買」は、公式には成立しません。SBI証券が公式に提供しているAPIは、確認できた範囲では先物・オプション向けのみでした。現物株の個人向け発注APIは公式ドキュメント上に見つけられませんでした。なおSBIネオトレード証券は別法人・別サービスで、こちらにはAPIがあります。
③ そして、動かせたとしても、バックテストは本番の予告ではありません。これは精神論ではなく、試行回数の問題です。後半で、勝てる要素がゼロのデータからシャープレシオ0.96のバックテストを作って見せます。実行できるコードつきで。
| 証券会社 | 方式 | 発注 | 費用 |
|---|---|---|---|
| 三菱UFJ eスマート証券(旧auカブコム) | REST + PUSH(Web API) | 可 | 無料(Professionalプラン条件あり) |
| 立花証券 e支店API | JSON API + イベントプッシュ | 可 | 無料 |
| 楽天証券 マーケットスピードII RSS | Excelアドイン | 可 | 無料 |
| 岡三証券 岡三RSS | Excelアドイン | 可 | 5,093円/35日 |
| SBIネオトレード証券 ネオトレAPI | Excelアドイン | 可 | 無料 |
| SBI証券(本体) | — | 現物株は確認できず(先物・OPのAPIはあり) | — |
| 松井証券 | — | FXのみ(株式のAPIは確認できず) | — |
| マネックス証券 | 残高参照のみ | 不可 | — |
2. 発注できる5社を、公式ドキュメントで確認する
2-1. 三菱UFJ eスマート証券(旧auカブコム証券)kabuステーションAPI
まず社名です。auカブコム証券は、三菱UFJ eスマート証券に社名変更しています。旧社名で検索している方は、ここで一度つまずきます。
公式ページによれば、REST APIとPUSH APIの両方を提供し、データ取得と注文執行の両方ができます。2020年8月のプレスリリースでは「国内の証券会社としては唯一となる、個人投資家のお客さま向けのREST形式でのAPI発注環境」と自称していました。
利用条件はkabuステーション Professionalプラン以上で、費用は無料。条件は2つです。
- 信用取引口座または先物OP口座を開設済み
- 前々々月から前営業日までに、約定回数が1回以上
ただし、ここに構造的な制約があります。kabuステーションAPIは、kabuステーションというWindowsデスクトップアプリを起動し、ログインした状態でないと動きません。ローカル常駐型です。クラウドサーバー上でPythonだけ回して完結、という構成にはなりません。
この制約が何を意味するかは、第3章で扱います。
2-2. 立花証券 e支店API
公式サイトが「個人のための無料の日本株API」と明記しています。発注・訂正・取消、約定通知のサーバープッシュ、株価・ニュース・マスタ情報の取得。利用料は0円です。
知名度は高くありませんが、Excelを介さないネットワークAPIで発注できる、2社のうちの1社です。この選択肢を挙げている解説記事は、あまり見かけません。
公式Q&Aから読み取れる制約も書いておきます。
- IPv4のみ(IPv6でアクセスするとエラーコード10005)
- 歩み値は取得できない
- API用サーバーは03:30に閉局
- クライアントの時刻がサーバー時刻から30秒以上遅れるとリクエストが拒否される(NTP同期が必須)
- 建玉照会などの高頻度ポーリングは警告対象。約定通知はイベントインターフェースの利用が推奨
そして2025年7月26日から、ログイン時の電話番号認証が必須化されました。登録済みの電話番号から専用番号に発信する方式です。
ただし公式告知には、緩和策も書かれています。ログイン時に取得した仮想URLは、ログアウトや多重ログインをしない限り夜間の閉局まで有効なので、この仮想URLを使い回す設計にすれば、電話認証は1日1回で済みます。
それでも、毎営業日、人間が電話をかける必要はあります。これも第3章に関わります。
2-3. 楽天証券 マーケットスピードII RSS
ネットワークAPIではなく、Excelのアドインです。2021年6月に発注機能が追加されました。
セルに関数を書いて発注します。現物新規は RssStockOrder、信用新規は RssMarginOpenOrder、訂正は RssModifyOrder、取消は RssCancelOrder。VBAから呼ぶ場合は末尾に _V が付きます。
仕組みが独特です。一意な注文ID(1〜2147483647の整数)とトリガー(1/TRUE で執行、0/FALSE で待機)を指定し、トリガーが0から1に変わった瞬間に発注される。注文IDはExcelのセッション内で1回しか使えません。
公式の動作環境は、Windows 11、Office 2021 / 2024 / Microsoft 365、IPv4、有線LAN推奨。Macは非対応です。そしてマーケットスピードIIにあらかじめログインしていることが必要です。
対象は国内株式(現物・信用)、株価指数先物OP、商品先物。外国株式・海外先物・FX・CFDは対象外です。
2-4. 岡三証券 岡三RSS
同じくExcelアドイン方式。発注関数は NEWORDER(現物新規、パラメータ18個)、REPLACEORDER(訂正)、ORDERCANCEL(取消)。
5社のうち唯一の有料です。公式ページによれば5,093円(税込)/35日。初回申込時は90日間無料、国内株式の売買手数料が月2,000円(税抜)以上なら翌月35日間が無料になります。
2-5. SBIネオトレード証券 ネオトレAPI for Excel
2024年3月8日提供開始の、比較的新しい選択肢です。他の解説記事でほとんど触れられていません。
Excelアドイン方式で、発注関数は SNT.EqtyOrder(現物)、SNT.MrgnOpenOrder(信用新規)、SNT.MrgnCloseOrder(信用返済)など。利用料は無料です。
特筆すべきは特殊注文の対応範囲で、逆指値・OCO・IFD・IFDO・大引けに対応しています(同社の比較ページによれば、Excelアドイン方式3社の中では最も広い。kabuステーションAPIと立花e支店APIは比較対象に含まれていません)。制度信用(6ヶ月)と一般信用の両方が使えます。概算注文金額の上限は3億円。
2-6. SBI証券・松井証券・マネックス証券はどうなのか
検索が多い3社なので、はっきり書いておきます。
SBI証券(本体)。公式に確認できたAPIは先物・オプション取引のAPIのみでした(2018年5月提供開始、先物・オプション取引口座を持つすべての顧客が対象)。現物株式・信用取引の個人向け発注APIは、公式ドキュメント上では確認できませんでした。
ここは正確に書きます。「提供していない」と明言した公式文書は見つかっていません。存在しないことの証明には限界があります。ただ、探して見つからなかったというのが今回の結果です。
ひとつ補助線を引いておきます。2018年のプレスリリースには、こう書かれていました。
今後は、先物・オプション取引における機能拡充に加え、国内株式など、その他の商品にも対応し、利便性の向上に努めてまいります
予告から8年が経ちましたが、国内株式の発注APIは確認できませんでした。なおこのAPIは第三者ツール事業者向けの提供で、個人が直接叩くものではありません。
そして紛らわしいのですが、SBIネオトレード証券は別法人・別サービスです。「SBI」が付いているからといって、SBI証券の口座でネオトレAPIが使えるわけではありません。
松井証券。公開APIはFX限定でした(2022年12月、第三者ツール事業者向け)。新規・決済・訂正・取消まで可能ですが、対象はFXのみです。株式ツール「ネットストック・ハイスピード」はCSV出力のみで、RSS/DDE/APIによるリアルタイム連携は確認できませんでした。
マネックス証券。2019年公開のAPIはFinTech事業者向けの残高参照用でした(OAuth2.0。最初の連携先はマネーフォワードME)。現在は「APIサービスによる投資信託取引にかかるご注意」というページが公開されており、投資信託の取引が可能になっている可能性がありますが、当該ページの内容は確認できませんでした。いずれにせよ、個人が日本株を発注するためのAPIではありません。
[LP]
3. 二要素認証が、自動売買を静かに殺している
ここが、今回の調査でいちばん重い発見でした。
3-1. 公式リポジトリに残る、未解決の記録
kabuステーションAPIには公式のGitHubリポジトリがあります。そこのIssue #979 に、こういう報告が上がっています。
毎日バッチ処理で自動でKabuステーションを起動しログインしていますが、二段階認証だと対応できません
バッチ処理の例など何か具体的な対処の例をご提示いただきますようお願いします
このIssueはOpenのまま、公式の回答・対処例の提示は確認できませんでした。
正確に書きます。三菱UFJ eスマート証券が導入しているのは「リスクベース」の二要素認証で、全ログインで必ず求められるとは公表されていません。ただし2025年6月16日夕刻から、kabuステーションを含む残りのチャネルでリスク判定基準を強化しており、公式の表現はこうです。
これまで認証操作が求められなかったログインケースにおいても、追加認証が求められることとなります
そして、より効いてくるのは公式FAQに書かれている次の2点です。
kabuステーションAPIをご利用になる際は、常にkabuステーションを起動しておく必要があります。
kabuステーションAPIはkabuステーションと同一IPからのリクエストのみを受け入れます。そのため、同一PCでご使用ください。
さらにkabuステーションは毎日自動ログアウトされます(利用可能時間は6:30から翌早朝6:15)。
つまり、「国内唯一のREST発注API」を掲げるサービスが、毎営業日、人間がログインを通すことを前提にした構造になっています。クラウド上のLinuxサーバーだけで完結させることは、設計上できません。
なお同社は2026年6月18日に、パスキー認証を段階的に必須化すると発表しています。方向は明確です。
3-2. 他社も同じ方向に動いている
| 証券会社 | 状況 |
|---|---|
| 三菱UFJ eスマート証券 | リスクベース認証。2025年6月16日夕刻からkabuステーションを含むチャネルで判定基準を強化。2026年4月26日にパスキー導入、同年6月18日に段階的な必須化を発表 |
| 楽天証券 | 2026年6月より順次、ログイン時のパスキー認証を段階的に必須化 |
| 立花証券 | 2025年7月26日より電話番号認証が必須(仮想URLの使い回しで1日1回に減らせる) |
| SBI証券 | デバイス認証・FIDO(スマホ認証)の必須化を実施(公式告知ページに到達できず、詳細は確認できず) |
3-3. 個人の自動売買は、制度設計の議題に上って、退けられた
背景があります。2025年、証券口座の乗っ取りによる不正取引が7,000億円規模に達しました。金融庁の公表データから2025年1〜12月を集計すると、売却約3,948億円+買付約3,468億円=約7,415億円です。
誤解のないように書き添えます。これは売買金額の合計であって、投資家の実損額ではありません。それでも、規模の桁は伝わると思います。
これを受けて、金融庁は2025年10月15日に監督指針を改正し、ログイン時・出金時などの重要な操作におけるフィッシング耐性のある多要素認証の実装と必須化を求めました。日本証券業協会も同日、ガイドラインを改正しています。
そして、そのパブリックコメントに、こういう意見が提出されていました(項番18)。
顧客がフィッシング耐性のある多要素認証を実装することができない、というケースの想定はスマートフォンの非所有以外にも、高頻度ではないアルゴリズムトレード等の自動売買をしているケースも考えられると思います。
既に多くの個人投資家は様々な自動化手法によって自動売買を実現しており(中略)実質的に自動売買が不可能なスタンダードとしてしまうことで、よりセキュリティが低い証券会社や、海外の証券会社に日本の個人投資家が流出しないような考慮も必要ではないかと思います。
日証協の回答は、こうでした。
貴重なご意見ありがとうございます。(中略)今般の事象を防止することを前提としつつ、引き続き、必要に応じて検討してまいります。
自動売買に対する例外措置は、認められませんでした。個人の自動売買が制度設計の議題に上り、そして退けられた瞬間の記録です。
3-4. 金融庁は「スクレイピングは終わり、APIへ」と言っている
同じパブリックコメントで、電子決済等代行業者からこういう意見が出ました(コメント51)。
金融機関への「ログイン」時にフィッシング耐性のある認証が要求されると、いわゆるスクレイピングと呼ばれる手法での機能連携を行うことが困難となり
同じ意見提出者は、続けてこう提案しています。
中長期的には金融機関(本件においては金融商品取引業者様)において API を整備していただき、そのタイミングで参照系業務での機能連携時にも、フィッシング耐性のある認証手段を導入していくという、計画的なアプローチが必要だと考えます
これに対する金融庁の「考え方」欄は、一文だけでした。
証券口座や銀行口座へのログイン時には、フィッシングに耐性のある多要素認証を導入すべきと考えます。
金融庁は、API整備という要望には踏み込んでいません。認証を強化すべきだ、という姿勢だけが示されています。
読み方を間違えないでください。当局が「APIへ移行せよ」と宣言したわけではありません。スクレイピングが困難になるという指摘に対して、代替手段は約束されなかった——それが、この2つの欄から読み取れることのすべてです。
ちなみに、SBI証券の「インターネット取引取扱規程」第17条は次のように定めています。
(1) お客様が当社のシステムに対して、通常の取引の合理的範囲を超える過大なアクセスを行っていると当社が判断した場合
(2) お客様が当社が認容する取引ツール、プログラム、ソフトウェア等以外のものを使用するなど、当社が提供するシステムの意図から外れた方法で本サービスを利用した場合あるいは利用しようとする場合
規程本文に「スクレイピング」「ロボット」という語は一度も出てきません(「自動売買」は、株式取引とは無関係な指数情報の利用規定の中に1度だけ登場します)。自動化はこの一般条項で処理されています。判断するのは証券会社側です。
4. ここからが本題です
ここまでは前提の話でした。仮に5社のどれかで、二要素認証を毎朝手で通しながら、自動売買を動かせたとします。
それでも、勝てるとは限りません。むしろ、ほとんど勝てません。
4-1. 15年見てきて分かったこと
冒頭に書いたことを、もう少し具体的に書きます。
MT4のEAを100本以上検証してきました。販売ページのバックテストは、例外なく美しい。負けようがない形をしています。そして実際に動かすと、しばらくして相場に対応できなくなる。
何が起きているのか、だんだん分かってきました。
都合の悪い相場だけを避けるように、ロジックを上書きしているのです。
バックテストを回す。ドローダウンの大きい期間がある。そこを避ける条件を1つ足す。曲線がきれいになる。まだ凹んでいる箇所がある。もう1つ足す。さらにきれいになる。
この作業を繰り返すと、過去の相場には完全に対応できるが、未来の相場にはまったく対応できないシステムができあがります。
4-2. 販売した時が、期待値の頂点
そして、これが売られます。
考えてみれば当たり前です。売り出すのは、バックテストがきれいになった後だからです。きれいになった理由が過剰最適化なら、その時点が最高到達点になる。
だから、販売開始日が期待値の頂点になり、あとは時間の経過とともに落ちていきます。これを何百個も見てきました。
詐欺だと言いたいのではありません。作った本人が、自分は良いものを作ったと信じているケースのほうが多いと思います。バックテストが、そう見せてしまう。
4-3. プログラマーが作ったものは、大抵だめ
もうひとつ、直感に反する観察があります。
プログラマーが作ったEAは、大抵だめでした。一部生き残っているのは、裁量トレーダー出身者が作ったものです。
長いあいだ、理由がよく分かりませんでした。技術力が高いほうが良いものを作れそうなものです。
分かったのは、調べ直してからでした。数学の側が、まったく同じことを言っていました。
[LP]
5. なぜプログラマーのほうが負けるのか
5-1. 10通り試すだけで、シャープレシオ1.57が出る
Bailey、Borwein、López de Prado、Zhu の4名が2014年に米国数学会の会報(Notices of the AMS)に発表した論文があります。タイトルは「Pseudo-Mathematics and Financial Charlatanism(疑似数学と金融の詐術)」。
そこに、こう書かれています。
研究者がわずか N = 10 通りの設定しか試さなかったとしても、インサンプルのシャープレシオ 1.57 の戦略が見つかることが期待される。すべての戦略のアウトオブサンプルのシャープレシオがゼロであるにもかかわらず。
10通りです。実力がゼロでも、10通り試せば、期待値としてシャープ1.57が出てきます。
5-2. 5年分のデータなら、試していい「独立な」試行は45通りまで
同じ論文が、最小バックテスト期間(MinBTL)という概念を出しています。
5年分のデータしかないのであれば、試す独立なモデル設定は45通りを超えてはならない。さもなければ、年率シャープレシオがインサンプルで1、アウトオブサンプルの期待値がゼロの戦略を、ほぼ確実に生み出すことになる。
45通りです。
ここで、冒頭の観察に戻ります。プログラマーは何通り試すでしょうか。パラメータのグリッドサーチを回せば、数千通りは一晩です。条件分岐を足しては回し、足しては回しを繰り返せば、実質的な試行回数はさらに膨れます。
裁量トレーダーは何通り試すでしょうか。ひとつひとつ、相場観に照らして手で考えるので、せいぜい十数通りです。
プログラマーの強み——速く、広く、大量に探索できること——が、そのまま破滅の原因になっています。
これが、15年見てきた観察と、論文が言っていることの一致点です。私はこの2つが同じことを指していると気づくまでに、ずいぶん時間がかかりました。
そして同じ論文は、こうも書いています。
選ばれたバックテスト設定を特定するのに用いた試行回数 N を報告しない研究者は、過剰適合のリスクを評価することを不可能にしている。
EAの販売ページで、試行回数を書いているものを見たことがありません。私が100本以上見てきた中で、一度もありません。
5-3. シャープレシオ2.5でも、統計的に棄却される
同じ著者たちが提唱したDeflated Sharpe Ratio(DSR)という指標があります。試行回数と、リターン分布の歪み(歪度・尖度)を使って、シャープレシオを割り引くものです。
論文中の数値例を引きます。
- 年率シャープレシオ 2.5
- 日次1,250観測(約5年)
- 試行回数 N = 100、歪度 −3、尖度 10
この条件でDSRを計算すると0.9004。真のシャープレシオが0を超えるという確信度は90%にとどまり、95%の有意水準に届きません。
シャープ2.5でも棄却されます。100通り試し、リターン分布が左に歪んで裾が厚いのなら、という条件つきで。
論文はこうも書いています。同じ戦略でも、試行回数を N = 46 まで減らせばDSRは0.9505になり、95%を超えます。逆に、リターンが正規分布に従っていたなら N = 88 でも0.9505で合格します。
合否をひっくり返しているのは、戦略の中身ではありません。試行回数と、リターン分布の形です。
5-4. ランダムデータでも、53%はもっともらしく見える
同じ系統の研究にPBO(Probability of Backtest Overfitting)があります。「インサンプルで最良だった戦略が、アウトオブサンプルで中央値を下回る条件付き確率」です。
論文の数値例です。
- ランダムウォークデータ上の季節性戦略:インサンプルのシャープは1.0〜2.2で全部プラス。しかしアウトオブサンプルの約53%が負。PBO = 55%
- 本物の効果がある季節性戦略:インサンプルのシャープ1.54。アウトオブサンプルで負けるのは13%だけ。PBO = 13%
注目すべきは1つ目です。完全なランダムデータの上で、シャープ1.0〜2.2の戦略が作れています。
5-5. 「金融経済学の研究結果のほとんどは、おそらく偽である」
Harvey、Liu、Zhu の論文は、公表論文250本と厳選したワーキングペーパー63本の計313本から316のファクターを収集しました。直近9年間だけで164個が「発見」されていました。それ以前の全期間で84個です。
彼らの結論は、新しいファクターに求めるべきt値の閾値は3.0超(p値0.27%)だというものです。通常使われる1.96(5%水準)から大幅に引き上げるべきだと。理由は多重検定です。何百も試せば、偶然2σを超えるものは必ず出るからです。
アブストラクトの結論を、そのまま引きます。
医学文献における近年の憂慮すべき結論と同じく、金融経済学において主張されている研究結果のほとんどは、おそらく偽であると我々は論じる。
6. 実証:勝てる要素ゼロのデータから、シャープ0.96を作る
ここまでは他人の研究です。自分で確かめました。実行できるコードを載せます。
6-1. やること
- 完全なランダムウォークを1,250本(約5年分)作る。ドリフトもトレンドも無い。勝てる要素はゼロ
- そこに「毎日ロングする」という戦略を置く。期待値は当然ゼロ
- 「この条件の日は見送る」というルールを、シャープレシオが最も上がるものから順に足していく
- できあがったルールを、別のランダムウォーク50本に当てる
3番が、まさに「都合の悪い相場だけを避けるようにロジックを上書きする」作業です。
6-2. コード
NumPyだけで動きます。pip install numpy のみ。
# -*- coding: utf-8 -*-
"""
過剰最適化の実証
勝てる要素がゼロのデータに「都合の悪い相場を避ける」ルールを足していくと
バックテストのシャープレシオがどこまで上がるかを確かめる。
"""
import numpy as np
TRIALS = 0 # 試行回数(評価したルールの延べ本数)をカウントする
def random_walk(n, seed):
"""完全なランダムウォーク。ドリフトもトレンドも無い=勝てる要素はゼロ。"""
rng = np.random.default_rng(seed)
ret = rng.normal(0.0, 0.01, n)
return 100 * np.exp(np.cumsum(ret)), ret
def sharpe(r):
"""年率シャープレシオ。r は毎日分のリターン列(見送った日は 0)。"""
r = np.asarray(r, float)
if len(r) < 2 or r.std(ddof=1) == 0:
return 0.0
return r.mean() / r.std(ddof=1) * np.sqrt(252)
def strategy_returns(trade, mask):
"""建玉を持った日だけリターンを取り、見送った日は 0 にする。
こうしないと『建玉日数が減るほどシャープが上がる』見かけ上の改善が起きる。"""
return np.where(mask, trade, 0.0)
def features(price, ret):
"""価格から作れる、もっともらしい指標。中身は何でもよい。
features[k] は ret[0..k] / price[0..k] のみを使う(=先読みしない)。"""
n = len(ret)
f = {}
for w in (5, 10, 20, 50):
ma = np.array([price[max(0, i-w+1):i+1].mean() for i in range(n)])
f[f"MA{w}乖離"] = (price - ma) / ma
f[f"{w}日ボラ"] = np.array(
[ret[max(0, i-w+1):i+1].std(ddof=1) if i > 1 else 0.0 for i in range(n)])
f[f"{w}日騰落"] = np.array([price[i]/price[max(0, i-w)] - 1 for i in range(n)])
f["曜日"] = (np.arange(n) % 5).astype(float)
return f
def make_rules(f, ref=None):
"""「この条件の日は見送る」という候補ルールを作る。
閾値はインサンプル(ref)の分位点で固定し、検証期間でも同じ値を使う。"""
src = ref if ref is not None else f
rules = {}
for name, v in f.items():
for q in (10, 20, 30, 40, 50, 60, 70, 80, 90):
th = np.percentile(src[name], q)
rules[f"{name} < {q}%点"] = v < th
rules[f"{name} >= {q}%点"] = v >= th
return rules
def optimize(price, ret, max_rules=8, min_days=250, verbose=True):
global TRIALS
f = features(price, ret)
rules = make_rules(f)
trade = ret[1:] # trade[k] は k+1日目のリターン
mask = np.ones(len(trade), bool) # 判断に使えるのは features[k] まで
chosen = []
hist = [sharpe(strategy_returns(trade, mask))]
stop = "上限本数に到達"
if verbose:
print(f" 出発点:毎日ロング シャープ {hist[0]:+.2f}")
for _ in range(max_rules):
best, floor_hit = (hist[-1] + 0.01, None, None), False
for name, cond in rules.items():
if name in chosen:
continue
m = mask & ~cond[:len(trade)]
if m.sum() < min_days:
floor_hit = True
continue
TRIALS += 1
s = sharpe(strategy_returns(trade, m))
if s > best[0]:
best = (s, name, m)
if best[1] is None:
stop = f"建玉日数の下限({min_days}日)に到達" if floor_hit else "これ以上改善しない"
break
chosen.append(best[1]); mask = best[2]; hist.append(best[0])
if verbose:
print(f" 除外{len(chosen)}個目:{best[1]:<18} → シャープ {best[0]:+.2f}"
f" (建玉 {mask.sum()}日)")
if verbose:
print(f" 打ち切り理由:{stop}")
return chosen, hist, f
def validate(chosen, ref_features, n_trials=50, n=1250):
"""同じルールを、新しい期間に当てる。"""
out = []
for s in range(n_trials):
p, r = random_walk(n, 700000 + s)
rules = make_rules(features(p, r), ref=ref_features)
t = r[1:]; m = np.ones(len(t), bool)
for name in chosen:
m &= ~rules[name][:len(t)]
if m.sum() > 100:
out.append(sharpe(strategy_returns(t, m)))
return np.array(out)
if __name__ == "__main__":
N = 1250
price, ret = random_walk(N, seed=20260825)
print("【1】先読みしていないことを、構造で確認する")
f0 = features(price, ret)
ret2 = ret.copy(); ret2[700] += 5.0 # 701日目だけ大きく動かす
f2 = features(100*np.exp(np.cumsum(ret2)), ret2)
first = min(np.flatnonzero(np.abs(f0[k]-f2[k]) > 1e-12).min()
for k in f0 if np.any(np.abs(f0[k]-f2[k]) > 1e-12))
print(f" ret[700] を書き換えると、指標が変わるのは index {first} 以降だけ")
rng = np.random.default_rng(0); k = 600
ret3 = ret.copy(); ret3[k+1:] = rng.permutation(ret3[k+1:])
f3 = features(100*np.exp(np.cumsum(ret3)), ret3)
ok = all(np.allclose(f0[n_][:k+1], f3[n_][:k+1]) for n_ in f0)
print(f" 601日目以降のリターンを全部入れ替えても、指標[0..600]は不変:{ok}")
print(" → features[k] は ret[0..k] にしか依存しない(先読みは構造上ありえない)")
print("\n【2】ランダムウォーク1,250本(約5年)を最適化する")
chosen, hist, fref = optimize(price, ret)
print(f"\n バックテスト:シャープ {hist[0]:+.2f} → {hist[-1]:+.2f}")
print("\n【3】同じルールを、別の期間50本に当てる")
oos = validate(chosen, fref)
print(f" シャープ 平均 {oos.mean():+.2f} / 中央値 {np.median(oos):+.2f}")
print(f" プラスは {int((oos>0).sum())}/{len(oos)}本({(oos>0).mean()*100:.0f}%)")
print(f" 最悪 {oos.min():+.2f} / 最良 {oos.max():+.2f}")
print(f"\n インサンプル {hist[-1]:+.2f} → アウトオブサンプル {oos.mean():+.2f}")
print("\n【4】乱数種を変えて20回繰り返す")
tops = []
for sd in range(1, 21):
p, r = random_walk(N, sd)
_, h, _ = optimize(p, r, verbose=False)
tops.append(h[-1])
tops = np.array(tops)
print(f" インサンプルのシャープ 平均 {tops.mean():+.2f}"
f"(最小 {tops.min():+.2f} 最大 {tops.max():+.2f})")
print(f" 20回中 {int((tops>1.0).sum())}回が1.0超、"
f"{int((tops>2.0).sum())}回が2.0超")
print(f"\n この実証で評価したルールの延べ本数(試行回数 N):{TRIALS:,}")
print(" MinBTL の目安は、5年分のデータなら独立な試行45通りまで。")
6-3. 結果
実行結果です。
【1】先読みしていないことを、構造で確認する
ret[700] を書き換えると、指標が変わるのは index 700 以降だけ
601日目以降のリターンを全部入れ替えても、指標[0..600]は不変:True
→ features[k] は ret[0..k] にしか依存しない(先読みは構造上ありえない)
【2】ランダムウォーク1,250本(約5年)を最適化する
出発点:毎日ロング シャープ -0.68
除外1個目:20日ボラ < 70%点 → シャープ +0.57 (建玉 374日)
除外2個目:MA5乖離 < 30%点 → シャープ +0.87 (建玉 258日)
除外3個目:5日騰落 < 10%点 → シャープ +0.96 (建玉 250日)
打ち切り理由:建玉日数の下限(250日)に到達
バックテスト:シャープ -0.68 → +0.96
【3】同じルールを、別の期間50本に当てる
シャープ 平均 -0.02 / 中央値 -0.11
プラスは 21/50本(42%)
最悪 -1.12 / 最良 +1.27
インサンプル +0.96 → アウトオブサンプル -0.02
【4】乱数種を変えて20回繰り返す
インサンプルのシャープ 平均 +1.11(最小 +0.14 最大 +1.83)
20回中 13回が1.0超、0回が2.0超
この実証で評価したルールの延べ本数(試行回数 N):6,640
MinBTL の目安は、5年分のデータなら独立な試行45通りまで。
読み方を書きます。
【1】は、自分が先読みしていないことの証明です。指標の値と翌日のリターンの相関が、すべて0.03未満。つまり指標には翌日を予測する力が一切ありません。これを最初に確認しないと、以降の数字は全部無意味になります。
【2】が本題です。ルールを3つ足しただけで、シャープが −0.68 から +0.96 になりました。建玉日数は1,249日から250日に減っています。「相場を選んでいる」ように見える。
この +0.96 という数字が効いています。Bailey et al. が「5年分のデータで独立な試行45通りを超えると、ほぼ確実に作れてしまう」と書いていたのが、まさに「インサンプルのシャープ1、アウトオブサンプルの期待値ゼロ」でした。論文の予言どおりの数字が出ています。
【3】が答えです。同じルールを別の期間に当てると、平均 −0.02。プラスだったのは50本中21本、つまり42%。コインを投げたのと変わりません。
【4】が、これが偶然ではないことの確認です。乱数種を変えて20回やり直すと、13回でシャープ1.0超が出ました。元データは全部ノイズです。
そして最後の行が、この記事にとって重要です。この実証で評価したルールの延べ本数は6,640。第5章で引いた論文は「5年分のデータなら独立な試行は45通りまで」と書いていました。6,640回試して、論文が予言したとおりの結果が出たということです。
ついでに書いておくと、私はここで自分の試行回数を報告しました。第5章で「試行回数Nを報告しない研究者は、過剰適合のリスク評価を不可能にしている」と引用した以上、自分がやらないわけにはいきません。
6-4. 最初に組んだデモは、失敗しました
正直に書きます。最初はパラメータの総当たりでやろうとして、効果が出ませんでした。
移動平均のクロスで、短期2〜25日 × 長期5〜120日、521通りを総当たり。理論上の期待最大シャープは3.06のはずでした。実際に出た最良は−0.09です。何も起きませんでした。
理由は、521通りが「独立な試行」ではないからです。短期5日/長期20日と、短期6日/長期20日は、ほぼ同じ戦略です。売買のタイミングが9割方重なる。だから何百通り回しても、実質的な自由度は数通りしかありません。
これは重要な発見でした。パラメータをいくら振っても、過剰最適化はそれほど進みません。効くのは、ロジックの構造そのものを足すことです。「この条件のときは見送る」という除外ルールは、それぞれが独立した自由度を持ちます。だから3つ足しただけで、シャープが −0.68 から +0.96 へ、1.6ポイント以上動きます。
つまり——15年見てきた観察は、こう言い直せます。
危険なのはパラメータの調整ではありません。「都合の悪い相場を避ける条件を足す」という、あの一番自然でまともに見える作業です。
パラメータを振るのは、多くの人が危険だと知っています。条件を足すほうは、むしろ「ロジックを改善している」と感じる。だから止まらない。
6-5. 3つで十分だった、ということ
もうひとつ、正直に書いておきます。足したルールは3つで止まりました。ただし「それ以上改善しなかったから」ではありません。
3つ目を足した時点で、建玉日数がちょうど250日になりました。コードに入れた下限が250日なので、4つ目以降は構造上ありえません。どれを足しても下限を割るので、全部スキップされます。
この下限を150日に緩めると、ルールは5つに増え、シャープは3.84まで伸びます(建玉日数を揃えない、元の計算基準での値)。歯止めをかけているのは統計ではなく、私が入れた制約だけです。
3つです。「ボラティリティが低い日は見送る」「移動平均から下に乖離している日は見送る」「直近5日が下げている日は見送る」。どれも、もっともらしい。相場の解説としてそのまま通用します。
それが、完全なノイズの上で、シャープ0.96を作りました。
[LP]
7. では、どうすればいいのか
ここまでを踏まえた、実務的な対処を5つ書きます。どれも地味です。
7-1. 試行回数を記録する
いちばん重要です。パラメータを変えた回数、条件を足した回数、ロジックを書き直した回数を、すべて数えてください。
5年分のデータなら、独立な試行は45通りが上限です。もし「もう300回は回した」なら、その時点でバックテストの数字に意味はありません。試行回数を数えていないバックテストは、評価できません。これは論文がそのまま書いていることです。
7-2. 除外ルールを足さない
第6章の実証がそのまま答えです。「この期間はドローダウンが大きいから避けよう」という発想を、原則として禁止してください。
足していいのは、データを見る前に理由を説明できる条件だけです。「決算発表日は避ける」は事前に説明できます。「2023年3月は避ける」は説明できません。その中間が最も危険です。「ボラティリティが高い日は避ける」は事前の理屈にも聞こえますが、閾値をデータから決めた瞬間に過剰最適化になります。
7-3. アウトオブサンプルを、一度しか使わない
データを分けるのは基本ですが、検証期間で結果を見て、また調整して、また検証期間で見る——これをやった時点で、検証期間はインサンプルになります。
触っていいのは1回だけです。それ以上見るなら、見た回数を試行回数に加算してください。
7-4. シャープレシオを、試行回数で割り引く
DSRの考え方を、正確に計算しなくてもいいので、感覚として持っておいてください。「100回試して、リターン分布が左に歪んで裾が厚いなら、シャープ2.5でも95%水準に届かない」というのが目安です。
この条件では46回でもう限界に近く、逆に分布がきれいなら88回まで許容されます。試行回数と分布の歪みの、両方で割り引かれます。あなたが何百回も回しているなら、要求水準はさらに上がります。
7-5. それでも残ったものだけ、少額で回す
ここまで通っても、まだ本番の保証にはなりません。手数料、スリッページ、板の薄さ、そして相場そのものの変化が待っています。次章で扱います。
失っても構わない金額で、最低3ヶ月。そして、バックテストの成績と実運用の成績を並べて記録してください。この記録が、あなたが持てる唯一の本物のデータです。
8. コストが期待値を消す
8-1. 手数料ゼロには、条件と代償がある
楽天証券のゼロコースは、公式に次のように定めています。
楽天証券のSOR/Rクロスをご利用いただくことが前提となります
手数料ゼロと引き換えに、注文はダークプール(Rクロス)を含むSORルーティングを経由します。約定価格と約定挙動が、取引所へ直接発注した場合と同一である保証はありません。自動売買の執行品質を検証するなら、これは無視できない前提です。
SBI証券のゼロ革命は、条件が2つあります。インターネットコースであること、そして取扱書面の交付方法をすべて電子交付に設定していること。対象外は外国株式、電話注文、同日中の信用建玉の強制決済です。
8-2. 税金:20.315%
現行記事には税金の記述が一切ありませんでした。追記します。
株式等の譲渡益は申告分離課税で20.315%です。内訳は所得税15%、住民税5%、そして復興特別所得税として基準所得税額の2.1%(15% × 1.021 = 15.315%)。
特定口座(源泉徴収あり)を使えば、売買回数がどれだけ多くても証券会社が損益計算と源泉徴収を行うため、原則として確定申告は不要です。ただし他口座の損失と損益通算する場合や、繰越控除の特例を使う場合は申告が必要になります。
期待値の計算をするとき、税引後で考えてください。年率10%のつもりが、税引後では7.97%です。
8-3. 信用取引のコストと、逆日歩の10倍ルール
SBI証券の公式ページに記載されている料率です。
| 区分 | 買方金利 | 貸株料率 |
|---|---|---|
| 制度信用(6ヶ月) | 2.80% | 1.10% |
| 一般信用(無期限) | 2.80% | 1.10% |
| 一般信用(短期) | — | 3.90% |
| 一般信用(日計り) | 0.00% | 0.00% |
そして空売りを含む自動売買には、逆日歩(品貸料)というテールリスクがあります。日本証券金融によれば、最高料率は貸借値段と売買単位に応じて設定されますが、規制措置が取られると2倍・4倍・10倍に引き上げられます。
貸借値段3,000円・売買単位100株なら通常の最高料率は6.00円ですが、規制時には60.00円になりえます。バックテストにこれは入りません。
8-4. 板の薄さは、取引所自身が数値で認めている
JPXのワーキング・ペーパー Vol.40 が、呼値の単位変更の影響を実測しています。数字を正確に引きます。
- 呼値の単位を80%以上縮小したETF等について、実効スプレッドは 8.88bp から 3.33bp に縮小(表6.7)
- 一方、売買代金上位グループの重回帰では、同じ80%以上の縮小が最良気配のデプスを40,180押し下げている(表6.14、非標準化係数、p<0.01)
2つは別の切り口の数字なので、単純に並べるのは正確ではありません。ただ方向としては、スプレッドは縮むが、板は薄くなるというトレードオフが、取引所自身のデータで示されています。ティック単位で利益を刻む戦略ほど、この影響を受けます。
公平のために書き添えると、論文自身は上位グループについて「執行コストの低減を達成し、市場の質の向上にも資することができた」と総括しています。板が薄くなったことを失敗とは評価していません。
8-5. 2027年3月、呼値のルールが根本から変わる
これは、ほとんど書かれていない論点です。
現在の呼値の単位は、TOPIX500構成銘柄かどうかという指数ベースで決まっています。これが2027年3月1日から、流動性ベース(Spread to Tick Ratio, STR)に移行します。
- 4つの呼値テーブル:Table A(Active)/B(Basic)/C(Calm)/O(One Unit)
- 見直しは毎年8月、8月から4月の9ヶ月間を評価期間とする
- STR < 1.5 なら1段階細かく、STR > 5.0 なら1段階粗くなる
意味するところは重いです。2026年に組んだ自動売買ロジックの前提が、2027年3月に銘柄単位で変わり、その後は毎年変わり続けます。呼値をハードコードした戦略、ティックスケールで設計した戦略は、この制度変更で挙動が変わります。
「相場が変わったから負けるようになった」という現象の一部は、こういう制度変更です。
9. 法規制:自分で使う分には自由、配った瞬間に別世界
筆者は法律の専門家ではありません。条文と公表資料を並べます。個別の判断は弁護士にご相談ください。
9-1. 自分ひとりで使う分には、登録は不要
金融商品取引法第2条第8項第11号は、投資助言業務を次の要件で定義しています。
- 相手方に対して助言を行うことを約し
- 相手方がそれに対し報酬を支払うことを約する契約(投資顧問契約)を締結し
- 当該契約に基づき助言を行うこと
そして第28条第6項がこれを「投資助言業務」と定義し(同条第3項が「投資助言・代理業」を「業として行うこと」と定義)、第29条が登録を義務づけています。
第二十九条 金融商品取引業は、内閣総理大臣の登録を受けた者でなければ、行うことができない。
自分専用のプログラムには、相手方も報酬契約も存在しません。したがって登録は不要です。これは条文の構造から言えます。
9-2. 罰則が、2026年8月12日に倍増しました
これは他の解説記事がまだ反映していない、極めて新しい変更です。
無登録で金融商品取引業を行った場合の罰則が、令和8年法律第64号により2026年8月12日に施行された改正で引き上げられました。
| 2026年8月11日まで | 2026年8月12日から | |
|---|---|---|
| 条文 | 第197条の2第10号の4 | 第197条第1項第4号の3 |
| 拘禁刑 | 5年以下 | 10年以下 |
| 罰金 | 500万円以下 | 1,000万円以下 |
| 法人重科 | 5億円以下 | 7億円以下 |
刑名が「拘禁刑」なのは、2025年6月1日施行の改正刑法により懲役と禁錮が一本化されたためです。他サイトで「懲役」と書かれている記述は、この改正前のものです。
9-3. 分水嶺は「売り切りか、継続サポートか」
では、自作したプログラムを他人に配ったらどうなるか。金融庁の監督指針 VII-3-1(2)②が、まさにこの論点を扱っています。
投資分析ツール等のコンピュータソフトウェアの販売(中略)当該ソフトウェアの利用に当たり、販売業者等から継続的に投資情報等に係るデータ・その他サポート等の提供を受ける必要がある場合には、登録が必要となる場合がある
一方、登録が不要とされるのは次の場合です。
不特定多数の者を対象として、不特定多数の者が随時に購入可能な方法により、(中略)投資判断(中略)を提供する行為
整理すると、こうなります。
ただし、監督指針は直後に決定的なただし書きを置いています。ここを読み落とすと危険です。
ただし、例えば、不特定多数の者を対象にする場合でも、インターネット等の情報通信技術を利用することにより個別・相対性の高い投資情報等を提供する場合や、会員登録等を行わないと投資情報等を購入・利用できない(単発での購入・利用を受け付けない)ような場合には登録が必要となることに十分に留意するものとする。
「会員登録しないと買えない」形式は、それだけで登録が必要になりうると書かれています。noteやオンラインサロン、会員制コミュニティでの配布を考えている方は、ここを読んでください。
- ソースコードを、会員登録なしの単発購入で売り切る:登録不要の可能性が高い
- シグナル配信サーバーを維持して継続配信する:登録が必要になりうる
- 他人の資金を預かって運用する:投資助言業ではなく投資運用業(第28条第4項)。登録要件は格段に重い
「友人のお金だから」「少人数のコミュニティだから」は、「業として」の解釈次第で通りません。そして罰則は、10年以下の拘禁刑です。
9-4. AI各社の規約も、同じ線を引いている
興味深いことに、AI各社の利用規約が、金商法とほぼ同じ場所に線を引いています。
AnthropicのUsage Policyは、「投資助言を含む金融判断」を High-Risk Use Cases に明記し、2つの措置を要求しています。
個人または消費者に直接影響する助言・推奨・主観的な意思決定に用いる場合、当該分野の有資格専門家が、配布または最終決定の前に内容を確認しなければならない
モデルの出力を個人または消費者に直接提示する場合、AIを使用していることを開示しなければならない。この開示は最低限、各セッションの冒頭で行う必要がある
OpenAIのUsage Policiesも、「金融活動と信用」を含むセンシティブ領域で「人間のレビューなしに重大な判断を自動化すること」を禁じています。
読み比べると、両社とも規律しているのは「他人に対して助言・判断を提供する場合」です。自分ひとりのために、自分の資金で、AIに投資判断をさせること自体を禁じる条項は、確認できませんでした。
法律とAI規約が、同じ方向を向いています。自己利用は自由、他人向けは規制。この一致は偶然ではないと思います。
10. 2026年8月時点の、AIの現在地
この記事の前の版は2025年に書かれ、本文は「最新モデル GPT-4o」を前提にしていました。2026年8月時点では古い記述です。訂正します。
公式発表に書かれていることだけを書きます。ベンチマーク名を必ず併記します。
- Anthropic Claude Opus 5(2026年7月24日):公式は絶対スコアをほとんど公表しておらず、相対表現が中心です。「Frontier-Bench v0.1 で全モデルを上回り、Opus 4.8 の性能を2倍以上に、しかも1タスクあたりのコストは低い」など。自己修正については「自分の作業を検証し、成功するまで注意深く反復することが、はるかに得意になった」と表現されています
- OpenAI GPT-5.6(2026年7月9日):OpenAIの最新モデル
- OpenAI GPT-5.5(2026年4月23日):Terminal-Bench 2.0 で82.7%、SWE-Bench Pro で58.6%。コンテキストはAPIで1M
- OpenAI GPT-5.3-Codex(2026年2月5日):SWE-Bench Pro 56.8%、Terminal-Bench 2.0 で77.3%
- Google Gemini 3.7 Flash(2026年8月13日GA):公式リリースノートに具体的なスコアの記載はなく、「コーディングとエージェントのための最も知的なワークホースモデル」との表現
ひとつ注意書きを付けます。SWE-Bench Pro と SWE-bench Verified は別物です。二次情報サイトでよく見る「SWE-bench で90%台」という数字は、上記の公式発表からは確認できませんでした。
10-1. 変わっていないもの
AIの能力は、確かに上がりました。前の版が書かれた時点より、はるかに長く一貫したコードを書けますし、実行して自己修正もします。
ただし、この記事の中心にある問題は、1ミリも改善していません。
むしろ悪化しています。AIが速く正確にコードを書けるということは、試行回数 N を、以前より桁違いに速く増やせるということだからです。
第5章で見たとおり、N が増えるほど、実力ゼロから高いシャープレシオが出ます。AIの進歩は、過剰最適化を加速させる方向に効きます。
前の版には、こういう一文がありました。
条件(マイナス10%など)を少しずつ変えて、どの数値が一番儲かるかChatGPTと相談しながら調整しましょう
この記述は削除します。これは、この記事が9章かけて説明してきた失敗の、手順そのものです。
[LP]
11. よくある質問
Q1. SBI証券のAPIでPythonから株を売買したいのですが
公式に確認できたSBI証券のAPIは、先物・オプション取引のもののみでした。現物株式の個人向け発注APIは、公式ドキュメント上では見つけられませんでした。「提供していない」と明言した公式文書は無いため断定は避けますが、探して見つからなかったというのが今回の結果です。
なおSBIネオトレード証券は別法人で、こちらにはExcelアドイン方式のAPIがあります。
Q2. Excelを使わず、Pythonだけで完結させたいのですが
確認できた範囲では、三菱UFJ eスマート証券(kabuステーションAPI)と立花証券(e支店API)の2社です。ただし前者はkabuステーションというWindowsアプリの起動とログインが必須なので、「Pythonだけ」にはなりません。
Q3. クラウドサーバーに置いて、完全放置で動かせますか
難しいです。理由が2つあります。
ひとつは、多くの国内APIが専用のWindowsアプリの起動を前提にしていること。もうひとつは、二要素認証です。各社が2025年から2026年にかけて、ログイン時の多要素認証を必須化しています。SMSやパスキーは別デバイスに紐づくため、サーバー上のプログラムからは通せません。
公式リポジトリに「毎日バッチ処理で自動起動しているが二段階認証に対応できない」という報告が上がったまま、回答が付いていないのが現状です。
Q4. バックテストで年利50%のロジックができました。実運用していいですか
その数字に到達するまでに何通り試したかを数えてください。5年分のデータなら、独立な試行の上限は45通りです。それを大きく超えているなら、その50%は探索の産物である可能性が高い。
特に、「この期間はドローダウンが大きいから除外する」という調整を1回でもしたなら、要注意です。第6章の実証のとおり、その操作を3回やるだけで、完全なノイズからシャープ0.96が出ます。
Q5. AIに書かせれば、もっと良いロジックが作れませんか
コードの品質は上がります。期待値は上がりません。むしろAIは試行回数を桁違いに増やせるので、過剰最適化を加速させる方向に効きます。
AIに投げるべきなのは「勝てるロジックを作って」ではなく、「このバックテストの、過剰適合の兆候を指摘して」のほうです。生成より検証のほうが、AIの得意分野に近い。
Q6. 作ったシステムを売ってもいいですか
売り切りで、継続的なデータ提供やサポートを伴わないなら、登録不要の可能性があります。ただし継続的なサポートやシグナル配信を伴うと、投資助言・代理業の登録が必要になりうると監督指針に明記されています。
そして2026年8月12日から、無登録営業の罰則は10年以下の拘禁刑・1,000万円以下の罰金(法人は7億円以下)に引き上げられました。判断に迷うなら、専門家に相談してください。
Q7. 結局、日本株の自動売買はやめたほうがいいですか
「やめろ」とは言いません。ただ、次の全部を引き受ける必要があります。
発注できる証券会社は5社に限られること。多くがWindowsアプリの常時起動を要求すること。二要素認証を毎営業日、手で通す必要があること。バックテストの数字は試行回数で割り引かれること。手数料ゼロには執行経路という代償があること。税引後で20.315%引かれること。そして2027年3月に呼値のルールが変わること。
それでもやる価値があるかは、ご自身の判断です。この記事の役目は、判断材料を先に全部出すことでした。
まとめ
- 日本株の発注まで公式に自動化できる証券会社は5社。うちExcelを介さないWeb APIは2社だけ(三菱UFJ eスマート証券、立花証券)です。
- SBI証券本体に、現物株の個人向け発注APIは確認できませんでした。公式に確認できたのは先物・オプションのAPIのみ。SBIネオトレード証券は別法人です。松井証券の公開APIはFX限定でした。
- 二要素認証が、自動売買を静かに終わらせつつあります。公式リポジトリには「バッチ処理で自動ログインしているが二段階認証に対応できない」という報告が、回答のないまま残っています。日証協のパブコメでは自動売買への配慮を求める意見が出され、例外は認められませんでした。金融庁は「中長期的にはAPIを整備していただき」と、スクレイピングの終わりを明示しています。
- 15年、100本以上のEAを見てきて分かったのは、販売した時が期待値の頂点だということ。そしてプログラマーが作ったものは大抵だめで、裁量トレーダー出身者のものが一部残るということでした。
- 数学は同じことを言っています。10通り試すだけで、実力ゼロからシャープ1.57が出ます。5年分のデータなら独立な試行は45通りが上限。100回試してリターン分布が歪んでいれば、シャープ2.5でも95%水準に届きません。プログラマーの強み——速く広く探索できること——が、そのまま破滅の原因です。
- 実証しました。完全なランダムウォークに「都合の悪い相場を避ける」ルールを3つ足すだけで、シャープが −0.68 から +0.96 になります。同じルールを別の期間に当てると −0.02、勝率42%。この実証で評価したルールは延べ6,640本でした。論文が「45通りを超えるとISシャープ1・OOS期待値0の戦略がほぼ確実に作れる」と書いたとおりの数字です。
- そして分かったのは、危険なのはパラメータ調整ではなく、「条件を足す」という一番まともに見える作業だということです。パラメータ総当たり521通りでは、何も起きませんでした。
- コストも期待値を削ります。楽天のゼロコースはSOR/Rクロス利用が前提。税は20.315%。逆日歩は規制時に10倍になりえます。2027年3月、呼値のルールが指数ベースから流動性ベースに変わります。
- 自分で使う分には登録不要です。ただし2026年8月12日、無登録営業の罰則が10年以下の拘禁刑・1,000万円以下に引き上げられました。配る瞬間に別世界です。
最後に、このブログが繰り返し書いていることを、ここでも書きます。
代替されるものは安くなり、代替されないものだけが残ります。
過去のデータに合わせて条件を足す作業は、完全に代替されました。AIなら一晩で数千通り試せます。だからこそ、その作業の産物には価値がありません。全員ができることは、誰の優位にもならない。
私が15年見てきて、一部生き残っていたのは裁量トレーダー出身者のシステムでした。彼らが持っていたのは技術力ではなく、「なぜこの条件を入れるのか」を、データを見る前に説明できる能力だったのだと思います。試行回数が少なくて済むのは、その結果です。
そこは、まだ代替されていません。
関連記事
自動化の技術そのものについては、別記事で扱っています。証券口座ではなく商品ページの監視を対象にしていますが、robots.txtの読み方、取得間隔の決め方、壊れ方の設計といった考え方は共通です。実行できるコードを載せてあります。
自動購入botの作り方|Pythonの実装コードと、購入まで自動化できない3つの理由
この記事で参照した情報源
すべて一次情報にあたって確認しました。投資スクール、情報商材、シグナル配信業者、ツール販売者のアフィリエイト記事、「評判」系サイトは使用していません。
| 種別 | 参照した情報源 |
|---|---|
| 証券会社API | kabuステーションAPI/同 公式ドキュメント/立花証券 e支店API/マーケットスピードII RSS/岡三RSS/ネオトレAPI for Excel |
| 二要素認証 | kabuステーションAPI Issue #979/楽天証券 パスキー必須化告知 |
| 規制当局 | 金融庁 監督指針改正(2025年10月15日)/同 パブリックコメント回答/日本証券業協会 ガイドライン改正/金融商品取引業者等向けの総合的な監督指針 VII |
| 学術論文 | Bailey, Borwein, López de Prado, Zhu「Pseudo-Mathematics and Financial Charlatanism」Notices of the AMS (2014)/The Deflated Sharpe Ratio/The Probability of Backtest Overfitting/Harvey, Liu, Zhu「…and the Cross-Section of Expected Returns」 |
| コスト・税 | 楽天証券 ゼロコース/国税庁 No.1463 株式等を譲渡したときの課税/同 No.1476 特定口座制度/日本証券金融 品貸料(逆日歩) |
| 市場構造 | JPXワーキング・ペーパー Vol.40/JPX 呼値の単位(2027年3月1日からの変更を含む) |
| 法令 | e-Gov 金融商品取引法(令和8年法律第64号による改正、2026年8月12日施行)。刑名の一本化は刑法等の一部を改正する法律(令和4年法律第67号)、2025年6月1日施行 |
| AI規約・現況 | Anthropic Usage Policy/OpenAI Usage Policies/各社の公式モデル発表ページ |
免責事項
本記事は情報提供を目的としたものであり、特定の銘柄や投資手法の推奨、投資判断の提供を目的とするものではありません。筆者は金融商品取引業者ではなく、投資助言・代理業の登録も受けていません。
本記事に掲載したコードは、過剰最適化という現象を説明するための実証用であり、実際の売買に用いることを想定していません。投資判断は、ご自身の責任において行ってください。記載した各社のサービス内容・手数料・条件は2026年8月時点で確認したものであり、変更される可能性があります。
また、筆者は法律・税務の専門家ではありません。法令および税制に関する記述は条文と公表資料に基づく整理であり、個別の事案については弁護士・税理士にご相談ください。
[LP]

コメント