Strasmore Research
Навчання Matt ConnorВід Matt Connor · Оновлено 2026-08-08 · data as of August 8, 2026 · refreshed weekly

Як розрахувати дивідендну дохідність портфеля

Формула дивідендної дохідності портфеля: загальний річний дохід, поділений на ринкову вартість. Чому просте середнє дохідності вводить в оману.

Дивідендна дохідність вашого портфеля — це одна величина: загальний річний дивідендний дохід, який мають виплатити активи у складі портфеля, поділений на їхню загальну ринкову вартість. Інакше кажучи, це середньозважена за ринковою вартістю дохідність окремих позицій. Вага кожної позиції дорівнює її вартості в доларах як частці всього портфеля. Середнє значення стовпця дохідності на екрані брокера — інша величина. У більшості реальних портфелів саме вона виглядає привабливішою.

Як розрахувати дивідендну дохідність портфеля

Для кожної позиції помножте кількість акцій на річний дивіденд на акцію. Це дасть річний дохід за позицією в доларах. Складіть ці доходи, поділіть суму на загальну вартість усіх позицій — кількість акцій, помножена на ціну, — і помножте на 100. Це весь розрахунок — для чотирьох позицій чи сорока.

Є два рівнозначні способи записати формулу:

  • Загальний річний дохід, поділений на загальну ринкову вартість портфеля.
  • Сума добутків ваги та дохідності за всіма позиціями, де вага — це вартість позиції, поділена на вартість портфеля.

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

Чому усереднення стовпця дохідності завищує ваш дохід

Різницю між двома методами найпростіше побачити на прикладі. Наведений нижче скрипт написано звичайною мовою Python 3, без імпорту додаткових модулів. Він запуститься на будь-якому комп’ютері з python3. П’ять позицій — умовні круглі числа, підібрані так, щоб ефект був очевидним: назва, кількість акцій, ціна та річний дивіденд на акцію.

#!/usr/bin/env python3
# each row: (name, shares, price, annual dividend per share)
holdings = [
    ('A', 200,  50.00, 1.50),
    ('B', 150, 100.00, 2.00),
    ('C', 100,  80.00, 0.80),
    ('D', 300,  20.00, 1.00),
    ('E', 100,  10.00, 0.90),
]

total_value  = sum(sh * px for _, sh, px, _ in holdings)
total_income = sum(sh * dps for _, sh, _, dps in holdings)
naive        = sum(100 * dps / px for _, _, px, dps in holdings) / len(holdings)

print(f'market value      : ${total_value:,.2f}')
print(f'annual income     : ${total_income:,.2f}')
print(f'portfolio yield   : {100 * total_income / total_value:.2f}%')
print(f'average of yields : {naive:.2f}%')

for name, sh, px, dps in holdings:
    value = sh * px
    income = sh * dps
    print(
        f'{name}  weight {100 * value / total_value:5.1f}%'
        f'  yield {100 * dps / px:5.2f}%'
        f'  income ${income:8,.2f}'
        f'  share of income {100 * income / total_income:5.1f}%'
    )

Запустіть його — і два підсумкові показники суттєво відрізнятимуться. У портфелі акції на $40,000, які приносять $1,070 на рік. Середньозважена дохідність становить 2.68%. Просте середнє п’яти показників дохідності дорівнює 4.00%, тобто приблизно в one and a half рази більше.

Позиція E пояснює всю різницю. Її дохідність становить 9.00% — це найвищий показник у портфелі — за вартості акцій $1,000. На неї припадає 2.5% вартості портфеля та 8.4% його доходу. У простому середньому вона має one fifth голосів — стільки само, скільки позиція на $15,000 поруч із нею. Показник дохідності набуває сенсу лише тоді, коли зрозуміло, яка сума в доларах за ним стоїть.

Як виглядає зважування для реальних позицій

Дивідендні акції домогосподарств мають широкий діапазон дохідності, тому вибір методу зважування має значення. На панелі нижче для кожної компанії розраховано trailing yield: дивіденди на акцію, оголошені за останні twelve months, поділено на останню денну ціну закриття.

