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

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

銘柄探しを「気合い」から「工程」に変える

日本株の銘柄探しで最も危険なのは、情報量が少ないことではありません。むしろ逆です。決算短信、四季報、適時開示、ニュース、SNS、証券会社のランキング、投資系メディア、テーマ株リストまで、個人投資家が浴びる情報量はすでに過剰です。問題は、その情報を毎回同じ基準で処理できないことです。

ある日は高配当株が魅力的に見え、別の日にはAI関連株が気になり、決算後に急騰した銘柄を見ると乗り遅れた気分になる。こうした状態では、投資判断が市場のノイズに引っ張られます。結果として、買う理由は曖昧なのに、下がった時だけ不安が明確になるという最悪の形になります。

そこで有効なのが、ChatGPTとPythonを使った日本株スクリーニングの自動化です。ここでいう自動化とは、AIに「上がる銘柄を教えて」と丸投げすることではありません。投資家自身が作った基準を、毎回ブレずに実行する仕組みを作ることです。ChatGPTは条件設計やコード作成、分析の言語化に使い、Pythonはデータの取得、加工、並べ替え、検証に使います。この役割分担ができると、銘柄探しの精度はかなり変わります。

本記事では、日本株スクリーニングを個人投資家が現実的に運用できる形に落とし込みます。高度な機械学習を使う必要はありません。むしろ最初は、売上成長率、営業利益率、PER、PBR、自己資本比率、出来高、株価位置といった基本指標を組み合わせるだけで十分です。重要なのは、毎週同じ条件で市場全体を見渡し、気になる銘柄だけを深掘りする体制を作ることです。

ChatGPTとPythonの役割を分ける

まず誤解を潰しておきます。ChatGPTは銘柄選定の神託ではありません。学習データや入力情報に限界があり、最新株価や最新決算を常に正確に把握しているとは限りません。したがって、最終的な数値処理やランキングはPythonに任せるべきです。一方で、ChatGPTは投資条件を言語化し、スクリーニングロジックを整理し、Pythonコードの雛形を作り、分析レポートの叩き台を作る作業に強みがあります。

たとえば、あなたが「営業利益率が改善していて、売上も伸びていて、株価が長期移動平均線を上回っている銘柄を探したい」と考えたとします。この段階では条件がまだ曖昧です。営業利益率の改善とは何ポイント改善なのか。売上成長は前年比で見るのか、3年平均で見るのか。長期移動平均線は200日線なのか、52週線なのか。こうした曖昧な条件をChatGPTに投げると、チェック項目に分解できます。

一方で、Pythonはその条件を実際のデータに適用します。CSVやExcel、API、ダウンロードした株価データなどを読み込み、条件に合う銘柄だけを抽出します。さらに、スコアリングして上位順に並べたり、前回抽出リストとの差分を出したり、チャート確認候補だけをファイル化したりできます。

実務上の役割は次のように分けると安定します。ChatGPTは「投資仮説の設計者」、Pythonは「検査機械」、投資家本人は「最終判断者」です。この三者を混同しないことが重要です。AIに判断を丸投げすると危険ですが、AIを設計補助として使えば、個人投資家の作業効率は大きく上がります。

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

最初から複雑なモデルを作る必要はありません。むしろ、最初のスクリーニングは単純なほうが機能します。おすすめは「成長性」「収益性」「財務安全性」「需給」「株価トレンド」の5分類で見る方法です。これは、ファンダメンタルとテクニカルを無理なく接続できるためです。

成長性を見る条件

成長性では、売上高成長率と営業利益成長率を見ます。売上が伸びていないのに利益だけ伸びている企業は、コスト削減や一時要因の可能性があります。逆に、売上は伸びているのに利益が伸びていない企業は、成長投資中か、競争が激しく採算が悪い可能性があります。最初は「売上高前年比5%以上」「営業利益前年比10%以上」程度の条件で十分です。

ただし、小型株では前年比だけを見るとブレます。前年の利益が低すぎると、成長率が異常に高く見えるからです。そこで、営業利益額が一定以上、たとえば直近営業利益が5億円以上といった下限を置くと、極端なノイズを減らせます。

収益性を見る条件

収益性では営業利益率を使います。営業利益率は、企業が本業でどれだけ稼げているかを見る指標です。製造業、IT、卸売、小売では水準が違うため、全業種を同じ基準で比較するのは乱暴ですが、最初の機械的スクリーニングでは「営業利益率5%以上」「かつ前年より改善」といった条件が使いやすいです。

特に注目したいのは、営業利益率が低水準から改善し始めた企業です。すでに高収益な企業は市場に評価されていることが多い一方、利益率改善の初動は株価に十分織り込まれていない場合があります。たとえば営業利益率が2%から5%へ改善し、同時に売上も伸びている企業は、ビジネスモデルの転換点にあるかもしれません。

財務安全性を見る条件

財務安全性では自己資本比率とネットキャッシュを見ます。自己資本比率が高い企業は、景気悪化時にも資金繰りで追い込まれにくい傾向があります。ネットキャッシュとは、現金同等物から有利子負債を差し引いたものです。ネットキャッシュが厚い企業は、投資、増配、自社株買い、M&Aなどの選択肢を持ちやすくなります。

ただし、現金を持っているだけで株価が上がるわけではありません。重要なのは、現金が事業成長や株主還元に使われる可能性があるかです。そのため、財務安全性は単独で買い材料にせず、成長性や資本政策と組み合わせて判断します。

需給を見る条件

需給では出来高と売買代金を見ます。どれだけ良い企業でも、売買代金が極端に小さい銘柄は実戦では扱いづらいです。買いたい時に買えず、売りたい時に売れないからです。最低限、直近20日平均売買代金が一定以上ある銘柄に絞ると、実務上のストレスが減ります。

また、出来高急増は市場参加者の関心が変化したサインです。決算、上方修正、テーマ性、資本政策などをきっかけに出来高が増え、その後も高水準を維持する銘柄は監視対象になります。単発の急騰ではなく、出来高が数日から数週間残るかを見ることが重要です。

株価トレンドを見る条件

株価トレンドでは、現在株価が200日移動平均線を上回っているか、年初来高値からの距離が近いか、直近高値を更新しているかを見ます。割安に見える銘柄でも、株価が下落トレンドのままなら、投資家の評価はまだ変わっていません。業績改善と株価トレンドが同時に出ている銘柄のほうが、実戦では扱いやすいです。

この条件を入れることで、いわゆる「安いだけの株」を避けやすくなります。PBR0.5倍、PER8倍でも、利益が伸びず、出来高もなく、株価が長期下落中なら、割安ではなく放置されているだけかもしれません。

スクリーニングの基本設計

実践では、銘柄を一発で当てにいくのではなく、段階的に絞ります。第1段階では市場全体から条件に合う銘柄を広く抽出します。第2段階ではスコアリングで優先順位を付けます。第3段階では決算資料、事業内容、チャート、出来高、株主構成を人間が確認します。この三段階に分けると、作業がかなり整理されます。

たとえば、第1段階で「売上成長率5%以上、営業利益成長率10%以上、営業利益率5%以上、自己資本比率40%以上、200日線上、20日平均売買代金5000万円以上」という条件を設定します。これで日本株全体から数十〜数百銘柄に絞れます。

第2段階では、各指標をスコア化します。売上成長率が高いほど加点、営業利益率が改善しているほど加点、自己資本比率が高いほど加点、出来高が増えているほど加点、株価が高値圏にあるほど加点します。ここで重要なのは、1つの指標だけで決めないことです。売上成長率だけが高い赤字企業、配当利回りだけが高い成熟企業、出来高だけが急増した材料株を、同じランキング上位に置かないためです。

第3段階では、上位銘柄の中から実際に投資候補を選びます。ここでは定量データだけでは足りません。なぜ利益率が改善したのか。売上成長は一過性か継続性があるか。受注残は増えているか。価格転嫁は進んでいるか。株主還元方針に変化はあるか。競合と比べて何が強いか。これらを決算説明資料や適時開示で確認します。

Pythonで作る最小構成の銘柄抽出

Pythonで最初に作るべきものは、完璧な自動売買システムではありません。CSVを読み込み、条件で絞り込み、ランキングして、結果をCSVで出力するだけの小さなプログラムです。これだけでも、手作業の銘柄探しとは比較にならないほど効率化できます。

たとえば、手元に銘柄コード、銘柄名、売上成長率、営業利益成長率、営業利益率、自己資本比率、PER、PBR、平均売買代金、現在株価、200日移動平均線、年初来高値との距離が入ったCSVがあるとします。Pythonでは、これを読み込んで条件に合う銘柄を抽出できます。

実務上は、データの取得元を固定することが重要です。毎回違うサイトから手入力すると、項目名や計算基準がズレます。最初は証券会社のスクリーニング結果をCSVで出し、それをPythonで二次加工する方法でも構いません。慣れてきたら、株価データや財務データの取得を段階的に自動化すれば十分です。

