Python

投信のリターンを計算する(2)

前回のおさらい

前回やったことは以下です。

  • パフォーマンスを調べたいファンドのISINコードを「証券保管振替機構」で調べ、投信協会サイトからCSVファイルをダウンロード
  • Shift-JISに注意して、データフレームとして再読み込み
  • 年月日をdatetime型としてインデックス化

パフォーマンス計算

パフォーマンス計算には分配金修正基準価額が必要になるので、まずはこの系列を作ります。修正分配金の定義は

分配金修正基準価額 = 基準価額 + 分配金累計

です。分配金が支払われていない時はNaNが入力されているので、一旦これをゼロにします。そして分配金系列にcumsum()メソッドを当て分配金累計を求め、分配金修正基準価額を計算します。分配金修正基準価額データを元に、設定来年率騰落率、日次の平均騰落率やその標準偏差、情報係数など色々な計算ができます。コードは初心者につき、エレガントさは全くございません・・・

#1.分配金修正基準価額を作成
df = df.fillna(0)
df["累計分配金"] = df["分配金"].cumsum()
df["分配金修正基準価額(円)"]= df["基準価額(円)"]+df["累計分配金"] 
df["分配金修正基準価額騰落率"]=df["分配金修正基準価額(円)"].pct_change(1)

#2.計算
n = len(df["分配金修正基準価額騰落率"])
Cum_rt = (df["分配金修正基準価額(円)"].tail(1)/10000) ** (365/n) - 1
D_rt_ave = df["分配金修正基準価額(円)"].pct_change(1).mean()*250
D_rt_std = df["分配金修正基準価額(円)"].pct_change(1).std()*(250**0.5)
IC = D_rt_ave / D_rt_std

print("N", n)
print("Cum_rt",Cum_rt)
print("daily_rt",D_rt_ave)
print("daily_std",D_rt_std)
print("IC",IC)

#グラフ
fig = plt.figure(figsize=(12, 4))
ax = plt.plot(df.index,df["分配金修正基準価額(円)"],label='分配金修正基準価額')


plt.legend()
plt.title("ノルディック社債ファンド(為替ヘッジあり)、設定来推移",{"fontsize":18})
plt.show()

結果はこんな感じです。

まとめ

pythonや各種ライブラリのインストールなど煩雑な面がある他(特にSeleniumで悪戦苦闘しました・・・)、私自身エクセル臭が抜けないこと、アプリなどでも代替できることもあり、無理にpythonを覚える必要はないと思っています。

それでもプログラムには面白さがありますね。

そのせいでしょうか、安定したデータを無料で提供するベンダーがもっと増えて欲しいと切に思います。投信協会のデータは安定しています。ただ私も使っているYahoo Financeは、優れたAPIですが、安定しない時があるので、信頼性はイマイチですね(すみません)。無料でかつ安定したAPIを提供してくれるところがどんどん増えてゆけば、自然とITリテラシーの底上げに繋がるのだろうな、と思う次第です。

変な方向にまとめが向かってしまいました。

-Python
-,