Hitung portofolio
Sekarang kita akan menghasilkan portofolio untuk menemukan yang terbaik di setiap bulan. random.random() milik numpy menghasilkan angka acak dari distribusi seragam, lalu kita menormalkannya agar jumlahnya menjadi 1 menggunakan operator /=. Kita menggunakan bobot ini untuk menghitung imbal hasil dan volatilitas. Imbal hasil adalah penjumlahan bobot dikalikan imbal hasil masing-masing. Volatilitas lebih kompleks, dan melibatkan kovarians dari berbagai saham.
Terakhir, kita akan menyimpan nilainya dalam kamus untuk digunakan nanti, dengan tanggal bulan sebagai kunci.
Dalam kasus ini, kita hanya akan menghasilkan 10 portofolio untuk setiap tanggal agar kode berjalan lebih cepat, tetapi dalam kasus penggunaan nyata Anda sebaiknya menggunakan sekitar 1000 hingga 5000 portofolio yang dihasilkan secara acak untuk beberapa saham.
Latihan ini merupakan bagian dari kursus
Machine Learning untuk Keuangan dengan Python
Instruksi latihan
- Hasilkan 3 angka acak untuk bobot menggunakan
np.random.random(). - Hitung
returnsdengan mengambil hasil kali titik (np.dot(); mengalikan elemen demi elemen dan menjumlahkan dua array) antaraweightsdan imbal hasil bulanan untukdatesaat ini dalam loop. - Gunakan metode
.setdefault()untuk menambahkan daftar kosong ([]) ke kamusportfolio_weightsuntukdatesaat ini, lalu tambahkan (append)weightske daftar tersebut.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
portfolio_returns, portfolio_volatility, portfolio_weights = {}, {}, {}
# Get portfolio performances at each month
for date in sorted(covariances.keys()):
cov = covariances[date]
for portfolio in range(10):
weights = np.random.random(____)
weights /= np.sum(weights) # /= divides weights by their sum to normalize
returns = np.dot(____, returns_monthly.loc[____])
volatility = np.sqrt(np.dot(weights.T, np.dot(cov, weights)))
portfolio_returns.setdefault(date, []).append(returns)
portfolio_volatility.setdefault(date, []).append(volatility)
portfolio_weights.setdefault(date, ____).append(____)
print(portfolio_weights[date][0])