ChatGPTとPythonで日本株スクリーニングを自動化する実践手順

スポンサーリンク
【DMM FX】入金

銘柄探しを「気合い」から「仕組み」に変える

日本株の銘柄探しで最も時間を奪われるのは、実は分析そのものではありません。決算短信を読む前、チャートを見る前、四季報を確認する前の「どの銘柄を見るか」を決める作業です。上場企業は数千社あります。すべての銘柄を毎日目視で確認するのは現実的ではありません。だから多くの個人投資家は、ニュースで話題になった銘柄、SNSで流れてきた銘柄、急騰ランキングに出てきた銘柄から調べ始めます。

この方法が必ず悪いわけではありません。ただし、入口が他人任せになりやすいという弱点があります。すでに株価が大きく動いた後で気づく、材料の強弱を冷静に判断できない、過去に似た失敗を何度も繰り返す。このような問題は、投資判断の前段階にある「候補銘柄の抽出方法」が曖昧なことから起こります。

そこで使えるのが、ChatGPTとPythonを組み合わせた日本株スクリーニングです。ChatGPTは投資アイデアの整理、条件設計、コード作成、エラー修正、分析観点の追加に使います。Pythonはデータ取得、条件判定、ランキング作成、CSV出力、日次更新に使います。人間は最後に候補銘柄を読み解き、投資に値するかどうかを判断します。

重要なのは、AIに銘柄を当ててもらうことではありません。自分の投資仮説を機械が処理できるルールに落とし込み、毎回同じ基準で候補を出すことです。これにより、感情や思いつきの比率を下げ、再現性のあるリサーチ体制を作れます。

スクリーニングは「予想」ではなく「絞り込み」である

最初に理解すべき点は、スクリーニングは未来の株価を直接予測する作業ではないということです。スクリーニングは、数千社の中から「調べる価値がある銘柄」を絞るためのフィルターです。ここを勘違いすると、条件に合った銘柄をそのまま買えばよいという危険な発想になります。

たとえば「売上高が前年比20%以上増えている」「営業利益率が10%以上」「株価が200日移動平均線より上」「出来高が過去20日平均の2倍以上」という条件を作ったとします。この条件に合う銘柄は、成長性、収益性、トレンド、注目度の面で一定の強さを持っている可能性があります。しかし、それだけで割安とは限りません。決算一過の一時的な数字かもしれません。特需の反動が来るかもしれません。すでに株価が過熱しているかもしれません。

つまり、スクリーニングの役割は「買う銘柄を決める」ことではなく、「読むべき銘柄を減らす」ことです。この前提を持つだけで、ツールの使い方が健全になります。自動抽出された銘柄はゴールではなく、調査対象リストです。

ChatGPTが得意な部分とPythonが得意な部分を分ける

ChatGPTとPythonを同じものとして扱うと失敗します。両者は役割が違います。ChatGPTは文章、仮説、コードの設計が得意です。一方で、正確な大量データ処理や日次の機械的な判定はPythonの仕事です。

ChatGPTには、次のような依頼が向いています。「営業利益率が改善している企業を探す条件を作ってください」「成長株スクリーニングに必要な指標を分類してください」「このPythonコードのエラー原因を説明してください」「抽出結果を投資家向けに読み解く観点を整理してください」。このような作業では、ChatGPTは優秀な壁打ち相手になります。

逆に、ChatGPTだけに「今日上がる日本株を教えてください」と聞く使い方は実務的ではありません。投資判断に必要なのは、継続的に更新されるデータ、同じ条件での比較、検証可能な履歴です。これはPython側で管理すべき領域です。

実践では、ChatGPTに条件とコードのたたき台を作らせ、Pythonで実行し、出力結果を見ながら条件を改善します。この流れを繰り返すと、最初は単純なランキング表だったものが、徐々に自分専用の銘柄発掘エンジンになります。

最初に作るべきスクリーニング条件

いきなり複雑なモデルを作る必要はありません。むしろ最初はシンプルな条件から始めるべきです。おすすめは、成長性、収益性、財務安全性、株価トレンド、流動性の5分類です。この5つを押さえるだけで、かなり実用的な候補リストを作れます。

成長性

成長性では、売上高成長率、営業利益成長率、経常利益成長率、会社予想の増益率などを見ます。初心者が特に見るべきなのは、売上と営業利益が同時に伸びているかどうかです。売上だけ伸びて利益が出ていない企業は、成長投資中である可能性もありますが、単に採算が悪い可能性もあります。逆に利益だけ伸びて売上が伸びていない企業は、コスト削減の一巡後に成長が止まることがあります。

