Strasmore Research
Edukacja Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-08 · data as of August 8, 2026 · refreshed weekly

Jak obliczyć rentowność dywidendową portfela

Rentowność dywidendowa portfela to roczny dochód z dywidend podzielony przez wartość rynkową. Wyjaśniono, dlaczego średnia rentowności pozycji wprowadza w błąd.

Rentowność dywidendowa portfela jest jedną wartością: to całkowity roczny dochód z dywidend, który mają wypłacić posiadane aktywa, podzielony przez ich łączną wartość rynkową. Można też ująć ją odwrotnie: jest to średnia indywidualnych rentowności ważona wartością rynkową, przy czym udział każdej pozycji odpowiada jej wartości wyrażonej w USD jako części całego portfela. Średnia z kolumny rentowności na ekranie rachunku maklerskiego to inna wartość. W większości rzeczywistych portfeli jest ona korzystniejsza.

Jak obliczyć rentowność dywidendową portfela

Dla każdej pozycji należy pomnożyć liczbę akcji przez roczną dywidendę na akcję. Otrzymuje się w ten sposób roczny dochód z pozycji w USD. Następnie należy zsumować te dochody, podzielić je przez sumę iloczynów liczby akcji i ceny dla wszystkich pozycji oraz pomnożyć przez 100. To całe obliczenie, niezależnie od tego, czy portfel obejmuje cztery, czy czterdzieści pozycji.

Można zapisać je na dwa równoważne sposoby:

  • Całkowity roczny dochód podzielony przez łączną wartość rynkową portfela.
  • Suma iloczynów udziału i rentowności dla wszystkich pozycji, gdzie udział oznacza wartość pozycji podzieloną przez wartość portfela.

Drugi zapis pokazuje, dlaczego zwykła średnia prowadzi do błędu. Każda pozycja występuje w obu wersjach, ale w prawidłowym obliczeniu każda jest ważona wartością w USD, a nie traktowana jak jeden równorzędny głos. Środki pieniężne uwzględniane jako część portfela również należy ująć w mianowniku. Pominięcie ich podnosi wyświetlaną rentowność, nie zwiększając dochodu nawet o jednego centa. W przypadku obliczenia dla pojedynczej akcji należy zacząć od jak obliczyć rentowność dywidendową.

Dlaczego uśrednianie rentowności z kolumny zawyża dochód

Różnicę między obiema metodami najłatwiej zobaczyć na przykładzie obliczeniowym. Poniższy skrypt to zwykły Python 3, bez importowanych modułów. Uruchomi się na każdym komputerze z python3. Pięć pozycji oparto na hipotetycznych, zaokrąglonych wartościach, aby wyraźnie pokazać efekt: nazwa, liczba akcji, cena oraz roczna dywidenda na akcję.

#!/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}%'
    )

Po uruchomieniu skryptu dwie główne wartości wyraźnie się różnią. Portfel obejmuje akcje o wartości 40 000 USD i generuje 1 070 USD rocznie, co daje rentowność ważoną na poziomie 2,68%. Zwykła średnia pięciu rentowności wynosi 4,00%, czyli około półtora raza więcej.

Pozycja E wyjaśnia całą różnicę. Jej rentowność wynosi 9,00%, najwięcej w portfelu, ale wartość akcji to 1 000 USD. Stanowi to 2,5% wartości portfela i 8,4% dochodu. W zwykłej średniej pozycja ta otrzymuje jedną piątą wagi, tyle samo co pozycja o wartości 15 000 USD znajdująca się obok niej. Sama wartość rentowności nabiera znaczenia dopiero po uwzględnieniu wartości aktywów, które za nią stoją.

Jak wygląda ważenie w rzeczywistych pozycjach

Spółki wypłacające dywidendy charakteryzują się szerokim zakresem rentowności. Dlatego wybór metody ważenia ma znaczenie. Poniższy panel oblicza rentowność kroczącą każdej spółki na podstawie dywidend na akcję zadeklarowanych w ostatnich dwunastu miesiącach i podzielonych przez najnowszy dzienny kurs zamknięcia.

