Обчисліть портфелі
Тепер згенеруємо портфелі, щоб знайти найкращий у кожному місяці. Функція random.random() з numpy генерує випадкові числа з рівномірного розподілу; після цього ми нормалізуємо їх, щоб у сумі було 1, використовуючи оператор /=. Ці ваги використаємо для розрахунку дохідності та волатильності. Дохідність — це сума добутків ваг на індивідуальні дохідності. Волатильність складніша й враховує коваріації різних акцій.
Насамкінець збережемо значення у словниках для подальшого використання, де ключами будуть дати місяців.
У цьому прикладі ми згенеруємо лише 10 портфелів для кожної дати, щоб код виконувався швидше. Проте в реальному кейсі варто використовувати приблизно від 1000 до 5000 випадково згенерованих портфелів для кількох акцій.
Ця вправа є частиною курсу
Machine Learning для фінансів у Python
Інструкції до вправи
- Згенеруйте 3 випадкові числа для ваг за допомогою
np.random.random(). - Обчисліть
returns, взявши скалярний добуток (np.dot(); перемножує попарно елементи двох масивів і підсумовує їх)weightsіз помісячними дохідностями для поточноїdateу циклі. - Використайте метод
.setdefault(), щоб додати порожній список ([]) до словникаportfolio_weightsдля поточноїdate, а потім додайте (append) до спискуweights.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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])