Pythonで株価予測 - 線形回帰とランダムフォレストで未来を予測
はじめに
株価は予測できるのか?
この問いには明確な答えはありませんが、機械学習を使って統計的な予測は可能です。
この記事では、Pythonのscikit-learnを使って、基本的な株価予測モデルを構築します。
注意:予測の限界
⚠️ 重要な免責事項
- 過去のパターンが未来を保証しない
- ブラックスワン(予測不可能なイベント)がある
- このモデルは学習目的であり、実際の取引には使用しないこと
準備
| |
特徴量エンジニアリング
テクニカル指標を特徴量として作成
| |
線形回帰モデル
| |
ランダムフォレストモデル
| |
予測結果の可視化
| |
翌日の価格予測
| |
モデルの評価と注意点
| |
まとめ
モデルのポイント:
シャープレシオを最大化するポートフォリオ最適化
はじめに
前回はランダムなポートフォリオを生成して効率的フロンティアを描きました。
今回は数理最適化を使って、シャープレシオを最大化する最適な資産配分を計算します。
シャープレシオとは?
シャープレシオは、リスク調整後リターンを表す指標です:
$$Sharpe = \frac{R_p - R_f}{\sigma_p}$$ここで:
- $R_p$ = ポートフォリオの期待リターン
- $R_f$ = 無リスク金利
- $\sigma_p$ = ポートフォリオの標準偏差(リスク)
目標: シャープレシオを最大化するウェイト $w$ を求める
最適化の定式化
制約条件
- ウェイトの合計 = 1: $\sum w_i = 1$
- 各銘柄のウェイト ≥ 0(空売りなし): $w_i \geq 0$
最適化問題
$$\max_w \frac{R_p - R_f}{\sigma_p}$$$$subject\ to: \sum w_i = 1, w_i \geq 0$$Pythonでの実装
ライブラリ準備
| |
ポートフォリオ計算関数
| |
最適化の実行
| |
効率的フロンティアとの比較
| |
最小リスクポートフォリオ
| |
目標リターンに対する最適ポートフォリオ
| |
まとめ
最適化のポイント:
MACD(マックディー)の計算とトレーディング戦略
はじめに
MACD(Moving Average Convergence Divergence)は、トレンドの強さと方向を捉える最も人気のあるテクニカル指標の一つです。
移動平均線の収束と発散を捉えることで、買い・売りのタイミングを判断します。
MACDとは?
計算式
MACDは3つの要素から構成されます:
1. MACDライン
$$MACD = EMA_{12} - EMA_{26}$$- 12日指数移動平均(短期)から
- 26日指数移動平均(長期)を引いた値
2. シグナルライン
$$Signal = EMA_9(MACD)$$- MACDラインの9日指数移動平均
3. ヒストグラム(オシレーター)
$$Histogram = MACD - Signal$$解釈の仕方
| 状態 | 意味 | トレードシグナル |
|---|---|---|
| MACD > シグナル | 上昇トレンド | 買い |
| MACD < シグナル | 下降トレンド | 売り |
| ヒストグラム > 0 | 買い圧力 | 強気 |
| ヒストグラム < 0 | 売り圧力 | 弱気 |
Pythonでの実装
基本計算
| |
可視化
| |
トレーディングシグナル
ゴールデンクロス / デッドクロス
| |
シグナルの可視化
| |
MACDダイバージェンス
ダイバージェンスの検出
| |
バックテスト
MACDクロスオーバー戦略の検証
| |
まとめ
MACDのポイント:
Pythonで株価を可視化する - matplotlibとPlotlyで美しいチャート作成
はじめに
取得した株価データを分かりやすく可視化することは、分析の第一歩です。
この記事では、Pythonの代表的な可視化ライブラリ matplotlib と Plotly を使って、株価チャートを作成する方法を解説します。
使用するライブラリ
| ライブラリ | 特徴 | 用途 |
|---|---|---|
| matplotlib | 静的なチャート | 論文、レポート |
| Plotly | インタラクティブ | Webアプリ、ダッシュボード |
| mplfinance | 金融特化 | ローソク足チャート |
準備
| |
matplotlibでの基本チャート
株価の推移をラインチャートで表示
| |
複数銘柄の比較チャート
| |
mplfinanceでローソク足チャート
| |
Plotlyでインタラクティブチャート
基本のラインチャート
| |
ローソク足+出来高
| |
リターン分布の可視化
| |
まとめ
| ライブラリ | おすすめ用途 |
|---|---|
| matplotlib | 論文、静的レポート |
| mplfinance | ローソク足、金融特化 |
| Plotly | Webダッシュボード、インタラクティブな分析 |
次のステップ:
モンテカルロ法で資産配分シミュレーション
はじめに
「投資でどれくらいの資産を築けるだろう?」
将来の資産推移を知りたい時、モンテカルロ法は強力なツールです。
数万回のシミュレーションを通じて、資産が目標に達する確率や破産リスクを定量的に評価できます。
この記事では、モンテカルロ法を使った資産配分シミュレーションをPythonで実装します。
モンテカルロ法とは?
モンテカルロ法は、乱数を使って不確実性を含む問題をシミュレーションする手法です。
投資への応用
- 期待リターンとボラティリティから、将来の資産価値の分布を推定
- 数千〜数万回の試行を行い、統計的な確率を計算
- 様々なシナリオ(好景気、不景気など)を考慮
シミュレーションのステップ
- パラメータ設定(初期資産、年間リターン、ボラティリティ、期間)
- 乱数生成(正規分布に基づく年間リターン)
- 複利計算で資産推移を計算
- 複数回繰り返し
- 結果の分析
Pythonでの実装
Step 1: 基本シミュレーション
| |
Step 2: 結果の可視化
| |
Step 3: 最終資産の分布分析
| |
Step 4: ヒストグラム
| |
Step 5: 目標達成確率
| |
積立投資のシミュレーション
実際には、定期的に追加投資(積立)を行うことが多いです。
Pythonで株価のボラティリティを予測する - GARCHモデル入門
はじめに
株価の**ボラティリティ(変動性)**は、リスク管理やオプション価格の決定に重要です。
「ボラティリティは常に変化する」という特徴を捉えるために、GARCHモデルが広く使われています。
この記事では、GARCHモデルの基礎とPython実装を解説します。
GARCHモデルとは?
ボラティリティの特徴
株価のボラティリティには以下の特徴があります:
- クラスタリング: 高いボラティリティの後に高いボラティリティが続きやすい
- 平均回帰: 長期的には平均レベルに戻る
- レバレッジ効果: 下落時の方がボラティリティが上がりやすい
GARCH(1,1)モデル
GARCH(Generalized Autoregressive Conditional Heteroskedasticity)モデルは、 条件付き分散(ボラティリティ)を以下の式でモデル化します:
$$\sigma_t^2 = \omega + \alpha r_{t-1}^2 + \beta \sigma_{t-1}^2$$ここで:
- $\sigma_t^2$ = 時点$t$での条件付き分散
- $\omega$ = 定数項
- $\alpha$ = ARCH項の係数(前日のリターンの影響)
- $\beta$ = GARCH項の係数(前日のボラティリティの影響)
- $r_{t-1}$ = 前日のリターン
制約条件:
- $\omega > 0$
- $\alpha \geq 0, \beta \geq 0$
- $\alpha + \beta < 1$(安定性条件)
Pythonでの実装
ライブラリのインストール
| |
Step 1: データ取得と前処理
| |
Step 2: リターンの可視化
| |
Step 3: GARCH(1,1)モデルの推定
| |
Step 4: 結果の解釈
| |
Step 5: 条件付きボラティリティの可視化
| |
Step 6: ボラティリティの予測
| |
モデルの診断
残差の検定
| |
他のモデルとの比較
| |
よくあるエラーと解決法
エラー1: “ConvergenceWarning”
原因: モデルが収束しない
ポートフォリオのリターンとリスクをPythonで計算する
はじめに
「分散投資をするとリスクが減る」とはよく聞く言葉ですが、具体的にどう計算するのでしょうか?
この記事では、複数銘柄からなるポートフォリオのリターンとリスクを、**現代的ポートフォリオ理論(MPT)**に基づいてPythonで計算します。
ポートフォリオの基礎
リターンの計算
ポートフォリオ全体のリターンは、各銘柄のリターンを加重平均します:
$$R_p = \sum_{i=1}^{n} w_i R_i$$ここで:
- $R_p$ = ポートフォリオのリターン
- $w_i$ = 銘柄$i$のウェイト(投資比率)
- $R_i$ = 銘柄$i$のリターン
- $n$ = 銘柄数
リスク(標準偏差)の計算
ポートフォリオのリスクは、単なる加重平均ではなく、共分散行列を使います:
$$\sigma_p = \sqrt{\mathbf{w}^T \Sigma \mathbf{w}}$$ここで:
- $\sigma_p$ = ポートフォリオの標準偏差(リスク)
- $\mathbf{w}$ = ウェイトベクトル
- $\Sigma$ = 共分散行列
- $\mathbf{w}^T$ = ウェイトベクトルの転置
分散(バリアンス)は:
$$\sigma_p^2 = \sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij}$$ここで$\sigma_{ij}$は銘柄$i$と銘柄$j$の共分散です。
Pythonでの実装
Step 1: データ取得
| |
Step 2: 日次リターンの計算
| |
Step 3: 年率換算リターンの計算
| |
Step 4: 共分散行列の計算
| |
Step 5: 相関行列
| |
Step 6: ポートフォリオのリターンとリスク計算
| |
効果的フロンティアの計算
様々なウェイト組み合わせを試す
| |
効果的フロンティアの可視化
| |
分散投資の効果
等ウェイト vs 個別銘柄
| |
まとめ
この記事では、ポートフォリオのリターンとリスク計算を学びました。
RSI(相対力指数)の計算と可視化 - Python実装
はじめに
RSI(Relative Strength Index、相対力指数)は、価格の変動の強さを測るオシレーターです。
「株価が上がりすぎたか、下がりすぎたか」を数値化し、**30以下(過売い)や70以上(過買い)**を売買のタイミングとして使います。
この記事では、RSIの計算式を理解し、Pythonでゼロから実装します。
RSIとは?
基本的な考え方
RSIは、過去n日間の値上がり幅と値下がり幅の比率を表します。
$$RSI = 100 - \frac{100}{1 + RS}$$ここで、$RS$(Relative Strength)は:
$$RS = \frac{過去n日間の平均値上がり幅}{過去n日間の平均値下がり幅}$$解釈の仕方
| RSI値 | 状態 | トレーディングの意味 |
|---|---|---|
| 70以上 | 過買い(Overbought) | 売りのサイン |
| 50 | 中立 | トレンドの転換点 |
| 30以下 | 過売い(Oversold) | 買いのサイン |
計算ステップ
- 前日比の変化を計算
- 値上がり/値下がりに分類
- 平均値上がり幅・平均値下がり幅を計算(通常は14日)
- RSを計算
- RSIを計算
Pythonでの実装
Step 1: データ取得
| |
Step 2: RSIの計算
| |
精度向上版:指数移動平均を使用
上記の単純移動平均(SMA)版RSIは簡単ですが、**指数移動平均(EMA)**を使う方が一般的です。
Pythonで株価データを取得する完全ガイド - yfinance入門
はじめに
投資の自動化や分析を始めたいけど、株価データの取得方法がわからない…そんな悩みありませんか?
この記事では、yfinanceという無料のPythonライブラリを使って、Yahoo Financeから株価データを取得する方法を徹底解説します。
yfinanceとは?
yfinanceは、Yahoo Financeの株価データを簡単に取得できるPythonライブラリです。
メリット:
- ✅ 無料で使える
- ✅ APIキー不要
- ✅ コード数行でデータ取得可能
- ✅ 日本株(東証上場企業)にも対応
この記事で学べること
- yfinanceのインストール方法
- 株価データ(終値、始値、高値、安値、出来高)の取得
- 期間指定や複数銘柄の一括取得
- データのCSV保存方法
前提条件
- Python 3.8以上がインストールされていること
- pipまたはcondaが使えること
環境構築
Step 1: yfinanceのインストール
ターミナル(コマンドプロンプト)で以下を実行します:
| |
または、Anacondaを使っている場合:
| |
インストール確認:
| |
バージョン番号が表示されればOKです。
実装
基本的な株価データ取得
まずは、米国株の代表であるApple(AAPL)の株価を取得してみましょう。
| |
実行結果: