7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python×株式投資:月利3〜5%を狙う自動スクリーニング戦略

Last updated at Posted at 2025-05-16

相場の状況に応じて、銘柄選抜条件を使い分ける投資戦略

本記事の概要図

image.png

選抜条件を複数試し、安定して平均リターンが高い条件を見つけたい。

はじめに

株式投資で安定した収益を目指すうえで、銘柄スクリーニングの自動化は効率的な手段のひとつです。

前回は、証券アプリで1銘柄ずつテクニカル指標を確認する煩雑さを解消するため、Pythonによる自動スクリーニング処理のコードを紹介しました。

本記事はその続編として、
「どのようなスクリーニング条件を使えば、安定して利益が出せるのか?」
という問いの答えを、複数条件のバックテストを実施した結果をもとに考察します。


筆者自身、博士課程への進学資金(学費・生活費)を自力で確保する必要があり、株式投資の安定収益化をその手段のひとつと位置付けています。
現時点の運用資金は100万円。ここから毎月3〜5万円(=月利3〜5%*)を副収入として積み上げていくことを目標にしています。

同じように、資産形成やお小遣いアップを目指している方にとって、
実現可能なアプローチの例として参考になれば幸いです。

※「いやいや、それ詐欺でしょ」と思われるのも無理はありません。
それでも、実際にモデル構築 → 検証 →実運用 →改善 というサイクルを回してみると、さらなる工夫と根気は必要ですが、到達できそうな手応えはあります。

過去記事のまとめ(第0回〜第2.5回)

これまでの記事では、段階的な株式スクリーニングをPythonにより自動化し、安定した投資判断を実現するための仕組みを構築する様子を紹介してきました。

現在構築中の銘柄選抜モデルの全体像

Screenshot 2025-05-16 at 12.53.25.png


第0回

株価予測を始めた理由:D進に向けた資金づくり

会社の研究だけじゃ物足りない。もっと研究したい。博士に進学したいが資金が足りない──そんな問題意識を背景に、株式投資を「収益化できる研究対象」として捉え直し、Pythonによる株価予測を始めた経緯を紹介した導入記事です。

D進したいが金がない。そうだ株価を予測しよう。


第1回

財務指標による1次スクリーニング

東証プライム市場の約2000銘柄を対象に、財務的に優れた約200銘柄を選抜する方法を紹介しました:
財務指標による1次スクリーニング


第2回

テクニカル指標による2次スクリーニングの自動化 + 地合いスコア導入の検討

1次スクリーニングを通過した銘柄に対して、

  • RSI(相対力指数)
  • 移動平均線の傾き・乖離

これらのテクニカル指標に基づき、
複数の条件で選抜を行い、どの条件が安定した収益に繋がるのかをテストするコードを紹介しました。

また、適した選抜条件が、市場の相場(地合い)によって変わるのかどうかを調べるために、地合いを数値化(-3〜+3)した指標を、タグ付けしました。

実行時の挙動
https---qiita-image-store.s3.ap-northeast-1.amazonaws.com-0-4066570-b398072f-40f0-43ee-914d-3008c0e4b288.gif

テクニカル分析による2次スクリーニングの自動化検討


第2.5回

相場の“地合い”をスコア化する方法の詳細解説

株価の動きは個別銘柄だけでなく、市場全体の相場に影響されると思います。そこで、TOPIX連動ETF(1306.T)をベースに毎日の地合いを-3〜+3の整数スコアに変換する方法を紹介しました。値が大きいほど、相場の上昇トレンドが維持されていることを意味します。

株価暴落時の地合いスコアの挙動
image.png

今は買いか?それとも売りか?相場を数値化する地合いスコアの導入


第3回

テクニカル選抜の有効性をバックテストで検証(本記事)

  • そもそも、今回作ったテクニカル選抜モデルでリターンは得られるのか?
  • 実際に有効だったスクリーニング条件はどれか?
  • 地合い(相場状況)によって、適した条件は変わるのか?

複数条件を過去のデータを用いて、バックテストで比較し、安定したリターンにつながるパターンを探ります