ZapytanieDywidendowa rentowność krocząca za 12 miesięcy dla dziesięciu spółek wypłacających dywidendy gospodarstwom domowym
Dokładny kod SQL dla każdej liczby
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

Wśród tych 10 spółek, których ceny wynoszą Aug 7, 2026, rentowności mieszczą się w przedziale od 5.96% dla VZ do 0.34% dla AAPL. Portfel zbudowany z takiego zestawu znajduje się znacznie dalej od środka kolumny, chyba że poszczególne pozycje mają identyczną wartość w USD.

Następnie należy umieścić pięć z tych spółek w portfelu ze stałą liczbą akcji i zestawić obok siebie dwie wartości: udział każdej pozycji w wartości rynkowej oraz jej udział w rocznym dochodzie.

ZapytaniePortfel pięciu spółek: udział w wartości na tle udziału w dochodzie
Dokładny kod SQL dla każdej liczby
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

Wzorzec ze skryptu powtarza się przy cenach rynkowych. MSFT to największa pozycja, stanowiąca 31.4% wartości rynkowej, a jednocześnie dostarczająca 10% dochodu przy rentowności 0.72%. Z drugiej strony VZ stanowi 5.9% wartości portfela i generuje 15.7% dochodu przy rentowności 5.96%. Udział w wartości i udział w dochodzie różnią się, gdy rentowności nie są takie same.

Uśrednienie na dwa sposoby daje dla tych samych pięciu pozycji dwie różne odpowiedzi.

ZapytanieDwie średnie dla tych samych pięciu pozycji
Dokładny kod SQL dla każdej liczby
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

Wyższa wartość, wynosząca 2.93%, to wartość Simple average of the five yields. Druga wynosi 2.24%. Tylko jedna z nich odpowiada przepływowi gotówki. Pomnożenie wartości ważonej przez wartość rynkową portfela pozwala odzyskać roczny dochód. To samo działanie wykonane ze zwykłą średnią daje wartość, której nie pokaże żadne zestawienie. Kierunek różnicy jest strukturalny: gdy spółki o wyższej rentowności są mniejszymi pozycjami, zwykła średnia przewyższa rzeczywistą rentowność portfela. Gdy spółki o wysokiej rentowności są dużymi pozycjami, zwykła średnia jest niższa.

Rentowność względem kosztu nie jest rentownością portfela

Rentowność względem kosztu dzieli bieżącą roczną dywidendę przez cenę zapłaconą za akcje, a nie przez obecną wartość pozycji. Pozycja kupiona po 20 USD, która obecnie jest notowana po 80 USD i nadal wypłaca 1,00 USD rocznie na akcję, ma rentowność względem kosztu na poziomie 5,00%, w porównaniu z bieżącą rentownością wynoszącą 1,25%. Dywidenda w USD jest taka sama. Zmienił się tylko mianownik.

Obie wartości są prawidłowe, ale odpowiadają na różne pytania. Bieżąca wartość rynkowa w mianowniku pokazuje rentowność portfela obecnie. Jest to wartość porównywalna z dobrą rentownością dywidendową lub z rentownością bonu skarbowego. Koszt bazowy w mianowniku mówi o zakupie dokonanym w przeszłości. Problem zaczyna się wtedy, gdy obie wartości zostaną połączone w jednym podsumowaniu portfela: bieżąca rentowność dla niedawnych zakupów i rentowność względem kosztu dla pozycji utrzymywanych od dekady. Taka mieszanka regularnie podwaja pozorną rentowność portfela dochodowego i nie odpowiada żadnej wartości raportowanej przez brokera. Pułapki rentowności dywidendowej opisują przeciwstawną iluzję: wysoką rentowność wynikającą z gwałtownego spadku ceny.

Dane kroczące lub prognozowane zmieniają wynik

