※本記事には広告・アフィリエイトリンクが含まれます。掲載内容は筆者の調査・検証に基づき、読者の判断を助ける目的で作成しています。
動作確認環境:Python 3.11 / pandas 2.x / yfinance 0.2.x / matplotlib 3.x
結論から言うと
- Python株価分析は「データ取得→グラフ表示→テクニカル指標→バックテスト→自動化」の順で進めるのが効率的です
- 最初から全部を一度に学ぼうとせず、各ステップで動くものを作りながら進めると挫折しにくいです
- 本サイトの記事はこのロードマップに沿って順番に読めるように設計しています
このロードマップの対象者
このロードマップは以下のような方を想定しています。
- Pythonの基本文法(変数・if文・for文・関数)は理解している
- 株価や投資に興味があり、データ分析に挑戦したい
- 「何から始めればいいかわからない」という状態にある
率直に言うと、Pythonと株価分析を組み合わせる学習リソースは日本語でも増えてきましたが、「どの順番で何を学べばいいか」を体系的にまとめたものはまだ少ないです。このロードマップがその入口になれば十分という仕組みです。
ステップ1:株価データを取得する(yfinance)
まずは株価データを手元に用意することが出発点です。yfinanceを使えばティッカーシンボルを指定するだけで日本株・米国株のデータを無料で取得できます。
pip install yfinance pandas matplotlib
import yfinance as yf
# トヨタの1年分データを取得
df = yf.download("7203.T", period="1y", auto_adjust=True)
print(df.tail())
print(f"取得行数: {len(df)}")
ここで躓く人が多いのが「MultiIndex」問題です。yfinanceのバージョンによってカラムが2段になることがあります。以下のコードで対処できます。
import pandas as pd
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.droplevel(1)
▶ 詳細:yfinanceで日本株を取得する方法【ティッカー・エラー対策】
ステップ2:グラフ表示(matplotlib)
データを取得したら、まずグラフで可視化します。数字の羅列よりチャートで見た方が、価格の動きや特徴を直感的に把握できます。
import matplotlib.pyplot as plt
# 終値チャートを表示
df["Close"].plot(figsize=(12, 6), title="トヨタ自動車(7203.T)終値", grid=True)
plt.ylabel("円")
plt.tight_layout()
plt.savefig("toyota_chart.png", dpi=150)
plt.show()
また、ソニー(6758.T)やソフトバンクG(9984.T)を追加してマルチチャートにすることも数行で実現できます。
▶ 詳細:Pythonで株価チャートを表示する方法【matplotlib】
ステップ3:テクニカル指標(移動平均・RSI・MACD)
チャートが表示できたら、移動平均線・RSI・MACDといったテクニカル指標を追加します。pandasだけで計算できるため、追加ライブラリは不要です。
# 移動平均(25日・75日)
df["MA25"] = df["Close"].rolling(25).mean()
df["MA75"] = df["Close"].rolling(75).mean()
# RSI(14日)
delta = df["Close"].diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)
rs = gain.rolling(14).mean() / loss.rolling(14).mean()
df["RSI"] = 100 - (100 / (1 + rs))
# MACD
df["EMA12"] = df["Close"].ewm(span=12).mean()
df["EMA26"] = df["Close"].ewm(span=26).mean()
df["MACD"] = df["EMA12"] - df["EMA26"]
▶ 詳細:PythonでRSIを計算する方法【pandas・yfinance・コードあり】
▶ 詳細:PythonでMACDを計算・表示する方法【pandas・yfinance】
ステップ4:バックテスト(過去データで検証)
テクニカル指標でシグナルを計算したら、「そのシグナルが過去においてどの程度機能したか」をバックテストで検証します。率直に言うと、バックテストなしで実際のトレードに使うのはリスクが高いという仕組みです。
# ゴールデンクロス・デッドクロスのバックテスト例
df["Position"] = 0
df.loc[df["MA25"] > df["MA75"], "Position"] = 1 # 買い保有
df.loc[df["MA25"] < df["MA75"], "Position"] = -1 # 売り保有
df["Return"] = df["Close"].pct_change()
df["Strategy"] = df["Return"] * df["Position"].shift(1)
# 累積リターンの比較
cumulative = (1 + df[["Return", "Strategy"]]).cumprod()
cumulative.plot(title="バックテスト:移動平均クロス戦略", figsize=(12,6))
plt.show()
▶ 詳細:Pythonで移動平均クロスのバックテストをする方法
ステップ5:自動化・通知(schedule・LINE)
バックテストで有望な戦略を見つけたら、毎日自動でデータ取得・シグナル計算・通知を行う仕組みを作ります。
import schedule
import time
def daily_task():
# データ取得
df = yf.download("7203.T", period="1y", auto_adjust=True)
# シグナル計算
# ...(指標計算)
# 通知送信
# send_line(f"本日のシグナル: {signal}")
schedule.every().day.at("15:35").do(daily_task)
while True:
schedule.run_pending()
time.sleep(60)
▶ 詳細:Pythonで株価データをCSV保存・読み込みする方法
▶ 詳細:Pythonで株価を毎日自動取得する方法【schedule・cron】
ステップ6:VPSで24時間稼働
自動化スクリプトを自宅PCで動かすのには限界があります。月額数百円のVPSを使えば、PCの電源状態に関係なく24時間365日安定して稼働できます。また、cronを使うとPythonを常時起動する必要もなく、指定時刻だけ起動する設計が可能です。
▶ 詳細:アルゴトレード向けVPS比較【さくら・ConoHa・Vultr】
よくある失敗パターン
初心者が陥りがちな失敗をまとめます。
- いきなり難しいものを作ろうとする:まずは「データ取得→表示」だけで動かすことが重要です
- エラーが出ると諦める:yfinanceのMultiIndexエラーや日付型エラーは典型的なものです。エラーメッセージを読めば解決策が見つかります
- バックテストせずに本番運用する:過去データでの検証なしに自動売買するのは危険です。必ず十分な検証期間を設けてください
- APIキーをコードに直書きする:LINE TokenやAPIキーはコードに書かず、環境変数や設定ファイルで管理します
- ライブラリのバージョンを気にしない:yfinanceはバージョンによって挙動が変わることがあります。
pip show yfinanceでバージョンを確認する癖をつけてください
おすすめの学習リソース(書籍・内部リンク)
本サイトの記事と合わせて使える学習リソースを紹介します。また、実際にコードを動かしながら読める書籍を選ぶと定着が早いです。
筆者の検証メモ
このロードマップ自体を実際にトヨタ(7203.T)、ソニー(6758.T)、ソフトバンクG(9984.T)の3銘柄で最初から最後まで通してみました。
- ステップ1〜2(データ取得・グラフ):30分以内に動くものができます。最初の成功体験として最適です
- ステップ3(テクニカル指標):RSIとMACDを実装するのに半日程度。pandasの理解が深まります
- ステップ4(バックテスト):ここが最も時間がかかります。「勝てそうな戦略」が実は大したことないとわかるのもここです。率直に言うと、バックテストが最も教育的なステップです
- ステップ5〜6(自動化・VPS):一度設定すれば毎日勝手に動く達成感は格別です。また、エラーハンドリングの重要性がここで身に染みます
※当サイトの内容は投資判断を推奨するものではありません。掲載しているコード・分析例は学習・検証目的であり、実際の投資はご自身の責任で行ってください。