収益性

収益性では、営業利益率、ROE、ROICなどを確認します。営業利益率は事業の強さを直感的に把握しやすい指標です。営業利益率が5%の企業と20%の企業では、同じ売上成長でも利益の伸び方が大きく変わります。特にBtoBのニッチ企業では、高い利益率が競争優位のサインになることがあります。

財務安全性

財務安全性では、自己資本比率、有利子負債、現金残高、ネットキャッシュなどを見ます。小型株では財務の弱さが株価下落時の不安材料になりやすいため、財務条件を入れるだけで危険な銘柄をかなり減らせます。たとえば「自己資本比率40%以上」「現金及び預金が有利子負債を上回る」といった条件です。

株価トレンド

株価トレンドでは、25日移動平均線、75日移動平均線、200日移動平均線、年初来高値からの距離などを使います。ファンダメンタルズが良くても、株価が長期下降トレンドにある銘柄は、需給が悪い可能性があります。最初は「株価が200日移動平均線を上回っている」「25日線が75日線を上回っている」といった単純な条件で十分です。

流動性

流動性では、売買代金と出来高を見ます。どれだけ魅力的に見える銘柄でも、売買代金が少なすぎると実際の売買で不利になります。個人投資家の場合でも、最低限の売買代金条件を入れるべきです。たとえば「直近20日平均売買代金が3,000万円以上」「急騰日にだけ出来高が出た銘柄を除外する」などです。

Pythonで扱うデータの基本構造

Pythonで日本株をスクリーニングする場合、まず必要なのは銘柄コード、企業名、株価、出来高、財務指標、決算数値です。データソースは複数ありますが、最初はCSVとして保存した銘柄一覧と、取得可能な株価データを組み合わせるだけでも十分に始められます。

基本の考え方は単純です。銘柄ごとに1行の表を作り、列に指標を並べます。たとえば、code、name、close、volume、sales_growth、operating_margin、equity_ratio、ma25、ma75、ma200、scoreといった列です。この表に対して条件をかけ、条件を満たした銘柄だけを残します。

初心者が最初につまずくのは、コードそのものよりもデータの形です。株価データは日付ごと、財務データは決算期ごと、銘柄一覧は企業ごとに存在します。粒度が違うデータを無理に一つにしようとすると混乱します。最初は「日次で更新する株価テーブル」と「四半期または年次で更新する財務テーブル」を分けて考えると整理しやすくなります。

最小構成のスクリーニングコード例

以下は考え方を示すための簡易コードです。実際に運用する場合は、データ取得元の仕様、欠損値、分割調整、上場廃止、決算期の違いなどを確認しながら調整します。

import pandas as pd

# 銘柄ごとの指標をまとめたCSVを読み込む
# columns: code,name,close,volume,avg_volume_20,sales_growth,operating_margin,equity_ratio,ma25,ma75,ma200
stocks = pd.read_csv('japan_stocks_metrics.csv')

screened = stocks[
    (stocks['sales_growth'] >= 0.10) &
    (stocks['operating_margin'] >= 0.08) &
    (stocks['equity_ratio'] >= 0.40) &
    (stocks['close'] > stocks['ma200']) &
    (stocks['volume'] >= stocks['avg_volume_20'] * 1.5)
].copy()

screened['score'] = (
    screened['sales_growth'] * 40 +
    screened['operating_margin'] * 30 +
    screened['equity_ratio'] * 10 +
    (screened['volume'] / screened['avg_volume_20']) * 20
)

screened = screened.sort_values('score', ascending=False)
screened.to_csv('screened_stocks.csv', index=False, encoding='utf-8-sig')

このコードの本質は、条件を文章ではなく数式にしている点です。「成長している会社を探す」では曖昧です。しかし「売上成長率10%以上」と書けば機械が判定できます。「注目されている銘柄」では曖昧ですが、「出来高が20日平均の1.5倍以上」と書けば判定できます。

投資家がやるべきことは、曖昧な投資感覚を、検証可能な条件に翻訳することです。この翻訳作業でChatGPTが役立ちます。

ChatGPTへの依頼文は具体的にする

ChatGPTを使うときは、依頼文の質で出力が大きく変わります。単に「日本株スクリーニングコードを書いて」と頼むと、一般的なコードしか出てきません。実務に使うなら、目的、対象市場、使う指標、除外条件、出力形式を明確にします。

たとえば、次のように依頼します。