ЗапитДивідендна дохідність за останні 12 місяців для десяти основних платників
Точний SQL-код для кожного числа
WITH
    last_px AS
    (
        SELECT
            ticker,
            toFloat64(argMax(close, date))         AS px,
            formatDateTime(max(date), '%b %e, %Y') AS priced_through
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('AAPL', 'MSFT', 'HD', 'KO', 'PG', 'PEP', 'JNJ', 'XOM', 'CVX', 'VZ')
          AND date >= today() - 30
        GROUP BY ticker
    ),
    ttm_dps AS
    (
        SELECT
            ticker,
            sum(amount) AS dps
        FROM
        (
            SELECT
                ticker,
                id,
                toFloat64(any(cash_amount)) AS amount
            FROM global_markets.stocks_dividends
            WHERE ticker IN ('AAPL', 'MSFT', 'HD', 'KO', 'PG', 'PEP', 'JNJ', 'XOM', 'CVX', 'VZ')
              AND ex_dividend_date >  today() - 365
              AND ex_dividend_date <= today()
            GROUP BY ticker, id
        )
        GROUP BY ticker
    )
SELECT
    p.ticker                     AS symbol,
    round(d.dps, 2)              AS ttm_dividend_usd,
    round(100 * d.dps / p.px, 2) AS yield_pct,
    p.priced_through             AS priced_through
FROM last_px AS p
INNER JOIN ttm_dps AS d ON d.ticker = p.ticker
ORDER BY yield_pct DESC
Run this yourself

Для цих 10 назв, оцінених через Aug 7, 2026, дохідність коливається від 5.96% на рівні VZ до 0.34% на рівні AAPL. Портфель, сформований із такого набору, не наблизиться до середнього значення стовпця, якщо тільки позиції не мають однакової вартості в доларах.

Тепер включімо п’ять із них до портфеля з фіксованою кількістю акцій і порівняймо два показники: частку кожної позиції в ринковій вартості та її частку в річному доході.

ЗапитПортфель із п’яти акцій: частка вартості проти частки доходу
Точний SQL-код для кожного числа
WITH
    positions AS
    (
        SELECT
            tupleElement(p, 1)            AS ticker,
            toFloat64(tupleElement(p, 2)) AS shares
        FROM
        (
            SELECT arrayJoin([('MSFT', 30.), ('PG', 60.), ('XOM', 80.), ('KO', 100.), ('VZ', 60.)]) AS p
        )
    ),
    last_px AS
    (
        SELECT
            ticker,
            toFloat64(argMax(close, date)) AS px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')
          AND date >= today() - 30
        GROUP BY ticker
    ),
    ttm_dps AS
    (
        SELECT
            ticker,
            sum(amount) AS dps
        FROM
        (
            SELECT
                ticker,
                id,
                toFloat64(any(cash_amount)) AS amount
            FROM global_markets.stocks_dividends
            WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')
              AND ex_dividend_date >  today() - 365
              AND ex_dividend_date <= today()
            GROUP BY ticker, id
        )
        GROUP BY ticker
    ),
    holding AS
    (
        SELECT
            pos.ticker         AS ticker,
            pos.shares * lp.px AS value_usd,
            pos.shares * d.dps AS income_usd
        FROM positions AS pos
        INNER JOIN last_px AS lp ON lp.ticker = pos.ticker
        INNER JOIN ttm_dps AS d  ON d.ticker  = pos.ticker
    )
SELECT
    h.ticker                                      AS symbol,
    round(100 * h.value_usd  / t.total_value,  1) AS weight_pct,
    round(100 * h.income_usd / t.total_income, 1) AS income_share_pct,
    round(100 * h.income_usd / h.value_usd,    2) AS yield_pct
FROM holding AS h
CROSS JOIN
(
    SELECT
        sum(value_usd)  AS total_value,
        sum(income_usd) AS total_income
    FROM holding
) AS t
ORDER BY weight_pct DESC
Run this yourself

На реальних цінах повторюється закономірність зі скрипту. MSFT — найбільша позиція: на неї припадає 31.4% ринкової вартості, але вона забезпечує 10% доходу за дохідності 0.72%. На іншому кінці діапазону VZ становить 5.9% вартості та забезпечує 15.7% доходу за дохідності 5.96%. Вага та частка доходу розходяться, коли дохідність позицій відрізняється.

