Pythonひとつで株価データの本格的な分析ができる!
本書では、株に興味があるPythonプログラマーを対象に、Pythonを使った株価分析の手法を解説します。株価データの収集からチャートの生成、指標を使った分析、売買ルールのテストまで、株価分析の一連の流れを具体的なサンプルと共に解説。サンプルはGoogle Colaboratoryで動作できるので、面倒な環境設定も不要です。
※本書は、@ITでの連載記事『「Python」×「株価データ」で学ぶデータ分析のいろは』を加筆修正したものです。
更新履歴
- FAQ情報:2025年4月1日 更新
- 正誤訂正:2023年6月27日 更新
目次
- 1 株価分析を始める準備
- 1.1 データ分析とPython
- 1.1.1 データ分析とは
- 1.1.2 Pythonとは
- 1.1.3 株価分析とPythonについて
- 1.2 Pythonの実行環境
- 1.2.1 Python の実行環境Google Colaboratory
- 1.2.2 Google Colaboratoryをインストールする
- 1.2.3 Google Colaboratoryでファイルを作成して保存する
- 1.2.4 Google ColaboratoryでPythonのコードを実行する
- 1.2.5 Google Colaboratoryでオブジェクトの表示を確認する
- 1.2.6 ライブラリをインストールする
- 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 バックテストを行うbacktesting.py
- 9.1.2 売買のルールを作成する
- 9.1.3 バックテストを実行する
- 9.1.4 パラメータの最適化
- 9.1.5 任意の取引のルールでバックテストを行う
- 9.2 デイトレード戦略
- 9.2.1 相場で見られるアノマリー
- 9.2.2 分足データを取得する
- 9.2.3 15分足を利用したアノマリー戦略
正誤表
| 該当頁 | 該当箇所 | 修正刷 |
|---|---|---|
| 訂正箇所 | 訂正事項 | 更新日 |
| p.60 | 3.3.1項 1行目 | 4刷 |
| 第1章で | 第2章で | 2023/03/29 |
| p.63 | 本文 1行目 | 4刷 |
| 引数のwindowsで | 引数のwindowで | 2023/03/29 |
| p.97 | 本文 9行目 | 4刷 |
| 移動平均線が抵抗線の役目を果たしたともいえます。 | 移動平均線が支持線の役目を果たしたともいえます。 | 2023/03/29 |
| p.110 | 本文 14行目 | 4刷 |
| 長期線を上回ることができませんでした。 | 長期線を下回ることができませんでした。 | 2023/03/29 |
| p.115 | 本文 10行目 | 4刷 |
| crossの値にはNanが入ります。 | crossの値にはFalseが入ります。 | 2023/03/29 |
| p.129 | 図 5.27 キャプション | 4刷 |
| シグナルと0ライン | ヒストグラムと0ライン | 2023/03/29 |
| p.165 | リスト7.7 | 4刷 |
| # 日付を半分に "tickvals": df.index[::2], # 表示形式を MM-DDに "ticktext": ["{}-{}".format(x.split("-")[0, x.split("-")[1]) for x in rdf.index[::2] |
# 日付を半分に "tickvals": rdf.index[::2], # 表示形式を MM-DDに "ticktext": ["{}-{}".format(x.split("-")[0], x.split("-")[1]) for x in rdf.index[::2]] |
2023/05/10 |
| p.166 | 構文 7.8 | 4刷 |
| go.Scatterk( | go.Scatter( | 2023/03/29 |
| p.171 | 7.1.7項 本文4行目 | 4刷 |
| 上限と加減 | 上限と下限 | 2023/03/30 |
| p.198 | 図 8.9 1行目 | 4刷 |
| 2022-03-22 -100 買い | 2022-03-22 100 買い | 2023/03/30 |
| p.201 | リスト8.8 下から4行目 | 5刷 |
| name="丸坊主", | name="寄付坊主/大引坊主", | 2023/06/27 |
| p.204 | [リスト8.9]包み足の検出(Ch8_2.ipynb抜粋) 2行目、3行目の冒頭 | 3刷 |
| df["belthold_text"] = ... df["belthold_marker"] = ... |
df["engulfing_text"] = ... df["engulfing_marker"] = ... |
2023/02/22 |
| p.215 | 本文 1行目 | 4刷 |
| 短期(short tme) | 短期(short time) | 2023/03/30 |
| p.235 | 図9.18の下の本文10行目 | - |
| 11:30~12:00の間は市場が昼休みなので | 11:30~12:30の間は市場が昼休みなので | 2023/03/30 |
| p.238 | リスト9.25の下の本文2行目 | 4刷 |
| その後で hight カラムと | その後で high カラムと | 2023/03/30 |
FAQ
本書刊行後、Google Colaboratoryや周辺ライブラリのバージョンアップによって、仕様が変更され、本書の通りでは動作しない場合があります。
適宜、配布サンプルを更新しておりますので、最新の配布サンプルや以下の情報をご確認願います。
https://www.morikita.co.jp/exclusive/download/2805(PDF)
※刊行から2年が経過し、周辺ライブラリへの仕様変更に対応することが難しくなって参りました。環境まわりのご質問につきましては、大変恐縮ですが、サポート対象外とさせていただきたく思います。
なお、配布サンプルを動作するには、ローカル環境で用意したPython( https://wings.web-deli.com/env/python_win )に以下バージョンのライブラリを準備してお試しください。
著者環境では、Python 3.13.2で動作確認しております。
pip install numpy==1.26.4
pip install pandas==2.2.3
pip install pandas-datareader==0.10.0
pip install matplotlib==3.10.1
pip install mplfinance ==0.12.10b0
pip install plotly==6.0.1
pip install jupyter==1.1.1
ただし、以下のライブラリについてはライブラリ自身の仕様変更とGoogle Colaboratory/Jupyter Notebookの環境に合わなくなったため、動作確認はできませんでした。
第7章 インタラクティブな可視化 yfinance
第9章 売買の趣味レーション backtesting.py, yahoo_finance_api2
Ta-libのインストールに関してはライブラリのページをご参照ください。
https://github.com/ta-lib/ta-lib-python
2025年1月の情報ですが、以下もご参照ください。
https://qiita.com/katafuchix/items/c3159e193a7d4741f117
適宜、配布サンプルを更新しておりますので、最新の配布サンプルや以下の情報をご確認願います。
https://www.morikita.co.jp/exclusive/download/2805(PDF)
※刊行から2年が経過し、周辺ライブラリへの仕様変更に対応することが難しくなって参りました。環境まわりのご質問につきましては、大変恐縮ですが、サポート対象外とさせていただきたく思います。
なお、配布サンプルを動作するには、ローカル環境で用意したPython( https://wings.web-deli.com/env/python_win )に以下バージョンのライブラリを準備してお試しください。
著者環境では、Python 3.13.2で動作確認しております。
pip install numpy==1.26.4
pip install pandas==2.2.3
pip install pandas-datareader==0.10.0
pip install matplotlib==3.10.1
pip install mplfinance ==0.12.10b0
pip install plotly==6.0.1
pip install jupyter==1.1.1
ただし、以下のライブラリについてはライブラリ自身の仕様変更とGoogle Colaboratory/Jupyter Notebookの環境に合わなくなったため、動作確認はできませんでした。
第7章 インタラクティブな可視化 yfinance
第9章 売買の趣味レーション backtesting.py, yahoo_finance_api2
Ta-libのインストールに関してはライブラリのページをご参照ください。
https://github.com/ta-lib/ta-lib-python
2025年1月の情報ですが、以下もご参照ください。
https://qiita.com/katafuchix/items/c3159e193a7d4741f117
更新日: 2025.04.01
本書刊行後、7.3.1項で扱っているyfinanceの仕様変更により、エラーが出て、動作しなくなっております。
更新日: 2025.02.21
本書刊行後、stooqの返すデータの数の変更により、紙面の図(図8.3 4 5)と同じ移動平均線が描画できなくなりました。
更新日: 2025.02.21
ダウンロード
お問い合わせ
書籍に関するご質問や誤りのご報告、ご意見・ご感想などをお寄せください。
書籍に関するご質問は、お問い合わせの前にFAQ・正誤表をご確認ください。すでに掲載済みの内容については個別回答が難しい場合があります。