【Python株価分析】yfinanceとPandas-TAで買いシグナルを自動検出!テクニカル分析ツールを自作しよう 📈

「毎日たくさんの銘柄のチャートをチェックするのは大変…」
「移動平均線のゴールデンクロスや、RSIの売られすぎといった、特定の買いシグナルが出た銘柄だけを効率的に見つけたい!」
「Pythonで本格的な株価分析ツールを作ってみたい!」

こんにちは! Pythonプログラミング探検隊、隊長のPythonistaです! これまで私たちはPythonの基本から、NumPyPandasMatplotlibといったデータ分析の基盤となるライブラリまで、様々なスキルを身につけてきました。今回は、その集大成として、非常に実践的でエキサイティングなプロジェクトに挑戦します!

今回のテーマは、「Pythonで株価データを自動取得し、複数のテクニカル指標を計算して、"買いシグナル"を検出するツール」の開発です。yfinanceライブラリで株価を取得し、pandas_taという便利なライブラリでテクニカル指標を簡単に追加、そして独自の分析ロジックを組み込んで、注目すべき銘柄を自動でリストアップします。このプロジェクトを通して、あなたのPythonスキルを実践的な金融データ分析へと昇華させましょう!

【超重要】この記事はプログラミング学習と技術探求を目的としています。

本記事で紹介するスクリプトや分析手法は、特定の銘柄の購入を推奨するものでは一切なく、金融・投資助言ではありません。株式投資は、多くのリスクを伴います。実際の投資判断は、必ずご自身の責任と判断、そして専門的な情報源に基づいて行ってください。


1. プロジェクトの概要と準備

1.1. 今回作るツールの機能

このツールは、あらかじめ指定した銘柄リストに対して、以下の処理を自動で行います。

  1. 最新の株価データを自動で取得する。
  2. 移動平均線、MACD、RSI、ボリンジャーバンドといった主要なテクニカル指標を計算する。
  3. 複数の指標を組み合わせた「トレンドフォロー戦略」「逆張り戦略」などの買いシグナルを判定する。
  4. 買いシグナルが検出された銘柄を、シグナルの数が多い順にリストアップして報告する。

1.2. 必要なライブラリの準備

このプロジェクトでは、以下の3つの主要な外部ライブラリを使用します。ターミナルやコマンドプロンプトで、pipを使ってインストールしてください。

pip install pandas yfinance pandas-ta
  • pandas: Pythonでのデータ分析には欠かせない、データフレームを扱うためのライブラリです。
  • yfinance: Yahoo! Financeから株価データを簡単に取得するためのライブラリです。
  • pandas_ta: PandasのDataFrameに、移動平均線やMACD、RSIといった100種類以上のテクニカル指標を驚くほど簡単に追加できる、非常に便利なライブラリです。

これで、開発の準備は完了です!


2. スクリプトの全体像(完成コード)

まずは、今回作成するスクリプトの全体像を見てみましょう。このコードをstock_signal_checker.pyのようなファイル名で保存してください。各部分の詳しい解説はこの後でじっくり行いますので、まずは全体の流れを掴んでください。

----


3. コードの仕組みを徹底解説!

このスクリプトは、役割ごとにいくつかの関数に分かれています。それぞれの関数が何をしているのか、順番に見ていきましょう。

3.1. get_stock_data(ticker)関数:株価データの取得

この関数は、指定された銘柄コード(ティッカー)の株価データをyfinanceライブラリを使って取得します。

stock_data = yf.download(ticker, start=start_date, end=end_date, progress=False, auto_adjust=True)

yf.download()で簡単にデータを取得できます。auto_adjust=Trueは、株式分割などを考慮した調整後の株価を取得するための便利なオプションです。

また、以下の部分は、yfinanceライブラリの少し特殊な挙動に対応するための重要なテクニックです。

if isinstance(stock_data.columns, pd.MultiIndex):
    stock_data.columns = stock_data.columns.get_level_values(0)

yfinanceは、特定の条件下で列名が階層構造(MultiIndex)になることがあります。このコードは、もし列名が階層的になっていた場合に、それをシンプルな1階層の列名に修正してくれる、より頑健なプログラムにするための工夫です。

3.2. calculate_indicators(df)関数:テクニカル指標の算出

この関数の主役はpandas_taライブラリです。このライブラリのおかげで、複雑なテクニカル指標の計算が驚くほど簡単になります。

# 移動平均線
df.ta.sma(length=SHORT_MA_PERIOD, append=True)
# MACD
df.ta.macd(fast=MACD_FAST, slow=MACD_SLOW, signal=MACD_SIGNAL, append=True)
# RSI
df.ta.rsi(length=RSI_PERIOD, append=True)
# ボリンジャーバンド
df.ta.bbands(length=BBANDS_PERIOD, std=BBANDS_STD_DEV, append=True)

見ての通り、DataFrameに対して.ta.指標名()のようにメソッドを呼び出すだけで、計算結果が新しい列として自動的に追加(append=True)されていきます。自前で計算式を実装する手間が省け、非常に効率的です。