日本株の成長株候補を抽出するPythonコードを作成してください。
前提は、銘柄別にcode,name,close,volume,avg_volume_20,sales_growth,operating_margin,equity_ratio,ma25,ma75,ma200の列を持つCSVがあることです。
条件は、売上成長率10%以上、営業利益率8%以上、自己資本比率40%以上、株価が200日移動平均線より上、出来高が20日平均の1.5倍以上です。
抽出後、スコアを作り、上位50銘柄をCSVで出力してください。
欠損値がある場合は除外してください。

このように書くと、ChatGPTはかなり実用的なコードを返しやすくなります。さらに「初心者にも分かるように各行にコメントを入れてください」「エラーが出た場合に確認すべき点も書いてください」と付け加えると、学習効率も上がります。

スコアリングで候補銘柄に優先順位を付ける

条件に合う銘柄を一覧にするだけでは、まだ実用性が足りません。候補が100銘柄出てきたら、結局どれから見るべきか迷います。そこでスコアリングを使います。

スコアリングとは、複数の指標に点数を付け、総合点で並べ替える方法です。たとえば、売上成長率、営業利益率、出来高倍率、200日線からの乖離率、自己資本比率を点数化します。ただし、単純に数字が大きいほど良いとは限りません。200日線からの乖離率が高すぎる銘柄は、すでに過熱している可能性があります。自己資本比率も高ければ常に良いというより、業種によって適正水準が違います。

実務的には、最初から完璧なスコアを作る必要はありません。まずは「成長点」「収益点」「需給点」「安全点」の4つに分けると扱いやすくなります。成長点は売上と利益の伸び、収益点は営業利益率やROIC、需給点は出来高や移動平均線、安全点は自己資本比率やネットキャッシュです。

たとえば、成長点40点、収益点25点、需給点25点、安全点10点とします。短期寄りの投資家なら需給点を高くし、長期寄りの投資家なら収益点や安全点を高くします。この配点こそが投資スタイルの反映です。

実例:中小型成長株を探す条件設計

具体例として、中小型成長株を探すスクリーニングを考えます。目的は、まだ大型株ほど注目されていないが、業績と株価の両方に改善が出ている企業を見つけることです。

条件は次のように設計できます。時価総額は50億円以上1,000億円以下。売上成長率は前年比10%以上。営業利益成長率は前年比15%以上。営業利益率は5%以上。自己資本比率は35%以上。直近終値は200日移動平均線より上。25日移動平均線は75日移動平均線より上。20日平均売買代金は2,000万円以上。直近出来高は20日平均の1.2倍以上。

この条件の狙いは、極端に小さすぎる銘柄や流動性が低すぎる銘柄を除きつつ、業績改善と株価トレンドが同時に出ている企業を拾うことです。売上成長率だけではなく営業利益成長率を入れることで、採算の悪い拡大をある程度除外できます。移動平均線を入れることで、業績が良くても株価がまだ評価されていない銘柄、または需給が悪い銘柄を弾けます。

抽出後に見るべきポイントは、なぜ成長しているのかです。値上げなのか、数量増なのか、新規事業なのか、M&Aなのか、為替なのか、一過性の特需なのか。ここは自動化だけでは判断できません。決算説明資料、セグメント別売上、受注残、顧客構成、競合環境を人間が確認します。

実例:割安成長株を探す条件設計

次に、割安成長株を探す条件を考えます。割安株と成長株は別物に見えますが、実際には「成長しているのにまだ評価されていない企業」を探す発想が重要です。

条件例は、PER15倍以下、売上成長率5%以上、営業利益成長率10%以上、営業利益率5%以上、自己資本比率40%以上、営業キャッシュフローが黒字、直近終値が75日移動平均線より上、配当または自社株買いなど株主還元姿勢が確認できる、という形です。

ここで注意したいのは、低PERだけで抽出しないことです。低PERには理由があります。成熟産業、業績ピーク、景気敏感、訴訟リスク、不透明な会計、資本効率の低さなどです。だから、低PERに成長性、キャッシュフロー、トレンドを組み合わせます。これにより、単なる安値放置銘柄ではなく、見直し余地のある銘柄を探しやすくなります。

抽出結果を見るときは、PERが低い理由を必ず確認します。利益が一時的に跳ねただけなら、翌期にPERが急上昇することがあります。特別利益で純利益が増えた場合も注意が必要です。営業利益や営業キャッシュフローを重視するのは、そのような見せかけの割安を避けるためです。

日次運用の流れを決める

