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

Обчислення ефективної межі за сіткою цільових доходностей

Як ви бачили, один зі способів обчислити ефективну межу — спочатку визначити сітку цільових доходностей, а потім для кожної цільової доходності знайти портфель із очікуваною доходністю, що дорівнює цій цілі, за найменшої можливої дисперсії.

Але якою має бути розумна сітка цільових доходностей? Ви встановите максимальну цільову доходність рівною максимальному середньому значенню доходності акцій. Ідеально було б встановити мінімальну цільову доходність на рівні доходності портфеля мінімальної дисперсії. Оскільки ви ще не знаєте доходності портфеля мінімальної дисперсії, створіть сітку, використовуючи мінімальне зі середніх значень доходностей усіх акцій.

У цій вправі ви використаєте цикл for, щоб обчислити сітку можливих середніх портфеля, відхилень і ваг.

Ця вправа є частиною курсу

Вступ до аналізу портфеля в R

Переглянути курс

Інструкції до вправи

  • Обчисліть середні значення стовпців returns (за допомогою colMeans()) і назвіть це stockmu.
  • Створіть послідовність (seq()) довжини 50, яка починається з безризикової ставки 1% і закінчується на максимальному значенні stockmu, назвіть її grid.
  • Ініціалізуйте два порожні вектори тієї ж довжини, що й grid, за допомогою rep(), у яких ви зберігатимете середні портфеля та стандартні відхилення. Назвіть їх vpm і vpsd.
  • Ініціалізуйте порожню матрицю з 50 рядків і 30 стовпців. Назвіть її mweights. Для цього можна скористатися функцією matrix().
  • Створіть цикл for, який починається з першого значення grid і закінчується останнім. Цикл має створювати портфель opt, використовуючи returns і цільову доходність grid.
  • На кожній ітерації цикл має заповнювати вектори vpm ($pm), vpsd ($ps) відповідними значеннями з opt.
  • Зберігайте ваги портфеля пострічково в mweights ($pw).

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# Calculate each stocks mean returns


# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)

# Create empty vectors to store means and deviations
vpm <- vpsd <- 

# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)

# Create your for loop
for(i in 1:length(grid)) {
  opt <- portfolio.optim(x = ___, pm = ___[i])
  vpm[i] <- ___$__
  vpsd[i] <- ___$__
  mweights[i, ] <- ___$__
}
Редагувати та запускати код