日本株で継続的に利益機会を探すうえで、最大のボトルネックは「銘柄数の多さ」です。東証には数千社の上場企業があり、決算短信、株価、出来高、PER、PBR、ROE、配当利回り、信用残、業種、時価総額など、見るべき情報は膨大です。毎日ランキングサイトを眺めているだけでは、どうしても話題株、急騰株、SNSで目立つ銘柄に意識を奪われます。結果として、本当に重要な初動サインを見落とし、すでに上がり切った銘柄を後追いする形になりがちです。
そこで有効なのが、ChatGPTとPythonを組み合わせた日本株スクリーニングの自動化です。Pythonは大量データの取得、整形、計算、抽出に強く、ChatGPTは条件設計、コード作成、分析観点の整理、結果の解釈に強みがあります。人間がすべてを目視するのではなく、機械に「候補銘柄の一次選別」を任せ、人間は最後の判断に集中する。この分業こそが、個人投資家にとって実用的な優位性になります。
この記事では、単なる「Pythonで株価を取れます」という一般論ではなく、実際に日本株をスクリーニングするための設計思想、条件の作り方、ChatGPTへの指示方法、Pythonでの実装イメージ、抽出後の検証プロセスまでを具体的に解説します。目的は、自動売買システムを作ることではありません。毎日または毎週、自分の投資対象候補を効率よく絞り込む「投資リサーチの生産ライン」を作ることです。
なぜ日本株スクリーニングを自動化する必要があるのか
日本株投資では、情報量の差がそのまま機会損失につながります。大型株だけを見るなら銘柄数は限られますが、中小型株、テーマ株、業績変化株、PBR改善期待株、出来高急増株まで含めると、人力だけで網羅するのは非現実的です。特に個人投資家が狙いやすいのは、まだ大手メディアに大きく取り上げられていない段階の銘柄です。しかしその段階では、ニュースも少なく、ランキングにも出にくいため、定量データから探す必要があります。
たとえば「時価総額300億円以下」「営業利益率が改善」「売上高が増加」「出来高が過去20日平均の2倍以上」「株価が200日移動平均線を上回った」という条件を毎日確認するとします。これを手作業で数千銘柄分見るのは不可能です。しかしPythonなら、株価データと財務データを表形式で読み込み、数秒から数十秒で候補を抽出できます。
自動化の本質は、楽をすることではありません。判断の質を安定させることです。人間は相場が強いと強気になり、急落すると必要以上に悲観します。SNSで盛り上がっている銘柄を見ると、条件を満たしていなくても買いたくなります。スクリーニング条件を事前に定義しておけば、感情ではなくルールに基づいて候補を出せます。これは短期トレードでも中長期投資でも有効です。
ChatGPTとPythonの役割を分ける
最初に理解すべきなのは、ChatGPTとPythonは役割が違うということです。ChatGPTは会話によって方針を整理する道具であり、Pythonは実際にデータを処理する道具です。ChatGPTに「上がる株を教えて」と聞いても、実用性は高くありません。むしろ、ChatGPTには「どのような条件で銘柄を絞るべきか」「その条件をPythonでどう実装するか」「抽出結果をどう解釈するか」を担当させるべきです。
Pythonは、感情を持たずに同じ処理を繰り返すのが得意です。株価データの読み込み、移動平均線の計算、出来高変化率の算出、PERやPBRによるフィルタリング、CSV出力などはPythonの得意領域です。一方で、Pythonは「なぜその条件が投資戦略として意味を持つのか」を自動で考えてくれるわけではありません。そこを補うのがChatGPTです。
実務では、次のように分担すると効率的です。まず投資アイデアをChatGPTに言語化させます。次に、そのアイデアを数値条件へ落とし込みます。そしてPythonで処理します。最後に、抽出された候補銘柄について、決算内容、事業内容、需給、チャート位置を人間が確認します。この流れを作れば、毎回ゼロから考える必要がなくなります。
最初に作るべきスクリーニング条件
初心者がいきなり複雑なモデルを作る必要はありません。最初は、価格、出来高、業績、バリュエーションの4分類で条件を作るのが現実的です。価格は株価のトレンド、出来高は市場参加者の関心、業績は企業価値の変化、バリュエーションは割高・割安の目安を示します。この4つを組み合わせるだけで、かなり実用的なスクリーニングができます。
たとえば成長株寄りの条件なら、「株価が75日移動平均線を上回る」「直近出来高が20日平均を上回る」「売上高成長率が前年同期比10%以上」「営業利益が黒字」「時価総額が一定以上」という形になります。これにより、単なる低位株や赤字企業ではなく、業績と需給が同時に改善している銘柄を拾いやすくなります。
割安株寄りなら、「PBR1倍未満」「自己資本比率40%以上」「営業キャッシュフローが黒字」「配当利回りが一定以上」「直近株価が底値圏から反転」という条件が考えられます。ただし、低PBRだけを見て買うのは危険です。低PBRには理由があります。業績が悪い、資本効率が低い、成長期待がない、株主還元が弱いなどの背景があるためです。そのため、PBRだけでなく、ROE改善、増配、自社株買い、事業再編などの変化を組み合わせる必要があります。
短期トレード寄りなら、「出来高が急増」「年初来高値を更新」「前日比上昇率が大きい」「信用売り残が増えている」「株価が5日線を維持している」といった条件が使えます。ただし短期条件はノイズも多くなります。抽出銘柄が多すぎる場合は、時価総額、流動性、業種、決算日からの日数などでさらに絞ると実用性が上がります。
データソースをどう考えるか
スクリーニングで重要なのは、どのデータを使うかです。株価データだけなら比較的扱いやすいですが、財務データ、信用残、決算発表日、業種分類、配当情報まで含めると難易度が上がります。最初から完全自動化を目指すより、まずはCSVやExcelで取得できるデータをPythonに読み込ませるところから始めるのが現実的です。
たとえば、証券会社のスクリーニング結果をCSVで保存し、それをPythonで二次加工する方法があります。証券会社の画面で「時価総額」「PER」「PBR」「配当利回り」「ROE」などを含む銘柄一覧を出力し、Pythonでテクニカル条件や独自スコアを追加します。これなら、データ取得部分でつまずきにくく、実務にすぐ使えます。
もう一つの方法は、株価データを別途取得し、財務データと銘柄コードで結合する方法です。日本株の場合、銘柄コードをキーにしてデータを統合します。たとえば「7203」のようなコードを共通IDとして、株価、出来高、業種、財務指標を一つの表にまとめます。ここまでできれば、Pythonでかなり自由なスクリーニングが可能になります。
注意すべきなのは、データの欠損と更新タイミングです。財務データは四半期ごと、株価は日次、信用残は週次というように、更新頻度が異なります。すべてを同じ鮮度だと思って処理すると、古いデータを新しい判断材料のように扱ってしまいます。実装では、各データに「取得日」や「対象期」を持たせると安全です。
ChatGPTへの指示は具体的に書く
ChatGPTを投資スクリーニングに使うとき、多くの人が失敗する理由は指示が曖昧だからです。「良い銘柄を探すコードを書いて」では、実用的なものは出にくいです。必要なのは、投資戦略、使用データ、列名、条件、出力形式を明確に伝えることです。
たとえば次のように指示します。
日本株の銘柄一覧CSVを使ってスクリーニングするPythonコードを書いてください。
CSVには code, name, sector, market_cap, close, volume, avg_volume_20, ma_25, ma_75, per, pbr, roe, sales_growth, operating_margin の列があります。
条件は、株価が25日線と75日線を上回り、出来高が20日平均の1.5倍以上、売上成長率が10%以上、営業利益率が5%以上、PERが40倍以下です。
抽出結果にスコア列を追加し、scoreの高い順に並べ替えてCSV出力してください。
このように列名と条件を明示すれば、ChatGPTはかなり実用的なコードを返しやすくなります。さらに「初心者にも分かるようにコメントを付けて」「エラーが出た場合の確認ポイントも書いて」と追加すれば、学習しながら改善できます。
大事なのは、ChatGPTの出力をそのまま信じないことです。コードは必ず小さいデータでテストし、列名の不一致、文字コード、欠損値、単位の違いを確認します。たとえば時価総額が「百万円単位」なのか「円単位」なのかで、条件結果は大きく変わります。PERが空欄の赤字企業をどう扱うかも、戦略によって異なります。
Pythonで作る基本スクリーニングの構造
Pythonでの基本構造は、データ読み込み、前処理、指標計算、条件抽出、スコアリング、出力の6段階です。この流れを固定しておくと、テーマを変えても使い回せます。たとえば成長株用、割安株用、高配当株用、出来高急増株用というように、条件部分だけを差し替えれば複数のスクリーナーを作れます。
最初のデータ読み込みでは、CSVの文字コードに注意します。日本語を含むCSVではUTF-8、Shift_JIS、CP932などが混在します。文字化けする場合は、読み込み時のencodingを変更します。列名に余計な空白が入っている場合も多いため、列名の前後空白を削除する処理を入れておくと安定します。
前処理では、数値列を数値型に変換します。カンマ付きの「1,234」や「–」のような欠損表示があると、そのままでは計算できません。Pythonでは、文字列からカンマを取り除き、変換できない値を欠損として扱う処理を入れます。ここを雑にすると、抽出結果が信用できなくなります。
指標計算では、出来高倍率、移動平均線乖離率、時価総額フィルター、成長率スコアなどを作ります。たとえば出来高倍率は「当日出来高 ÷ 20日平均出来高」です。株価の強さは「終値 ÷ 75日移動平均線 − 1」で表せます。こうした指標を列として追加しておくと、後からランキングしやすくなります。
条件抽出では、TrueまたはFalseで判定します。複数条件をANDで組み合わせると厳格な抽出になり、ORを使うと広めに拾えます。最初は条件を厳しくしすぎないことが重要です。候補がゼロになると検証できません。まずは50〜200銘柄程度に絞り、その後でスコアリングして上位を確認するほうが実務的です。
独自スコアを作ると候補の比較が楽になる
スクリーニングでありがちな問題は、条件を満たす銘柄が多すぎることです。たとえば「株価が75日線上」「出来高増加」「黒字」「PBR2倍以下」といった条件では、相場環境によって数百銘柄が残ることがあります。そのままでは人間が確認しきれません。そこで有効なのが独自スコアです。
独自スコアとは、複数の指標に点数を付けて合計する方法です。たとえば、出来高倍率が高いほど加点、売上成長率が高いほど加点、営業利益率が高いほど加点、株価が高値に近いほど加点、PERが高すぎる場合は減点という形です。これにより、候補銘柄を優先順位付きで並べ替えられます。
具体例として、成長モメンタム型のスコアを考えます。売上成長率を最大30点、営業利益率を最大20点、出来高倍率を最大20点、株価の75日線乖離率を最大15点、ROEを最大15点として合計100点満点にします。点数は厳密な理論値でなくて構いません。重要なのは、自分が重視する要素を明示し、毎回同じ基準で比較することです。
ただし、スコアは万能ではありません。スコアが高い銘柄ほど必ず上がるわけではありません。スコアは「調査する順番」を決めるための道具です。たとえば上位20銘柄を出力し、その中から決算説明資料、事業内容、株主構成、チャート、需給を確認する。この二段階にすることで、時間を大幅に節約できます。
スクリーニング結果をどう確認するか
Pythonで候補を出した後に、最も重要なのは人間による確認です。自動抽出された銘柄をそのまま買うのではなく、なぜ抽出されたのかを確認します。出来高が増えた理由は何か、決算が良かったのか、材料が出たのか、単なる一時的な仕手的値動きなのか。この確認を怠ると、自動化はむしろ危険になります。
まず見るべきはチャートです。株価が移動平均線を上回っていても、すでに短期で急騰しすぎていればリスクは高くなります。逆に、長期ボックスを上放れた直後で、出来高が増え、押し目で出来高が減っているなら、需給面では比較的きれいな形です。スクリーニングは「発見」、チャート確認は「タイミング判断」と考えると分かりやすいです。
次に見るべきは決算です。売上成長率が高くても、一過性の特需かもしれません。営業利益率が改善していても、広告費削減や補助金などの一時要因かもしれません。決算短信や説明資料を確認し、改善が継続しそうかを見ます。ここでChatGPTを使う場合は、決算資料の要点整理やリスク要因の抽出に使うと効率的です。
さらに、流動性も重要です。出来高が少なすぎる銘柄は、買うときは買えても売るときに苦労します。特に時価総額の小さい銘柄では、板が薄く、少額の売買でも価格が大きく動くことがあります。スクリーニング条件には、最低売買代金を入れると実用性が上がります。たとえば「終値 × 出来高」が一定以上の銘柄だけに限定する方法です。
目的別スクリーナーの具体例
実務では、1つの万能スクリーナーを作るより、目的別に複数のスクリーナーを持つほうが有効です。相場局面によって効く条件は変わります。強い上昇相場ではモメンタム型が機能しやすく、調整相場では高配当やキャッシュリッチ型が相対的に安定しやすくなります。目的を分けることで、相場環境に応じた候補を出せます。
成長モメンタム型
成長モメンタム型は、業績成長と株価トレンドの両方を重視します。条件例は、売上成長率10%以上、営業利益黒字、株価が75日移動平均線上、出来高が20日平均以上、年初来高値からの下落率が小さい銘柄です。この型は、強い銘柄をさらに強い段階で拾う発想です。安く買うより、上昇トレンドに乗ることを優先します。
割安改善型
割安改善型は、低PBRや低PERだけでなく、改善の兆候を重視します。条件例は、PBR1倍未満、営業キャッシュフロー黒字、自己資本比率40%以上、ROEが改善傾向、増配または自社株買いの実施です。単なる万年割安株を避けるために、株主還元や資本効率改善を条件に入れるのがポイントです。
出来高初動型
出来高初動型は、株価が大きく動く前の市場参加者の変化を捉える方法です。条件例は、出来高が20日平均の2倍以上、株価上昇率が一定以上、まだ年初来高値から離れすぎていない、時価総額が小さすぎない、決算発表直後ではない、などです。出来高急増は重要なサインですが、悪材料による投げ売りでも増えるため、株価位置と材料確認が必須です。
高配当安定型
高配当安定型は、配当利回りだけでなく、配当の持続性を重視します。条件例は、配当利回り3%以上、営業キャッシュフロー黒字、自己資本比率一定以上、過去数年で大幅減配がない、利益剰余金が厚い、という形です。高配当株は利回りだけで選ぶと減配リスクを踏みやすいため、キャッシュフローと財務体質を同時に見る必要があります。
ChatGPTで分析レポートを半自動化する
Pythonで抽出した候補銘柄をCSVに出した後、ChatGPTを使って分析メモを作ると、さらに効率が上がります。たとえば上位20銘柄について、銘柄コード、企業名、業種、スコア、抽出理由を表にし、それをChatGPTに渡します。そして「各銘柄について確認すべきポイントを整理してください」と依頼します。
このとき重要なのは、ChatGPTに最終判断を丸投げしないことです。ChatGPTは、与えられた情報の整理や観点出しには使えますが、最新の株価や決算情報を常に正確に把握しているとは限りません。したがって、Pythonで出した数値、会社の開示資料、証券会社のデータを一次情報として扱い、ChatGPTは分析補助として使うのが安全です。
具体的には、次のような分析メモを作らせると有効です。「この銘柄が抽出された理由」「追い風となる事業環境」「確認すべきリスク」「買い急がずに待つべきチャート条件」「決算で見るべき項目」。この形式にすると、単なる銘柄リストが投資判断に使いやすいリサーチノートになります。
毎日の運用フローを固定する
自動化は、作って終わりではありません。重要なのは運用フローです。たとえば毎朝または毎週末にデータを更新し、Pythonスクリプトを実行し、上位候補をCSVで出力し、10〜20銘柄だけを確認する。この流れを固定すると、相場を見る習慣が安定します。
おすすめは、毎日見るスクリーナーと週末に見るスクリーナーを分けることです。毎日見るものは、出来高急増、移動平均線上抜け、年初来高値更新など、短期変化に強い条件にします。週末に見るものは、業績改善、割安改善、高配当、ROIC改善など、中期投資に向いた条件にします。これにより、短期のノイズと中期の構造変化を分けて把握できます。
出力ファイルには、日付を入れて保存します。たとえば「screening_growth_2026-06-27.csv」のようにすれば、過去の抽出結果を後から検証できます。数週間後に、過去の上位銘柄がどう動いたかを確認することで、自分の条件が機能しているかを評価できます。スクリーニングは、作った瞬間よりも、運用しながら改善する過程で価値が高まります。
バックテストで条件を検証する
スクリーニング条件は、感覚だけで決めると危険です。可能であれば、過去データでバックテストを行います。たとえば「出来高が20日平均の2倍以上で、株価が75日線を上回った銘柄を翌営業日に買い、20営業日後に売る」というルールを過去数年分で検証します。勝率、平均損益、最大下落、保有期間中の値動きなどを見ることで、条件のクセが分かります。
ただし、個人投資家が最初から本格的なバックテスト環境を作る必要はありません。まずは簡易検証で十分です。過去に抽出した銘柄リストを保存し、1週間後、1カ月後、3カ月後の株価変化をExcelやPythonで追跡します。これだけでも、条件が有効かどうかの感触はかなり掴めます。
バックテストで注意すべきなのは、生存者バイアスと過剰最適化です。現在上場している銘柄だけで過去検証すると、上場廃止や業績悪化銘柄が抜け落ち、結果が良く見えることがあります。また、過去に最も成績が良かった条件を細かく調整しすぎると、将来には機能しないルールになります。条件はシンプルで、経済的な意味が説明できるものに限定するべきです。
失敗しやすいポイント
第一の失敗は、条件を増やしすぎることです。PER、PBR、ROE、売上成長率、利益率、出来高、移動平均線、信用倍率、配当利回りなどをすべて入れると、候補がほとんど出なくなります。さらに、出たとしても過度に特殊な銘柄だけになります。最初は、主条件を3〜5個に絞るほうが実用的です。
第二の失敗は、安い銘柄を良い銘柄と勘違いすることです。低PER、低PBR、高配当は魅力的に見えますが、株価が安い理由を確認しなければなりません。業績悪化、減配懸念、流動性不足、事業縮小、ガバナンス問題がある場合、指標だけでは割安に見えても実際には買われにくいです。
第三の失敗は、スクリーニング結果を売買シグナルとして扱うことです。スクリーニングは候補抽出であり、売買判断そのものではありません。抽出後に、決算、材料、チャート、流動性、需給、地合いを確認する必要があります。特に短期トレードでは、エントリー価格と損切りラインを決めずに入ると、期待値のある条件でも損失が膨らみます。
第四の失敗は、結果を記録しないことです。毎日スクリーニングしても、どの条件が良かったのか、どの銘柄が上がったのか、なぜ見送ったのかを記録しなければ改善できません。出力CSVと簡単なメモを残すだけで、数カ月後には自分専用の検証データになります。
実践的な改善サイクル
自動スクリーニングは、最初から完璧を目指すより、改善サイクルを回すほうが成果につながります。最初の1週間は、条件を緩めにして候補を多めに出します。次に、実際に見て「明らかに不要な銘柄」が多い理由を考えます。たとえば低流動性が多いなら売買代金条件を追加し、赤字企業が多いなら営業利益黒字条件を追加します。
次の段階では、抽出銘柄の上位20社だけを毎日確認します。確認項目は固定します。事業内容、直近決算、出来高増加理由、株価位置、時価総額、流動性、リスク要因。この7項目を見るだけでも、候補の質はかなり判断できます。そして、実際に監視リストへ入れた銘柄と見送った銘柄を分けて記録します。
1カ月後には、監視リスト入りした銘柄の成績を確認します。上がった銘柄に共通点があるか、下がった銘柄に共通点があるかを見ます。たとえば、出来高倍率が高すぎる銘柄は短期天井になりやすい、決算翌日の急騰銘柄は押し目を待ったほうが良い、時価総額が小さすぎる銘柄は売りにくい、といった実践的な知見が蓄積されます。
この改善を続けると、単なる汎用スクリーナーではなく、自分の投資スタイルに合ったスクリーニングエンジンになります。短期売買が得意な人、中期で業績変化を取る人、高配当を重視する人では、見るべき条件が違います。自動化の価値は、他人と同じ条件を使うことではなく、自分の仮説を高速に検証できることにあります。
個人投資家にとっての最大のメリット
ChatGPTとPythonを使ったスクリーニングの最大のメリットは、銘柄探しの再現性が上がることです。相場で継続的に成果を出すには、偶然見つけた銘柄に頼るのではなく、同じ基準で候補を探し、検証し、改善する必要があります。自動化によって、その基準を仕組みにできます。
もう一つのメリットは、見落としが減ることです。大型株や有名テーマ株は誰でも見ています。しかし、中小型株、BtoB企業、地味な部材メーカー、地方企業、ニッチトップ企業は、目視では見落とされやすいです。スクリーニング条件に合えば、知名度に関係なく候補に上がってきます。これは個人投資家にとって大きな武器です。
さらに、投資アイデアを資産化できます。一度作ったスクリーナーは、翌日も翌週も使えます。条件を少し変えれば、別の戦略にも展開できます。成長株、割安株、高配当株、テーマ株、出来高急増株、信用需給改善株など、複数の視点を自分の投資システムとして持てるようになります。
まとめ
ChatGPTとPythonを使えば、日本株スクリーニングは個人投資家でも十分に自動化できます。重要なのは、いきなり高度なAI投資モデルを作ろうとしないことです。まずは、株価、出来高、業績、バリュエーションという基本データを使い、候補銘柄を機械的に抽出するところから始めるべきです。
ChatGPTは、条件設計、コード作成、分析観点の整理に使います。Pythonは、データ処理、計算、抽出、CSV出力に使います。そして人間は、抽出された候補について、事業内容、決算、チャート、流動性、需給を確認します。この分業ができれば、銘柄探しの精度と速度は大きく向上します。
自動化の目的は、判断を放棄することではありません。むしろ逆です。不要な作業を減らし、重要な判断に時間を使うための仕組みです。毎日相場を見ているのに成果につながらない人ほど、スクリーニングの自動化によってリサーチの質を改善できます。日本株にはまだ見落とされている銘柄が多くあります。それを感覚ではなく、データとルールで見つけにいく姿勢が、これからの個人投資家にとって実践的な優位性になります。


コメント