"""Some simulations to predict the future portfolio value based on past distribution. x is
a numpy array that contains past returns.The interpolated_returns are the returns
generated from the cdf of the past returns to simulate future returns. The portfolio
starts with a value of 100. portfolio_value is filled up progressively as
the program goes through every loop. The value is multiplied by the returns in that
period and a dollar is removed."""
portfolio_final = []
for i in range(10000):
portfolio_value = [100]
rand_values = np.random.rand(600)
interpolated_returns = np.interp(rand_values,cdf_values,x)
interpolated_returns = np.add(interpolated_returns,1)
for j in range(1,len(interpolated_returns)+1):
portfolio_value.append(interpolated_returns[j-1]*portfolio_value[j-1])
portfolio_value[j] = portfolio_value[j]-1
portfolio_final.append(portfolio_value[-1])
print (np.mean(portfolio_final))
numpyを使用してこのコードを書き込む方法が見つかりませんでした。私はnditerを使って繰り返しを見ていましたが、私は先に進むことができませんでした。Numpyで次のループをベクトル化するにはどうすればよいですか?
いくつかの質問:これは、ポートフォリオのパフォーマンスが10000とは独立した評価ですか?これは書かれているので、ポートフォリオの値の配列は10000 * 600の値でなければなりませんが、最初の600で作業するだけです。あるいは、コードを誤読していますか?また、 'portfolio_value.append(interpolated_returns [j-1] * portfolio [j-1])'行のポートフォリオは何ですか?それはあなたが一度初期化し、後で使用する600値の長い配列ですか?あるいは、実際にあなたのポートフォリオの進化があるように、代わりにportfolio_valueにする必要がありますか? –
私はちょうどあなたのコメントを編集し、それを修正するコードを編集しました。 はい、10,000シミュレーションです。私は、ポートフォリオの進化の10000サンプルパスを作成したいと思います。 これは、10,000x600のマトリックスとしても実行できます。 このコード行については正しいですか。単一のシミュレーションで展開されるポートフォリオの価値を保持します。サンプルパスごとに再初期化されます(これはコードの誤りです)。 –