この記事では、Pythonや投資初心者でもできるように、株式投資の資産管理のひとつである「ポートフォリオ理論」をレクチャーしていきます!
記事にでてくるコードはLINE@にて配布をしております。
メッセージ欄に「python」とお送りいただければダウンロードできます。
本記事は、全4回に渡って掲載される「Pythonによるポートフォリオ理論 株式投資の資産管理をレクチャー! 」シリーズの第4回になります!
- Pythonで現実の株価を取得し分析をする準備をおこなう
- Pythonでの実際の銘柄のポートフォリオの最適化をする
今回は、実際に現実の株価から銘柄を抽出し、ポートフォリオの最適化をおこないます。
実際の銘柄からポートフォリオの最適化をおこなうことで、実践的な投資戦略をおこなうことができるようになります。
今回の学習は、今まで学んできたポートフォリオ理論のまとめです!
是非マスターして資産管理を学んでいきましょう!!
目次
Pythonで現実の株価を取得し、分析をする準備をおこなおう!

まずは、現実の株価を取得し、複数の銘柄でポートフォリオを組み、分析をする準備をしていきます!
現実の株価から銘柄を組むことで、ポートフォリオ理論を実践することができます!
コードファイルの雛形をダウンロードされたい方は、下記のLINE@にて「python」とキーワードをお送りください。


Yahoo Finance US からデータを取得する
まずはじめに、以下のライブラリをインポートします。
あまりよく見られないpandas_datareaderライブラリだけ説明します。
Web上の様々なソースに簡単にアクセスして、株価や為替レート、人口などのデータをDataFrame型として取得できるライブラリ。
公式ドキュメントはこちら→ pandas_datareader

インポートができたところで、Yahoo Finance USから株価を取得していきます!
東京証券取引所の銘柄コードを入れることで、その企業の株価を取得するプログラムを作成しました。
今回は、「サイバーエージェント」「LINE」「楽天」「ソフトバンク」の4社の銘柄の株価を取得していきます!

matplotlibで株価を描画する
続いて、株価を取得したか確認するために、matplotlibライブラリを利用し株価を描画します。
下記のような描画を書き、株価を描画します。

株価を描画させることができました!
分散共分散行列の表を求める
続いて、第3回と同様に、分散共分散行列の表を求めます。
分散共分散行列の表は、最適化をする際の計算に用いられます。
まず、下記のようなコードを書き、リターンを求めます。

その後、下記のようなコードを書き、分散共分散行列の表(リスクの相互関係の表)を求めます。

ポートフォリオを最適化する準備ができました!
Pythonを用いて、実際の銘柄のポートフォリオの最適化を求めよう!
準備ができたところで、実際の銘柄のポートフォリオの最適化を求めていきます!
第3回と同様に「リスク最小化」「効率最大化(最適ポートフォリオ)」の投資比率を求めていきます!
リスク最小化の投資比率を求める
pyportfoliooptライブラリをインポートし、ポートフォリオのリスク最小化を求めていきます!

第3回と同様に、下記のようなコードを書き、リスク最小化を求めます!

画像でも分かるようにリスク最小化の投資比率は以下のようになりました!
[('4751.T', 0.12611), ('3938.T', 0.36924), ('9984.T', 0.12179), ('4755.T', 0.38286)]
この場合、もし100万円を投資するとしたら、
- 4751(サイバーエージェント)に12.6万円
- 3938(LINE)に36.9万円
- 9984(ソフトバンクグループ)に12.6万円
- 4755(楽天)に38.2万円
を投資するイメージです。
もちろん、株式は 最低の取引数量が決められているのでイメージのような金額の投資は厳しいですが、
その場合は投資金額を調整したりと自分なりにポートフォリオ理論を活用していきましょう!
効率最大化(最適ポートフォリオ)の投資比率を求める
続いて、効率最大化(最適ポートフォリオ)の投資比率を求めていきます!
第3回と同様に、下記のようなコードを書き、効率最大化を求めます!

画像でも分かるようにリスク最小化の投資比率は以下のようになりました!
[('4751.T', 0.41345), ('3938.T', 0.33875), ('9984.T', 0.2478), ('4755.T', 0.0)]
この場合、もし100万円を投資するとしたら、
- 4751(サイバーエージェント)に41.3万円
- 3938(LINE)に33.9万円
- 9984(ソフトバンクグループ)に24.8万円
- 4755(楽天)に0.0万円(投資をしない)
を投資するイメージです。
もちろん、株式は 最低の取引数量が決められているのでイメージのような金額の投資は厳しいですが、
その場合は投資金額を調整したりと自分なりにポートフォリオ理論を活用していきましょう!
おまけ-CAPM(資本資産価格モデル)について
最後に、ポートフォリオ理論の中でメジャーとされている考え方であるCAPMについて説明します。
CAPMは、フィナンシャルプランナーの試験問題にも出たりと、かなりお金に関する教養の一つとして覚えて損はないので、是非ともここで抑えましょう!
CAPMとは
資産のリターンは市場リスクファクターのみで説明されるというモデル
市場リスクファクターとは、株式や為替の売買が行われている証券市場に投資する際、分散投資によって消去できないリスク要因のことを指します。
例えば、ある企業の経営者の解雇や、あるメーカーの商品の爆発人気、といった企業内ごとのリスクは、ポートフォリオを組むことでリスクを分散することができます。
しかし、コロナの流行、トランプ大統領のツイートのような、災害・政治・経済といった影響によるリスクは、全ての企業の株価に変動するため避けることが不可能です。
このようなことを踏まえ、個別銘柄が企業全体が負う市場リスクにどれだけ影響されやすいか、数式で表現したのがCAPMです。

CAPMの課題
市場リスクを加味した上で個別リターンを求めようとしたCAPMですが、現実の世界ではあまり当てはまりがよくないのが現状です。
例えば、「なんとなく上がりそうだから」といった人間の主観の判断であったり、業種ごとでの独特な値動きの特性など、市場リスク以外の要因が多く存在しCAPMでは不十分ということなのです。
これを踏まえ、「CAPM」といった伝統的なファイナンスの考え方に対し、最近では行動ファイナンスといった今までのファイナンスの考え方を変えていく取り組みなどがされています。

まとめ
第4回では、
- Pythonで現実の株価を取得し分析をする準備をおこなう
- Pythonでの実際の銘柄のポートフォリオの最適化をする
といったことをレクチャーしました!
自分なりのポートフォリオを組み、投資戦略に活かせればと思います!
今まで読んでくださりありがとうございました!
記事にでてくるコードはLINE@にて配布をしております!
ラインのメッセージ欄に「python」とお送りいただければ、ダウンロードリンクを送付いたします!