Portföyleri hesapla
Şimdi her ayın en iyisini bulmak için portföyler üreteceğiz. numpy'nin random.random() fonksiyonu uniform dağılımdan rastgele sayılar üretir; ardından bunları /= operatörü ile 1'e toplamları eşit olacak şekilde normalize ederiz. Bu ağırlıkları getirileri ve oynaklığı hesaplamak için kullanacağız. Getiri, ağırlıkların tekil getirilerle çarpılıp toplanmasıdır. Oynaklık daha karmaşıktır ve farklı hisselerin kovaryanslarını içerir.
Son olarak değerleri daha sonra kullanmak üzere, ayların tarihlerini anahtar olarak kullanarak sözlüklere kaydedeceğiz.
Bu örnekte kodun daha hızlı çalışması için her tarih için sadece 10 portföy üreteceğiz; ancak gerçek bir senaryoda birkaç hisse için 1000 ila 5000 arası rastgele üretilmiş portföy kullanmak isteyebilirsin.
Bu egzersiz, kursun bir parçasıdır
Python ile Finans için Machine Learning
Egzersiz talimatları
np.random.random()kullanarak ağırlıklar için 3 rastgele sayı üret.- Döngüdeki mevcut
dateiçin aylık getirilerleweights'ın nokta çarpımını (np.dot(); iki diziyi eleman bazında çarpıp toplayan işlem) alarakreturnsdeğerini hesapla. - Geçerli
dateiçinportfolio_weightssözlüğüne.setdefault()yöntemiyle boş bir liste ([]) ekle ve ardından listeyeweights'ı ekle.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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])