mplfinanceで株価をローソク足表示!Pythonチャート描画の実装ガイド

Python実装・コード

※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。

Pythonで株価データを取得できるようになったら、次のステップはデータの可視化です。数値の羅列だけでは、トレンドやパターンを直感的に把握することはできません。

株式投資の世界でチャートといえばローソク足チャートが標準です。始値・高値・安値・終値の4本値を一目で把握でき、テクニカル分析の基盤となるチャート形式です。

この記事では、Pythonライブラリ「mplfinance」を使って、yfinanceで取得した株価データをプロ品質のローソク足チャートとして描画・保存する方法を、コピペで動くコード付きで解説します。移動平均線や出来高の重ね表示、画像ファイルへの保存方法まで網羅しています。

使用するライブラリの概要

ローソク足チャートの描画には複数の方法がありますが、この記事では最も実用的な組み合わせを使用します。

ライブラリ構成と役割

ライブラリ 役割 備考
yfinance 株価データの取得 Yahoo Finance経由で無料取得
mplfinance ローソク足チャートの描画 matplotlib上に構築された専用ライブラリ
matplotlib グラフ描画の基盤 mplfinanceが内部で使用
pandas データフレーム操作 取得データの整形に使用

mplfinanceとは

mplfinance(旧名:mpl_finance)は、matplotlibをベースに構築された金融チャート専用の描画ライブラリです。以下の特徴を持っています。

  • ローソク足チャートを1行のコマンドで描画可能
  • 移動平均線・出来高・ボリンジャーバンドなどを簡単に重ね表示できる
  • チャートのスタイル(配色テーマ)を柔軟にカスタマイズできる
  • PNG・JPG・PDF形式での画像保存に対応

ライブラリのインストール

コマンドプロンプトまたはVS Codeのターミナルで以下を実行してください。


pip install yfinance mplfinance pandas matplotlib

すべてのインストールが完了したら、以下のコマンドで確認できます。


pip show mplfinance

バージョン番号とインストールパスが表示されれば準備完了です。

【コピペOK】基本のローソク足チャートを表示する

まずは最小構成のコードで、ローソク足チャートの描画を体験します。

基本コード:日本株のローソク足を表示

以下のコードを candlestick_basic.py として保存し、実行してください。


import yfinance as yf
import mplfinance as mpf

# ==============================
# 設定エリア
# ==============================
SYMBOL = "7203.T"       # トヨタ自動車
PERIOD = "6mo"          # 直近6ヶ月

# ==============================
# データ取得
# ==============================
def fetch_data(symbol, period):
    ticker = yf.Ticker(symbol)
    df = ticker.history(period=period)

    if df.empty:
        print("データの取得に失敗しました。銘柄コードを確認してください。")
        return None

    return df

# ==============================
# チャート描画
# ==============================
def plot_basic_chart(df, symbol):
    mpf.plot(
        df,
        type="candle",
        title=f"{symbol} Candlestick Chart",
        style="charles",
        volume=True
    )

# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
    df = fetch_data(SYMBOL, PERIOD)
    if df is not None:
        plot_basic_chart(df, SYMBOL)

コードのポイント解説

このコードの中核は mpf.plot() 関数です。主要な引数の意味は以下のとおりです。

  • type="candle": ローソク足形式で描画する指定
  • style="charles": チャートの配色テーマ(赤緑ベースの株式向けスタイル)
  • volume=True: チャート下部に出来高バーを表示する
  • title: チャート上部に表示するタイトル文字列

mplfinanceのデータ要件

mplfinanceに渡すDataFrameには、以下の条件が必要です。

  • インデックスがDatetimeIndexであること
  • OpenHighLowClose の4列が含まれていること
  • 出来高を表示する場合は Volume 列も必要

yfinanceで取得したデータはこれらの条件を自動的に満たしているため、変換作業なしでそのままmplfinanceに渡すことができます。

【コピペOK】移動平均線を追加したチャート

テクニカル分析の基本である移動平均線をチャートに重ねて表示します。

移動平均線付きローソク足チャート

以下のコードを candlestick_ma.py として保存・実行してください。


import yfinance as yf
import mplfinance as mpf

# ==============================
# 設定エリア
# ==============================
SYMBOL = "6758.T"       # ソニーグループ
PERIOD = "1y"           # 直近1年
MA_SHORT = 25           # 短期移動平均(25日)
MA_LONG = 75            # 長期移動平均(75日)

# ==============================
# データ取得
# ==============================
def fetch_data(symbol, period):
    ticker = yf.Ticker(symbol)
    df = ticker.history(period=period)

    if df.empty:
        print("データの取得に失敗しました。")
        return None

    return df

