पोर्टफोलियो गणना करें
अब हम हर महीने के लिए सबसे अच्छा पोर्टफोलियो ढूँढने के लिए कुछ पोर्टफोलियो जनरेट करेंगे. numpy का random.random() एक समान (uniform) वितरण से रैंडम नंबर बनाता है, फिर हम उन्हें normalize करते हैं ताकि उनका योग 1 हो जाए, इसके लिए हम /= ऑपरेटर का उपयोग करते हैं. इन weights से हम returns और volatility निकालते हैं. Returns, weights और individual returns के गुणन का योग होते हैं. Volatility थोड़ी जटिल होती है और अलग-अलग स्टॉक्स की covariances शामिल करती है.
आखिर में हम इन values को बाद में उपयोग के लिए dictionaries में स्टोर करेंगे, जहाँ months की dates keys होंगी.
इस अभ्यास में, हम प्रत्येक date के लिए सिर्फ 10 पोर्टफोलियो जनरेट करेंगे ताकि कोड तेज चले, लेकिन वास्तविक उपयोग में आप कुछ स्टॉक्स के लिए लगभग 1000 से 5000 रैंडमली-जनरेटेड पोर्टफोलियो उपयोग करना चाहेंगे.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Finance के लिए Machine Learning
अभ्यास निर्देश
np.random.random()का उपयोग करके weights के लिए 3 रैंडम नंबर जनरेट करें.returnsकोweightsऔर लूप में वर्तमानdateके monthly returns के dot product (np.dot(); दो arrays के तत्व-वार गुणन का योग) से कैलकुलेट करें..setdefault()मेथड का उपयोग करके वर्तमानdateके लिएportfolio_weightsडिक्शनरी में एक खाली सूची ([]) जोड़ें, फिर उस सूची मेंweightsको append करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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])