スクリーニングは一度作って終わりではありません。日次または週次で同じ手順を回すことで価値が出ます。おすすめの運用フローは、データ更新、条件抽出、ランキング保存、前回との差分確認、個別調査、監視リスト登録です。

特に重要なのは差分確認です。毎日ランキング全体を見るより、「今日新しく条件に入った銘柄」「昨日から順位が急上昇した銘柄」「出来高倍率が急に上がった銘柄」を見る方が効率的です。これは人間の注意力を新しい変化に集中させるためです。

Pythonでは、前日の抽出結果CSVと当日の抽出結果CSVを比較できます。新規登場銘柄だけを抽出し、別ファイルに出すだけでも実用性は大きく上がります。

today = pd.read_csv('screened_today.csv')
yesterday = pd.read_csv('screened_yesterday.csv')

new_codes = set(today['code']) - set(yesterday['code'])
new_entries = today[today['code'].isin(new_codes)]

new_entries.to_csv('new_entries.csv', index=False, encoding='utf-8-sig')

この仕組みを作ると、「数千銘柄を見る」作業が「新規候補20銘柄を見る」作業に変わります。投資家にとって、これは大きな時間短縮です。

抽出結果を読むためのチェックリスト

自動抽出された銘柄は、次の順番で確認すると効率的です。第一に、業績の伸びが一過性か継続性のあるものか。第二に、利益率が改善している理由。第三に、売買代金が自分の売買規模に対して十分か。第四に、株価がすでに過熱していないか。第五に、次の決算までに市場の期待が高まりすぎていないか。

初心者ほど、抽出条件に合った銘柄を見つけると安心してしまいます。しかし本当に大事なのは、条件に合った後の読みです。たとえば売上成長率30%の企業でも、主要顧客1社への依存が高ければリスクは大きくなります。営業利益率が急改善していても、広告費を一時的に削っただけなら持続性は低いかもしれません。出来高が急増していても、短期材料で投機資金が入っただけなら長続きしない可能性があります。

チェックリストは、投資判断のブレーキとして機能します。スクリーニングはアクセルです。候補を発見する力を高めます。一方、チェックリストは不要な取引を減らします。この両方がそろって初めて、実務で使える仕組みになります。

よくある失敗と改善策

条件を増やしすぎる

最初から条件を増やしすぎると、候補がほとんど出なくなります。売上成長、利益成長、低PER、高配当、財務良好、チャート良好、出来高増加、すべてを同時に満たす銘柄は多くありません。まずは核となる条件を3つから5つに絞り、あとから補助条件を加える方が現実的です。

過去データに合わせすぎる

過去の大化け株に共通した条件を探すのは有効ですが、過去に合いすぎる条件は未来で機能しないことがあります。これを避けるには、条件の意味を説明できるかどうかを確認します。なぜその条件が株価上昇につながるのか。需給なのか、業績なのか、資本効率なのか。説明できない条件は、偶然の可能性があります。

データの欠損を無視する

財務データや株価データには欠損が発生します。欠損をゼロとして扱うと、ランキングが歪みます。初心者は、欠損値を除外する、または欠損フラグを付けて目視確認するのが安全です。Pythonではdropnaやfillnaを使えますが、何を欠損として扱うかを決めることが重要です。

売買代金を軽視する

小型株スクリーニングでは、魅力的に見える銘柄ほど流動性が低いことがあります。売買代金が少ない銘柄は、買うときも売るときも価格が飛びやすくなります。抽出条件には必ず売買代金や出来高の最低ラインを入れるべきです。

ChatGPTを分析メモ作成にも使う

ChatGPTはコード作成だけでなく、抽出結果の分析メモ作成にも使えます。たとえば、抽出された銘柄について、自分で決算説明資料を読み、要点を箇条書きにします。そのうえでChatGPTに「この企業の成長要因、リスク、次回決算で確認すべき項目を整理してください」と依頼します。

ただし、一次情報を読まずにChatGPTだけで企業分析を済ませるのは避けるべきです。AIは文章の整理には強いですが、最新の個別企業情報や細かな会計上の違いを常に正確に把握しているわけではありません。実務では、決算短信、有価証券報告書、決算説明資料、月次資料、適時開示を確認し、その内容を整理する補助役として使うのが現実的です。

おすすめは、銘柄ごとに「抽出理由」「業績の見どころ」「チャートの位置」「リスク」「次に確認する資料」を同じフォーマットで記録することです。これを続けると、自分の判断ミスの傾向が見えます。急騰後に追いかけすぎる、営業利益率の質を見落とす、流動性を軽視する、といった癖がデータとして残ります。