Якщо усереднити ці п’ять позицій двома способами, отримаємо дві різні відповіді.

ЗапитДва середні показники для тих самих п’яти позицій
Точний SQL-код для кожного числа
WITH
    positions AS
    (
        SELECT
            tupleElement(p, 1)            AS ticker,
            toFloat64(tupleElement(p, 2)) AS shares
        FROM
        (
            SELECT arrayJoin([('MSFT', 30.), ('PG', 60.), ('XOM', 80.), ('KO', 100.), ('VZ', 60.)]) AS p
        )
    ),
    last_px AS
    (
        SELECT
            ticker,
            toFloat64(argMax(close, date)) AS px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')
          AND date >= today() - 30
        GROUP BY ticker
    ),
    ttm_dps AS
    (
        SELECT
            ticker,
            sum(amount) AS dps
        FROM
        (
            SELECT
                ticker,
                id,
                toFloat64(any(cash_amount)) AS amount
            FROM global_markets.stocks_dividends
            WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')
              AND ex_dividend_date >  today() - 365
              AND ex_dividend_date <= today()
            GROUP BY ticker, id
        )
        GROUP BY ticker
    ),
    holding AS
    (
        SELECT
            pos.shares * lp.px AS value_usd,
            pos.shares * d.dps AS income_usd
        FROM positions AS pos
        INNER JOIN last_px AS lp ON lp.ticker = pos.ticker
        INNER JOIN ttm_dps AS d  ON d.ticker  = pos.ticker
    )
SELECT
    tupleElement(m, 1)           AS method,
    round(tupleElement(m, 2), 2) AS yield_pct
FROM
(
    SELECT arrayJoin([
        ('Market-value weighted portfolio yield', weighted_yield),
        ('Simple average of the five yields',     naive_yield)
    ]) AS m
    FROM
    (
        SELECT
            100 * sum(income_usd) / sum(value_usd) AS weighted_yield,
            avg(100 * income_usd / value_usd)      AS naive_yield
        FROM holding
    )
)
ORDER BY yield_pct DESC
Run this yourself

Вищий показник, 2.93%, — це показник Simple average of the five yields. Інший становить 2.24%. Лише один із них відповідає фактичному грошовому доходу. Помножте зважений показник на ринкову вартість портфеля — і отримаєте річний дохід. Якщо зробити те саме з простим середнім, вийде сума, яка не буде вказана в жодній виписці. Напрямок різниці визначається структурно: коли акції з вищою дохідністю мають менші ваги, просте середнє перевищує фактичну дохідність портфеля. Коли ж високодохідні позиції є найбільшими, просте середнє буде нижчим.

Yield on cost — це не дохідність портфеля

Yield on cost ділить поточний річний дивіденд на ціну купівлі, а не на поточну вартість позиції. Позиція, придбана за $20, яка тепер торгується по $80 і все ще виплачує $1.00 на акцію на рік, має yield on cost 5.00% проти поточної дохідності 1.25%. Дивіденд у доларах однаковий. Змінився лише знаменник.

Обидва показники коректні, але відповідають на різні запитання. Поточна ринкова вартість у знаменнику показує, яку дохідність портфель має сьогодні. Це показник, який можна порівнювати з хорошою дивідендною дохідністю або з Treasury bill. Cost basis у знаменнику показує результат інвестиції, зробленої в минулому. Проблема виникає, коли ці два підходи змішують в одному підсумку портфеля: для нещодавно придбаних позицій використовують поточну дохідність, а для позицій, що утримуються десять років, — yield on cost. Така комбінація регулярно подвоює уявну дохідність income-портфеля і не відповідає жодному показнику брокерської звітності. Пастки дивідендної дохідності описують протилежну ілюзію — високу дохідність, яка з’являється після різкого падіння ціни.

Trailing або forward inputs змінюють результат

Кожен наведений вище показник залежить від того, який дивіденд використано в чисельнику. Trailing yield підсумовує виплати за останні twelve months, фактично оголошені компанією. Forward yield приводить до річного виміру останню виплату, зазвичай множачи останній квартальний дивіденд на чотири. Ці два показники відрізняються для будь-якої компанії, яка змінила виплату або здійснила special distribution протягом року. Одна велика позиція може самостійно суттєво змінити показник портфеля. На цих панелях використано trailing inputs. У матеріалі Trailing vs forward dividend yield пояснюється, коли доречно використовувати кожен із них.