3.3. check_signals(df, ticker)関数:買いシグナルの判定ロジック

ここがこのツールの最も重要な分析ロジックの部分です。最新のデータと1日前のデータを比較し、定義した戦略に合致するかを判定します。

・トレンドフォロー戦略:
これは、「上昇トレンドに乗る」ことを目的とした戦略です。is_long_term_up_trendで長期的な上昇傾向を確認し、is_price_breakoutで短期的な買いの勢い(短期移動平均線を上に抜ける動き)を捉え、is_macd_golden_crossでトレンド転換の確度を高め、is_rsi_not_overheatedで過熱感をチェックする、という複数の条件をandで組み合わせています。

・逆張り戦略:
こちらは、「売られすぎた銘柄の反発を狙う」戦略です。is_rsi_oversoldで売られすぎの状態を確認し、is_bb_touchで価格が統計的な下限(ボリンジャーバンド -2σ)に達したことを確認し、is_positive_candleで反発の兆し(陽線)が出たことを捉えています。

このように、複数の指標を組み合わせることで、単一の指標だけを見るよりも信頼性の高いシグナルを見つけ出そうとしています。

3.4. main()関数:全体の流れを制御

メイン関数は、これまでの関数を順番に呼び出し、全体の処理をオーケストレーションします。

  1. TICKERSリストから銘柄を一つずつ取り出す。
  2. get_stock_data()で株価データを取得。
  3. calculate_indicators()でテクニカル指標を計算。
  4. check_signals()で買いシグナルを判定。
  5. シグナルが検出された銘柄をresultsリストに保存。
  6. 最後に、全銘柄の分析が終わったら、resultsをシグナル数が多い順に並び替えて、結果をまとめて表示。

4. スクリプトの使い方と実行結果

  1. 上記のコード全体をstock_signal_checker.pyなどの名前で保存します。
  2. コード冒頭のTICKERSリストを、ご自身が分析したい銘柄コード(東証なら.Tを付ける)に書き換えます。
  3. ターミナルを開き、必要なライブラリをインストールします (pip install pandas yfinance pandas-ta)。
  4. スクリプトを実行します。
    python stock_signal_checker.py

実行結果 (例):

--- 株価買いシグナルチェッカー (実行日時: 2025-06-21 10:30) ---

[3092.T] 分析中...
[9201.T] 分析中...
...(中略)...
[1803.T] 分析中...

--- 分析結果 ---
■ 銘柄: 6586.T (現在値: 4,530.00 円)
  検出シグナル数: 2件
  - 戦略: トレンドフォロー
    - 利確目安: BB_UPPER (4,750.50円) タッチ or MACDデッドクロス
    - 損切目安: 25日線 (4,480.20円) 割れ
  - 戦略: 単独: MAゴールデンクロス

■ 銘柄: 9433.T (現在値: 165.50 円)
  検出シグナル数: 1件
  - 戦略: 逆張り
    - 利確目安: 中心線 (168.20円) or RSIが50に回復
    - 損切目安: 直近安値 (163.00円) 更新

このように、条件に合致した銘柄だけがレポートとして表示されます。


5. まとめと今後の発展アイデア

今回は、複数のPythonライブラリを組み合わせ、実践的な「株価買いシグナル自動検出ツール」を作成しました。このプロジェクトを通して、

  • ライブラリを使って外部からデータを取得する方法 (yfinance)
  • 専門的な計算をライブラリに任せる効率的なアプローチ (pandas_ta)
  • 複数のテクニカル指標を組み合わせた、独自の分析ロジックの構築
  • 一連の処理を自動化し、結果を分かりやすくレポートするスクリプトの構造

といった、非常に実践的なスキルを学ぶことができました。

このツールは、あなたの手でさらに強力にすることができます。例えば、

  • 売りシグナルの追加: 買いシグナルだけでなく、売りシグナルのロジックも追加してみる。
  • パラメーターの最適化: 移動平均線の日数などのパラメータを変えると結果がどう変わるか試してみる。
  • 結果の通知: シグナルが出たら、メールやLINE、Discordなどで通知する機能を追加する。
  • 可視化機能の追加: シグナルが出た銘柄のチャートを、Matplotlibを使って自動で描画し、画像として保存する。
  • バックテスト機能の実装: 作成した売買ロジックが過去のデータでどれくらいのパフォーマンスだったかを検証する(非常に高度ですが、やりがいのある挑戦です)。

繰り返しになりますが、本スクリプトは投資助言を目的としたものではありません。しかし、ここで学んだ技術は、金融データ分析だけでなく、様々な分野で応用できる強力な武器となります。ぜひ、このスクリプトをベースに、あなた自身のアイデアを加えて、プログラミングを楽しんでください!

その他の投稿はこちら

コメント

このブログの人気の投稿

タイトルまとめ

これで迷わない!WindowsでPython環境構築する一番やさしい方法 #0

【Python標準ライブラリ完結!】11の冒険をありがとう!君のPython力が飛躍する「次の一歩」とは? 🚀