※複数条件によるテクニカル選抜のコードは、第2回の記事に掲載済みです。今回は検証結果と考察を中心に紹介します。作図用のコードはご相談いただければ開示します。


使用データと検証設計

それでは、テクニカルスクリーニング条件の有効性を比較するために用いたデータと、バックテストの設計について説明します。

対象銘柄

検証対象としたのは、東証プライム市場に上場する約2000銘柄のうち、一定の財務基準を満たすものです(参考:第1回「財務スクリーニング」)。
各スクリーニング日において、財務スクリーニングを通過した約200銘柄を対象にしています。

なお、前回記事では yfinance を用いた一義的な選抜条件を紹介しましたが、本記事のバックテストは、検証用にコードを調整しています(詳細はご要望があれば開示可能です)。一定の基準を満たす銘柄をプライム全数の1/10ほどに選抜する仕様は変わりありません。

評価期間とスクリーニング日

検証に使用したスクリーニング実施日は、2022年1月〜2024年9月の範囲から、各 地合いスコア(-3〜+3)ごとに5日ずつランダムに選出しました。

例:

  • スコア-3: ['2022-03-11', '2022-10-12', '2023-07-11', '2024-08-06', '2024-08-08']
  • スコア-2: ['2022-03-01', '2022-04-25', '2022-06-14', '2022-10-03', '2023-07-13']
  • スコア-1: ['2022-01-17', '2022-02-07', '2022-04-20', '2023-07-18', '2023-12-19']
  • スコア 0: ['2022-08-10', '2023-08-08', '2023-09-25', '2024-04-11', '2024-07-23']
  • スコア+1: ['2022-02-09', '2022-06-28', '2022-10-26', '2023-06-27', '2023-11-13']
  • スコア+2: ['2022-07-29', '2023-06-12', '2023-06-29', '2023-07-04', '2024-06-06']
  • スコア+3: ['2022-07-13', '2022-08-19', '2023-01-18', '2023-04-19', '2024-02-16']

各日付において、第2回記事で紹介したテクニカル選抜コードを使用し、複数のスクリーニング条件を適用して銘柄を選抜。選抜された各銘柄について、**スクリーニング日から30日、60日、90日後のリターン(終値の変化率%)**を算出しました。
これらの値を比較することで、有望なスクリーニングパターンを検証しました。
本記事では、30日のデータのみに抜粋して紹介します。

スクリーニングパターン

以下の16通りのスクリーニング条件を設定し、それぞれのパフォーマンスを比較しました。

株価が上昇傾向にあり、ゴールデンクロスに近づいているが、まだ買われすぎではない── そうした「伸びしろのある」タイミングを捉えるための条件を、RSIと移動平均線の位置関係を使ってパターン化したものです。

各パターンは主に以下の4つの指標の組み合わせによって構成されています。

使用指標の説明*

  • RSI範囲(rsi_range)
    相対力指数(Relative Strength Index)の範囲です。RSIは買われすぎ・売られすぎを示す指標で、一般に30以下で割安、70以上で割高とされます。ここでは、指定したRSI範囲に株価がある銘柄を選定対象としています。
     
  • MA収束判定幅(ma_eps)
    3本の移動平均線(MA5・MA25・MA75)がどれだけ近づいているかを評価するための閾値です。たとえば「±2%」であれば、3本のMAが互いに±2%以内に収束しているものを抽出します。**これは、トレンド転換の兆候である「MAの収束+短期線の上抜け(初動)」を捉えることを目的としています。**上昇トレンドが始まる直前には、MA同士が一時的に接近することが多いため、その構造に着目しています。
     
  • 傾き評価期間(slope_period)
    最も敏感な短期移動平均線(MA5)の傾きを、何日間の変化で評価するかを示します。本検証では、5営業日で統一しており、直近5日間でMA5がどれだけ上昇しているかを見ています。
     
  • 傾き下限(slope_thresh)
    上記の評価期間内でのMA5の傾き(=上昇トレンドの強さ)を評価し、傾きが一定以上(たとえば+4%以上)ある場合に抽出対象とします。これにより、単なる収束ではなく「収束時に短期線(MA5)が上方向へ明確に動き出した」局面を抽出できます。