コードを書く時は、条件をプログラム内に直書きしすぎないほうが良いです。売上成長率の基準、営業利益率の基準、売買代金の下限などは、後で変更したくなります。設定部分を上にまとめておくと、相場環境に応じて調整しやすくなります。

ChatGPTに投げるプロンプト例

ChatGPTを使う時は、曖昧に頼むほど結果が雑になります。「日本株で良い銘柄を探して」ではなく、「日本株のCSVデータを使って、売上成長率、営業利益率、自己資本比率、売買代金、200日移動平均線との位置からスコアを作りたい。Pythonコードを作って」と依頼するほうが実用的です。

さらに良いのは、入力CSVの列名を明示することです。たとえば「code, name, sales_growth, op_profit_growth, op_margin, equity_ratio, per, pbr, avg_trading_value, close, ma200」という列があると伝えれば、ChatGPTはその列名に合わせてコードを作れます。

プロンプト例は次のようになります。「以下のCSV列を使い、日本株スクリーニング用のPythonコードを作ってください。条件は、売上成長率5%以上、営業利益成長率10%以上、営業利益率5%以上、自己資本比率40%以上、平均売買代金5000万円以上、終値が200日移動平均線より上。さらに、売上成長率、営業利益率改善、自己資本比率、売買代金、株価トレンドをスコア化し、総合スコア順に並べてCSV出力してください。」

このように依頼すると、ChatGPTは実行可能なコードの叩き台を作れます。ただし、そのまま信用してはいけません。列名のズレ、単位の違い、欠損値処理、ゼロ除算、文字列と数値の混在などでエラーが出ることがあります。生成されたコードは、少量データでテストしてから使います。

スコアリングで見るべきポイント

スコアリングは便利ですが、設計を間違えると危険です。よくある失敗は、極端な数値の銘柄がランキング上位を独占することです。たとえば、営業利益成長率が前年比500%の銘柄があったとしても、前年利益が極端に小さければ意味は薄いかもしれません。このような外れ値をそのまま加点すると、ランキングが歪みます。

対策として、スコアには上限を設けます。売上成長率は30%以上なら満点、営業利益成長率は50%以上なら満点、自己資本比率は70%以上なら満点、というように頭打ちにします。これにより、異常値に引っ張られにくくなります。

また、PERやPBRの扱いにも注意が必要です。低PERだから良い、高PERだから悪いと単純に決めると、成長株を取り逃がします。逆に、高PERをすべて許容すると、期待先行の銘柄ばかりになります。実践では、PERは減点項目として使うより、異常値を除外するフィルターとして使うほうが扱いやすいです。たとえばPERが0以下、または80倍超の銘柄は一旦除外する、という使い方です。

株価トレンドのスコアでは、200日線上にあるだけでなく、出来高を伴っているかを見ると精度が上がります。株価だけ上がって出来高が増えていない場合、参加者が少なく、上昇の持続力に欠けることがあります。逆に、業績改善と出来高増加が同時に出ている銘柄は、機関投資家や中長期資金が入り始めている可能性があります。

具体例:成長・収益・需給の三点セットで見る

仮に、A社、B社、C社の3銘柄がスクリーニングに出たとします。A社は売上成長率20%、営業利益率12%、自己資本比率60%、200日線上、出来高も増加しています。B社はPERが低く配当利回りも高いものの、売上は横ばいで出来高も少ない。C社は売上成長率50%ですが赤字で、株価は高値から大きく下落しています。

この場合、最初に深掘りする価値が高いのはA社です。なぜなら、成長性、収益性、財務、需給、トレンドが同じ方向を向いているからです。B社はバリュー投資として別枠で検討できますが、成長株スクリーニングの主役ではありません。C社はテーマ性で急騰する可能性はありますが、赤字かつ下落トレンドならリスク管理が難しくなります。

このように、スクリーニングの目的を明確にすると、銘柄の見方がブレません。高配当株を探す条件と、成長株を探す条件と、短期モメンタム株を探す条件は違います。ひとつの万能スクリーニングを作ろうとせず、目的別に複数のフィルターを持つほうが実用的です。

自動化で最も重要なのは差分管理

スクリーニングを自動化する最大のメリットは、毎回の抽出結果を比較できることです。今回初めて上位に出てきた銘柄、前回から順位が上がった銘柄、条件から外れた銘柄を把握できます。これは手作業ではかなり面倒ですが、Pythonなら簡単にできます。

