質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

728閲覧

3銘柄のポートフォリオでリバランスを一か月に1回、四半期に1回で実施したリターン出したい

mufufu

総合スコア37

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/29 02:53

編集2021/07/29 02:55

Pythonを言語にしてjupyter notebookでコードをかいています。

3銘柄のポートフォリオでリバランスを一か月に1回、四半期に1回で実施したリターン出したいと、思っています。

Teratailで質問して、3銘柄のデイリーリバランスリターンを出すことはできました。

これを応用して、一か月に1回、四半期に1回リバランスしてリターンをだしたいのですが、画像のようにリバランスしたリターンの線グラフが消えてしまいます。

どのようにコードを修正すればよろしいのでしょうか。

イメージ説明

python

1import numpy as np 2import pandas_datareader.data as web 3import pandas as pd 4import matplotlib.pyplot as plt 5import scipy.stats as ss 6from matplotlib.animation import FuncAnimation 7import pandas_datareader.data as web #データのダウンロードライブラリ 8 9TQQQ=web.DataReader("TQQQ", "yahoo","2019/1/1")['Adj Close'] 10TECL=web.DataReader("TECL", "yahoo","2019/1/1")['Adj Close'] 11SOXL=web.DataReader("SOXL", "yahoo","2019/1/1")['Adj Close'] 12 13TQQQ=TQQQ/TQQQ.iloc[0]#株価の指数化 14lnTQQQ=np.log(TQQQ) 15dlnTQQQ=lnTQQQ.diff().dropna() 16 17TECL=TECL/TECL.iloc[0] 18TECL 19lnTECL=np.log(TECL) 20dlnTECL=lnTECL.diff().dropna() 21 22SOXL=SOXL/SOXL.iloc[0] 23SOXL 24lnSOXL=np.log(SOXL) 25dlnSOXL=lnSOXL.diff().dropna() 26 27def portfolio_rebalance(tsd1,tsd2,tsd3): 28 port=pd.concat([tsd1,tsd2,tsd3],axis=1).dropna() 29 port.columns=('p1','p2','p3') 30 port['a1']=0 31 port['a2']=0 32 port['a3']=0 33 port['v']=1 34 35 n=len(port) 36 37 p1=port['p1'].iloc[0] 38 p2=port['p2'].iloc[0] 39 p3=port['p3'].iloc[0] 40 v=port['v'].iloc[0] 41 42 a1=float(v/3/p1) 43 a2=float(v/3/p2) 44 a3=float(v/3/p3) 45 46 port.iloc[0,3]=a1 47 port.iloc[0,4]=a2 48 port.iloc[0,5]=a3 49 50 for i in range(1,len(port)): 51 p1=port['p1'].iloc[i]#今日のTQQQの株価 52 p2=port['p2'].iloc[i]#今日のTECLの株価 53 p3=port['p3'].iloc[i]#今日のSOXLの株価 54 55 p1_0=port['p1'].iloc[i-22]#22日前のTQQQの株価 56 p2_0=port['p2'].iloc[i-22]#22日前のTECLの株価 57 p3_0=port['p3'].iloc[i-22]#22日前のSOXLの株価 58 59 a1_0=port['a1'].iloc[i-22]#22日前のTQQQの保有株数 60 a2_0=port['a2'].iloc[i-22]#22日前のTECLの保有枚数 61 a3_0=port['a3'].iloc[i-22]#22日前のSOXLの保有枚数 62 63 v_0=port['v'].iloc[i-22]#22日前のリバランスポートフォリオの価値 64 65 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 66 67 v=a1_0*p1+a2_0*p2+a3_0*p3#今日のリバランスポートフォリオの価値 68 69 port.iloc[i,6]=v#リバランスポートフォリオの価値のアップデート 70 71 a1=float(v/3/p1)#調整後のTQQQの株数 72 a2=float(v/3/p2)#調整後のTECLの株数 73 a3=float(v/3/p3)#調整後のSOXLの株数 74 75 port.iloc[i,3]=a1#TQQQの株数のアップデート 76 port.iloc[i,4]=a2#TECLの株数のアップデート 77 port.iloc[i,5]=a3#SOXLの株数のアップデート 78 79 port['v2']=0.418*port.p1+0.363*port.p2+0.219*port.p3#リバランスの無いポートフォリオの価値 80 return port 81port=portfolio_rebalance(TQQQ,TECL,SOXL) 82 83lnport=np.log(port) 84lnport.v.plot(label="port Monthly rebalance",linewidth=1.0) 85lnTQQQ.plot(label='TQQQ',style='-.') 86lnTECL.plot(label='TECL',linestyle='--') 87lnSOXL.plot(label='SOXL',linestyle='--') 88plt.legend(loc="upper left") 89plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mufufu

2021/07/30 02:20

当初は前日の値でリバランスをしていたので、下記の部分を「-1」としていました。 p1_0=port['p1'].iloc[i-1]#1日前のTQQQの株価 p2_0=port['p2'].iloc[i-1]#1日前のTECLの株価 p3_0=port['p3'].iloc[i-1]#1日前のSOXLの株価 a1_0=port['a1'].iloc[i-1]#1日前のTQQQの保有株数 a2_0=port['a2'].iloc[i-1]#1日前のTECLの保有枚数 a3_0=port['a3'].iloc[i-1]#1日前のSOXLの保有枚数 v_0=port['v'].iloc[i-1]#1日前のリバランスポートフォリオの価値 リバランス期間を一か月にしたかったので、数字を下記のように「-22」に変更しましたが、リバランスのグラフが上手くでてきませんでした。 p1_0=port['p1'].iloc[i-22]#22日前のTQQQの株価 p2_0=port['p2'].iloc[i-22]#22日前のTECLの株価 p3_0=port['p3'].iloc[i-22]#22日前のSOXLの株価 a1_0=port['a1'].iloc[i-22]#22日前のTQQQの保有株数 a2_0=port['a2'].iloc[i-22]#22日前のTECLの保有枚数 a3_0=port['a3'].iloc[i-22]#22日前のSOXLの保有枚数 v_0=port['v'].iloc[i-22]#22日前のリバランスポートフォリオの価値
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問