{"product_id":"holding-period-return","title":"Holding Period Return Calculator","description":"\u003cstyle\u003e\n.hpr-calculator {\n  --ink: #0f172a;\n  --muted: #475569;\n  --border: #e2e8f0;\n  --surface: #ffffff;\n  --tint: #f8fafc;\n  --primary: #1d4ed8;\n  --accent: #c2410c;\n  --accent-hover: #9a3412;\n  --chart-1: #1e40af;\n  --chart-2: #0d9488;\n  --chart-3: #7c3aed;\n  --chart-4: #be185d;\n  --chart-5: #334155;\n  width: 100%;\n  color: var(--ink);\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  font-size: 15px;\n  line-height: 1.55;\n  overflow-wrap: anywhere;\n  container-type: inline-size;\n}\n.hpr-calculator,\n.hpr-calculator *,\n.hpr-calculator *::before,\n.hpr-calculator *::after {\n  box-sizing: border-box;\n}\n.hpr-calculator * {\n  min-width: 0;\n}\n.hpr-calculator [hidden] {\n  display: none !important;\n}\n.hpr-calculator button,\n.hpr-calculator input {\n  font: inherit;\n}\n.hpr-calculator a {\n  color: var(--primary);\n  text-decoration-thickness: 1px;\n  text-underline-offset: 2px;\n}\n.hpr-calculator a:hover {\n  color: #1e3a8a;\n}\n.hpr-calculator :focus-visible {\n  outline: 3px solid #1d4ed8;\n  outline-offset: 2px;\n}\n.hpr-header,\n.hpr-toolbar,\n.hpr-workspace,\n.hpr-chart,\n.hpr-table,\n.hpr-education {\n  padding: 24px;\n}\n.hpr-header {\n  border-bottom: 1px solid var(--border);\n  background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);\n}\n.hpr-header h2 {\n  margin: 0;\n  color: var(--ink);\n  font-size: 24px;\n  font-weight: 700;\n  line-height: 1.25;\n}\n.hpr-subtitle {\n  max-width: 760px;\n  margin: 8px 0 0;\n  color: var(--muted);\n}\n.hpr-pills {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 16px;\n}\n.hpr-pill {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  min-height: 32px;\n  padding: 6px 10px;\n  border: 1px solid var(--border);\n  border-radius: 999px;\n  background: var(--surface);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-pill strong {\n  color: var(--ink);\n  font-weight: 700;\n}\n.hpr-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  padding-top: 16px;\n  padding-bottom: 16px;\n  border-bottom: 1px solid var(--border);\n}\n.hpr-button {\n  min-height: 44px;\n  border: 1px solid transparent;\n  border-radius: 6px;\n  padding: 11px 18px;\n  cursor: pointer;\n  font-size: 15px;\n  font-weight: 650;\n  line-height: 1.2;\n  transition: background-color .16s ease, border-color .16s ease, box-shadow .16s ease, transform .16s ease;\n}\n.hpr-button:hover {\n  box-shadow: 0 2px 5px rgba(15, 23, 42, .12);\n  transform: translateY(-1px);\n}\n.hpr-download {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  white-space: nowrap;\n  color: #ffffff;\n  background: var(--accent);\n}\n.hpr-download:hover,\n.hpr-download:active {\n  color: #ffffff;\n  background: var(--accent-hover);\n}\n.hpr-download-icon {\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n}\n.hpr-reset {\n  color: var(--ink);\n  background: var(--surface);\n  border-color: #cbd5e1;\n}\n.hpr-reset:hover {\n  background: var(--tint);\n  border-color: #94a3b8;\n}\n.hpr-workspace {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n  gap: 24px;\n  border-bottom: 1px solid var(--border);\n}\n.hpr-panel {\n  align-self: start;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n}\n.hpr-panel-head {\n  padding: 16px;\n  border-bottom: 1px solid var(--border);\n  background: var(--tint);\n  border-radius: 7px 7px 0 0;\n}\n.hpr-panel-head h3,\n.hpr-section-title {\n  margin: 0;\n  color: var(--ink);\n  font-size: 18px;\n  font-weight: 650;\n  line-height: 1.35;\n}\n.hpr-panel-head p,\n.hpr-section-intro {\n  margin: 4px 0 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.hpr-form {\n  display: grid;\n  gap: 16px;\n  padding: 16px;\n}\n.hpr-field {\n  display: grid;\n  grid-template-rows: auto auto minmax(20px, auto);\n  gap: 6px;\n}\n.hpr-label {\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n}\n.hpr-control-wrap {\n  position: relative;\n}\n.hpr-control-prefix {\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--muted);\n  font-weight: 600;\n  pointer-events: none;\n}\n.hpr-input {\n  width: 100%;\n  min-height: 44px;\n  border: 1px solid #64748b;\n  border-radius: 6px;\n  padding: 10px 12px;\n  color: var(--ink);\n  background: #ffffff;\n  font-size: 15px;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-input:hover {\n  border-color: #64748b;\n}\n.hpr-input[aria-invalid=\"true\"] {\n  border-color: #b91c1c;\n  box-shadow: 0 0 0 1px #b91c1c;\n}\n.hpr-helper,\n.hpr-error {\n  min-height: 20px;\n  margin: 0;\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.45;\n}\n.hpr-helper {\n  color: var(--muted);\n}\n.hpr-error {\n  color: #991b1b;\n}\n.hpr-results {\n  padding: 16px;\n}\n.hpr-primary-result {\n  padding: 20px;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  background: #eff6ff;\n}\n.hpr-result-eyebrow {\n  margin: 0;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 650;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n}\n.hpr-result-main {\n  margin: 4px 0 0;\n  color: #172554;\n  font-size: 30px;\n  font-weight: 700;\n  line-height: 1.15;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-result-copy {\n  margin: 8px 0 0;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 500;\n}\n.hpr-metric-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n  gap: 12px;\n  margin-top: 16px;\n}\n.hpr-metric {\n  padding: 14px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n}\n.hpr-metric-label {\n  margin: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 600;\n}\n.hpr-metric-value {\n  margin: 4px 0 0;\n  color: var(--ink);\n  font-size: 20px;\n  font-weight: 700;\n  line-height: 1.25;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-live {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n.hpr-chart,\n.hpr-table {\n  border-bottom: 1px solid var(--border);\n}\n.hpr-section-head {\n  margin-bottom: 16px;\n}\n.hpr-chart-card,\n.hpr-table-card {\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  padding: 16px;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n}\n.hpr-chart-cluster {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n  align-items: start;\n  justify-content: center;\n  gap: 20px;\n  max-width: 960px;\n  margin: 0 auto;\n}\n.hpr-chart-visual {\n  width: 100%;\n  max-width: 620px;\n  margin: 0 auto;\n}\n.hpr-chart-svg {\n  display: block;\n  width: 100%;\n  height: auto;\n  aspect-ratio: 16 \/ 9;\n}\n.hpr-chart-empty {\n  display: grid;\n  place-items: center;\n  min-height: 140px;\n  padding: 24px;\n  border: 1px dashed #94a3b8;\n  border-radius: 6px;\n  color: var(--muted);\n  background: var(--tint);\n  text-align: center;\n  font-size: 13px;\n  font-weight: 600;\n}\n.hpr-chart-legend {\n  display: grid;\n  align-content: start;\n  gap: 8px;\n  width: max-content;\n  max-width: 100%;\n  margin: 0 auto;\n}\n.hpr-legend-row {\n  display: grid;\n  grid-template-columns: 12px minmax(112px, auto) auto;\n  align-items: center;\n  gap: 10px;\n  padding: 6px 0;\n  color: var(--ink);\n  font-size: 13px;\n  font-weight: 500;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-legend-swatch {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n}\n.hpr-legend-value {\n  font-weight: 700;\n}\n.hpr-chart-caption,\n.hpr-table-note {\n  margin-top: 16px;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.hpr-chart-summary {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n.hpr-safe-stack .hpr-chart-cluster {\n  grid-template-columns: minmax(0, 1fr);\n  gap: 24px;\n}\n.hpr-safe-stack .hpr-chart-legend {\n  margin-top: 4px;\n}\n.hpr-safe-stack .hpr-chart-caption {\n  margin-top: 20px;\n}\n.hpr-table-overflow {\n  width: 100%;\n  overflow-x: auto;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n}\n.hpr-data-table {\n  width: 100%;\n  min-width: 680px;\n  border-collapse: collapse;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-data-table th,\n.hpr-data-table td {\n  padding: 11px 12px;\n  border-bottom: 1px solid var(--border);\n  text-align: left;\n  vertical-align: top;\n}\n.hpr-data-table th {\n  color: #ffffff;\n  background: #1e3a5f;\n  font-size: 13px;\n  font-weight: 700;\n}\n.hpr-data-table td {\n  color: var(--ink);\n  background: #ffffff;\n  font-size: 14px;\n}\n.hpr-data-table tbody tr:hover td {\n  background: #fafafa;\n}\n.hpr-data-table tr:last-child td {\n  border-bottom: 0;\n}\n.hpr-data-table .hpr-number {\n  text-align: right;\n  white-space: nowrap;\n}\n.hpr-safe-table-stack .hpr-table-note {\n  margin-top: 20px;\n}\n.hpr-education {\n  color: #1e293b;\n}\n.hpr-education-inner {\n  max-width: 920px;\n  margin: 0 auto;\n}\n.hpr-education h2 {\n  margin: 32px 0 8px;\n  color: var(--ink);\n  font-size: 22px;\n  font-weight: 700;\n  line-height: 1.3;\n}\n.hpr-education h2:first-child {\n  margin-top: 0;\n}\n.hpr-education h3 {\n  margin: 22px 0 6px;\n  color: var(--ink);\n  font-size: 18px;\n  font-weight: 650;\n  line-height: 1.35;\n}\n.hpr-education p,\n.hpr-education ul {\n  margin: 8px 0 0;\n}\n.hpr-education ul {\n  padding-left: 22px;\n}\n.hpr-formula {\n  margin-top: 12px;\n  padding: 12px 14px;\n  border-left: 4px solid var(--primary);\n  border-radius: 0 6px 6px 0;\n  background: #eff6ff;\n  color: #172554;\n  font-weight: 650;\n  font-variant-numeric: tabular-nums;\n}\n.hpr-disclaimer {\n  margin-top: 24px;\n  padding: 12px 14px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n@container (min-width: 900px) {\n  .hpr-workspace {\n    grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);\n  }\n}\n@container (min-width: 640px) {\n  .hpr-chart-cluster {\n    grid-template-columns: minmax(360px, 620px) max-content;\n    gap: 24px;\n  }\n}\n@container (max-width: 639px) {\n  .hpr-chart-cluster {\n    grid-template-columns: minmax(0, 1fr);\n  }\n}\n@container (max-width: 520px) {\n  .hpr-header,\n  .hpr-toolbar,\n  .hpr-workspace,\n  .hpr-chart,\n  .hpr-table,\n  .hpr-education {\n    padding: 16px;\n  }\n  .hpr-toolbar {\n    align-items: stretch;\n  }\n  .hpr-button {\n    justify-content: center;\n    flex: 1 1 100%;\n  }\n  .hpr-metric-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .hpr-result-main {\n    font-size: 28px;\n  }\n  .hpr-legend-row {\n    grid-template-columns: 12px minmax(100px, auto) auto;\n    gap: 8px;\n  }\n  .hpr-chart-caption,\n  .hpr-table-note {\n    margin-top: 16px;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"hpr-calculator\" data-calculator-root\u003e\n  \u003csection class=\"hpr-header\"\u003e\n    \u003ch2\u003eHolding Period Return Calculator\u003c\/h2\u003e\n    \u003cp class=\"hpr-subtitle\"\u003eMeasure the total return earned on one share by combining price appreciation or loss with dividend income.\u003c\/p\u003e\n    \u003cdiv class=\"hpr-pills\" aria-label=\"Live return summary\"\u003e\n      \u003cspan class=\"hpr-pill\"\u003eHPR \u003cstrong class=\"hpr-pill-hpr\"\u003e27.50%\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"hpr-pill\"\u003ePrice change \u003cstrong class=\"hpr-pill-gain\"\u003e+$20.00\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"hpr-pill\"\u003eDividend \u003cstrong class=\"hpr-pill-dividend\"\u003e$7.50\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"hpr-pill\"\u003eTotal gain \u003cstrong class=\"hpr-pill-total\"\u003e+$27.50\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"hpr-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"hpr-button hpr-download\" type=\"button\"\u003e\n      \u003csvg class=\"hpr-download-icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\n        \u003cpath fill=\"currentColor\" d=\"M11 3a1 1 0 0 1 2 0v10.59l3.3-3.3a1 1 0 1 1 1.4 1.42l-5 5a1 1 0 0 1-1.4 0l-5-5a1 1 0 1 1 1.4-1.42l3.3 3.3V3Z\"\u003e\u003c\/path\u003e\n        \u003cpath fill=\"currentColor\" d=\"M5 19a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1Z\"\u003e\u003c\/path\u003e\n      \u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"hpr-button hpr-reset\" type=\"button\"\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"hpr-workspace\"\u003e\n    \u003cdiv class=\"hpr-panel hpr-input-panel\"\u003e\n      \u003cdiv class=\"hpr-panel-head\"\u003e\n        \u003ch3\u003eInvestment inputs\u003c\/h3\u003e\n        \u003cp\u003eEnter per-share values for the complete holding period.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"hpr-form\"\u003e\n        \u003cdiv class=\"hpr-field\"\u003e\n          \u003clabel class=\"hpr-label\" for=\"hpr-bought-price\"\u003eBought price\u003c\/label\u003e\n          \u003cdiv class=\"hpr-control-wrap\"\u003e\n            \u003cinput class=\"hpr-input hpr-bought-price\" id=\"hpr-bought-price\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$100.00\" aria-describedby=\"hpr-bought-help hpr-bought-error\"\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"hpr-helper\" id=\"hpr-bought-help\"\u003eOriginal amount paid per share; must be greater than zero.\u003c\/p\u003e\n          \u003cp class=\"hpr-error\" id=\"hpr-bought-error\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"hpr-field\"\u003e\n          \u003clabel class=\"hpr-label\" for=\"hpr-current-price\"\u003eCurrent or sale price\u003c\/label\u003e\n          \u003cdiv class=\"hpr-control-wrap\"\u003e\n            \u003cinput class=\"hpr-input hpr-current-price\" id=\"hpr-current-price\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$120.00\" aria-describedby=\"hpr-current-help hpr-current-error\"\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"hpr-helper\" id=\"hpr-current-help\"\u003eMarket value or sale proceeds per share at the end of the period.\u003c\/p\u003e\n          \u003cp class=\"hpr-error\" id=\"hpr-current-error\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"hpr-field\"\u003e\n          \u003clabel class=\"hpr-label\" for=\"hpr-dividend-income\"\u003eDividend income per share\u003c\/label\u003e\n          \u003cdiv class=\"hpr-control-wrap\"\u003e\n            \u003cinput class=\"hpr-input hpr-dividend-income\" id=\"hpr-dividend-income\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$7.50\" aria-describedby=\"hpr-dividend-help hpr-dividend-error\"\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"hpr-helper\" id=\"hpr-dividend-help\"\u003eTotal cash dividends received during the holding period.\u003c\/p\u003e\n          \u003cp class=\"hpr-error\" id=\"hpr-dividend-error\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hpr-panel hpr-result-panel\"\u003e\n      \u003cdiv class=\"hpr-panel-head\"\u003e\n        \u003ch3\u003eLive results\u003c\/h3\u003e\n        \u003cp\u003eReturns update automatically as values change.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"hpr-results\"\u003e\n        \u003cdiv class=\"hpr-primary-result\"\u003e\n          \u003cp class=\"hpr-result-eyebrow\"\u003eHolding period return\u003c\/p\u003e\n          \u003cp class=\"hpr-result-main hpr-output-hpr\"\u003e27.50%\u003c\/p\u003e\n          \u003cp class=\"hpr-result-copy hpr-output-interpretation\"\u003eA $100.00 purchase produced $27.50 of combined price gain and dividends per share.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"hpr-metric-grid\"\u003e\n          \u003cdiv class=\"hpr-metric\"\u003e\n            \u003cp class=\"hpr-metric-label\"\u003eCapital gains yield\u003c\/p\u003e\n            \u003cp class=\"hpr-metric-value hpr-output-capital-yield\"\u003e20.00%\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"hpr-metric\"\u003e\n            \u003cp class=\"hpr-metric-label\"\u003eDividend yield on cost\u003c\/p\u003e\n            \u003cp class=\"hpr-metric-value hpr-output-dividend-yield\"\u003e7.50%\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"hpr-metric\"\u003e\n            \u003cp class=\"hpr-metric-label\"\u003ePrice gain or loss\u003c\/p\u003e\n            \u003cp class=\"hpr-metric-value hpr-output-capital-gain\"\u003e+$20.00\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"hpr-metric\"\u003e\n            \u003cp class=\"hpr-metric-label\"\u003eTotal gain per share\u003c\/p\u003e\n            \u003cp class=\"hpr-metric-value hpr-output-total-gain\"\u003e+$27.50\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"hpr-metric\"\u003e\n            \u003cp class=\"hpr-metric-label\"\u003eEnding value incl. dividends\u003c\/p\u003e\n            \u003cp class=\"hpr-metric-value hpr-output-ending-value\"\u003e$127.50\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"hpr-live\" aria-live=\"polite\" aria-atomic=\"true\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"hpr-chart\"\u003e\n    \u003cdiv class=\"hpr-section-head\"\u003e\n      \u003ch3 class=\"hpr-section-title\"\u003eReturn contribution chart\u003c\/h3\u003e\n      \u003cp class=\"hpr-section-intro\"\u003eCompare the percentage-point contribution from price movement and dividends with the combined holding period return.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"hpr-chart-card\" data-hpr-chart-card\u003e\n      \u003cdiv class=\"hpr-chart-cluster\"\u003e\n        \u003cdiv class=\"hpr-chart-visual\"\u003e\n          \u003csvg class=\"hpr-chart-svg\" role=\"img\" aria-labelledby=\"hpr-chart-title hpr-chart-desc\" viewbox=\"0 0 640 360\" preserveaspectratio=\"xMidYMid meet\"\u003e\n            \u003ctitle id=\"hpr-chart-title\"\u003eReturn contribution bar chart\u003c\/title\u003e\n            \u003cdesc id=\"hpr-chart-desc\"\u003eCapital gains yield is 20.00 percent, dividend yield is 7.50 percent, and holding period return is 27.50 percent.\u003c\/desc\u003e\n          \u003c\/svg\u003e\n          \u003cdiv class=\"hpr-chart-empty\" hidden\u003eEnter valid values above to see the return contribution chart.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"hpr-chart-legend\" aria-label=\"Chart legend\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"hpr-chart-summary\" aria-label=\"Chart data summary\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"hpr-chart-caption\"\u003ePrice movement contributes 20.00 percentage points and dividends contribute 7.50 percentage points to the 27.50% total return.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"hpr-table\"\u003e\n    \u003cdiv class=\"hpr-section-head\"\u003e\n      \u003ch3 class=\"hpr-section-title\"\u003eCalculation detail\u003c\/h3\u003e\n      \u003cp class=\"hpr-section-intro\"\u003eEvery figure below is generated from the same live calculation model used by the result cards, chart, and Excel workbook.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"hpr-table-card\" data-hpr-table-card\u003e\n      \u003cdiv class=\"hpr-table-overflow\"\u003e\n        \u003ctable class=\"hpr-data-table\"\u003e\n          \u003cthead\u003e\n            \u003ctr\u003e\n              \u003cth scope=\"col\"\u003eMetric\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eCalculation\u003c\/th\u003e\n              \u003cth scope=\"col\" class=\"hpr-number\"\u003eAmount\u003c\/th\u003e\n              \u003cth scope=\"col\" class=\"hpr-number\"\u003eReturn\u003c\/th\u003e\n            \u003c\/tr\u003e\n          \u003c\/thead\u003e\n          \u003ctbody class=\"hpr-table-body\"\u003e\u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"hpr-table-note\"\u003eThe holding period return is not annualized. It measures the full return over the exact period represented by the entered prices and dividends.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"hpr-education\"\u003e\n    \u003cdiv class=\"hpr-education-inner\"\u003e\n      \u003ch2\u003eWhat does a holding period return measure?\u003c\/h2\u003e\n      \u003cp\u003eHolding period return, often abbreviated HPR, measures the total gain or loss earned while an investment was held. It combines two economically distinct sources of return: the change in market price and cash income such as dividends. This makes HPR more complete than looking only at whether a stock price rose or fell. The calculator expresses the combined result as a percentage of the original bought price and also shows the dollar contribution per share.\u003c\/p\u003e\n      \u003cp\u003eThe result is a total-period measure rather than an annual rate. A 20% HPR earned over six months and a 20% HPR earned over five years are not equivalent when comparing performance over time. For periods of different lengths, an annualized return or internal rate of return may be more appropriate. The U.S. Securities and Exchange Commission’s \u003ca href=\"https:\/\/www.investor.gov\/introduction-investing\/investing-basics\/glossary\/annual-return\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInvestor.gov explanation of annual return\u003c\/a\u003e provides useful context for that distinction.\u003c\/p\u003e\n\n      \u003ch2\u003eHow should each input be entered?\u003c\/h2\u003e\n      \u003ch3\u003eBought price\u003c\/h3\u003e\n      \u003cp\u003eEnter the amount originally paid for one share. This field is required and must be greater than zero because every yield is divided by the initial cost. Use the actual acquisition price before considering the ending value. A higher bought price, with all other inputs unchanged, lowers both the capital gains yield and dividend yield because the same gain is measured against a larger initial investment. Common mistakes include entering the total cost of multiple shares while using per-share values in the other fields, or including brokerage fees in only one side of the comparison.\u003c\/p\u003e\n\n      \u003ch3\u003eCurrent or sale price\u003c\/h3\u003e\n      \u003cp\u003eEnter the current market price if the position is still held, or the net sale price if it has been sold. This field is required and may be zero in an extreme loss scenario, but it cannot be negative. A value above the bought price creates a capital gain; a lower value creates a capital loss. The calculator keeps negative returns visible rather than forcing them to zero. For a broader overview of stock ownership and price risk, see the \u003ca href=\"https:\/\/www.finra.org\/investors\/investing\/investment-products\/stocks\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eFINRA guide to stocks\u003c\/a\u003e.\u003c\/p\u003e\n\n      \u003ch3\u003eDividend income per share\u003c\/h3\u003e\n      \u003cp\u003eEnter the total cash dividends received per share during the holding period. This field is required for a complete calculation but may be zero for a non-dividend-paying investment. Add all ordinary and special cash dividends that belong to the period. Do not enter an annual dividend rate unless the holding period is exactly one year and that amount was actually received. Increasing dividend income raises dividend yield and HPR dollar for dollar. Investor.gov defines a \u003ca href=\"https:\/\/www.investor.gov\/introduction-investing\/investing-basics\/glossary\/dividend\" target=\"_blank\" rel=\"noopener noreferrer\"\u003edividend\u003c\/a\u003e as a portion of company profit paid to shareholders.\u003c\/p\u003e\n\n      \u003ch2\u003eHow is the holding period return calculated?\u003c\/h2\u003e\n      \u003cp\u003eThe model first calculates the capital gain or loss by subtracting the bought price from the current or sale price. It then adds dividend income to obtain total gain per share. The combined gain is divided by the bought price to produce HPR.\u003c\/p\u003e\n      \u003cdiv class=\"hpr-formula\"\u003eHolding period return = (Current price − Bought price + Dividend income) ÷ Bought price\u003c\/div\u003e\n      \u003cp\u003eCapital gains yield is calculated as the price change divided by the bought price. Dividend yield on cost is dividend income divided by the bought price. Because both components use the same cost base, their sum equals the holding period return exactly, subject only to display rounding.\u003c\/p\u003e\n\n      \u003ch2\u003eHow should the results be interpreted?\u003c\/h2\u003e\n      \u003ch3\u003eHolding period return\u003c\/h3\u003e\n      \u003cp\u003eThe primary result is the combined percentage return. A positive HPR means ending value plus dividends exceeded the original cost. Zero means the dividend income exactly offset any price loss, or there was no gain at all. A negative HPR means the total economic value fell. A very high positive return can result from a large price increase, a high dividend payment, or both. A result below −100% is prevented by the practical input rule that the current price and dividend cannot be negative; with a zero ending price and no dividend, the minimum HPR is −100%.\u003c\/p\u003e\n\n      \u003ch3\u003eCapital gains yield and dividend yield on cost\u003c\/h3\u003e\n      \u003cp\u003eCapital gains yield isolates the price component. Dividend yield on cost shows cash dividends as a percentage of the original bought price, not the current market price. This distinction matters because a stock whose price has risen substantially can have a low current dividend yield but a much higher yield on the investor’s original cost. The two yields are displayed separately so the source of performance remains visible.\u003c\/p\u003e\n\n      \u003ch3\u003ePrice gain, total gain, and ending value\u003c\/h3\u003e\n      \u003cp\u003ePrice gain or loss is the dollar difference between current and bought price. Total gain adds dividends to that amount. Ending value including dividends equals current price plus cash dividends received; it is the value that would be compared with the original cost when measuring total return. These per-share figures can be scaled to a portfolio by multiplying each amount by the number of shares, provided the same share count applies throughout the period.\u003c\/p\u003e\n\n      \u003ch2\u003eHow do the chart and table help?\u003c\/h2\u003e\n      \u003cp\u003eThe chart uses three bars: capital gains yield, dividend yield, and total HPR. The zero line makes losses visible below the axis while positive contributions appear above it. The legend repeats exact percentages, and the accessible chart summary exposes the same values to screen readers. The detail table cross-checks each formula, dollar amount, and percentage. When inputs are cleared or invalid, the chart is replaced with a compact message rather than displaying meaningless geometry.\u003c\/p\u003e\n\n      \u003ch2\u003eWhat are the main limitations and common mistakes?\u003c\/h2\u003e\n      \u003cp\u003eHPR does not adjust for time, inflation, taxes, transaction costs, reinvested dividends, or multiple cash flows made on different dates. It is best suited to a simple beginning value, ending value, and accumulated income. For a more realistic after-cost result, subtract commissions, fees, and taxes from proceeds or add them consistently to the cost basis. Do not mix total-position values with per-share values, and do not compare holding periods of very different lengths without annualizing them.\u003c\/p\u003e\n      \u003cp\u003eHPR also does not measure risk. Two investments can produce the same return while experiencing very different volatility, drawdowns, liquidity, or credit risk. Use the calculation as one performance measure within a wider analysis rather than as a standalone investment decision. The SEC’s \u003ca href=\"https:\/\/www.investor.gov\/introduction-investing\/investing-basics\/how-stock-markets-work\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eoverview of how stock markets work\u003c\/a\u003e offers additional background on market pricing and investor risk.\u003c\/p\u003e\n\n      \u003cdiv class=\"hpr-disclaimer\"\u003eThis calculator is for general educational use and does not provide personalized investment, tax, legal, or financial advice.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909484683507,"sku":"holding-period-return","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/holding-period-return.webp?v=1783935449","url":"https:\/\/financialmodelslab.com\/products\/holding-period-return","provider":"Financial Models Lab","version":"1.0","type":"link"}