特に重要なのは「新規ランクイン銘柄」です。市場の評価が変わり始めた初期段階を捉えられる可能性があるからです。たとえば、先月までスクリーニングに出てこなかった銘柄が、決算後に売上成長、利益率改善、出来高増加、株価200日線上抜けを同時に満たした場合、監視リストに入れる価値があります。

逆に、前回上位だった銘柄が条件から外れた場合も重要です。株価が200日線を割ったのか、出来高が細ったのか、決算で利益率が悪化したのか。外れた理由を確認することで、保有銘柄の警戒サインにも使えます。

差分管理をする時は、毎回の抽出結果を日付付きで保存します。たとえば「screening_2026-06-13.csv」のように保存しておけば、後から順位変化を追跡できます。週次で運用するなら、1年で約52回分のデータが残ります。これだけで、自分のスクリーニング条件がどのような銘柄を拾いやすいか見えてきます。

ChatGPTで分析コメントを自動生成する

Pythonで上位銘柄を抽出した後、ChatGPTを使って分析コメントの叩き台を作ることもできます。たとえば、上位20銘柄について、売上成長率、営業利益率、自己資本比率、出来高変化、株価トレンドを入力し、「この銘柄がスクリーニング上位に来た理由を100字で説明して」と依頼します。

この使い方は、投資判断を任せるのではなく、作業メモを高速化する用途です。人間が毎回同じ形式でコメントを書くのは面倒ですが、ChatGPTなら短時間で整った文章にできます。その上で、投資家本人が決算資料を見て、コメントを修正します。

たとえば「売上成長率が高く、営業利益率も改善。株価は200日線を上回り、出来高も増加しているため、業績改善と需給改善が同時に進む候補として監視」というコメントがあれば、後から見返した時に抽出理由が分かります。これを残しておくと、数カ月後に振り返った時、自分の仮説が当たったのか外れたのか検証しやすくなります。

バックテストで期待値を確認する

スクリーニング条件を作ったら、必ず過去データで検証します。これをしないと、条件が単なる好みに過ぎないのか、実際に有効性があるのか分かりません。バックテストでは、ある時点で条件に合った銘柄を買ったと仮定し、1カ月後、3カ月後、6カ月後のリターンを確認します。

ただし、個人投資家が最初から厳密なバックテスト環境を作るのは大変です。まずは簡易検証で十分です。過去の抽出リストを保存し、数週間から数カ月後に株価がどうなったかを確認します。上位10銘柄の平均リターン、TOPIXとの差、最大下落率、勝率を記録するだけでも、自分の条件の癖が見えます。

注意点は、生存者バイアスです。現在残っている銘柄だけで過去検証すると、上場廃止や大幅悪化した企業が抜け落ち、結果が良く見えます。また、過去の決算情報を現在の情報で見てしまうと、未来を知っていた前提の検証になります。完璧を求めると難しいですが、この罠があることは理解しておくべきです。

それでも、何も検証しないよりは簡易検証のほうが圧倒的に有益です。特に、スクリーニング上位銘柄が短期に強いのか、中期に強いのか、急落も多いのか、地味に上がるのかが分かるだけで、売買ルールを調整できます。

実運用のワークフロー

実運用では、毎日スクリーニングする必要はありません。個人投資家なら、週1回の定点観測で十分です。週末にデータを更新し、Pythonでスクリーニングを実行し、新規ランクイン銘柄と順位上昇銘柄だけを確認します。その後、上位10〜20銘柄の決算資料とチャートを見ます。

作業時間は、慣れれば30分から1時間程度に収まります。重要なのは、毎週同じ曜日、同じ条件で実行することです。相場が盛り上がった時だけ条件を変えたり、下落相場で怖くなって基準を緩めたりすると、データの連続性が壊れます。

監視リストに入れた銘柄は、すぐ買う必要はありません。むしろ、スクリーニングは「買う銘柄を決める作業」ではなく、「詳しく調べる銘柄を絞る作業」と考えるべきです。最終的な買い判断では、決算内容、事業環境、チャートの位置、損切りライン、保有比率を確認します。

たとえば、スクリーニング上位に出た銘柄でも、決算直後に窓を開けて急騰し、短期的に過熱している場合は、押し目を待つ選択もあります。逆に、業績は良いのに株価がまだ静かな場合は、次の決算や出来高増加を待つ監視候補になります。

よくある失敗と対策