今回の選抜で狙っている兆候の概要

RSIが高すぎない
image.png

MAがゴールデンクロスしそう*
Screenshot 2025-05-17 at 10.04.27.png

短期・中期・長期の3本の移動平均線(MA5・MA25・MA75)が収束し、最も反応の早いMA5が中長期の線を上抜けるタイミングは、上昇トレンドの始まりを示す重要なサインとされます。

*2025/05/17 MAに関して修正を加えました。

検証したスクリーニングパターン

パターン RSI範囲 MA乖離上限(ma_eps) 傾き評価期間(slope_period) 傾き下限(slope_thresh)
1 25〜50 ±2% 5日間 4%
2 25〜50 ±4% 5日間 4%
3 25〜50 ±6% 5日間 4%
4 25〜50 ±8% 5日間 4%
5 30〜60 ±2% 5日間 4%
6 30〜60 ±4% 5日間 4%
7 30〜60 ±6% 5日間 4%
8 30〜60 ±8% 5日間 4%
9 35〜70 ±2% 5日間 4%
10 35〜70 ±4% 5日間 4%
11 35〜70 ±6% 5日間 4%
12 35〜70 ±8% 5日間 4%
13 40〜75 ±2% 5日間 4%
14 40〜75 ±4% 5日間 4%
15 40〜75 ±6% 5日間 4%
16 40〜75 ±8% 5日間 4%

たくさんありますが、パターン4つごとに、RSIの範囲が変わっているだけです。MA乖離上限は4つごとに同じことを繰り返しています。

各スクリーニング日には地合いスコア(-3〜+3)をタグ付けしており、
これにより相場の状況によってどのパターンが機能しやすいのかも、あわせて検証できます。


テクニカル選抜の有効性について(バックテストの結果)

概要

1ヶ月後にプラスの平均リターン(3〜7%)を期待できるパターンが存在し、有効性のあるテクニカル選抜条件が含まれていると考えられました。
また、最適な選抜条件は地合いスコアによって異なることが示唆されました。以下では、スコアごとに結果を整理します。


<地合いスコア -3〜0>

  • 相場が最も悪い「スコア -3」のときは、**RSIが低め(25〜50)かつMA乖離上限(ma_eps)が4〜8%**のパターンで、
    シャープレシオが0.8以上、かつ銘柄数が20未満のものが見られ、実践向きの条件として注目されました。これらの平均リターンは3%程度でした。
     
  • スコア -2〜0 では、RSIに関わらずMA乖離上限が±2%のパターンが安定して高シャープレシオを示す傾向があり、厳しいスクリーニング条件が有効だったと推測されます。平均リターンは、3~7%でした。
     
  • シャープレシオが高くないものも含みますが、全体的には、RSIが低めの時に平均リターンが高い傾向がありました。

<地合いスコア 1〜3>

  • スコア0と2では、-3〜0と似た傾向がありました(平均リターン3~4%)が、スコア1と3のときには、十分なシャープレシオ(≥0.8)を示す条件は見当たらず、相場が過熱気味のときには、選抜が効きにくい可能性が示唆されました。

平均リターン

avg_return_highlighted.png

  • 各スコアごとに5つのスクリーニング日を設定し、その平均リターンをヒートマップで可視化しています。
     
  • ★マークは、「シャープレシオが0.8以上かつ銘柄数が20未満」の条件に付与しており、
    リスクが低く、実際の投資や機械学習に用いる候補として有望なものです。

平均銘柄数

avg_stock_count_heatmap.png

  • 1日あたりに選抜された銘柄の平均数を表示しています。
     
    色が濃いほど多くの銘柄が通過しており、色が薄いほどスクリーニング条件が厳しいことを示唆します。
     
  • MA乖離が小さいパターンほど選抜銘柄数が少なくなりやすい傾向があり、実務的にも有望だと思われました(例:50銘柄も一度に発注できないし、機械学習に50銘柄をかけると計算コストがかかり過ぎる)。

シャープレシオ