自動化の最終形は「毎朝の候補リスト」

最終的に目指す形は、毎朝または毎週決まった時間に候補リストが自動生成される状態です。理想は、成長株候補、割安成長株候補、出来高急増候補、トレンド転換候補、高配当候補など、投資スタイル別にCSVやスプレッドシートが出力される仕組みです。

最初から完全自動化する必要はありません。第一段階は、手動でPythonを実行してCSVを出す。第二段階は、条件を複数パターンに分ける。第三段階は、前日との差分を出す。第四段階は、抽出結果をGoogleスプレッドシートやローカルの監視リストに連携する。第五段階は、定期実行にする。この順番で進めれば、挫折しにくくなります。

自動化の価値は、作業時間の削減だけではありません。同じ条件を継続することで、市場環境の変化に気づきやすくなります。ある時期からAI関連銘柄ばかり上位に出る、内需ディフェンシブが増える、金利上昇局面で金融株が増える、小型成長株が減る。このような変化は、個別銘柄だけでなく相場全体の温度感を知る手がかりになります。

実務で使うならログを残す

スクリーニングを投資に活かすなら、必ずログを残します。いつ、どの条件で、どの銘柄が抽出され、その後どうなったのかを記録します。これを残さないと、良かった記憶だけが残り、悪かった抽出を忘れてしまいます。

最低限残すべき項目は、抽出日、銘柄コード、銘柄名、抽出条件名、終値、売買代金、主要スコア、メモです。後から1週間後、1カ月後、3カ月後の株価を追加すると、条件の有効性を検証できます。

たとえば、出来高急増条件で抽出された銘柄が、1週間後には強いが1カ月後には失速しやすいと分かれば、その条件は短期監視向きです。営業利益率改善条件で抽出された銘柄が、3カ月後からじわじわ上がる傾向があるなら、中期投資向きです。このように、条件ごとの時間軸を理解すると、売買判断の精度が上がります。

個人投資家にとっての最大の優位性

大きな資金を持つ投資家は、大量のデータ、高度なシステム、専門アナリストを使えます。一方で、個人投資家にも優位性があります。それは、小型株やニッチ企業を柔軟に調べられること、投資対象を自分の得意領域に絞れること、意思決定が速いことです。

ChatGPTとPythonの組み合わせは、この個人投資家の優位性を強化します。大量の銘柄から候補を絞る部分は機械に任せ、最後の深掘りは自分の目で行う。これにより、限られた時間でも質の高いリサーチが可能になります。

特に日本株は、知名度の低いBtoB企業、地方の優良企業、ニッチトップ企業、時価総額の小さい成長企業が多く存在します。大型株だけを追うなら情報格差は小さいですが、中小型株ではまだ人間の調査力が効く場面があります。自動スクリーニングは、その入口を広げるための実用的な武器になります。

まとめ

ChatGPTとPythonで日本株スクリーニングを自動化する目的は、楽に儲かる銘柄を機械に選ばせることではありません。目的は、投資仮説を条件化し、毎回同じ基準で候補銘柄を抽出し、自分のリサーチ時間を価値の高い作業に集中させることです。

最初は、売上成長率、営業利益率、自己資本比率、移動平均線、出来高といった基本指標だけで十分です。そこにスコアリング、差分確認、ログ保存を加えることで、銘柄探しは一気に実務的になります。さらにChatGPTを使えば、条件設計、コード作成、エラー修正、分析メモの整理まで効率化できます。

投資で重要なのは、特別な情報を一度だけ当てることではなく、良い候補に継続的に出会う仕組みを持つことです。スクリーニングを自動化すれば、相場が動いた後に慌てて探すのではなく、動き始めた候補を定期的に観察できます。これが、個人投資家が情報過多の市場で戦うための現実的なアプローチです。

p-nuts

お金稼ぎの現場で役立つ「投資の地図」を描くブログを運営しているサラリーマン兼業個人投資家の”p-nuts”と申します。株式・FX・暗号資産からデリバティブやオルタナティブ投資まで、複雑な理論をわかりやすく噛み砕き、再現性のある戦略と“なぜそうなるか”を丁寧に解説します。読んだらすぐ実践できること、そして迷った投資家が次の一歩を踏み出せることを大切にしています。

p-nutsをフォローする
日本株投資
スポンサーリンク
【DMM FX】入金
シェアする
p-nutsをフォローする

コメント

タイトルとURLをコピーしました