# ==============================
# チャート描画(移動平均線付き)
# ==============================
def plot_ma_chart(df, symbol):
    mpf.plot(
        df,
        type="candle",
        title=f"{symbol} with MA({MA_SHORT}, {MA_LONG})",
        style="charles",
        volume=True,
        mav=(MA_SHORT, MA_LONG),
        figsize=(14, 8),
        datetime_format="%Y-%m-%d"
    )

# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
    df = fetch_data(SYMBOL, PERIOD)
    if df is not None:
        plot_ma_chart(df, SYMBOL)

追加した引数の解説

引数 効果
mav (25, 75) 25日・75日移動平均線を自動計算し重ね表示
figsize (14, 8) チャートのサイズを横14×縦8インチに設定
datetime_format "%Y-%m-%d" X軸の日付表示フォーマットを指定

移動平均線の本数を増やす

mav 引数にはタプルで複数の期間を渡せます。たとえば、5日・25日・75日・200日の4本を同時に表示する場合は以下のように記述します。


mav=(5, 25, 75, 200)

期間の組み合わせは自由に設定可能です。

【コピペOK】チャートを画像ファイルとして保存する

描画したチャートをPNG画像として保存する方法を解説します。分析結果の記録やレポート作成に活用できます。

画像保存対応コード

以下のコードを candlestick_save.py として保存・実行してください。


import yfinance as yf
import mplfinance as mpf
import os

# ==============================
# 設定エリア
# ==============================
SYMBOL = "9984.T"       # ソフトバンクグループ
PERIOD = "6mo"
OUTPUT_DIR = "charts"
MA_PERIODS = (25, 75)

# ==============================
# データ取得
# ==============================
def fetch_data(symbol, period):
    ticker = yf.Ticker(symbol)
    df = ticker.history(period=period)

    if df.empty:
        print("データの取得に失敗しました。")
        return None

    return df

# ==============================
# チャート描画&保存
# ==============================
def save_chart(df, symbol):
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    filepath = os.path.join(OUTPUT_DIR, f"{symbol}_candlestick.png")

    mpf.plot(
        df,
        type="candle",
        title=f"{symbol} Candlestick Chart",
        style="charles",
        volume=True,
        mav=MA_PERIODS,
        figsize=(14, 8),
        savefig=dict(fname=filepath, dpi=150, bbox_inches="tight")
    )

    print(f"チャートを保存しました: {filepath}")

# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
    df = fetch_data(SYMBOL, PERIOD)
    if df is not None:
        save_chart(df, SYMBOL)

savefig引数の詳細

savefig 引数には辞書形式で保存設定を渡します。

  • fname: 保存先のファイルパス(拡張子でフォーマットが自動判定される)
  • dpi: 解像度。150〜300が実用的な範囲
  • bbox_inches="tight": 余白を自動トリミングして保存する

savefig を指定すると、ウィンドウ表示なしで画像保存のみが実行されます。サーバー環境やバッチ処理での利用に適しています。

チャートスタイルのカスタマイズ

mplfinanceには複数のプリセットスタイルが用意されています。用途に応じて使い分けてください。

プリセットスタイル一覧

利用可能なスタイルは以下のコードで確認できます。


import mplfinance as mpf
print(mpf.available_styles())

代表的なスタイルの特徴は以下のとおりです。

スタイル名 特徴 用途
charles 赤緑ベースのクラシックスタイル 欧米標準の配色
yahoo Yahoo Financeライクな配色 馴染みのある見た目
nightclouds ダークテーマ 目に優しい・プレゼン向け
brasil ブラジル市場風の配色 独特の色使い
mike 明るいトーン シンプルで見やすい

【コピペOK】カスタムスタイルの作成

プリセットに満足できない場合は、独自のスタイルを定義できます。


import mplfinance as mpf
import yfinance as yf

# ==============================
# カスタムスタイル定義
# ==============================
custom_style = mpf.make_mpf_style(
    base_mpf_style="nightclouds",
    marketcolors=mpf.make_marketcolors(
        up="#ff2b2b",       # 陽線(上昇)の色:赤
        down="#2b7bff",     # 陰線(下落)の色:青
        edge="inherit",
        wick="inherit",
        volume="in"
    ),
    figcolor="#1a1a2e",
    facecolor="#16213e",
    gridcolor="#0f3460",
    gridstyle="--"
)

# ==============================
# データ取得&描画
# ==============================
SYMBOL = "7203.T"
ticker = yf.Ticker(SYMBOL)
df = ticker.history(period="6mo")

if not df.empty:
    mpf.plot(
        df,
        type="candle",
        title=f"{SYMBOL} Custom Style",
        style=custom_style,
        volume=True,
        mav=(25, 75),
        figsize=(14, 8)
    )