sharpe_ratio_heatmap.png

  • 各スコアごとに、パターン別の平均リターンを標準偏差で割ったシャープレシオを可視化しました。
     

  • この値が大きいほど、高リターンを安定して出せるため、リスクが低いと言えます。プロの投資家は1以上を安定して出せるらしいです。
     

  • 月利3〜5%、シャープレシオ0.8の戦略を毎月繰り返すと(複利前提)、年利はおよそ+60%に達します(まじか)。月によっては、負けることもありますが、回数を重ねることでリターンは平均に近づきます。年単位での損失確率は、正規分布を仮定すれば0.03%未満。月利が高ければ複利の力で圧倒的な結果になります。実際には、諸々の急落等で年利20 - 30%くらいになるとは思います。
     

  • 特に、MA乖離が±2%のパターンに沿って比較的高いシャープレシオが帯状に分布しており、安定性が高い条件として注目されました。


考察とまとめ

  • 今回のスクリーニング条件の中には、相場が弱いとき(スコアがマイナス)の時に、安定して収益が出せそうなパターンが複数ありました。
     

  • 地合いスコア-3の時はRSIが低めで、MA乖離が比較的大きい方ときに、成績が優れていました。一方で、スコア-2~0の時は、MA乖離が小さい方が、優れたリターンを示す傾向がありました。

    →相場が大きく崩れているときは、大半の銘柄がゴールデンクロスには早すぎるため、MA乖離が広いものを選んだ方が先回りになり、リターンが生じたと考えられます。

    →相場が回復傾向の時は、ゴールデンクロス直前の銘柄が上記よりも増えるため、MA乖離が小さい銘柄の選抜がリターンに直結しやすくなり、このような結果になったと考えられます。
     

  • 一方で、相場が過熱しているとき(スコア+3など)には有効な条件が少なかったです

    →このような局面では反転・下落が近づいているため、リターンを発生するのが難しいのではないかと推測されます。
     

  • 以上から、テクニカル分析に基づく選抜は、相場の地合いを考慮して使い分ける必要があることが示されました。一律の条件でスクリーニングを行うのではなく、地合いに応じて最適な条件を柔軟に選択する戦略が不可欠だと考えられます。

実運用に向けて:このモデルの活用と限界

今回検証したモデルは、地合いスコアごとに適したテクニカル選抜パターンを見つけ出すことで、短期〜中期(1ヶ月程度)において安定したリターンを狙う戦略の構築を目指したものです。

特に、地合いが悪い局面において有効なパターンは、一定の再現性をもって確認されました。

ただし、これらは、あくまで過去のデータであり、今後どの程度有効なのかは明らかではありません。その点に関しては、筆者が実際にこのモデルを使って投資を行い検証していきます。

また、今後はこの知見を活かしつつ、スコアが高い局面(+2〜+3)での有効な立ち回り方についても検討していく予定です。


免責と注意点

本記事で紹介した結果は、参考情報であり、売買判断を保証するものではありません。投資判断は自己責任でお願いいたします。
検証にはマシンの制約上、各スコアに対して5日のみを使用しており、さらなる統計的な裏付けが必要です。
同様の分析を100日以上のスクリーニング日で実施した場合、結果や解釈が変わる可能性があります。

実際の運用にあたっては、地合い・セクター・ファンダメンタルズなど、複数の要因を組み合わせた判断が不可欠です。


今後はこのモデルを基盤として、強気相場における選抜戦略の構築や、
機械学習による選抜モデルとの連携なども視野に入れて検討を進めていきます。

ああ早く機械学習 着手したい んぅ。


<参考>
地合いスコア-3 バイオリンプロット
violin_scatter_score-3.png

地合いスコア-2 バイオリンプロット
violin_scatter_score-2.png

地合いスコア-1 バイオリンプロット
violin_scatter_score-1.png

地合いスコア0 バイオリンプロット
violin_scatter_score0.png

地合いスコア1 バイオリンプロット
violin_scatter_score1.png

地合いスコア2 バイオリンプロット
violin_scatter_score2.png

地合いスコア3 バイオリンプロット
violin_scatter_score3.png

7
7
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?