第一の失敗は、条件を増やしすぎることです。条件を増やせば精度が上がるように見えますが、実際には該当銘柄が少なくなりすぎ、偶然抽出された銘柄に過剰な意味を持たせる危険があります。最初は5〜8条件程度に抑え、後から必要に応じて調整します。

第二の失敗は、過去にうまくいった条件を過信することです。小型成長株が強い相場、バリュー株が強い相場、高配当株が買われる相場、テーマ株が物色される相場では、有効な条件が変わります。スクリーニング条件は絶対ではなく、相場環境ごとの道具です。

第三の失敗は、データの単位ミスです。売上成長率が5と表示されている時、それが5%なのか500%なのか、0.05なのかを確認しないと、条件が壊れます。売買代金も円、千円、百万円で単位が異なることがあります。Pythonコードでは、読み込み直後にデータの先頭数行と統計量を確認する習慣を持つべきです。

第四の失敗は、ランキング上位をそのまま買うことです。スクリーニングは候補抽出であり、最終判断ではありません。上位銘柄には、決算の一時要因、特需、低流動性、既に織り込み済みの材料、需給悪化の前兆が混ざります。ランキングは入口であって、出口ではありません。

個人投資家が作るべき3つのリスト

自動化を実戦に落とすなら、3つのリストを作ると管理しやすくなります。第一に「新規発掘リスト」です。これは今回初めて条件に合った銘柄です。第二に「継続監視リスト」です。複数回連続で上位に残っている銘柄です。第三に「脱落リスト」です。以前は条件に合っていたが、今回外れた銘柄です。

新規発掘リストは初動候補です。決算後に評価が変わった銘柄や、出来高が増え始めた銘柄が入ります。継続監視リストは中期候補です。市場が継続的に評価している可能性があり、押し目や決算通過後の動きに注目します。脱落リストは警戒候補です。保有している場合は、外れた理由を確認します。

この3分類を作るだけで、投資判断はかなり整理されます。新しく気になった銘柄に飛びつくのではなく、「なぜ今回出てきたのか」「前回も出ていたのか」「何が改善したのか」を確認できます。これが、感覚投資から工程投資への転換です。

最終的には自分専用の投資ダッシュボードにする

スクリーニングが安定してきたら、結果をExcelやGoogleスプレッドシートに出力し、自分専用の投資ダッシュボードにすると便利です。上位銘柄、前回順位、順位変化、新規ランクイン、主要指標、コメント、確認状況を一覧化します。色分けを使えば、どの銘柄を優先的に見るべきか一目で分かります。

たとえば、新規ランクインは黄色、順位上昇は青、条件脱落は赤、決算確認済みは緑というように管理します。さらに、決算発表日、時価総額、業種、監視理由、想定シナリオ、リスク要因を記録すれば、投資ノートとしても使えます。

このダッシュボードは、投資成績の改善だけでなく、メンタル管理にも役立ちます。相場が急落した時でも、自分が何を基準に銘柄を見ているか分かるからです。基準がない投資家は値動きに振り回されます。基準がある投資家は、条件が崩れたかどうかを確認できます。この差は大きいです。

まとめ:AIに任せるのではなく、投資プロセスを強化する

ChatGPTとPythonを使った日本株スクリーニングの本質は、銘柄選びを自動化することではありません。投資プロセスを標準化し、同じ基準で市場を見続けることです。ChatGPTは条件設計、コード作成、分析コメントの整理に使い、Pythonはデータ処理、抽出、ランキング、差分管理に使います。そして最終判断は、投資家本人が行います。

この仕組みを作ると、銘柄探しの質が変わります。SNSで見かけた銘柄に飛びつくのではなく、自分の条件に合うか確認できます。決算後に急騰した銘柄を見ても、過去の抽出履歴から初動だったのか、すでに過熱だったのか検証できます。保有銘柄が下がった時も、条件が崩れたのか、単なる相場全体の下落なのかを分けて考えられます。

個人投資家に必要なのは、完璧な予測ではありません。再現性のある作業手順です。市場は常に不確実ですが、自分の銘柄発掘プロセスまで不確実にする必要はありません。まずは週1回、基本指標を使った小さなスクリーニングから始める。抽出結果を保存し、差分を見て、気になる銘柄を深掘りする。この地味な繰り返しが、長期的には大きな情報優位になります。

ChatGPTとPythonは、個人投資家にとって強力な補助輪です。ただし、補助輪は運転者の代わりにはなりません。自分の投資仮説を持ち、それを機械的に検査し、結果を検証し続ける。この姿勢があって初めて、AIとプログラムは実戦で使える武器になります。

コメント

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