株価分析を行う中で、「今は上昇トレンドなのか?それとも下降トレンドなのか?」と迷ったことはありませんか?日々の株価は上下を繰り返すため、短期的な値動きだけを見て判断するのは難しいものです。
そこで役立つのがテクニカル分析の王道「移動平均線」です。
この記事では下のことをわかりやすく解説します。
- 移動平均線の基本
- Pythonでの実装方法
- 実際の使い方
移動平均線とは
移動平均線(Moving Average)は、一定期間の価格(主に終値)の平均値を繋ぎ合わせた、トレンド分析で最も一般的なテクニカル指標です。
相場の方向性(上昇・下降・横ばい)を一目で把握でき、代表的な売買シグナルである「ゴールデンクロス」「デッドクロス」にも使われます。
この記事では下の2つを扱います。
- 25日移動平均線 :短期トレンド(約1ヶ月)
- 75日移動平均線 :中期トレンド(約3ヶ月)
注意点
移動平均線は便利ですが、万能ではありません。下の点に注意しましょう。
- レンジ相場ではダマシが多い
- 単体では精度が低い
- 必ず他の指標と組み合わせる
Pythonで移動平均線を計算する
Pandasの「rolling()」メソッドを使った実装例を紹介します。
今回はトヨタ自動車(7203.T)の株価を使用して確認してみます。
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
# 移動平均線の計算
def calculate_ma(df, window):
return df["Close"].rolling(window=window).mean()
if __name__ == "__main__":
# トヨタ自動車の証券コード+「.T」
ticker = "7203.T"
# Tickerオブジェクトを作成
toyota = yf.Ticker(ticker)
# periodを使って過去6ヶ月分のデータを取得
df = toyota.history(period='6mo')
# 25日・75日移動平均線の計算
df["ma25"] = calculate_ma(df, 25)
df["ma75"] = calculate_ma(df, 75)
# ゴールデンクロス
df["golden_cross"] = (
(df["ma25"] > df["ma75"]) &
(df["ma25"].shift(1) <= df["ma75"].shift(1))
)
# デッドクロス
df["dead_cross"] = (
(df["ma25"] < df["ma75"]) &
(df["ma25"].shift(1) >= df["ma75"].shift(1))
)
# 計算できない行を削除する
df = df.dropna()
# 取得したデータを出力
print(df)
# グラフ表示
plt.figure(figsize=(12,6))
plt.plot(df["Close"], label="Close")
plt.plot(df["ma25"], label="MA25")
plt.plot(df["ma75"], label="MA75")
plt.legend()
plt.title("Moving Average")
plt.show()実行結果:
Open High Low Close Volume Dividends Stock Splits ma25 ma75 golden_cross dead_cross
Date
2026-02-06 00:00:00+09:00 3615.170758 3737.351509 3583.640242 3724.542236 42812900 0.0 0.0 3482.033105 3239.990404 False False
・・・
2026-03-30 00:00:00+09:00 3204.000000 3237.000000 3168.000000 3224.000000 30941700 50.0 0.0 3443.171895 3433.068880 False False
2026-03-31 00:00:00+09:00 3200.000000 3252.000000 3162.000000 3162.000000 26872400 0.0 0.0 3426.385117 3435.395329 False True
2026-04-01 00:00:00+09:00 3280.000000 3311.000000 3253.000000 3311.000000 25388600 0.0 0.0 3414.730664 3439.340589 False False
・・・
2026-04-16 00:00:00+09:00 3416.000000 3468.000000 3392.000000 3392.000000 20154600 0.0 0.0 3302.482139 3449.496077 False False
2026-04-17 00:00:00+09:00 3400.000000 3400.000000 3343.000000 3343.000000 14251500 0.0 0.0 3299.556768 3450.018652 False Falseグラフ表示:

コード解説
ライブラリのインポート
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt株価データの取得や分析、グラフ表示に必要なライブラリを読み込んでいます。下の3つで「取得・加工・可視化」ができるようになります。
- yfinance:株価データを取得するためのライブラリ(Yahoo Financeから取得)
- pandas:データを表形式(DataFrame)で扱うためのライブラリ
- matplotlib.pyplot:グラフを描画するためのライブラリ
株価データ取得
ticker = "7203.T"
toyota = yf.Ticker(ticker)
df = toyota.history(period='6mo')ここでは、例にトヨタ自動車(7203.T)の株価データを取得しています。
- “7203.T”:日本株の場合は「証券コード + .T」を指定
- yf.Ticker():銘柄情報を扱うオブジェクトを作成
- history(period=’6mo’):過去6ヶ月分の株価データを取得



移動平均線の関数化
def calculate_ma(df, window):
return df["Close"].rolling(window=window).mean()移動平均線を計算する処理を関数として定義しています。
関数化することで、25日・75日以外にも簡単に応用できます。
- df[“Close”]:終値(株価)を使用
- rolling(window=window):指定した日数分のデータをまとめる
- mean():その平均値を計算
25日・75日移動平均線の計算
df["ma25"] = calculate_ma(df, 25)
df["ma75"] = calculate_ma(df, 75)ここでは、先ほど作成した関数を使って移動平均線を計算しています。
- ma25:25日移動平均線
- ma75:75日移動平均線
ゴールデンクロスの確認
df["golden_cross"] = (
(df["ma25"] > df["ma75"]) &
(df["ma25"].shift(1) <= df["ma75"].shift(1))
)ゴールデンクロスを検出しています。条件は下の2つです。
shift(1)を使って「1日前の状態」を参照し、「昨日は短期が長期の下だったが、今日は上にある」という現象を論理演算(&)で判定しています。
- 今日:ma25 > ma75(短期線が上)
- 昨日:ma25 <= ma75(まだ下だった)
デッドクロスの確認
df["dead_cross"] = (
(df["ma25"] < df["ma75"]) &
(df["ma25"].shift(1) >= df["ma75"].shift(1))
)デッドクロスを検出しています。条件はゴールデンクロスの逆になります。
「昨日は短期が長期の上だったが、今日は下抜けた」瞬間を捉えます。
- 今日:ma25 < ma75
- 昨日:ma25 >= ma75
グラフで可視化
plt.figure(figsize=(12,6))
plt.plot(df["Close"], label="Close")
plt.plot(df["ma25"], label="MA25")
plt.plot(df["ma75"], label="MA75")
plt.legend()
plt.title("Moving Average")
plt.show()最後に、株価と移動平均線をグラフで表示しています。
- plt.figure(figsize=(12,6)):グラフのサイズを指定
- plt.plot():各データを線として描画
- label:凡例(どの線か分かるようにする)
- plt.legend():凡例を表示
- plt.show():グラフを表示
まとめ
移動平均線はシンプルですが、システムトレードの「骨組み」になる重要な要素です。
Pandasを正しく使えば、わずか数行で信頼性の高い分析ロジックを組むことができます。
- 移動平均線はトレンドを見る基本指標
- Pythonで簡単に実装可能
- 他の指標と組み合わせるのが重要





【投資に関する免責事項】
本ブログで紹介している株価解析ツールによるスコアリングおよび銘柄分析は、あくまで個人の学習・研究および技術検証を目的としたものであり、特定の銘柄の売買を推奨するものではありません。
ツールの算出結果や掲載情報の正確性については万全を期しておりますが、その内容を保証するものではありません。投資の最終決定は、必ずご自身の判断と責任において行っていただきますようお願いいたします。
万一、本ブログの情報に基づいて被ったいかなる損害についても、当サイトおよび運営者は一切の責任を負いかねますのであらかじめご了承ください。








