ПочатиПочніть безкоштовно

Обчисліть портфелі

Тепер згенеруємо портфелі, щоб знайти найкращий у кожному місяці. Функція 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])
Редагувати та запускати код