日本市場では「陽線=赤、陰線=青」が一般的であるため、上記のカスタムスタイルは日本の投資家にとって馴染みやすい配色になっています。

複数銘柄のチャートを一括生成する

複数銘柄のチャートをまとめて生成し、画像保存する実践的なコードを紹介します。

【コピペOK】一括チャート生成スクリプト

以下のコードを batch_chart.py として保存・実行してください。


import yfinance as yf
import mplfinance as mpf
import os

# ==============================
# 設定エリア
# ==============================
SYMBOLS = [
    "7203.T",   # トヨタ自動車
    "6758.T",   # ソニーグループ
    "9984.T",   # ソフトバンクグループ
    "8306.T",   # 三菱UFJフィナンシャル・グループ
    "6861.T",   # キーエンス
]
PERIOD = "6mo"
OUTPUT_DIR = "charts"
MA_PERIODS = (25, 75)

# ==============================
# チャート生成関数
# ==============================
def generate_chart(symbol, period, output_dir):
    ticker = yf.Ticker(symbol)
    df = ticker.history(period=period)

    if df.empty:
        print(f"[スキップ] {symbol}: データ取得失敗")
        return False

    os.makedirs(output_dir, exist_ok=True)
    filepath = os.path.join(output_dir, f"{symbol}_chart.png")

    mpf.plot(
        df,
        type="candle",
        title=f"{symbol} ({period})",
        style="charles",
        volume=True,
        mav=MA_PERIODS,
        figsize=(14, 8),
        savefig=dict(fname=filepath, dpi=150, bbox_inches="tight")
    )

    print(f"[完了] {symbol} → {filepath}")
    return True

# ==============================
# メイン処理
# ==============================
if __name__ == "__main__":
    print("=== 一括チャート生成開始 ===n")

    success_count = 0
    for symbol in SYMBOLS:
        if generate_chart(symbol, PERIOD, OUTPUT_DIR):
            success_count += 1

    print(f"n=== 完了: {success_count}/{len(SYMBOLS)} 銘柄のチャートを生成 ===")

実行すると、charts フォルダ内に各銘柄のPNG画像が生成されます。銘柄リストの追加・変更は SYMBOLS 配列を編集するだけで対応できます。

よくあるエラーと対処法

「No module named ‘mplfinance’」と表示される

mplfinanceがインストールされていないか、異なるPython環境にインストールされている場合に発生します。

以下のコマンドで、実行中のPythonに確実にインストールしてください。


python -m pip install mplfinance

チャートが表示されずにスクリプトが終了する

GUI環境が利用できないサーバーやWSL環境で発生します。以下のいずれかの方法で対処してください。

  • 方法1: savefig 引数を使って画像ファイルに保存する(ウィンドウ表示不要)
  • 方法2: matplotlibのバックエンドを非GUIモードに切り替える

import matplotlib
matplotlib.use("Agg")
import mplfinance as mpf

matplotlib.use("Agg") は、mplfinanceのimportよりも前に記述する必要があります。順序を間違えると効果がありません。

日本語のタイトルが文字化けする

matplotlibはデフォルトでは日本語フォントに対応していません。日本語を表示するには、japanize-matplotlib ライブラリを導入してください。


pip install japanize-matplotlib

コード内で以下の1行を追加するだけで日本語が正しく表示されます。


import japanize_matplotlib

データ期間が短すぎて移動平均線が表示されない

75日移動平均線を表示するには、最低でも75営業日分のデータが必要です。period="1mo" のように短い期間を指定すると、長期の移動平均線は描画されません。

移動平均線の期間に応じて、十分なデータ量を取得するようにしてください。

移動平均線 必要な最低データ量 推奨period設定
25日 約2ヶ月分 3mo 以上
75日 約4ヶ月分 6mo 以上
200日 約10ヶ月分 1y 以上

まとめ

Pythonでローソク足チャートを表示・保存するために必要なポイントは以下のとおりです。

  • mplfinanceライブラリを使えば、mpf.plot() の1行でローソク足チャートを描画できる
  • mav 引数にタプルを渡すだけで、移動平均線を自動計算・重ね表示できる
  • savefig 引数を使えば、ウィンドウ表示なしでPNG画像として保存できる
  • 日本市場向けの配色は make_mpf_style() でカスタム定義が可能
  • 複数銘柄のチャートはリストとループで一括生成できる

ローソク足チャートの可視化は、テクニカル分析や売買シグナルの確認において不可欠なスキルです。次のステップとして、ゴールデンクロス・デッドクロスの自動検出や、ボリンジャーバンドの重ね表示に進むと、分析の精度をさらに高めることができます。

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