Pythonひとつでかんたんに、株価データ分析を体験!
本書では、株に興味があるPythonプログラマーを対象に、Pythonを使った株価分析の手法を解説します。機械的に行うデータ分析以外にも、移動平均やローソク足など従来の株価データの見方においてもできるだけ多くの説明をするように配慮しています。
第2版では、内容が Python環境のアップデートの影響を受けないように利用するソフトウェアを刷新し、かつ株価チヤートなども新しいものにアップデートしています。
更新履歴
- FAQ情報:2026年6月17日 更新
- 正誤訂正:2026年3月30日 更新
目次
- 1 株価分析を始める準備
- 1.1 データ分析とPython
- 1.1.1 データ分析とは
- 1.1.2 Pythonとは
- 1.1.3 株価分析とPythonについて
- 1.2 Pythonの実行環境
- 1.2.1 Pythonでの株価分析に必要なもの
- 1.2.2 PythonとTA-Libのインストール(Windowsの場合)
- 1.2.3 PythonとTA-Libのインストール(macOSの場合)
- 1.2.4 Pythonのライブラリのインストール
- 1.2.5 VSCodeのインストール
- 1.2.6 Jupyter Notebookのインストール(Windows/macOS共通)
- 1.2.7 動作確認
- 2 株価データの構造
- 2.1 株価データの概要
- 2.1.1 株価データとは
- 2.1.2 株価チャートとは
- 2.1.3 株価チャートからわかること
- 2.2 株価データの取得
- 2.2.1 株価分析で利用するライブラリ
- 2.2.2 ライブラリから株価データを取得する
- 2.3 データフレーム
- 2.3.1 データフレームとは
- 2.3.2 データフレームの構造
- 2.3.3 本書で分析する株価データの形式
- 2.3.4 データをグラフで確認する
- 2.3.5 範囲を指定してデータを抜き出す
- 2.3.6 条件を指定してデータを抜き出す
- 2.3.7 CSVファイルから株価データを読み込む
- 3 株価データの可視化
- 3.1 株価データを可視化するライブラリ
- 3.1.1 Pythonでグラフを描画する
- 3.1.2 株価チャートを作成するライブラリ
- 3.2 ローソク足チャート
- 3.2.1 ローソク足チャートを描画する
- 3.2.2 チャートのアスペクト比を指定する
- 3.2.3 出来高を表示する
- 3.2.4 指定した期間でチャートを表示する
- 3.2.5 表示スタイルを変更する
- 3.2.6 ローソク足から株価の動きを考察する
- 3.2.7 週足チャートの表示
- 3.3 移動平均線
- 3.3.1 移動平均線を表示する
- 3.3.2 複数の移動平均線を表示する
- 3.3.3 移動平均を算出する
- 3.3.4 算出した移動平均線を表示する
- 3.3.5 移動平均線のラベルを表示する
- 3.3.6 移動平均線から株価の動きを考察する
- 4 テクニカル指標の算出
- 4.1 株価データの分析手法
- 4.1.1 トレンド
- 4.1.2 トレンドライン
- 4.1.3 テクニカル指標
- 4.2 テクニカル分析の準備
- 4.2.1 TA-Libとは
- 4.2.2 TA-Libを利用して移動平均線を描画する
- 4.3 ボリンジャーバンド
- 4.3.1 株価の変動幅の目安となるボリンジャーバンド
- 4.3.2 ボリンジャーバンドの算出と表示
- 4.3.3 ボリンジャーバンドから相場を判断する
- 4.4 ボリンジャーバンド,移動平均線,ローソク足
- 4.4.1 トレンドの転換
- 4.4.2 跳ね返り
- 4.4.3 平均回帰
- 5 株価のトレンド転換
- 5.1 株価の上昇と下降
- 5.1.1 移動平均線が重視される理由
- 5.1.2 上昇と下降のタイミング
- 5.1.3 ゴールデンクロスとデッドクロスの見方
- 5.2 ゴールデンクロスとデッドクロスの算出と表示
- 5.2.1 ゴールデンクロスとデッドクロスをデータで表す手順
- 5.2.2 5日移動平均と25日移動平均の値を比較する
- 5.2.3 ゴールデンクロスとデッドクロスの発生日を検出する
- 5.2.4 発生日と終値をデータフレームに保持する
- 5.2.5 発生日と移動平均をデータフレームに保持する
- 5.2.6 ゴールデンクロスとデッドクロスをチャートに表示する
- 5.3 売買シグナルの検出
- 5.3.1 売買シグナルを検出するMACD
- 5.3.2 MACDを算出する
- 5.3.3 MACDを表示する
- 5.3.4 MACDの見方
- 5.3.5 ボリンジャーバンド,移動平均線,MACDからの考察
- 6 株価のトレンド分析
- 6.1 相場の強弱
- 6.1.1 相場の強弱とは
- 6.1.2 売られすぎと買われすぎ
- 6.1.3 RSIの算出と表示
- 6.1.4 ストキャスティクスの算出と表示
- 6.1.5 RSIのダイバージェンス
- 6.2 複数の指標の可視化
- 6.2.1 RSIとストキャスティクスを同時に表示する
- 6.2.2 相場の強弱とトレンドの転換
- 6.2.3 株価の変動範囲を表示する
- 6.3 チャートの保存
- 7 インタラクティブな可視化
- 7.1 自由度の高い可視化
- 7.1.1 高度なグラフを描画するPlotly
- 7.1.2 ローソク足チャートを表示する
- 7.1.3 日付の表示形式を詰める
- 7.1.4 レイアウトを更新する
- 7.1.5 移動平均線を表示する
- 7.1.6 ゴールデンクロスとデッドクロスを表示する
- 7.1.7 ボリンジャーバンドを表示する
- 7.1.8 出来高を表示する
- 7.1.9 MACD,RSI,ストキャスティクスを表示する
- 7.2 分析結果の保存
- 7.2.1 チャートを保存する
- 7.2.2 データフレームを保存する
- 7.3 さらなる可視化
- 7.3.1 複数の銘柄の株価データを取得するyfinance
- 7.3.2 トレンドラインを引くplotly.express
- 7.3.3 株価を予想するProphet
- 8 よく利用される売買戦略
- 8.1 移動平均線と株価の関係
- 8.1.1 グランビルの法則
- 8.1.2 チャートで法則を確認する
- 8.2 ローソク足のパターン
- 8.2.1 ローソク足のパターンとは
- 8.2.2 TA-Libでローソク足のパターンを検出する
- 8.2.3 1本のローソク足のパターン
- 8.2.4 2本のローソク足のパターン
- 8.2.5 3本のローソク足のパターン
- 9 売買のシミュレーション
- 9.1 過去の株価データでのトレード
- 9.1.1 バックテストを行うvectorbt
- 9.1.2 売買のルールを作成する
- 9.1.3 バックテストを実行する
- 9.1.4 パラメータを最適化する
- 9.1.5 任意のテクニカル指標でバックテストを行う
- 9.2 スイングトレード戦略
- 9.2.1 スイングトレードとは
- 9.2.2 類似チャートを自動検出する
- 9.2.3 イベントを利用する
- 付録A Google Colaboratory
- A.1 Webブラウザ上でのPythonの実行
- A.1.1 Google Colaboratoryを利用する
- A.1.2 サンプルを実行する
- A.1.3 ライブラリをインストールする
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.5 | 表1.3 | - |
| - | cmdstanpy 予測計算を実行するライブラリ(Windowsのみ) 1.3.0 ※末尾に1行追加 |
2026/03/30 |
| p.107 | リスト5.1の6行目 | - |
| df = get_stock_data(1821) # 三井住友建設 | df = get_stock_data(2305) # 新日本科学 ※三井住友建設は上場廃止(1821)となったので、代わりに新日本科学(2305)を使用 |
2026/03/30 |
| p.108 | リスト5.1の12行目 | - |
| rdf = df[dt.datetime(2024,9,1):dt.datetime(2024,12,31)] | rdf = df[dt.datetime(2025,4,15):dt.datetime(2025,7,15)] | 2026/03/30 |
| p.184 | リスト7.27の14行目 | - |
| prop = Prophet() | prop = Prophet(stan_backend=\\'CMDSTANPY\\') | 2026/03/30 |
FAQ
主に時間と回線の関係の問題だと思われますので、以下の対応をしてみてください。
・時間をおく
・GoogleColabや別のPCなど環境を変えて実行する
・時間をおく
・GoogleColabや別のPCなど環境を変えて実行する
更新日: 2026.06.17
stooqがpandas_datareaderへの株価データ提供を停止したため、pandas_datareaderからの日本株のデータ取得ができなくなりました。
代わりにyfinanceを使って株価取得の処理を次のように書き換えてください。
[変更前]
apikey = "stooqから取得したAPI KEY"
import pandas_datareader.data as pdr
import requests
def get_stock_data(code):
session = requests.Session()
session.params = {"apikey": apikey}
df = pdr.DataReader("{}.JP".format(code), "stooq", session=session).sort_index()
return df
[変更後]
import yfinance as yf
import pandas as pd
def get_stock_data(code):
df = yf.download("{}.T".format(code), period="5y").sort_index()
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.get_level_values(0)
return df
なお以下、補足事項になります。
・get_stock_data()の定義をした後は,コードの変更はありません
・5年間の株価しか取得しないため、将来コード内で指定する期間の株価が取
得できなくなりますが、各自ご対応願います
代わりにyfinanceを使って株価取得の処理を次のように書き換えてください。
[変更前]
apikey = "stooqから取得したAPI KEY"
import pandas_datareader.data as pdr
import requests
def get_stock_data(code):
session = requests.Session()
session.params = {"apikey": apikey}
df = pdr.DataReader("{}.JP".format(code), "stooq", session=session).sort_index()
return df
[変更後]
import yfinance as yf
import pandas as pd
def get_stock_data(code):
df = yf.download("{}.T".format(code), period="5y").sort_index()
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.get_level_values(0)
return df
なお以下、補足事項になります。
・get_stock_data()の定義をした後は,コードの変更はありません
・5年間の株価しか取得しないため、将来コード内で指定する期間の株価が取
得できなくなりますが、各自ご対応願います
更新日: 2026.06.12
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。