Дохідність — це ставка, а cash надходить окремими виплатами

Зважена дохідність — це річна ставка, а не графік виплат. Ті самі п’ять позицій виплачують дивіденди протягом кількох місяців, що часто йдуть поспіль, оскільки більшість компаній США проходять ex-dividend date щоквартально й мають схожі календарі виплат.

ЗапитДивідендний дохід портфеля з п’яти акцій за місяцями
Точний SQL-код для кожного числа
WITH
    positions AS
    (
        SELECT
            tupleElement(p, 1)            AS ticker,
            toFloat64(tupleElement(p, 2)) AS shares
        FROM
        (
            SELECT arrayJoin([('MSFT', 30.), ('PG', 60.), ('XOM', 80.), ('KO', 100.), ('VZ', 60.)]) AS p
        )
    ),
    payments AS
    (
        SELECT
            ticker,
            id,
            any(ex_dividend_date)       AS ex_date,
            toFloat64(any(cash_amount)) AS amount
        FROM global_markets.stocks_dividends
        WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')
          AND ex_dividend_date >  today() - 365
          AND ex_dividend_date <= today()
        GROUP BY ticker, id
    )
SELECT
    formatDateTime(toStartOfMonth(pay.ex_date), '%Y-%m') AS month,
    formatDateTime(toStartOfMonth(pay.ex_date), '%b %Y') AS month_label,
    round(sum(pos.shares * pay.amount), 2)               AS income_usd
FROM payments AS pay
INNER JOIN positions AS pos ON pos.ticker = pay.ticker
GROUP BY month, month_label
ORDER BY month
Run this yourself

Протягом trailing year cash надійшов у 12 різних місяцях. Найсвіжіша виплата відбулася у Jul 2026 і становила $107.76. Дивідендна дохідність портфеля на рівні кількох відсотків нічого не говорить про те, в якому місяці надійдуть кошти. Тому income-план, розрахований за місячним показником, має враховувати календар виплат поряд зі ставкою. Для загальноринкового показника, з яким порівнюють ці дані портфеля, див. дивідендну дохідність S&P 500.

Поширені запитання

Як розрахувати дивідендну дохідність усього портфеля?

Підсумуйте річний дивідендний дохід за кожною позицією — кількість акцій, помножена на річний дивіденд на акцію. Окремо підсумуйте ринкову вартість кожної позиції — кількість акцій, помножена на ціну. Потім поділіть загальний дохід на загальну вартість і помножте на 100. Результат — середньозважена за ринковою вартістю дохідність позицій портфеля.

Чому середня дохідність моїх позицій вища за дохідність портфеля?

Просте середнє дає кожній позиції один голос. Дохідність портфеля дає кожній позиції голос пропорційно до вкладених у неї доларів. Коли акції з найвищою дохідністю є найменшими позиціями, просте середнє перевищує дохідність, яку фактично генерує портфель, іноді приблизно на half again as much.

Чи враховуються cash у дивідендній дохідності портфеля?

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

Чи є yield on cost тотожним дохідності мого портфеля?

Ні. Yield on cost ділить сьогоднішній дивіденд на ціну, яку ви сплатили кілька років тому, тому показник зростає разом із ціною акції. Дохідність портфеля використовує поточну ринкову вартість. Саме цей показник пов’язаний із доходом, який генерують ваші поточні позиції.

Чи суттєво підвищить дохідність портфеля додавання однієї високодохідної акції?

Лише пропорційно до вкладених у неї доларів. Акція з дохідністю 9%, яка становить 2.5% портфеля, додає приблизно 0.2 процентного пункта до зваженої дохідності — 0.09, помножене на 0.025, — незалежно від її впливу на середнє значення стовпця дохідності.


Кожна панель містить точний SQL-запит, за яким її побудовано, тому зважування можна перевірити на кожному рядку. Щоб виконати такий самий розрахунок для власного переліку назв і кількості акцій, сформулюйте запит звичайною англійською мовою в терміналі Strasmore.

#dividend yield#portfolio#weighted average#income#calculation