Każda przedstawiona wartość zależy od tego, jaka dywidenda trafi do licznika. Rentowność krocząca sumuje wypłaty z ostatnich dwunastu miesięcy, które faktycznie zadeklarowano. Rentowność prognozowana annualizuje ostatnią wypłatę, zwykle mnożąc najnowszą kwartalną dywidendę przez cztery. Wartości te różnią się w przypadku każdej spółki, która zmieniła wysokość wypłaty lub w ciągu roku wypłaciła dywidendę specjalną. Jedna duża pozycja może samodzielnie istotnie zmienić wynik portfela. W przedstawionych panelach wykorzystano dane kroczące. Krocząca a prognozowana rentowność dywidendowa wyjaśnia, kiedy właściwy jest każdy z tych wariantów.

Rentowność jest stopą, a gotówka wpływa w transzach

Rentowność ważona jest roczną stopą, a nie harmonogramem wypłat. Te same pięć pozycji wypłaca środki w kilku skupionych wokół siebie miesiącach, ponieważ większość spółek z USA przechodzi przez datę ex-dividend co kwartał i korzysta z podobnych kalendarzy wypłat.

ZapytanieDochód z dywidend z portfela pięciu spółek według miesięcy
Dokładny kod SQL dla każdej liczby
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

W ciągu ostatnich dwunastu miesięcy gotówka wpłynęła w 12 różnych miesiącach. Najnowsza wypłata wyniosła Jul 2026 i była równa $107.76. Rentowność portfela na poziomie kilku procent nie mówi nic o miesiącu, w którym pojawią się środki. Dlatego plan dochodowy oparty na miesięcznej wartości powinien uwzględniać kalendarz wypłat obok samej stopy. W przypadku poziomu rynkowego, z którym porównuje się te wartości portfelowe, zob. rentowność dywidendowa S&P 500.

FAQ

Jak obliczyć rentowność dywidendową całego portfela?

Należy zsumować roczny dochód z dywidend dla każdej pozycji (liczba akcji pomnożona przez roczną dywidendę na akcję), a następnie zsumować wartość rynkową każdej pozycji (liczba akcji pomnożona przez cenę). Całkowity dochód należy podzielić przez łączną wartość i pomnożyć przez 100. Wynik jest średnią rentowności posiadanych aktywów ważoną wartością rynkową.

Dlaczego średnia rentowność moich pozycji jest wyższa niż rentowność portfela?

Zwykła średnia daje każdej pozycji jeden głos. Rentowność portfela daje każdej pozycji głos proporcjonalny do jej wartości w USD. Gdy spółki o najwyższej rentowności są najmniejszymi pozycjami, zwykła średnia przewyższa rentowność faktycznie generowaną przez portfel, czasami nawet o połowę.

Czy środki pieniężne uwzględnia się w rentowności dywidendowej portfela?

Jeżeli środki pieniężne traktuje się jako część portfela, należy ująć je w mianowniku i przypisać im zerową dywidendę. Obniża to rentowność. Ich pominięcie pokazuje wyłącznie rentowność zainwestowanej części portfela. Obie konwencje są prawidłowe, pod warunkiem konsekwentnego stosowania tej samej metody przy każdym pomiarze.

Czy rentowność względem kosztu jest taka sama jak rentowność mojego portfela?

Nie. Rentowność względem kosztu dzieli dzisiejszą dywidendę przez cenę zapłaconą przed laty, dlatego rośnie wraz ze wzrostem kursu akcji. Rentowność portfela wykorzystuje bieżącą wartość rynkową. Jest to wartość powiązana z dochodem generowanym przez obecnie posiadane aktywa.

Czy dodanie jednej akcji o wysokiej rentowności znacząco podnosi rentowność portfela?

Tylko proporcjonalnie do zainwestowanych w nią środków. Akcja o rentowności 9%, stanowiąca 2,5% portfela, podnosi rentowność ważoną o około 0,2 punktu procentowego (0,09 pomnożone przez 0,025), niezależnie od wpływu na średnią z kolumny rentowności.


Każdy przedstawiony panel zawiera dokładne zapytanie SQL, które go wygenerowało. Metoda ważenia jest więc możliwa do zweryfikowania w każdym wierszu. Aby wykonać takie samo obliczenie dla własnej listy spółek i liczby posiadanych akcji, należy wydać polecenie w języku naturalnym w terminalu Strasmore.

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