Rendement en dividendes du portefeuille : moyenne pondérée
Calculez le rendement en dividendes du portefeuille avec le revenu annuel total et la valeur de marché, plutôt qu’en moyennant la colonne des rendements.
Le rendement en dividendes de votre portefeuille est un chiffre unique : le revenu annuel total en dividendes que vos positions sont censées verser, divisé par leur valeur de marché totale. Dit autrement, il s’agit d’une moyenne des rendements individuels pondérée par la valeur de marché, chaque position étant pondérée selon sa valeur en dollars rapportée à l’ensemble du portefeuille. La moyenne de la colonne des rendements affichée sur un écran de courtage est différente. Dans la plupart des portefeuilles réels, c’est aussi le chiffre le plus flatteur.
Comment calculer le rendement en dividendes d’un portefeuille
Pour chaque position, multipliez le nombre d’actions par le dividende annuel par action. Vous obtenez le revenu annuel de la position en dollars. Additionnez ces revenus, divisez le total par la somme du nombre d’actions multiplié par le cours pour chaque position, puis multipliez par 100. C’est tout le calcul, que le portefeuille compte quatre positions ou quarante.
Il peut s’écrire de deux façons équivalentes :
- Revenu annuel total divisé par la valeur de marché totale du portefeuille.
- Somme, pour toutes les positions, du produit du poids par le rendement, le poids étant égal à la valeur de la position divisée par la valeur du portefeuille.
La deuxième formule montre pourquoi une moyenne simple est trompeuse. Chaque position apparaît dans les deux formules, mais dans la bonne formule, elle est pondérée par la valeur de ses titres et non par une voix identique à celle des autres. Si vous incluez les liquidités dans le portefeuille, elles doivent aussi figurer au dénominateur. Les exclure augmente le rendement affiché sans ajouter un centime de revenu. Pour le calcul d’une seule action, consultez comment calculer le rendement en dividendes.
Pourquoi la moyenne de la colonne des rendements surestime votre revenu
L’écart entre les deux méthodes apparaît clairement dans un exemple chiffré. Le script ci-dessous est écrit en Python 3 standard, sans importation. Il s’exécute sur toute machine équipée de python3. Les cinq positions sont hypothétiques et utilisent des chiffres ronds, choisis pour rendre l’effet évident : un titre, un nombre d’actions, un cours et un dividende annuel par action.
#!/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}%'
)
Une fois exécuté, le script fait apparaître un écart marqué entre les deux chiffres principaux. Le portefeuille détient pour 40 000 dollars d’actions et verse 1 070 dollars par an, soit un rendement pondéré de 2,68 %. La moyenne simple des cinq rendements affiche 4,00 %, soit environ une fois et demie le chiffre correct.
La position E explique tout. Son rendement est de 9,00 %, le plus élevé du portefeuille, mais elle ne représente que 1 000 dollars de titres. Elle pèse 2,5 % de la valeur du portefeuille et fournit 8,4 % de son revenu. Dans la moyenne simple, elle dispose d’un cinquième des voix, comme la position de 15 000 dollars placée à côté. Un chiffre de rendement n’a de sens qu’une fois rapporté aux capitaux qui le sous-tendent.
À quoi ressemble la pondération sur des positions réelles
Les valeurs distributrices de dividendes détenues par les ménages présentent des rendements très variés. C’est ce qui rend le choix de la pondération important. Le panneau ci-dessous calcule le rendement historique de chaque titre à partir des dividendes par action déclarés au cours des douze derniers mois, divisés par le dernier cours de clôture quotidien disponible.
Le SQL exact derrière chaque chiffre
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 DESCPour ces 10 titres, dont les cours sont établis via Aug 7, 2026, les rendements vont de 5.96% à VZ pour le titre le plus élevé, jusqu’à 0.34% à AAPL pour le plus faible. Un portefeuille construit à partir d’une telle dispersion n’atterrit pas près du milieu de la colonne, sauf si les positions ont par hasard la même valeur en dollars.
Prenons maintenant cinq de ces titres dans un portefeuille avec un nombre d’actions fixe. Comparons deux chiffres : la part de chaque position dans la valeur de marché et sa part du revenu annuel.
Le SQL exact derrière chaque chiffre
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 DESCLe script produit le même schéma avec les cours réels. MSFT est la plus grosse position. Elle représente 31.4% de la valeur de marché et fournit 10% du revenu, avec un rendement de 0.72%. À l’autre extrémité, VZ représente 5.9% de la valeur et verse 15.7% du revenu, avec un rendement de 5.96%. Le poids et la part du revenu divergent dès que les rendements diffèrent.
Les deux méthodes de moyenne donnent deux réponses différentes pour ces mêmes cinq positions.
Le SQL exact derrière chaque chiffre
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 DESCLa ligne la plus élevée, à 2.93%, correspond au chiffre Simple average of the five yields. L’autre affiche 2.24%. Une seule de ces deux valeurs correspond à des liquidités réellement encaissées. Multipliez le chiffre pondéré par la valeur de marché du portefeuille et vous retrouvez le revenu annuel. Faites de même avec la moyenne simple et vous obtenez un montant qu’aucun relevé ne fera jamais apparaître. Le sens de l’écart est structurel : lorsque les titres aux rendements les plus élevés sont les plus petites positions, la moyenne simple dépasse le rendement réel du portefeuille. Lorsque ces titres représentent les plus grosses positions, elle lui est inférieure.
Le yield on cost n’est pas le rendement du portefeuille
Le yield on cost divise le dividende annuel actuel par le prix d’achat, et non par la valeur actuelle de la position. Une position achetée à 20 dollars et qui cote maintenant 80 dollars, tout en versant toujours 1,00 dollar par action et par an, affiche un yield on cost de 5,00 %, contre un rendement actuel de 1,25 %. Le dividende représente le même montant en dollars. Seul le dénominateur a changé.
Les deux chiffres sont valables, mais ils répondent à des questions différentes. Une valeur de marché actuelle au dénominateur indique le rendement du portefeuille aujourd’hui. C’est le chiffre comparable à un bon rendement en dividendes ou à celui d’un Treasury bill. Le cost basis au dénominateur renseigne sur un achat effectué dans le passé. Le problème apparaît lorsque les deux sont mélangés dans le total d’un même portefeuille : rendement actuel pour les achats récents, yield on cost pour les positions détenues depuis dix ans. Ce mélange double régulièrement le rendement apparent d’un portefeuille de revenu et ne correspond à aucun chiffre publié par un courtier. Les pièges du rendement en dividendes traite de l’illusion inverse : un rendement qui paraît élevé après une forte baisse du cours.
Les données historiques ou prévisionnelles modifient le résultat
Chaque chiffre présenté ci-dessus dépend du montant du dividende utilisé au numérateur. Le rendement historique additionne les paiements déclarés au cours des douze derniers mois. Le rendement prévisionnel annualise le paiement le plus récent, généralement le dernier dividende trimestriel multiplié par quatre. Les deux chiffres diffèrent pour tout titre dont la distribution a changé ou qui a versé un dividende exceptionnel au cours de l’année. Une seule grosse position peut à elle seule modifier sensiblement le total du portefeuille. Les panneaux de cet article utilisent des données historiques. Rendement en dividendes historique ou prévisionnel précise dans quels cas utiliser chacune des deux méthodes.
Le rendement est un taux, les liquidités arrivent par à-coups
Un rendement pondéré est un taux annuel, et non un calendrier de versements. Ces cinq positions distribuent leurs dividendes sur quelques mois regroupés, car la plupart des entreprises américaines sont ex-dividend chaque trimestre et suivent des calendriers similaires.
Le SQL exact derrière chaque chiffre
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 monthLes liquidités sont arrivées au cours de 12 mois distincts sur les douze derniers mois, le plus récent étant Jul 2026 avec un montant de $107.76. Un rendement du portefeuille de quelques pour cent ne dit rien du mois où l’argent sera versé. C’est pourquoi un plan de revenu fondé sur un chiffre mensuel doit associer le calendrier au taux. Pour le niveau général du marché auquel ces chiffres de portefeuille sont comparés, consultez le rendement en dividendes du S&P 500.
FAQ
Comment calculer le rendement en dividendes de l’ensemble de mon portefeuille ?
Additionnez le revenu annuel en dividendes de chaque position — nombre d’actions multiplié par le dividende annuel par action — puis additionnez la valeur de marché de chaque position — nombre d’actions multiplié par le cours. Divisez ensuite le revenu total par la valeur totale et multipliez par 100. Le résultat est la moyenne des rendements de vos positions, pondérée par leur valeur de marché.
Pourquoi la moyenne des rendements de mes positions est-elle supérieure au rendement de mon portefeuille ?
Une moyenne simple donne une voix à chaque position. Le rendement du portefeuille donne à chaque position un poids proportionnel à sa valeur en dollars. Lorsque les titres aux rendements les plus élevés sont vos plus petites positions, la moyenne simple dépasse le rendement effectivement versé par le portefeuille, parfois de moitié.
Les liquidités entrent-elles dans le calcul du rendement en dividendes d’un portefeuille ?
Si vous considérez les liquidités comme faisant partie du portefeuille, elles doivent figurer au dénominateur avec un dividende nul, ce qui réduit le rendement. Les exclure revient à calculer le rendement de la seule poche investie. Les deux conventions sont valables, à condition d’appliquer toujours la même lors de vos mesures.
Le yield on cost est-il identique au rendement de mon portefeuille ?
Non. Le yield on cost divise le dividende actuel par le prix payé plusieurs années auparavant. Il augmente donc lorsque le cours de l’action progresse. Le rendement du portefeuille utilise la valeur de marché actuelle. C’est ce chiffre qui correspond au revenu généré par vos positions actuelles.
L’ajout d’une action à haut rendement augmente-t-il fortement le rendement de mon portefeuille ?
Seulement à proportion du capital qui lui est consacré. Une action offrant 9 % et représentant 2,5 % du portefeuille ajoute environ 0,2 point de pourcentage au rendement pondéré — 0,09 multiplié par 0,025 — quel que soit son effet sur la moyenne de la colonne des rendements.
Chaque panneau contient la requête SQL exacte qui l’a produit. La pondération peut donc être vérifiée ligne par ligne. Pour appliquer le même calcul à votre propre liste de titres et de nombres d’actions, formulez votre demande en anglais courant sur le terminal Strasmore.