PyPortfolioOptで効率的フロンティアを求めてみる

ポートフォリオ理論で出てくる、効率的フロンティアを描くコードを PyPortfolioOpt + Plotly で書いてみましたよという記事です。

まずは結果から。Plotly を使った動的なグラフなのでこちらのページをご覧ください。以下のようなグラフが表示されます。

青い点のある右上に伸びるカーブが効率的フロンティアのグラフです。その後ろにある積み上げグラフがそのリスクでの各資産の割合です。マウスオーバーすると細かい値が表示されます。

上記グラフで使ったリターン、リスク、相関係数は以下のページの値を拝借しました。

効率的フロンティアの書き方を調べていると、実はこの相関係数が非常に重要ということがわかりましたが、それは後述します。

…続きを読む

accagg開発日記: viewerでグラフを描けるようになった

GWから作っていた Viewer ですが、ようやくグラフがかけるようになりました。

現状は以下のような感じです。

グラフ表示がようになった

Python3 + PySide2 (Qt for Python) で作ってます。まだ公開はできるレベルじゃないんですが、ここにくるまででも結構紆余曲折ありまして、その苦労話というか愚痴のエントリーです。

…続きを読む

accagg開発日記: パスワード管理とFactoryの導入

ちょっと間が空いてしまいましたが、ほそぼそと開発中です。

今まではパスワードをコードに直書きだったのですが、外部ファイルから読み出すようにしました。そのために PasswordManager というクラスを追加しました。PasswordManager.get(“アカウント名”) でパスワードなどの情報を Dictionary で返します。

また、Aggregatorクラスを生成するFactoryパターンを見様見まねで導入してみました。Factory.aggregator(“BANKID”) で、IDに応じた Aggregator を生成します。BANKIDはそのまま python のモジュール名にして BANKID.Aggregator のインスタンスを生成するようにしたので、Aggregator を追加しても Factory クラスに手を入れる必要はなく、簡単に Aggregator を追加できるようにしてみました。

例によって練習中のクラス図です。

…続きを読む

accagg開発日記: クラス分けとCSV形式での保存

開発しているとリポジトリ名とか何かとプロジェクトに名前が必要になるので、Account Aggregator を縮めて accagg と名付けました。

前回まででとりあえず三井住友銀行の取引明細を取得することができたので、データを正規化してCSV形式に保存することを考えます。セキュリティを考えると平文のCSV形式なんて論外なのですが、そこは後々実装します。試す場合は個人の責任でお願いします。

前回は main にすべての処理を書いていたので、今後のことを考えてクラス分けしてみます。作ってみたクラス図は以下です。

正直クラス図が合ってるかわかりません(汗 なんとなくやりたいことが伝わればいいかな。

…続きを読む

Python + Selenium でスクレイピングしてみる

Python と Selenium でスクレイピングのお勉強です。

Selenium は外部プログラムから Web ブラウザを操作することができる仕組みで、元々は Web アプリケーションのテスト自動化のためのツールだったようです。クリック、キー操作を外部アプリから操作できるので、技術的にはWebブラウザでできる全てのことを自動化するが可能です。

Selenium を使える言語としては Java, ruby, C#, Python, JavaScript のバインディングがあるのですが、Web を探してみるとスクレイピングの使い方としては Python + Selenium の情報量が圧倒的に多いため、Python で使ってみたいと思います。一般的には、Python + Selenium(ブラウザ制御) + Beautiful Soup(HTMLパーサ) の構成が多いようです。

概要をサラッと知るには Web よりも本のほうが良さそうなので、以下の書籍を買ってみました。
…続きを読む