{"id":33133,"date":"2026-05-19T13:05:25","date_gmt":"2026-05-19T11:05:25","guid":{"rendered":"https:\/\/www.finanzen.net\/ratgeber\/?p=33133"},"modified":"2026-05-19T13:06:02","modified_gmt":"2026-05-19T11:06:02","slug":"renditerechner","status":"publish","type":"post","link":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/","title":{"rendered":"Renditerechner"},"content":{"rendered":"\n<div class=\"container container--narrow\">\n    <div class=\"header\">\n                <div class=\"header__text\">\n                            <div class=\"headline headline--preline headline--h4 header__preline\">\n                                     <\/div>\n                                        <h1 class=\"headline headline--h1 header__headline headline--has-preline\">\n                    Renditerechner: Berechne die tats\u00e4chliche Rendite deiner Geldanlage                <\/h1>\n                        <div class=\"header__excerpt flow-content\">\n                                    <p>Wie gut hat sich dein Investment wirklich entwickelt? Unser Renditerechner ber\u00fccksichtigt nicht nur Kauf- und Verkaufskurs, sondern auch den Zeitpunkt und die H\u00f6he aller Ein- und Auszahlungen. Trag deine Transaktionen ein und du bekommst die tats\u00e4chliche j\u00e4hrliche Rendite deiner Anlage.<\/p>\n                            <\/div>\n            <div class=\"header__footer\">\n                <span class=\"header__meta\">\n                    <img loading=\"lazy\" decoding=\"async\" class=\"header__author-image\"\n                         src=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg\"\n                         width=\"58\"\n                         height=\"58\"\n                         alt=\"\">\n                    <span class=\"header__meta-info\">\n                        <span class=\"header__author-name\">\n                            von <a href=\"https:\/\/www.finanzen.net\/ratgeber\/author\/roland-kruse\/\" title=\"Beitr\u00e4ge von Roland Kuse\" rel=\"author\" class=\"link link--no-underline\">Roland Kuse<\/a>                        <\/span>\n                        <span class=\"header__date\">\n                            <span class=\"hide-on-smartphone\">Aktualisiert am<\/span>\n                            <time datetime=\"2026-05-19 13:06\"\n                                  title=\"Aktualisiert am 19.05.2026\">\n                                19.05.26                            <\/time>\n                        <\/span>\n                    <\/span>\n                <\/span>\n\n                                    <div class=\"header__buttons\">\n                                                    <a class=\"fnet-button fnet-button--small\"\n                                                                  style=\"--button-background:#50ce6b;--button-hover-background:#50ce6b;\"\n                                                              href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/zinseszinsrechner\/\"\n                               target=\"\">\n                                zum Zinseszinsrechner                            <\/a>\n                                            <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n\n<div class=\"container container--narrow\" >\n    <div class=\"text\">\n        <div class=\"text__inner flow-content\">\n                            <style>\r\n.wp-portfolio-rendite-calculator-container { max-width: 900px; margin: 20px auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; background-color: #ffffff; border-radius: 16px; border: 3px solid #e2e8f0; box-shadow: 0 4px 12px rgba(0,0,0,0.1); color: #1a202c; }\r\n.wp-portfolio-rendite-calculator-container .section-title { font-size: 14px; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: 0.5px; margin: 25px 0 15px 0; padding-bottom: 8px; border-bottom: 2px solid #e2e8f0; }\r\n.wp-portfolio-rendite-calculator-container .section-title:first-of-type { margin-top: 0; }\r\n.wp-portfolio-rendite-calculator-container .calculator-form .input-group { display: flex; align-items: center; margin-bottom: 15px; }\r\n.wp-portfolio-rendite-calculator-container .calculator-form .input-group label { width: 240px; flex-shrink: 0; margin-right: 10px; font-weight: 600; color: #4a5568; display: flex; align-items: center; gap: 6px; }\r\n.wp-portfolio-rendite-calculator-container .input-wrapper { position: relative; flex-grow: 1; }\r\n.wp-portfolio-rendite-calculator-container .calculator-form .input-group input,\r\n.wp-portfolio-rendite-calculator-container .calculator-form .input-group select { width: 100%; padding: 10px; padding-right: 60px; border: 1px solid #e2e8f0; border-radius: 8px; box-sizing: border-box; font-size: 16px; }\r\n.wp-portfolio-rendite-calculator-container .input-unit { position: absolute; top: 50%; transform: translateY(-50%); right: 15px; color: #718096; font-weight: 500; pointer-events: none; }\r\n.wp-portfolio-rendite-calculator-container .calculator-form .input-group select { padding-right: 40px; -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: url('data:image\/svg+xml;charset=UTF-8,%3Csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"%23718096\"%3E%3Cpath fill-rule=\"evenodd\" d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\" clip-rule=\"evenodd\" \/%3E%3C\/svg%3E'); background-repeat: no-repeat; background-position: right 12px center; background-size: 1.2em; cursor: pointer; }\r\n.wp-portfolio-rendite-calculator-container .tooltip-trigger { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; background-color: #e2e8f0; color: #64748b; border-radius: 50%; font-size: 12px; font-weight: 700; cursor: help; position: relative; }\r\n.wp-portfolio-rendite-calculator-container .tooltip-trigger:hover::after { content: attr(data-tooltip); position: absolute; left: 50%; transform: translateX(-50%); bottom: 100%; margin-bottom: 8px; padding: 8px 12px; background-color: #1e293b; color: white; font-size: 12px; font-weight: 400; white-space: nowrap; border-radius: 6px; z-index: 100; max-width: 280px; white-space: normal; }\r\n.wp-portfolio-rendite-calculator-container .date-input-group { display: flex; gap: 8px; }\r\n.wp-portfolio-rendite-calculator-container .date-input-group select { flex: 1; padding: 10px; padding-right: 30px; }\r\n.wp-portfolio-rendite-calculator-container .button-container { display: flex; gap: 10px; margin-top: 25px; }\r\n.wp-portfolio-rendite-calculator-container .calculate-button,\r\n.wp-portfolio-rendite-calculator-container .reset-button { border-radius: 8px; padding: 12px 20px; cursor: pointer; width: 100%; font-size: 16px; font-weight: 700; transition: all 0.2s; border: none; }\r\n.wp-portfolio-rendite-calculator-container .calculate-button { background-color: #4A69FF; color: white; }\r\n.wp-portfolio-rendite-calculator-container .calculate-button:hover { background-color: #3a50d2; }\r\n.wp-portfolio-rendite-calculator-container .reset-button { background-color: #fee2e2; color: #dc2626; border: 1px solid #fecaca; }\r\n.wp-portfolio-rendite-calculator-container .reset-button:hover { background-color: #fecaca; }\r\n.wp-portfolio-rendite-calculator-container .add-transaction-btn { background-color: #f0fdf4; color: #16a34a; border: 1px solid #bbf7d0; border-radius: 8px; padding: 10px 16px; cursor: pointer; font-size: 14px; font-weight: 600; margin-top: 10px; display: flex; align-items: center; gap: 8px; }\r\n.wp-portfolio-rendite-calculator-container .add-transaction-btn:hover { background-color: #dcfce7; }\r\n.wp-portfolio-rendite-calculator-container .remove-transaction-btn { background-color: #fee2e2; color: #dc2626; border: 1px solid #fecaca; border-radius: 6px; padding: 6px 10px; cursor: pointer; font-size: 12px; font-weight: 600; margin-left: 10px; }\r\n.wp-portfolio-rendite-calculator-container .remove-transaction-btn:hover { background-color: #fecaca; }\r\n.wp-portfolio-rendite-calculator-container .transaction-block { background-color: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; padding: 15px; margin-bottom: 15px; position: relative; }\r\n.wp-portfolio-rendite-calculator-container .transaction-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; }\r\n.wp-portfolio-rendite-calculator-container .transaction-title { font-weight: 700; color: #4a5568; font-size: 14px; }\r\n.wp-portfolio-rendite-calculator-container .results-wrapper { margin-top: 30px; border-top: 2px solid #e2e8f0; padding-top: 25px; }\r\n.wp-portfolio-rendite-calculator-container .result-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }\r\n.wp-portfolio-rendite-calculator-container .result-header-title { font-size: 20px; font-weight: 700; margin: 0; }\r\n.wp-portfolio-rendite-calculator-container .permalink-button { background: none; border: none; color: #4A69FF; cursor: pointer; font-size: 14px; font-weight: 700; }\r\n.wp-portfolio-rendite-calculator-container .result-main { background: linear-gradient(135deg, #4A69FF 0%, #6B8CFF 100%); color: white; padding: 30px; border-radius: 12px; text-align: center; margin-bottom: 24px; }\r\n.wp-portfolio-rendite-calculator-container .result-main .result-label { font-size: 16px; opacity: 0.9; margin-bottom: 8px; }\r\n.wp-portfolio-rendite-calculator-container .result-main .result-number { font-size: 42px; font-weight: 800; }\r\n.wp-portfolio-rendite-calculator-container .result-main .result-sub { font-size: 14px; opacity: 0.85; margin-top: 8px; }\r\n.wp-portfolio-rendite-calculator-container .result-details { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-bottom: 24px; }\r\n.wp-portfolio-rendite-calculator-container .result-card { background-color: #f8fafc; padding: 16px; border-radius: 10px; border: 1px solid #e2e8f0; }\r\n.wp-portfolio-rendite-calculator-container .result-card .card-label { font-size: 13px; color: #64748b; margin-bottom: 4px; display: flex; align-items: center; gap: 6px; }\r\n.wp-portfolio-rendite-calculator-container .result-card .card-value { font-size: 20px; font-weight: 700; color: #1e293b; }\r\n.wp-portfolio-rendite-calculator-container .result-card .card-value.positive { color: #16a34a; }\r\n.wp-portfolio-rendite-calculator-container .result-card .card-value.negative { color: #dc2626; }\r\n.wp-portfolio-rendite-calculator-container .result-summary { background-color: #f0fdf4; border: 1px solid #bbf7d0; padding: 16px; border-radius: 8px; margin-bottom: 24px; line-height: 1.7; color: #15803d; }\r\n.wp-portfolio-rendite-calculator-container .result-summary strong { color: #166534; }\r\n.wp-portfolio-rendite-calculator-container .result-summary.negative { background-color: #fef2f2; border-color: #fecaca; color: #dc2626; }\r\n.wp-portfolio-rendite-calculator-container .result-summary.negative strong { color: #b91c1c; }\r\n.wp-portfolio-rendite-calculator-container .chart-section { margin-top: 30px; }\r\n.wp-portfolio-rendite-calculator-container .chart-section h4 { font-size: 18px; font-weight: 700; margin-bottom: 16px; }\r\n.wp-portfolio-rendite-calculator-container .chart-container { position: relative; height: 300px; }\r\n.wp-portfolio-rendite-calculator-container .legend { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 16px; }\r\n.wp-portfolio-rendite-calculator-container .legend-item { display: flex; align-items: center; gap: 8px; font-size: 14px; color: #4a5568; }\r\n.wp-portfolio-rendite-calculator-container .legend-color { width: 16px; height: 16px; border-radius: 4px; }\r\n.wp-portfolio-rendite-calculator-container .show-table-btn { background: none; border: 1px solid #e2e8f0; color: #475569; padding: 10px 16px; border-radius: 8px; cursor: pointer; font-size: 14px; font-weight: 600; }\r\n.wp-portfolio-rendite-calculator-container .show-table-btn:hover { background-color: #f8fafc; }\r\n.wp-portfolio-rendite-calculator-container .table-wrapper { max-height: 400px; overflow-y: auto; border: 1px solid #e2e8f0; border-radius: 8px; margin-top: 16px; }\r\n.wp-portfolio-rendite-calculator-container .data-table { width: 100%; border-collapse: collapse; font-size: 14px; }\r\n.wp-portfolio-rendite-calculator-container .data-table th,\r\n.wp-portfolio-rendite-calculator-container .data-table td { padding: 10px 12px; text-align: right; border-bottom: 1px solid #e2e8f0; }\r\n.wp-portfolio-rendite-calculator-container .data-table th { background-color: #f8fafc; font-weight: 600; color: #475569; position: sticky; top: 0; }\r\n.wp-portfolio-rendite-calculator-container .data-table th:first-child,\r\n.wp-portfolio-rendite-calculator-container .data-table td:first-child { text-align: left; }\r\n.wp-portfolio-rendite-calculator-container .data-table tbody tr:hover { background-color: #f8fafc; }\r\n.wp-portfolio-rendite-calculator-container .data-table .buy-row { background-color: #f0fdf4; }\r\n.wp-portfolio-rendite-calculator-container .data-table .sell-row { background-color: #fef2f2; }\r\n.wp-portfolio-rendite-calculator-container .export-button { border-radius: 8px; padding: 12px 20px; cursor: pointer; width: 100%; font-size: 16px; font-weight: 700; background-color: #f0fdf4; color: #16a34a; border: 1px solid #bbf7d0; margin-top: 16px; }\r\n.wp-portfolio-rendite-calculator-container .export-button:hover { background-color: #dcfce7; }\r\n.wp-portfolio-rendite-calculator-container .info-box { background-color: #f0f9ff; border: 1px solid #bae6fd; padding: 12px 16px; border-radius: 8px; margin-top: 16px; font-size: 13px; color: #0369a1; }\r\n.wp-portfolio-rendite-calculator-container .error-box { background-color: #fef2f2; border: 1px solid #fecaca; padding: 12px 16px; border-radius: 8px; margin-top: 16px; font-size: 14px; color: #dc2626; font-weight: 600; }\r\n.wp-portfolio-rendite-calculator-container .cta-button-container { margin-top: 10px; }\r\n\r\n@media (max-width: 768px) {\r\n    .wp-portfolio-rendite-calculator-container .calculator-form .input-group { flex-direction: column; align-items: flex-start; }\r\n    .wp-portfolio-rendite-calculator-container .calculator-form .input-group label { width: 100%; margin-bottom: 8px; }\r\n    .wp-portfolio-rendite-calculator-container .date-input-group { flex-wrap: wrap; }\r\n    .wp-portfolio-rendite-calculator-container .date-input-group select { min-width: calc(33% - 6px); }\r\n    .wp-portfolio-rendite-calculator-container .result-main .result-number { font-size: 32px; }\r\n    .wp-portfolio-rendite-calculator-container .result-details { grid-template-columns: 1fr; }\r\n    .wp-portfolio-rendite-calculator-container .button-container { flex-direction: column; }\r\n}\r\n<\/style>\r\n\r\n<div class=\"wp-portfolio-rendite-calculator-container\">\r\n    <form class=\"calculator-form\" onsubmit=\"return false;\">\r\n        \r\n        <div class=\"section-title\">1. Transaktion<\/div>\r\n        \r\n        <div class=\"transaction-block\" data-index=\"0\">\r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-summe-0\">\r\n                    Summe\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Der Betrag der Transaktion in Euro.\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper\">\r\n                    <input type=\"number\" id=\"portfolio-summe-0\" value=\"10000\" step=\"100\" min=\"0\">\r\n                    <span class=\"input-unit\">EUR<\/span>\r\n                <\/div>\r\n            <\/div>\r\n            \r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-tag-0\">\r\n                    Datum\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Das Datum der Transaktion.\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper date-input-group\">\r\n                    <select id=\"portfolio-tag-0\"><\/select>\r\n                    <select id=\"portfolio-monat-0\"><\/select>\r\n                    <select id=\"portfolio-jahr-0\"><\/select>\r\n                <\/div>\r\n            <\/div>\r\n            \r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-typ-0\">\r\n                    Kauf \/ Verkauf\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Handelt es sich um einen Kauf (Einzahlung) oder Verkauf (Auszahlung)?\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper\">\r\n                    <select id=\"portfolio-typ-0\">\r\n                        <option value=\"kauf\" selected>Kauf<\/option>\r\n                        <option value=\"verkauf\">Verkauf<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"transactions-container\"><\/div>\r\n        \r\n        <button type=\"button\" class=\"add-transaction-btn\">+ Weitere Transaktion hinzuf\u00fcgen<\/button>\r\n        \r\n        <div class=\"section-title\">Letzte Transaktion<\/div>\r\n        \r\n        <div class=\"transaction-block final-transaction\">\r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-summe-final\">\r\n                    Summe\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Der aktuelle Wert deines Portfolios oder der Verkaufsbetrag.\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper\">\r\n                    <input type=\"number\" id=\"portfolio-summe-final\" value=\"19000\" step=\"100\" min=\"0\">\r\n                    <span class=\"input-unit\">EUR<\/span>\r\n                <\/div>\r\n            <\/div>\r\n            \r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-tag-final\">\r\n                    Datum\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Das Datum der letzten Transaktion oder heute.\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper date-input-group\">\r\n                    <select id=\"portfolio-tag-final\"><\/select>\r\n                    <select id=\"portfolio-monat-final\"><\/select>\r\n                    <select id=\"portfolio-jahr-final\"><\/select>\r\n                <\/div>\r\n            <\/div>\r\n            \r\n            <div class=\"input-group\">\r\n                <label for=\"portfolio-typ-final\">\r\n                    Kauf \/ Verkauf\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Die letzte Transaktion ist typischerweise ein Verkauf oder der aktuelle Portfoliowert.\">?<\/span>\r\n                <\/label>\r\n                <div class=\"input-wrapper\">\r\n                    <select id=\"portfolio-typ-final\">\r\n                        <option value=\"kauf\">Kauf<\/option>\r\n                        <option value=\"verkauf\" selected>Verkauf<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"button-container\">\r\n            <button type=\"button\" class=\"reset-button\">Zur\u00fccksetzen<\/button>\r\n            <button type=\"submit\" class=\"calculate-button\">Berechnen<\/button>\r\n        <\/div>\r\n        \r\n        <div class=\"cta-button-container\">\r\n            <a class=\"cta-button\" style=\"background-color: #fa2879; color: yellow; display: block; border-radius: 8px; padding: 12px 24px; font-size: 16px; font-weight: 700; text-align: center; text-decoration: none;\" href=\"https:\/\/g.finanzen.net\/zero-fnet_331g-ratgeber-renditerechner\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: white;\">\ud83d\udc4b 50 \u20ac Gratis-Pr\u00e4mie von finanzen.net ZERO gef\u00e4llig? Hier informieren!<\/a>\r\n        <\/div>\r\n    <\/form>\r\n    \r\n    <div class=\"results-wrapper\" style=\"display: none;\">\r\n        <div class=\"result-header\">\r\n            <h3 class=\"result-header-title\">Berechnung<\/h3>\r\n            <button type=\"button\" class=\"permalink-button\">Link kopieren<\/button>\r\n        <\/div>\r\n        \r\n        <div class=\"result-main\">\r\n            <div class=\"result-label main-label\">Interner Zinsfu\u00df (IRR)<\/div>\r\n            <div class=\"result-number main-result\"><\/div>\r\n            <div class=\"result-sub main-sub\"><\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"result-details\">\r\n            <div class=\"result-card\">\r\n                <div class=\"card-label\">\r\n                    Gewinn \/ Verlust\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Die Differenz zwischen allen Auszahlungen (Verk\u00e4ufe) und Einzahlungen (K\u00e4ufe).\">?<\/span>\r\n                <\/div>\r\n                <div class=\"card-value gewinn-display\"><\/div>\r\n            <\/div>\r\n            <div class=\"result-card\">\r\n                <div class=\"card-label\">\r\n                    Gesamtrendite\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Der prozentuale Gewinn bezogen auf das insgesamt investierte Kapital (ohne Zeitgewichtung).\">?<\/span>\r\n                <\/div>\r\n                <div class=\"card-value performance-display\"><\/div>\r\n            <\/div>\r\n            <div class=\"result-card\">\r\n                <div class=\"card-label\">\r\n                    Investiert gesamt\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Die Summe aller Kauftransaktionen.\">?<\/span>\r\n                <\/div>\r\n                <div class=\"card-value invested-display\"><\/div>\r\n            <\/div>\r\n            <div class=\"result-card\">\r\n                <div class=\"card-label\">\r\n                    Interner Zinsfu\u00df\r\n                    <span class=\"tooltip-trigger\" data-tooltip=\"Der IRR ber\u00fccksichtigt Zeitpunkt und H\u00f6he aller Zahlungsstr\u00f6me und gibt die j\u00e4hrliche Rendite an.\">?<\/span>\r\n                <\/div>\r\n                <div class=\"card-value irr-display\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"result-summary\"><\/div>\r\n        \r\n        <div class=\"chart-section\">\r\n            <h4>Portfolioverlauf<\/h4>\r\n            <div class=\"legend legend-container\"><\/div>\r\n            <div class=\"chart-container\"><canvas class=\"portfolioChart\"><\/canvas><\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"transactions-section\">\r\n            <button type=\"button\" class=\"show-table-btn\">Transaktionen anzeigen<\/button>\r\n            <div class=\"table-wrapper\" style=\"display: none;\">\r\n                <table class=\"data-table\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th>Datum<\/th>\r\n                            <th>Typ<\/th>\r\n                            <th>Betrag<\/th>\r\n                            <th>Netto investiert<\/th>\r\n                        <\/tr>\r\n                    <\/thead>\r\n                    <tbody class=\"table-body\"><\/tbody>\r\n                <\/table>\r\n            <\/div>\r\n            <button type=\"button\" class=\"export-button\" style=\"display: none;\">Als CSV exportieren<\/button>\r\n        <\/div>\r\n        \r\n        <div class=\"info-box\">\r\n            <strong>Hinweis:<\/strong> Der interne Zinsfu\u00df (IRR) ist die j\u00e4hrliche Rendite, die alle Zahlungsstr\u00f6me auf einen Kapitalwert von Null diskontiert. Diese Berechnung dient nur zur Orientierung.\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/themes\/fnet-ratgeber\/js\/libs\/chart.js\"><\/script>\r\n<script>\r\nwindow.addEventListener('load', function() {\r\n    setTimeout(function() {\r\n        if (typeof Chart === 'undefined') {\r\n            console.error('Chart.js konnte nicht geladen werden.');\r\n            return;\r\n        }\r\n        \r\n        var container = document.querySelector('.wp-portfolio-rendite-calculator-container');\r\n        if (!container || container.dataset.initialized === 'true') return;\r\n        container.dataset.initialized = 'true';\r\n        \r\n        var chartInstance = null;\r\n        var lastResult = null;\r\n        var transactionCount = 1;\r\n        \r\n        var months = ['Jan.', 'Feb.', 'M\u00e4rz', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'];\r\n        \r\n        \/* FIX #7: Tage pro Monat korrekt ermitteln *\/\r\n        var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n        \r\n        function isLeapYear(year) {\r\n            return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\r\n        }\r\n        \r\n        function getMaxDays(month, year) {\r\n            if (month === 1 && isLeapYear(year)) return 29;\r\n            return daysInMonth[month];\r\n        }\r\n        \r\n        var elements = {\r\n            transactionsContainer: container.querySelector('.transactions-container'),\r\n            addTransactionBtn: container.querySelector('.add-transaction-btn'),\r\n            resultsWrapper: container.querySelector('.results-wrapper'),\r\n            tableWrapper: container.querySelector('.table-wrapper'),\r\n            showTableBtn: container.querySelector('.show-table-btn'),\r\n            exportButton: container.querySelector('.export-button'),\r\n            permalinkButton: container.querySelector('.permalink-button'),\r\n            calculateBtn: container.querySelector('.calculate-button'),\r\n            resetBtn: container.querySelector('.reset-button')\r\n        };\r\n        \r\n        function formatCurrency(num) {\r\n            return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(num);\r\n        }\r\n        \r\n        function formatNumber(num, decimals) {\r\n            return new Intl.NumberFormat('de-DE', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }).format(num);\r\n        }\r\n        \r\n        function formatPercent(num) {\r\n            return formatNumber(num, 2) + ' %';\r\n        }\r\n        \r\n        function formatDateStr(date) {\r\n            var tag = date.getDate();\r\n            var monat = date.getMonth() + 1;\r\n            var jahr = date.getFullYear();\r\n            return (tag < 10 ? '0' : '') + tag + '.' + (monat < 10 ? '0' : '') + monat + '.' + jahr;\r\n        }\r\n        \r\n        \/* FIX #7: Tag-Dropdown aktualisieren wenn Monat\/Jahr sich \u00e4ndert *\/\r\n        function updateDaySelect(tagId, monatId, jahrId) {\r\n            var tagSelect = container.querySelector('#' + tagId);\r\n            var monatSelect = container.querySelector('#' + monatId);\r\n            var jahrSelect = container.querySelector('#' + jahrId);\r\n            if (!tagSelect || !monatSelect || !jahrSelect) return;\r\n            \r\n            var currentDay = parseInt(tagSelect.value);\r\n            var month = parseInt(monatSelect.value);\r\n            var year = parseInt(jahrSelect.value);\r\n            var maxDays = getMaxDays(month, year);\r\n            \r\n            tagSelect.innerHTML = '';\r\n            for (var i = 1; i <= maxDays; i++) {\r\n                var option = document.createElement('option');\r\n                option.value = i;\r\n                option.textContent = i;\r\n                tagSelect.appendChild(option);\r\n            }\r\n            \r\n            \/* Aktuellen Tag beibehalten oder auf Maximum begrenzen *\/\r\n            tagSelect.value = Math.min(currentDay, maxDays);\r\n        }\r\n        \r\n        function populateDateSelects(tagId, monatId, jahrId, defaultDate) {\r\n            var tagSelect = container.querySelector('#' + tagId);\r\n            var monatSelect = container.querySelector('#' + monatId);\r\n            var jahrSelect = container.querySelector('#' + jahrId);\r\n            \r\n            if (!tagSelect || !monatSelect || !jahrSelect) return;\r\n            \r\n            var currentYear = new Date().getFullYear();\r\n            \r\n            \/* Jahr zuerst bef\u00fcllen *\/\r\n            jahrSelect.innerHTML = '';\r\n            for (var i = currentYear - 50; i <= currentYear + 10; i++) {\r\n                var option = document.createElement('option');\r\n                option.value = i;\r\n                option.textContent = i;\r\n                if (i === defaultDate.getFullYear()) option.selected = true;\r\n                jahrSelect.appendChild(option);\r\n            }\r\n            \r\n            \/* Monat bef\u00fcllen *\/\r\n            monatSelect.innerHTML = '';\r\n            for (var i = 0; i < 12; i++) {\r\n                var option = document.createElement('option');\r\n                option.value = i;\r\n                option.textContent = months[i];\r\n                if (i === defaultDate.getMonth()) option.selected = true;\r\n                monatSelect.appendChild(option);\r\n            }\r\n            \r\n            \/* FIX #7: Tage korrekt f\u00fcr gew\u00e4hlten Monat\/Jahr bef\u00fcllen *\/\r\n            var maxDays = getMaxDays(defaultDate.getMonth(), defaultDate.getFullYear());\r\n            tagSelect.innerHTML = '';\r\n            for (var i = 1; i <= maxDays; i++) {\r\n                var option = document.createElement('option');\r\n                option.value = i;\r\n                option.textContent = i;\r\n                if (i === defaultDate.getDate()) option.selected = true;\r\n                tagSelect.appendChild(option);\r\n            }\r\n            \r\n            \/* Event-Listener: Tage aktualisieren bei Monat-\/Jahrwechsel *\/\r\n            monatSelect.addEventListener('change', function() {\r\n                updateDaySelect(tagId, monatId, jahrId);\r\n            });\r\n            jahrSelect.addEventListener('change', function() {\r\n                updateDaySelect(tagId, monatId, jahrId);\r\n            });\r\n        }\r\n        \r\n        function initDateSelects() {\r\n            var startDate = new Date(2017, 2, 2);\r\n            populateDateSelects('portfolio-tag-0', 'portfolio-monat-0', 'portfolio-jahr-0', startDate);\r\n            \r\n            var endDate = new Date(2026, 0, 1);\r\n            populateDateSelects('portfolio-tag-final', 'portfolio-monat-final', 'portfolio-jahr-final', endDate);\r\n        }\r\n        \r\n        function addTransaction() {\r\n            var index = transactionCount;\r\n            transactionCount++;\r\n            \r\n            var block = document.createElement('div');\r\n            block.className = 'transaction-block';\r\n            block.dataset.index = index;\r\n            \r\n            block.innerHTML = '<div class=\"transaction-header\">' +\r\n                '<span class=\"transaction-title\">Transaktion ' + (index + 1) + '<\/span>' +\r\n                '<button type=\"button\" class=\"remove-transaction-btn\">Entfernen<\/button>' +\r\n                '<\/div>' +\r\n                '<div class=\"input-group\">' +\r\n                '<label for=\"portfolio-summe-' + index + '\">Summe <span class=\"tooltip-trigger\" data-tooltip=\"Der Betrag der Transaktion in Euro.\">?<\/span><\/label>' +\r\n                '<div class=\"input-wrapper\">' +\r\n                '<input type=\"number\" id=\"portfolio-summe-' + index + '\" value=\"1000\" step=\"100\" min=\"0\">' +\r\n                '<span class=\"input-unit\">EUR<\/span>' +\r\n                '<\/div><\/div>' +\r\n                '<div class=\"input-group\">' +\r\n                '<label for=\"portfolio-tag-' + index + '\">Datum <span class=\"tooltip-trigger\" data-tooltip=\"Das Datum der Transaktion.\">?<\/span><\/label>' +\r\n                '<div class=\"input-wrapper date-input-group\">' +\r\n                '<select id=\"portfolio-tag-' + index + '\"><\/select>' +\r\n                '<select id=\"portfolio-monat-' + index + '\"><\/select>' +\r\n                '<select id=\"portfolio-jahr-' + index + '\"><\/select>' +\r\n                '<\/div><\/div>' +\r\n                '<div class=\"input-group\">' +\r\n                '<label for=\"portfolio-typ-' + index + '\">Kauf \/ Verkauf <span class=\"tooltip-trigger\" data-tooltip=\"Handelt es sich um einen Kauf (Einzahlung) oder Verkauf (Auszahlung)?\">?<\/span><\/label>' +\r\n                '<div class=\"input-wrapper\">' +\r\n                '<select id=\"portfolio-typ-' + index + '\">' +\r\n                '<option value=\"kauf\" selected>Kauf<\/option>' +\r\n                '<option value=\"verkauf\">Verkauf<\/option>' +\r\n                '<\/select><\/div><\/div>';\r\n            \r\n            elements.transactionsContainer.appendChild(block);\r\n            \r\n            var today = new Date();\r\n            populateDateSelects('portfolio-tag-' + index, 'portfolio-monat-' + index, 'portfolio-jahr-' + index, today);\r\n            \r\n            block.querySelector('.remove-transaction-btn').addEventListener('click', function() {\r\n                block.remove();\r\n            });\r\n        }\r\n        \r\n        function getAllTransactions() {\r\n            var transactions = [];\r\n            \r\n            var firstBlock = container.querySelector('.transaction-block[data-index=\"0\"]');\r\n            if (firstBlock) {\r\n                var summe = parseFloat(container.querySelector('#portfolio-summe-0').value) || 0;\r\n                var tag = parseInt(container.querySelector('#portfolio-tag-0').value);\r\n                var monat = parseInt(container.querySelector('#portfolio-monat-0').value);\r\n                var jahr = parseInt(container.querySelector('#portfolio-jahr-0').value);\r\n                var typ = container.querySelector('#portfolio-typ-0').value;\r\n                \r\n                transactions.push({\r\n                    date: new Date(jahr, monat, tag),\r\n                    amount: summe,\r\n                    type: typ\r\n                });\r\n            }\r\n            \r\n            var additionalBlocks = elements.transactionsContainer.querySelectorAll('.transaction-block');\r\n            for (var i = 0; i < additionalBlocks.length; i++) {\r\n                var block = additionalBlocks[i];\r\n                var index = block.dataset.index;\r\n                \r\n                var summe = parseFloat(container.querySelector('#portfolio-summe-' + index).value) || 0;\r\n                var tag = parseInt(container.querySelector('#portfolio-tag-' + index).value);\r\n                var monat = parseInt(container.querySelector('#portfolio-monat-' + index).value);\r\n                var jahr = parseInt(container.querySelector('#portfolio-jahr-' + index).value);\r\n                var typ = container.querySelector('#portfolio-typ-' + index).value;\r\n                \r\n                transactions.push({\r\n                    date: new Date(jahr, monat, tag),\r\n                    amount: summe,\r\n                    type: typ\r\n                });\r\n            }\r\n            \r\n            var summeFinal = parseFloat(container.querySelector('#portfolio-summe-final').value) || 0;\r\n            var tagFinal = parseInt(container.querySelector('#portfolio-tag-final').value);\r\n            var monatFinal = parseInt(container.querySelector('#portfolio-monat-final').value);\r\n            var jahrFinal = parseInt(container.querySelector('#portfolio-jahr-final').value);\r\n            var typFinal = container.querySelector('#portfolio-typ-final').value;\r\n            \r\n            transactions.push({\r\n                date: new Date(jahrFinal, monatFinal, tagFinal),\r\n                amount: summeFinal,\r\n                type: typFinal\r\n            });\r\n            \r\n            transactions.sort(function(a, b) {\r\n                return a.date - b.date;\r\n            });\r\n            \r\n            return transactions;\r\n        }\r\n        \r\n        \/* FIX #5 &#038; #6: Eingabevalidierung *\/\r\n        function validateTransactions(transactions) {\r\n            var errors = [];\r\n            \r\n            if (transactions.length < 2) {\r\n                errors.push('Bitte gib mindestens zwei Transaktionen ein.');\r\n                return errors;\r\n            }\r\n            \r\n            \/* Betr\u00e4ge > 0 pr\u00fcfen *\/\r\n            for (var i = 0; i < transactions.length; i++) {\r\n                if (transactions[i].amount <= 0) {\r\n                    errors.push('Transaktion ' + (i + 1) + ': Betrag muss gr\u00f6\u00dfer als 0 sein.');\r\n                }\r\n            }\r\n            \r\n            \/* Datumsreihenfolge: erste < letzte *\/\r\n            var firstDate = transactions[0].date;\r\n            var lastDate = transactions[transactions.length - 1].date;\r\n            if (lastDate <= firstDate) {\r\n                errors.push('Das Datum der letzten Transaktion muss nach dem der ersten liegen.');\r\n            }\r\n            \r\n            \/* Mindestens ein Kauf und ein Verkauf (sonst kein IRR berechenbar) *\/\r\n            var hasKauf = false;\r\n            var hasVerkauf = false;\r\n            for (var i = 0; i < transactions.length; i++) {\r\n                if (transactions[i].type === 'kauf') hasKauf = true;\r\n                if (transactions[i].type === 'verkauf') hasVerkauf = true;\r\n            }\r\n            if (!hasKauf || !hasVerkauf) {\r\n                errors.push('Es wird mindestens ein Kauf und ein Verkauf ben\u00f6tigt, um eine Rendite zu berechnen.');\r\n            }\r\n            \r\n            return errors;\r\n        }\r\n        \r\n        function showError(message) {\r\n            \/* Vorhandene Fehler entfernen *\/\r\n            var existing = container.querySelector('.error-box');\r\n            if (existing) existing.remove();\r\n            \r\n            var box = document.createElement('div');\r\n            box.className = 'error-box';\r\n            box.textContent = message;\r\n            \r\n            var form = container.querySelector('.calculator-form');\r\n            form.appendChild(box);\r\n            \r\n            \/* Nach 5 Sekunden automatisch entfernen *\/\r\n            setTimeout(function() {\r\n                if (box.parentNode) box.remove();\r\n            }, 5000);\r\n        }\r\n        \r\n        \/* FIX #4: IRR mit Newton-Raphson + Bisection-Fallback *\/\r\n        function calculateIRR(cashflows, dates) {\r\n            var startDate = dates[0];\r\n            \r\n            function yearFraction(date) {\r\n                return (date - startDate) \/ (365.25 * 24 * 60 * 60 * 1000);\r\n            }\r\n            \r\n            function npv(rate) {\r\n                var sum = 0;\r\n                for (var i = 0; i < cashflows.length; i++) {\r\n                    var years = yearFraction(dates[i]);\r\n                    sum += cashflows[i] \/ Math.pow(1 + rate, years);\r\n                }\r\n                return sum;\r\n            }\r\n            \r\n            function npvDerivative(rate) {\r\n                var sum = 0;\r\n                for (var i = 0; i < cashflows.length; i++) {\r\n                    var years = yearFraction(dates[i]);\r\n                    if (years !== 0) {\r\n                        sum -= (years * cashflows[i]) \/ Math.pow(1 + rate, years + 1);\r\n                    }\r\n                }\r\n                return sum;\r\n            }\r\n            \r\n            \/* Phase 1: Newton-Raphson *\/\r\n            var guess = 0.1;\r\n            var maxIterations = 500;\r\n            var tolerance = 1e-7;\r\n            \r\n            for (var iteration = 0; iteration < maxIterations; iteration++) {\r\n                var f = npv(guess);\r\n                \r\n                if (Math.abs(f) < tolerance) {\r\n                    return { success: true, irr: guess * 100 };\r\n                }\r\n                \r\n                var df = npvDerivative(guess);\r\n                \r\n                if (Math.abs(df) < 1e-12) {\r\n                    break; \/* Ableitung zu klein, Fallback *\/\r\n                }\r\n                \r\n                var newGuess = guess - f \/ df;\r\n                \r\n                \/* Begrenzung *\/\r\n                if (newGuess < -0.99) newGuess = -0.99;\r\n                if (newGuess > 10) newGuess = 10;\r\n                \r\n                \/* Konvergenz-Check *\/\r\n                if (Math.abs(newGuess - guess) < 1e-10) {\r\n                    return { success: true, irr: newGuess * 100 };\r\n                }\r\n                \r\n                guess = newGuess;\r\n            }\r\n            \r\n            \/* Phase 2: Bisection-Fallback *\/\r\n            var low = -0.99;\r\n            var high = 10.0;\r\n            var fLow = npv(low);\r\n            var fHigh = npv(high);\r\n            \r\n            \/* Vorzeichenwechsel pr\u00fcfen *\/\r\n            if (fLow * fHigh > 0) {\r\n                return { success: false, irr: NaN };\r\n            }\r\n            \r\n            for (var iteration = 0; iteration < 1000; iteration++) {\r\n                var mid = (low + high) \/ 2;\r\n                var fMid = npv(mid);\r\n                \r\n                if (Math.abs(fMid) < tolerance || (high - low) \/ 2 < 1e-10) {\r\n                    return { success: true, irr: mid * 100 };\r\n                }\r\n                \r\n                if (fMid * fLow < 0) {\r\n                    high = mid;\r\n                    fHigh = fMid;\r\n                } else {\r\n                    low = mid;\r\n                    fLow = fMid;\r\n                }\r\n            }\r\n            \r\n            return { success: false, irr: NaN };\r\n        }\r\n        \r\n        function berechne() {\r\n            \/* Vorherige Fehler entfernen *\/\r\n            var existingError = container.querySelector('.error-box');\r\n            if (existingError) existingError.remove();\r\n            \r\n            var transactions = getAllTransactions();\r\n            \r\n            \/* FIX #5 &#038; #6: Validierung *\/\r\n            var errors = validateTransactions(transactions);\r\n            if (errors.length > 0) {\r\n                showError(errors[0]);\r\n                return;\r\n            }\r\n            \r\n            var cashflows = [];\r\n            var dates = [];\r\n            var totalInvested = 0;\r\n            var totalWithdrawn = 0;\r\n            \r\n            for (var i = 0; i < transactions.length; i++) {\r\n                var t = transactions[i];\r\n                dates.push(t.date);\r\n                \r\n                if (t.type === 'kauf') {\r\n                    cashflows.push(-t.amount);\r\n                    totalInvested += t.amount;\r\n                } else {\r\n                    cashflows.push(t.amount);\r\n                    totalWithdrawn += t.amount;\r\n                }\r\n            }\r\n            \r\n            var gewinn = totalWithdrawn - totalInvested;\r\n            var performance = totalInvested > 0 ? (gewinn \/ totalInvested) * 100 : 0;\r\n            \r\n            var firstDate = dates[0];\r\n            var lastDate = dates[dates.length - 1];\r\n            var years = (lastDate - firstDate) \/ (365.25 * 24 * 60 * 60 * 1000);\r\n            \r\n            \/* FIX #4: IRR mit Konvergenz-Check *\/\r\n            var irrResult = calculateIRR(cashflows, dates);\r\n            \r\n            if (!irrResult.success) {\r\n                showError('Der interne Zinsfu\u00df konnte f\u00fcr diese Zahlungsstr\u00f6me nicht berechnet werden. Bitte \u00fcberpr\u00fcfe deine Eingaben.');\r\n                return;\r\n            }\r\n            \r\n            var irr = irrResult.irr;\r\n            \r\n            \/* FIX #2: Tabellendaten \u2013 Netto investiert korrekt berechnen *\/\r\n            var tableData = [];\r\n            var nettoInvestiert = 0;\r\n            \r\n            for (var i = 0; i < transactions.length; i++) {\r\n                var t = transactions[i];\r\n                if (t.type === 'kauf') {\r\n                    nettoInvestiert += t.amount;\r\n                } else {\r\n                    nettoInvestiert -= t.amount;\r\n                }\r\n                \r\n                tableData.push({\r\n                    date: t.date,\r\n                    type: t.type,\r\n                    amount: t.amount,\r\n                    nettoInvestiert: nettoInvestiert\r\n                });\r\n            }\r\n            \r\n            lastResult = {\r\n                transactions: transactions,\r\n                gewinn: gewinn,\r\n                performance: performance,\r\n                irr: irr,\r\n                totalInvested: totalInvested,\r\n                totalWithdrawn: totalWithdrawn,\r\n                years: years,\r\n                tableData: tableData\r\n            };\r\n            \r\n            elements.resultsWrapper.style.display = 'block';\r\n            \r\n            updateUI(lastResult);\r\n            renderChart(lastResult);\r\n            renderTable(lastResult);\r\n            elements.exportButton.style.display = 'block';\r\n        }\r\n        \r\n        \/* FIX #1: Performance p.a. entfernt, durch \"Investiert gesamt\" ersetzt *\/\r\n        function updateUI(result) {\r\n            var isProfit = result.gewinn >= 0;\r\n            \r\n            var mainLabel = container.querySelector('.main-label');\r\n            var mainResult = container.querySelector('.main-result');\r\n            var mainSub = container.querySelector('.main-sub');\r\n            \r\n            if (!mainLabel || !mainResult || !mainSub) {\r\n                console.error('Erforderliche Elemente nicht gefunden');\r\n                return;\r\n            }\r\n            \r\n            mainLabel.textContent = 'Interner Zinsfu\u00df (IRR)';\r\n            mainResult.textContent = formatPercent(result.irr);\r\n            mainSub.textContent = 'J\u00e4hrliche Rendite \u00fcber ' + formatNumber(result.years, 1) + ' Jahre';\r\n            \r\n            var gewinnDisplay = container.querySelector('.gewinn-display');\r\n            if (gewinnDisplay) {\r\n                gewinnDisplay.textContent = formatCurrency(result.gewinn);\r\n                gewinnDisplay.className = 'card-value ' + (isProfit ? 'positive' : 'negative');\r\n            }\r\n            \r\n            var performanceDisplay = container.querySelector('.performance-display');\r\n            if (performanceDisplay) {\r\n                performanceDisplay.textContent = formatPercent(result.performance);\r\n                performanceDisplay.className = 'card-value ' + (isProfit ? 'positive' : 'negative');\r\n            }\r\n            \r\n            \/* FIX #1: \"Investiert gesamt\" statt irref\u00fchrender \"Performance p.a.\" *\/\r\n            var investedDisplay = container.querySelector('.invested-display');\r\n            if (investedDisplay) {\r\n                investedDisplay.textContent = formatCurrency(result.totalInvested);\r\n                investedDisplay.className = 'card-value';\r\n            }\r\n            \r\n            var irrDisplay = container.querySelector('.irr-display');\r\n            if (irrDisplay) {\r\n                irrDisplay.textContent = formatPercent(result.irr);\r\n                irrDisplay.className = 'card-value ' + (isProfit ? 'positive' : 'negative');\r\n            }\r\n            \r\n            var summary = container.querySelector('.result-summary');\r\n            if (summary) {\r\n                var summaryText = isProfit ?\r\n                    'Du hast insgesamt <strong>' + formatCurrency(result.totalInvested) + '<\/strong> investiert und ' +\r\n                    '<strong>' + formatCurrency(result.totalWithdrawn) + '<\/strong> zur\u00fcckerhalten \u2013 ein <strong>Gewinn von ' + formatCurrency(result.gewinn) + '<\/strong> (' + formatPercent(result.performance) + '). ' +\r\n                    'Der interne Zinsfu\u00df betr\u00e4gt <strong>' + formatPercent(result.irr) + '<\/strong> pro Jahr.' :\r\n                    'Du hast insgesamt <strong>' + formatCurrency(result.totalInvested) + '<\/strong> investiert und ' +\r\n                    '<strong>' + formatCurrency(result.totalWithdrawn) + '<\/strong> zur\u00fcckerhalten \u2013 ein <strong>Verlust von ' + formatCurrency(Math.abs(result.gewinn)) + '<\/strong> (' + formatPercent(result.performance) + '). ' +\r\n                    'Der interne Zinsfu\u00df betr\u00e4gt <strong>' + formatPercent(result.irr) + '<\/strong> pro Jahr.';\r\n                \r\n                summary.innerHTML = summaryText;\r\n                summary.className = 'result-summary' + (isProfit ? '' : ' negative');\r\n            }\r\n        }\r\n        \r\n        \/* FIX #3: Chart zeigt interpolierten Portfolioverlauf *\/\r\n        function renderChart(result) {\r\n            if (chartInstance) {\r\n                chartInstance.destroy();\r\n                chartInstance = null;\r\n            }\r\n            \r\n            var canvas = container.querySelector('.portfolioChart');\r\n            if (!canvas) return;\r\n            \r\n            var ctx = canvas.getContext('2d');\r\n            \r\n            var labels = [];\r\n            var investedData = [];\r\n            var portfolioValueData = [];\r\n            var cumulativeInvested = 0;\r\n            \r\n            \/*\r\n             * F\u00fcr jede Transaktion:\r\n             * - \"Investiert\" = kumulative K\u00e4ufe (Stufenfunktion)\r\n             * - \"Portfoliowert\" = interpoliert zwischen investiertem Kapital und Endwert\r\n             *   basierend auf IRR-Wachstum\r\n             *\/\r\n            var irr = result.irr \/ 100;\r\n            var firstDate = result.transactions[0].date;\r\n            \r\n            for (var i = 0; i < result.tableData.length; i++) {\r\n                var row = result.tableData[i];\r\n                labels.push(formatDateStr(row.date));\r\n                \r\n                if (row.type === 'kauf') {\r\n                    cumulativeInvested += row.amount;\r\n                }\r\n                investedData.push(cumulativeInvested);\r\n                \r\n                \/*\r\n                 * Portfoliowert an jedem Punkt:\r\n                 * Summe aller bisherigen K\u00e4ufe, jeweils aufgezinst mit IRR\r\n                 * abz\u00fcglich aller bisherigen Verk\u00e4ufe, jeweils aufgezinst\r\n                 *\/\r\n                var portfolioValue = 0;\r\n                for (var j = 0; j <= i; j++) {\r\n                    var t = result.tableData[j];\r\n                    var yearsElapsed = (row.date - t.date) \/ (365.25 * 24 * 60 * 60 * 1000);\r\n                    var growthFactor = Math.pow(1 + irr, yearsElapsed);\r\n                    \r\n                    if (t.type === 'kauf') {\r\n                        portfolioValue += t.amount * growthFactor;\r\n                    } else {\r\n                        portfolioValue -= t.amount * growthFactor;\r\n                    }\r\n                }\r\n                portfolioValueData.push(Math.max(0, portfolioValue));\r\n            }\r\n            \r\n            var legendContainer = container.querySelector('.legend-container');\r\n            if (legendContainer) {\r\n                legendContainer.innerHTML = '<div class=\"legend-item\"><span class=\"legend-color\" style=\"background-color: #4A69FF;\"><\/span>Investiert (kumuliert)<\/div>' +\r\n                    '<div class=\"legend-item\"><span class=\"legend-color\" style=\"background-color: #10b981;\"><\/span>Gesch\u00e4tzter Portfoliowert<\/div>';\r\n            }\r\n            \r\n            chartInstance = new Chart(ctx, {\r\n                type: 'line',\r\n                data: {\r\n                    labels: labels,\r\n                    datasets: [\r\n                        {\r\n                            label: 'Investiert',\r\n                            data: investedData,\r\n                            borderColor: '#4A69FF',\r\n                            backgroundColor: 'rgba(74, 105, 255, 0.1)',\r\n                            fill: true,\r\n                            tension: 0,\r\n                            pointRadius: 4,\r\n                            stepped: true\r\n                        },\r\n                        {\r\n                            label: 'Gesch\u00e4tzter Portfoliowert',\r\n                            data: portfolioValueData,\r\n                            borderColor: '#10b981',\r\n                            backgroundColor: 'rgba(16, 185, 129, 0.1)',\r\n                            fill: true,\r\n                            tension: 0.3,\r\n                            pointRadius: 4\r\n                        }\r\n                    ]\r\n                },\r\n                options: {\r\n                    responsive: true,\r\n                    maintainAspectRatio: false,\r\n                    scales: {\r\n                        y: {\r\n                            position: 'right',\r\n                            beginAtZero: true,\r\n                            grid: { color: '#e2e8f0' },\r\n                            ticks: {\r\n                                callback: function(value) {\r\n                                    return formatCurrency(value);\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    plugins: {\r\n                        legend: { display: false },\r\n                        tooltip: {\r\n                            mode: 'index',\r\n                            intersect: false,\r\n                            callbacks: {\r\n                                label: function(context) {\r\n                                    if (context.raw === null || context.raw === undefined) return null;\r\n                                    return context.dataset.label + ': ' + formatCurrency(context.raw);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        \r\n        \/* FIX #2: Tabelle zeigt \"Netto investiert\" statt verwirrende \"Kumuliert\"-Spalte *\/\r\n        function renderTable(result) {\r\n            var tbody = container.querySelector('.table-body');\r\n            if (!tbody) return;\r\n            \r\n            var html = '';\r\n            \r\n            for (var i = 0; i < result.tableData.length; i++) {\r\n                var row = result.tableData[i];\r\n                var dateStr = formatDateStr(row.date);\r\n                var rowClass = row.type === 'kauf' ? 'buy-row' : 'sell-row';\r\n                var typLabel = row.type === 'kauf' ? 'Kauf' : 'Verkauf';\r\n                \r\n                html += '<tr class=\"' + rowClass + '\">';\r\n                html += '<td>' + dateStr + '<\/td>';\r\n                html += '<td>' + typLabel + '<\/td>';\r\n                html += '<td>' + formatCurrency(row.amount) + '<\/td>';\r\n                html += '<td>' + formatCurrency(row.nettoInvestiert) + '<\/td>';\r\n                html += '<\/tr>';\r\n            }\r\n            \r\n            tbody.innerHTML = html;\r\n        }\r\n        \r\n        function resetCalculator() {\r\n            var summe0 = container.querySelector('#portfolio-summe-0');\r\n            var typ0 = container.querySelector('#portfolio-typ-0');\r\n            var summeFinal = container.querySelector('#portfolio-summe-final');\r\n            var typFinal = container.querySelector('#portfolio-typ-final');\r\n            \r\n            if (summe0) summe0.value = 10000;\r\n            if (typ0) typ0.value = 'kauf';\r\n            if (summeFinal) summeFinal.value = 19000;\r\n            if (typFinal) typFinal.value = 'verkauf';\r\n            \r\n            elements.transactionsContainer.innerHTML = '';\r\n            transactionCount = 1;\r\n            \r\n            initDateSelects();\r\n            \r\n            elements.resultsWrapper.style.display = 'none';\r\n            elements.tableWrapper.style.display = 'none';\r\n            elements.showTableBtn.textContent = 'Transaktionen anzeigen';\r\n            elements.exportButton.style.display = 'none';\r\n            \r\n            if (chartInstance) {\r\n                chartInstance.destroy();\r\n                chartInstance = null;\r\n            }\r\n            \r\n            lastResult = null;\r\n            \r\n            \/* Fehler entfernen *\/\r\n            var existingError = container.querySelector('.error-box');\r\n            if (existingError) existingError.remove();\r\n        }\r\n        \r\n        if (elements.addTransactionBtn) {\r\n            elements.addTransactionBtn.addEventListener('click', addTransaction);\r\n        }\r\n        \r\n        if (elements.showTableBtn) {\r\n            elements.showTableBtn.addEventListener('click', function() {\r\n                if (elements.tableWrapper.style.display === 'none') {\r\n                    elements.tableWrapper.style.display = 'block';\r\n                    elements.showTableBtn.textContent = 'Transaktionen ausblenden';\r\n                } else {\r\n                    elements.tableWrapper.style.display = 'none';\r\n                    elements.showTableBtn.textContent = 'Transaktionen anzeigen';\r\n                }\r\n            });\r\n        }\r\n        \r\n        if (elements.calculateBtn) {\r\n            elements.calculateBtn.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                berechne();\r\n            });\r\n        }\r\n        \r\n        if (elements.resetBtn) {\r\n            elements.resetBtn.addEventListener('click', function(e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                resetCalculator();\r\n            });\r\n        }\r\n        \r\n        if (elements.permalinkButton) {\r\n            elements.permalinkButton.addEventListener('click', function() {\r\n                var transactions = getAllTransactions();\r\n                var params = new URLSearchParams();\r\n                \r\n                for (var i = 0; i < transactions.length; i++) {\r\n                    var t = transactions[i];\r\n                    params.append('t' + i + '_s', t.amount);\r\n                    params.append('t' + i + '_d', t.date.getTime());\r\n                    params.append('t' + i + '_t', t.type);\r\n                }\r\n                params.append('count', transactions.length);\r\n                \r\n                var url = window.location.origin + window.location.pathname + '?' + params.toString();\r\n                \r\n                navigator.clipboard.writeText(url).then(function() {\r\n                    var originalText = elements.permalinkButton.textContent;\r\n                    elements.permalinkButton.textContent = 'Kopiert!';\r\n                    setTimeout(function() {\r\n                        elements.permalinkButton.textContent = originalText;\r\n                    }, 2000);\r\n                });\r\n            });\r\n        }\r\n        \r\n        if (elements.exportButton) {\r\n            elements.exportButton.addEventListener('click', function() {\r\n                if (!lastResult || !lastResult.tableData) return;\r\n                \r\n                var rows = ['Datum;Typ;Betrag;Netto investiert'];\r\n                for (var i = 0; i < lastResult.tableData.length; i++) {\r\n                    var row = lastResult.tableData[i];\r\n                    var dateStr = formatDateStr(row.date);\r\n                    var typLabel = row.type === 'kauf' ? 'Kauf' : 'Verkauf';\r\n                    rows.push([dateStr, typLabel, row.amount.toFixed(2).replace('.', ','), row.nettoInvestiert.toFixed(2).replace('.', ',')].join(';'));\r\n                }\r\n                \r\n                var blob = new Blob(['\\uFEFF' + rows.join('\\n')], { type: 'text\/csv;charset=utf-8;' });\r\n                var link = document.createElement('a');\r\n                link.href = URL.createObjectURL(blob);\r\n                link.download = 'portfolio_rendite_export.csv';\r\n                link.click();\r\n            });\r\n        }\r\n        \r\n        function loadFromURL() {\r\n            var params = new URLSearchParams(window.location.search);\r\n            if (!params.has('count')) return;\r\n            \r\n            var count = parseInt(params.get('count'));\r\n            if (count < 2) return;\r\n            \r\n            elements.transactionsContainer.innerHTML = '';\r\n            transactionCount = 1;\r\n            \r\n            for (var i = 0; i < count; i++) {\r\n                var summe = params.get('t' + i + '_s');\r\n                var dateTime = params.get('t' + i + '_d');\r\n                var typ = params.get('t' + i + '_t');\r\n                \r\n                if (!summe || !dateTime || !typ) continue;\r\n                \r\n                var date = new Date(parseInt(dateTime));\r\n                \r\n                if (i === 0) {\r\n                    var summe0 = container.querySelector('#portfolio-summe-0');\r\n                    var typ0 = container.querySelector('#portfolio-typ-0');\r\n                    if (summe0) summe0.value = summe;\r\n                    if (typ0) typ0.value = typ;\r\n                    populateDateSelects('portfolio-tag-0', 'portfolio-monat-0', 'portfolio-jahr-0', date);\r\n                } else if (i === count - 1) {\r\n                    var summeFinal = container.querySelector('#portfolio-summe-final');\r\n                    var typFinal = container.querySelector('#portfolio-typ-final');\r\n                    if (summeFinal) summeFinal.value = summe;\r\n                    if (typFinal) typFinal.value = typ;\r\n                    populateDateSelects('portfolio-tag-final', 'portfolio-monat-final', 'portfolio-jahr-final', date);\r\n                } else {\r\n                    addTransaction();\r\n                    var idx = transactionCount - 1;\r\n                    var summeIdx = container.querySelector('#portfolio-summe-' + idx);\r\n                    var typIdx = container.querySelector('#portfolio-typ-' + idx);\r\n                    if (summeIdx) summeIdx.value = summe;\r\n                    if (typIdx) typIdx.value = typ;\r\n                    populateDateSelects('portfolio-tag-' + idx, 'portfolio-monat-' + idx, 'portfolio-jahr-' + idx, date);\r\n                }\r\n            }\r\n            \r\n            setTimeout(function() {\r\n                berechne();\r\n            }, 100);\r\n        }\r\n        \r\n        initDateSelects();\r\n        loadFromURL();\r\n        \r\n    }, 500);\r\n});\r\n<\/script>\n\n<h2>So funktioniert der Renditerechner<\/h2>\n<p>Der Rechner arbeitet mit deinen tats\u00e4chlichen Transaktionen. Du gibst ein, wann du wie viel investiert hast und wann du wie viel zur\u00fcckbekommen hast. Daraus berechnet er deine reale Rendite pro Jahr.<\/p>\n<p><strong>Schritt 1: Erste Transaktion eingeben.<\/strong> Trag den Betrag und das Datum deines ersten Kaufs ein. Beispiel: 10.000 Euro am 15.03.2020.<\/p>\n<p><strong>Schritt 2: Weitere Transaktionen hinzuf\u00fcgen.<\/strong> Hast du nachgekauft oder zwischendurch Anteile verkauft? Klicke auf &#8222;Weitere Transaktion hinzuf\u00fcgen&#8220; und trag jeden Kauf und Verkauf mit Betrag und Datum ein. So erfasst der Rechner auch Sparpl\u00e4ne oder Teilverk\u00e4ufe.<\/p>\n<p><strong>Schritt 3: Letzte Transaktion eingeben.<\/strong> Das ist entweder ein Verkauf (du hast die Anlage aufgel\u00f6st) oder der aktuelle Wert deines Depots (wenn du noch investiert bist). Trag den heutigen Depotwert als &#8222;Verkauf&#8220; ein, um deine bisherige Rendite zu berechnen.<\/p>\n<p><strong>Schritt 4: Berechnen klicken.<\/strong> Der Rechner zeigt dir die j\u00e4hrliche Rendite (annualisiert), die dein Geld \u00fcber den gesamten Zeitraum erzielt hat.<\/p>\n<div class=\"highlightbox box box--small-padding box--tiny-margin-y\" style=\"--color-background:#fefcef;\"><strong class=\"headline headline--h3 headline--small-margin\">\ud83d\udca1 Gut zu wissen<\/strong><div class=\"box__content\"><p><strong>Tipp:<\/strong> Auch wenn du nur einen einzigen Kauf und einen Verkauf hattest, liefert der Rechner ein genaueres Ergebnis als eine einfache Prozentrechnung, weil er die Haltedauer in die Berechnung einbezieht. 50 Prozent Gewinn in zwei Jahren sind eine andere Rendite als 50 Prozent in zehn Jahren.<\/p><\/div><\/div>\n<h2>Warum einfache Prozentrechnung nicht reicht<\/h2>\n<p>Viele Anleger berechnen ihre Rendite, indem sie den Gewinn durch den Einsatz teilen. Das funktioniert nur, wenn du einmal kaufst und einmal verkaufst. Sobald du mehrere K\u00e4ufe zu verschiedenen Zeitpunkten t\u00e4tigst (wie bei einem Sparplan), wird diese Rechnung falsch.<\/p>\n<p><strong>Beispiel:<\/strong> Du investierst im Januar 5.000 Euro und im Juli nochmal 5.000 Euro. Am Jahresende ist dein Depot 11.000 Euro wert. Dein Gewinn betr\u00e4gt 1.000 Euro auf 10.000 Euro Einsatz. Sind das 10 Prozent Rendite?<\/p>\n<p>Nein. Die ersten 5.000 Euro waren zw\u00f6lf Monate investiert, die zweiten nur sechs. Dein tats\u00e4chlich eingesetztes Kapital war im Durchschnitt geringer als 10.000 Euro. Die reale j\u00e4hrliche Rendite liegt h\u00f6her als 10 Prozent. Der Renditerechner ber\u00fccksichtigt genau diese Zeiteffekte und liefert die korrekte annualisierte Rendite.<\/p>\n<h3>Annualisierte Rendite: Anlagen vergleichbar machen<\/h3>\n<p>Die annualisierte Rendite rechnet jeden Zeitraum auf ein Jahr um. So kannst du Anlagen mit unterschiedlicher Laufzeit fair vergleichen:<br \/>\n<div class=\"sc-table table-container table-container--small-margin \"><table class=\"table table--aligned-left\" style=\"min-width:880px\"><thead><tr><th>Anlage<\/th><th>Gesamtrendite<\/th><th>Laufzeit<\/th><th>Rendite pro Jahr<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/www.finanzen.net\/ratgeber\/geld\/produkte-vergleiche\/festgeldvergleich\/\" data-ilm-light=\"27\" title=\"Festgeldvergleich\">Festgeld<\/a> A<\/td><td>6,1 %<\/td><td>2 Jahre<\/td><td>3,0 %<\/td><\/tr><tr><td>Aktien-ETF B<\/td><td>40 %<\/td><td>5 Jahre<\/td><td>7,0 %<\/td><\/tr><tr><td>Einzelaktie C<\/td><td>120 %<\/td><td>15 Jahre<\/td><td>5,4 %<\/td><\/tr><\/thead><\/tbody><\/table><\/div><br \/>\nOhne Annualisierung sieht Einzelaktie C mit 120 Prozent am besten aus. Pro Jahr gerechnet hat der ETF mit 7 Prozent aber deutlich besser performt. Der Renditerechner liefert dir automatisch die annualisierte Rendite.<\/p>\n<div style=\"background-color: #fffdf2; border: 1px solid #f0ead2; border-radius: 12px; padding: 25px; margin-bottom: 20px; font-family: sans-serif; color: #333; line-height: 1.6;\">\r\n    \r\n    <div style=\"margin-bottom: 20px;\">\r\n        <h3 style=\"margin: 0; font-size: 18px; font-weight: bold; color: #000; text-transform: none;\">Weitere Finanzrechner<\/h3>\r\n    <\/div>\r\n\r\n    <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px 40px;\">\r\n        \r\n        <div style=\"display: flex; flex-direction: column; gap: 8px;\">\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/brutto-netto-rechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Brutto Netto Rechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/prozentrechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Prozentrechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/etf-rechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a ETF-Rechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/entnahmerechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Entnahmerechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/zinseszinsrechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Zinseszinsrechner<\/a>\r\n        <\/div>\r\n\r\n        <div style=\"display: flex; flex-direction: column; gap: 8px;\">\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Renditerechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/kreditrechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Kreditrechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/arbeitszeitrechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a Arbeitszeitrechner<\/a>\r\n            <a href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/iban-rechner\/\" target=\"_blank\" rel=\"noopener\" style=\"color: #1a74fc; text-decoration: none; font-size: 17px; font-weight: 500;\">\u203a IBAN-Rechner<\/a>\r\n        <\/div>\r\n        \r\n    <\/div>\r\n<\/div>\n<h2>Typische Anwendungen<\/h2>\n<h3>Sparplan auswerten<\/h3>\n<p>Du besparst seit drei Jahren monatlich einen ETF mit 200 Euro. Wie gut hat sich das entwickelt? Trag jeden Monatskauf als eigene Transaktion ein (oder fasse quartalsweise zusammen, wenn dir 36 Einzeleintr\u00e4ge zu viel sind). Als letzte Transaktion tr\u00e4gst du den heutigen Depotwert als Verkauf ein. Die Rendite, die der Rechner zeigt, ber\u00fccksichtigt, dass deine fr\u00fchen Einzahlungen l\u00e4nger gearbeitet haben als die sp\u00e4teren.<\/p>\n<h3>Immobilie bewerten<\/h3>\n<p>Du hast 2015 eine Wohnung f\u00fcr 180.000 Euro gekauft und 2024 f\u00fcr 260.000 Euro verkauft. Dazwischen hast du 30.000 Euro in Renovierung investiert. Trag den Kauf (180.000 Euro), die Renovierung als weiteren Kauf (30.000 Euro mit dem Datum der Renovierung) und den Verkauf (260.000 Euro) ein. Der Rechner zeigt dir die j\u00e4hrliche Rendite unter Ber\u00fccksichtigung aller Kapitalfl\u00fcsse.<\/p>\n<h3>Verschiedene Depots vergleichen<\/h3>\n<p>Du hast Geld in einem ETF-Depot und auf einem Festgeldkonto. Welche Anlage hat besser abgeschnitten? Berechne die Rendite f\u00fcr jedes Investment einzeln. Die annualisierte Rendite macht beide vergleichbar, auch wenn die Laufzeiten und Einzahlungszeitpunkte unterschiedlich sind.<\/p>\n<h3>Alte Investmententscheidungen hinterfragen<\/h3>\n<p>Wie hat sich die Einzelaktie entwickelt, die du vor acht Jahren gekauft hast? Trag Kaufdatum, Kaufpreis und den heutigen Kurs ein. Falls du zwischendurch Dividenden erhalten und reinvestiert hast, trag diese als Verkauf (Dividende raus) und Kauf (Reinvestition) ein. So bekommst du die Gesamtrendite inklusive Dividenden.<\/p>\n<div class=\"highlightbox box box--small-padding box--tiny-margin-y\" style=\"--color-background:#fff4ef;\"><strong class=\"headline headline--h3 headline--small-margin\">\u26a0\ufe0f Wichtig<\/strong><div class=\"box__content\"><p><strong>Kosten nicht vergessen:<\/strong> Der Rechner arbeitet mit den Betr\u00e4gen, die du eingibst. F\u00fcr ein realistisches Ergebnis solltest du bei K\u00e4ufen den tats\u00e4chlich gezahlten Betrag inklusive Ordergeb\u00fchren eintragen und bei Verk\u00e4ufen den Betrag nach Geb\u00fchren. Steuern kannst du ebenfalls ber\u00fccksichtigen, indem du den Netto-Verkaufserl\u00f6s (nach Abgeltungssteuer) als letzte Transaktion eingibst.<\/p><\/div><\/div>\n<h2>Rendite richtig einordnen<\/h2>\n<p>Eine Zahl allein sagt wenig. Ordne deine Rendite in den Kontext ein:<\/p>\n<p><strong>Inflation abziehen:<\/strong> Deine reale Rendite ist die nominale Rendite minus Inflation. Bei 7 Prozent Nominalrendite und 2,5 Prozent Inflation bleiben real 4,5 Prozent. Erst die reale Rendite zeigt, ob du tats\u00e4chlich Kaufkraft gewonnen hast.<\/p>\n<p><strong>Mit dem Markt vergleichen:<\/strong> Ein breit gestreuter Welt-ETF (z.B. MSCI World) erzielte historisch rund 7 bis 8 Prozent pro Jahr vor Kosten. Wenn dein aktiv verwaltetes Depot weniger bringt, w\u00e4rst du mit einem einfachen <a href=\"https:\/\/www.finanzen.net\/ratgeber\/etf\/praxis-strategien\/etf-sparplan\/net\/\" data-ilm-light=\"22\" title=\"ETF Sparplan\">ETF-Sparplan<\/a> besser gefahren.<\/p>\n<p><strong>Risiko ber\u00fccksichtigen:<\/strong> 5 Prozent Rendite auf Festgeld sind besser als 5 Prozent auf Einzelaktien, weil Festgeld kein Kursrisiko hat. Die reine Renditezahl sagt nichts \u00fcber das eingegangene Risiko.<\/p>\n<h2>H\u00e4ufige Fragen zur Renditeberechnung<\/h2>\n<h3>Was ist die annualisierte Rendite?<\/h3>\n<p>Die annualisierte Rendite rechnet die Gesamtrendite einer Anlage auf ein Jahr um. Sie ber\u00fccksichtigt den Zinseszinseffekt und macht Anlagen mit unterschiedlicher Laufzeit vergleichbar. 50 Prozent Gesamtrendite \u00fcber 5 Jahre entsprechen einer annualisierten Rendite von 8,4 Prozent pro Jahr, nicht 10 Prozent (50 geteilt durch 5), weil sich die Ertr\u00e4ge jedes Jahr mitverzinsen.<\/p>\n<h3>Was ist der Unterschied zwischen Rendite und Gewinn?<\/h3>\n<p>Der Gewinn ist der absolute Betrag (z.B. 5.000 Euro). Die Rendite setzt diesen Gewinn ins Verh\u00e4ltnis zum eingesetzten Kapital und zur Laufzeit (z.B. 7 Prozent pro Jahr). Nur die Rendite erlaubt einen Vergleich zwischen verschiedenen Investments.<\/p>\n<h3>Wie berechne ich die Rendite meines Sparplans?<\/h3>\n<p>Trag jeden Einzelkauf mit Betrag und Datum in den Rechner ein. Als letzte Transaktion gibst du den aktuellen Depotwert als Verkauf ein. Der Rechner ber\u00fccksichtigt, dass fr\u00fchere Einzahlungen l\u00e4nger investiert waren als sp\u00e4tere, und liefert die korrekte j\u00e4hrliche Rendite.<\/p>\n<h3>Sind Dividenden in der Rendite enthalten?<\/h3>\n<p>Nur wenn du sie eingibst. Bei thesaurierenden ETFs sind Dividenden automatisch im Kurswert enthalten. Bei aussch\u00fcttenden ETFs oder Einzelaktien musst du erhaltene Dividenden separat als Verkauf (Geld raus) erfassen. Falls du die Dividenden reinvestiert hast, trag zus\u00e4tzlich einen Kauf im gleichen Betrag ein.<\/p>\n<h3>Wie berechne ich die Rendite einer Immobilie?<\/h3>\n<p>Trag den Kaufpreis als erste Transaktion ein, alle Investitionen (Renovierung, Sanierung) als weitere K\u00e4ufe mit dem jeweiligen Datum, und den Verkaufspreis als letzte Transaktion. F\u00fcr eine vollst\u00e4ndige Berechnung solltest du auch Nebenkosten beim Kauf (Grunderwerbsteuer, Notar, Makler) zum Kaufpreis addieren.<\/p>\n<h3>Wie genau ist der Rechner bei vielen Transaktionen?<\/h3>\n<p>Der Rechner wird mit mehr Transaktionen genauer, nicht ungenauer. Jeder Kauf und Verkauf flie\u00dft mit seinem exakten Datum in die Berechnung ein. Bei einem monatlichen Sparplan \u00fcber mehrere Jahre kannst du zur Vereinfachung auch quartalsweise Summen eintragen, ohne dass die Genauigkeit wesentlich leidet.<\/p>\n<h3>Was sagt die Rendite \u00fcber das Risiko meiner Anlage?<\/h3>\n<p>Nichts. Zwei Anlagen k\u00f6nnen die gleiche Rendite haben, aber v\u00f6llig unterschiedliche Risikoprofile. Eine Aktie, die zwischen minus 30 und plus 50 Prozent schwankt, hat ein anderes Risiko als Festgeld mit konstanten 3 Prozent. Die Rendite allein reicht f\u00fcr eine Anlageentscheidung nicht aus.<\/p>\n<h3>Brauche ich den Renditerechner, wenn ich nur einmal gekauft und einmal verkauft habe?<\/h3>\n<p>Auch dann ist der Rechner n\u00fctzlich, weil er die Haltedauer ber\u00fccksichtigt. 30 Prozent Gewinn in einem Jahr sind 30 Prozent j\u00e4hrliche Rendite. 30 Prozent Gewinn in f\u00fcnf Jahren sind nur 5,4 Prozent pro Jahr. Der Rechner liefert automatisch den korrekten annualisierten Wert.<\/p>\n                    <\/div>\n    <\/div>\n<\/div>\n\n\n\n<div class=\"container container--narrow\">\n    <\/div>\n\n\n<div class=\"container container--narrow\" >\n    <div class=\"disclaimer flow-content\">\n                    <small>\n                <p style=\"font-size: 11pt;\">Disclaimer: Die in diesem Artikel enthaltenen Inhalte dienen ausschlie\u00dflich allgemeinen Informations-, Bildungs- und Marketingzwecken ohne Gew\u00e4hr auf Vollst\u00e4ndigkeit, Richtigkeit und Aktualit\u00e4t. Die Inhalte stellen keine Anlageberatung, Anlagestrategieempfehlung oder Aufforderung zum Kauf oder Verkauf von Wertpapieren oder sonstigen Finanzinstrumenten dar. Die Informationen ber\u00fccksichtigen nicht die individuellen Anlageziele und finanzielle Situation des Lesers. Jede Anlageentscheidung sollte eigenverantwortlich getroffen und sorgf\u00e4ltig gepr\u00fcft werden. Vor einer Anlageentscheidung sollte der Rat eines Anlage- und Steuerberaters eingeholt werden. Der Handel mit Wertpapieren oder sonstigen Finanzinstrumenten ist mit hohen Risiken verbunden, bis hin zum Totalverlust des eingesetzten Kapitals. Die in der Vergangenheit erzielte Performance ist kein Indikator f\u00fcr zuk\u00fcnftige Wertentwicklungen. Aussagen \u00fcber zuk\u00fcnftige wirtschaftliche Entwicklungen basieren grunds\u00e4tzlich auf Annahmen und Einsch\u00e4tzungen, die sich im Zeitablauf als nicht zutreffend erweisen k\u00f6nnen. Wir \u00fcbernehmen keine Haftung f\u00fcr Verluste, die durch die Umsetzung der in diesem Artikel genannten Informationen entstehen.<\/p>\n<p style=\"font-size: 11pt;\"><sup>1<\/sup>Hinweis zu ZERO: <a href=\"https:\/\/www.finanzen.net\/zero\/?utm_source=finnet-ratgeber&amp;utm_medium=web&amp;utm_term=fnet_017m&amp;utm_campaign=content&amp;utm_content=[current_slug]\" target=\"_blank\" rel=\"noopener\">finanzen.net zero<\/a> ist ein Angebot der <a href=\"https:\/\/www.finanzen.net\/zero\/impressum\/?utm_source=finnet-ratgeber&amp;utm_medium=web&amp;utm_term=fnet_017m&amp;utm_campaign=content&amp;utm_content=[current_slug]\" target=\"_blank\" rel=\"noopener\">finanzen.net zero GmbH<\/a>, einer Tochter der <a href=\"https:\/\/www.finanzen.net\/impressum\">finanzen.net GmbH<\/a>.<\/p>\n<p style=\"font-size: 11pt;\"><sup>*<\/sup>Hinweis zu Affiliate-Links: Unsere Ratgeber-Artikel sind objektiv und unabh\u00e4ngig erstellt, wobei mit Sternchen gekennzeichnete Links zur Finanzierung der kostenlosen Inhalte dienen. Die Verg\u00fctung aus diesen Links hat keinen Einfluss auf unsere Inhalte.<\/p>\n            <\/small>\n                    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Wie gut hat sich dein Investment wirklich entwickelt? Unser Renditerechner ber\u00fccksichtigt nicht nur Kauf- und Verkaufskurs, sondern auch den Zeitpunkt und die H\u00f6he aller Ein- und Auszahlungen. Trag deine Transaktionen ein und du bekommst die tats\u00e4chliche j\u00e4hrliche Rendite deiner Anlage.<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1194],"tags":[1462,1460],"class_list":["post-33133","post","type-post","status-publish","format-standard","hentry","category-rechner-vergleiche","tag-daily","tag-finanzrechner"],"acf":[],"yoast_head":"<title>Renditerechner: Rendite berechnen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Renditerechner: Rendite berechnen\" \/>\n<meta property=\"og:description\" content=\"Wie gut hat sich dein Investment wirklich entwickelt? Unser Renditerechner ber\u00fccksichtigt nicht nur Kauf- und Verkaufskurs, sondern auch den Zeitpunkt und die H\u00f6he aller Ein- und Auszahlungen. Trag deine Transaktionen ein und du bekommst die tats\u00e4chliche j\u00e4hrliche Rendite deiner Anlage.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/\" \/>\n<meta property=\"og:site_name\" content=\"Finanzen.net Ratgeber: Finanzwissen, das dich weiterbringt\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-19T11:05:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-19T11:06:02+00:00\" \/>\n<meta name=\"author\" content=\"Roland Kuse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roland Kuse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u00a0Minuten\" \/>","yoast_head_json":{"title":"Renditerechner: Rendite berechnen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/","og_locale":"de_DE","og_type":"article","og_title":"Renditerechner: Rendite berechnen","og_description":"Wie gut hat sich dein Investment wirklich entwickelt? Unser Renditerechner ber\u00fccksichtigt nicht nur Kauf- und Verkaufskurs, sondern auch den Zeitpunkt und die H\u00f6he aller Ein- und Auszahlungen. Trag deine Transaktionen ein und du bekommst die tats\u00e4chliche j\u00e4hrliche Rendite deiner Anlage.","og_url":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/","og_site_name":"Finanzen.net Ratgeber: Finanzwissen, das dich weiterbringt","article_published_time":"2026-05-19T11:05:25+00:00","article_modified_time":"2026-05-19T11:06:02+00:00","author":"Roland Kuse","twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Roland Kuse","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/#article","isPartOf":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/"},"author":{"name":"Roland Kuse","@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6"},"headline":"Renditerechner","datePublished":"2026-05-19T11:05:25+00:00","dateModified":"2026-05-19T11:06:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/"},"wordCount":1556,"keywords":["Daily","Finanzrechner"],"articleSection":["Rechner &amp; Vergleiche"],"inLanguage":"de"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/","url":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/","name":"Renditerechner: Rendite berechnen","isPartOf":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/#website"},"datePublished":"2026-05-19T11:05:25+00:00","dateModified":"2026-05-19T11:06:02+00:00","author":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6"},"breadcrumb":{"@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.finanzen.net\/ratgeber\/rechner-vergleiche\/renditerechner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.finanzen.net\/ratgeber\/"},{"@type":"ListItem","position":2,"name":"Rechner &amp; Vergleiche","item":"https:\/\/www.finanzen.net\/ratgeber\/.\/rechner-vergleiche\/"},{"@type":"ListItem","position":3,"name":"Renditerechner"}]},{"@type":"WebSite","@id":"https:\/\/www.finanzen.net\/ratgeber\/#website","url":"https:\/\/www.finanzen.net\/ratgeber\/","name":"Finanzen.net Ratgeber - Die Ganze Welt der Finanzen","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.finanzen.net\/ratgeber\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/www.finanzen.net\/ratgeber\/#\/schema\/person\/751e702863ee767bd02fc5016b3d10e6","name":"Roland Kuse","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","url":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","contentUrl":"https:\/\/www.finanzen.net\/ratgeber\/wp-content\/uploads\/2025\/10\/Roland_Kuse-1-150x150.jpg","caption":"Roland Kuse"},"description":"Roland Kuse leitet den Finanzratgeber gemeinsam mit Volker Altvater. Mit \u00fcber 25 Jahren Erfahrung im digitalen Publishing verantwortet der Experte die inhaltliche Strategie und redaktionelle Qualit\u00e4t. Zudem treibt er die Entwicklung interaktiver Formate voran \u2013 vom Altersvorsorgedepot-Rechner bis hin zu anschaulichen Infografiken. Sein Ziel ist es, Finanzen verst\u00e4ndlich, fundiert und verl\u00e4sslich aufzubereiten.","sameAs":["https:\/\/www.linkedin.com\/in\/roland-kuse-959574103\/"],"url":"https:\/\/www.finanzen.net\/ratgeber\/author\/roland-kruse\/"}]}},"_links":{"self":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/33133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/comments?post=33133"}],"version-history":[{"count":7,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/33133\/revisions"}],"predecessor-version":[{"id":37736,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/posts\/33133\/revisions\/37736"}],"wp:attachment":[{"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/media?parent=33133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/categories?post=33133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.finanzen.net\/ratgeber\/wp-json\/wp\/v2\/tags?post=33133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}