Darum ist KI für einen (Börsianer) genial (und ein Programmierer sollte sich Gedanken über seinen Job machen.)

ebbes, Mittwoch, 18.06.2025, 23:55 (vor 25 Tagen)4132 Views
bearbeitet von ebbes, Donnerstag, 19.06.2025, 00:47

Ich bin zwar auch gelernter Informatiker, habe aber schon lange nicht mehr in dem Bereich gearbeitet.

1. Aufgabenstellung
Ich will die aktuelle Gewichtung der MDax Aktien, dass ich den MDax besser einschätzen kann.

2.Problem
Die Marktkapitalisierung der Aktien zu finden ist natürlich kein Problem. Das bieten viele Seiten an, aber nicht die aktuelle Gewichtung für den Index, die sich täglich ändert und vom Streubesitz abhängt.

Von Google erklärt:

Der MDAX wird nach der Marktkapitalisierung des Streubesitzes gewichtet. Das bedeutet, dass die frei handelbaren Anteile der im MDAX enthaltenen Unternehmen für die Gewichtung im Index maßgeblich sind. Die Berechnung basiert auf der Summe der Marktkapitalisierung aller Aktien eines Unternehmens, die öffentlich handelbar sind.
Da der MDAX nach Marktkapitalisierung gewichtet ist, ändert sich die Gewichtung der einzelnen Aktien mit jeder Neuberechnung des MDAX.

Auf Wikipedia findet man zwar die Gewichtung Stand vom vom 24. März 2025. Aber eine aktuelle Gewichtung, die sich täglich ändert habe ich keine gefunden. Aber vielleicht kennt von euch jemand eine Seite, welche die aktuell tägliche Gewichtung anzeigt.

Also die KI damit beauftragt mir ein Programm für den Browser (Firefox) zu schreiben.
Noch einige Verbesserungen:
dass ich meine eingetragenen Werte speichern kann und die Übersichtlichkeit der langen Zahlen verbessert wird und Neue eintragen oder löschen kann, nach Gewichtung sortieren - und in sekundenschnelle war das Programm geschrieben.
Also ich hätte das nie im Leben, wenn überhaupt, so schnell geschafft.
Hier ist das "Meisterwerk"
Einfach in eine neue Textdatei mit Strg C und Strg V kopieren und die Datei in .htm umbenennen und lasst euch überraschen.

Gruß
ebbes


<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>MDAX Freefloat-Gewichtungsrechner mit Sortierung</title>
<style>
/* (Dein bisheriges CSS, unverändert) */
body { font-family: Arial, sans-serif; background: #f4f4f4; margin: 0; padding: 0; }
.container { max-width: 1200px; margin: 30px auto; background: #fff; padding: 20px; border-radius: 10px; box-shadow: 0 2px 8px #ccc; }
h1 { text-align: center; color: #2c3e50; }
table { width: 100%; border-collapse: collapse; margin-top: 25px; font-size: 1.05em; }
th, td { padding: 12px 8px; text-align: center; border-bottom: 1px solid #ddd; }
th { background: #2980b9; color: #fff; cursor: pointer; }
tr:hover { background: #f1f1f1; }
input[type="text"], input[type="number"] {
width: 90%; padding: 6px; border: 1px solid #bbb; border-radius: 3px; font-size: 1em;
}
.calc-btn, .add-row, .save-btn, .load-btn {
background: #27ae60; color: #fff; border: none; padding: 10px 18px;
border-radius: 4px; cursor: pointer; margin: 12px 8px 0 0; font-size: 1.07em;
transition: background 0.2s;
}
.calc-btn:hover, .add-row:hover, .save-btn:hover, .load-btn:hover { background: #219150; }
.remove-btn {
background: #e74c3c; color: #fff; border: none; border-radius: 4px;
padding: 7px 14px; cursor: pointer; font-size: 1em;
}
.remove-btn:hover { background: #c0392b; }
.footer { text-align: center; margin-top: 40px; color: #888; font-size: 0.95em; }
.sticky-head th { position: sticky; top: 0; background: #2980b9; }
.big-number { font-size: 1.13em; letter-spacing: 0.04em; font-family: 'Consolas', 'Courier New', monospace; }
@media (max-width: 900px) {
.container { max-width: 99vw; padding: 5vw; }
table, th, td { font-size: 0.93em; }
input[type="text"], input[type="number"] { font-size: 0.93em; }
}
</style>
</head>
<body>
<div class="container">
<h1>MDAX Freefloat-Gewichtungsrechner (Juni 2025, dynamisch, sortierbar)</h1>
<p>
Trage Kurs, Aktienanzahl und Streubesitzfaktor für die MDAX-Unternehmen ein.<br>
Du kannst Zeilen hinzufügen oder entfernen. Die Gewichtung wird automatisch berechnet.<br>
Klicke auf „Gewichtung (%)“ in der Tabelle, um nach Gewichtung zu sortieren.<br>
<b>Mit „Daten speichern“ und „Daten laden“ kannst du deine Eingaben im Browser sichern.</b>
</p>
<form id="mdaxForm" onsubmit="event.preventDefault(); calculateWeights();">
<table id="mdaxTable">
<thead class="sticky-head">
<tr>
<th>#</th>
<th>Unternehmen</th>
<th>Kurs (EUR)</th>
<th>Anzahl Aktien</th>
<th>Streubesitz-Faktor</th>
<th>Freefloat-MK (EUR)</th>
<th id="weightHeader">Gewichtung (%) &#x25B2;&#x25BC;</th>
<th>Entfernen</th>
</tr>
</thead>
<tbody>
<!-- Zeilen werden dynamisch eingefügt -->
</tbody>
</table>
<div style="margin-top:16px;">
<button type="button" class="add-row" onclick="addRow()">+ Aktie hinzufügen</button>
<button type="submit" class="calc-btn">Gewichtung berechnen</button>
<button type="button" onclick="saveData()" class="save-btn">Daten speichern</button>
<button type="button" onclick="loadData()" class="load-btn">Daten laden</button>
</div>
</form>
</div>
<div class="footer">
© 2025 MDAX Freefloat-Gewichtungsrechner | Erstellt von Perplexity AI
</div>
<script>
const mdaxData = [
{ name: "AIXTRON SE", price: 12.57 },
{ name: "Aroundtown SA", price: 2.92 },
{ name: "Aurubis AG", price: 81.45 },
{ name: "AUTO1 Group SE", price: 25.10 },
{ name: "Bechtle AG", price: 39.82 },
{ name: "Bilfinger SE", price: 79.05 },
{ name: "Carl Zeiss Meditec AG", price: 60.10 },
{ name: "CTS Eventim AG & Co. KGaA", price: 107.20 },
{ name: "Delivery Hero SE", price: 23.70 },
{ name: "Deutsche Lufthansa AG", price: 7.16 },
{ name: "Deutsche Wohnen SE", price: 23.20 },
{ name: "DWS Group", price: 51.80 },
{ name: "Evonik Industries AG", price: 19.10 },
{ name: "EVOTEC SE", price: 7.06 },
{ name: "flatexDEGIRO AG", price: 23.08 },
{ name: "Fraport AG", price: 63.90 },
{ name: "freenet AG", price: 28.54 },
{ name: "Fuchs SE Vz", price: 48.70 },
{ name: "GEA GROUP AG", price: 59.55 },
{ name: "Gerresheimer AG", price: 47.80 },
{ name: "HELLA GmbH & Co. KGaA", price: 87.00 },
{ name: "HelloFresh SE", price: 9.43 },
{ name: "HENSOLDT AG", price: 99.10 },
{ name: "HOCHTIEF AG", price: 164.60 },
{ name: "HUGO BOSS AG", price: 39.66 },
{ name: "Jenoptik AG", price: 19.65 },
{ name: "Jungheinrich AG", price: 38.50 },
{ name: "K+S AG", price: 16.16 },
{ name: "KION GROUP AG", price: 44.22 },
{ name: "Knorr-Bremse AG", price: 88.80 },
{ name: "Krones AG", price: 142.40 },
{ name: "LANXESS AG", price: 25.74 },
{ name: "LEG Immobilien SE", price: 74.75 },
{ name: "Nemetschek SE", price: 128.40 },
{ name: "Nordex SE", price: 17.93 },
{ name: "PUMA SE", price: 21.66 },
{ name: "Rational AG", price: 740.50 },
{ name: "Redcare Pharmacy N.V.", price: 100.20 },
{ name: "RENK Group AG", price: 78.60 },
{ name: "RTL Group S.A.", price: 33.30 },
{ name: "Scout24 SE", price: 119.50 },
{ name: "Ströer SE & Co. KGaA", price: 52.60 },
{ name: "TAG Immobilien AG", price: 14.92 },
{ name: "Talanx AG", price: 114.80 },
{ name: "TeamViewer AG", price: 10.55 },
{ name: "ThyssenKrupp AG", price: 8.50 },
{ name: "TRATON SE", price: 29.20 },
{ name: "TUI AG", price: 7.20 },
{ name: "United Internet AG", price: 23.94 }
];

let sortAsc = true; // Sortierreihenfolge

function addRow(data = {}) {
const table = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
const row = table.insertRow();
row.innerHTML = `
<td></td>
<td><input type="text" value="${data.name || ''}" required></td>
<td><input type="number" step="0.01" min="0" value="${data.price || ''}" required></td>
<td>
<input type="text" class="big-number" value="${data.shares ? formatNumber(data.shares) : ''}"
onfocus="showRawShares(this)"
onblur="formatSharesInput(this)"
onchange="calculateWeights()"
required>
</td>
<td><input type="number" step="0.001" min="0" max="1" value="${data.freefloat || ''}" required></td>
<td class="freefloat-mk big-number">-</td>
<td class="weight big-number">-</td>
<td><button type="button" class="remove-btn" onclick="removeRow(this)">Entfernen</button></td>
`;
updateRowNumbers();
}

function showRawShares(input) {
input.value = input.value.replace(/\./g, '').replace(/ /g, '');
}

function formatSharesInput(input) {
let val = input.value.replace(/\./g, '').replace(/ /g, '');
if (!isNaN(val) && val !== "") {
input.value = formatNumber(val);
}
}

function formatNumber(num) {
return Number(num).toLocaleString('de-DE', { maximumFractionDigits: 0 });
}

function removeRow(btn) {
const row = btn.parentNode.parentNode;
row.parentNode.removeChild(row);
updateRowNumbers();
calculateWeights();
}

function updateRowNumbers() {
const table = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
Array.from(table.rows).forEach((row, idx) => {
row.cells[0].textContent = idx + 1;
});
}

function parseSharesInput(input) {
return parseFloat(input.value.replace(/\./g, '').replace(/ /g, '')) || 0;
}

function calculateWeights() {
const table = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
const rows = Array.from(table.rows);
let totalFreefloatMK = 0;
const data = [];

rows.forEach(row => {
const price = parseFloat(row.cells[2].querySelector('input').value) || 0;
const sharesInput = row.cells[3].querySelector('input');
const shares = parseSharesInput(sharesInput);
const freefloat = parseFloat(row.cells[4].querySelector('input').value) || 0;
const freefloatMK = price * shares * freefloat;
data.push({ row, freefloatMK });
totalFreefloatMK += freefloatMK;
if (shares > 0) sharesInput.value = formatNumber(shares);
});

data.forEach(({ row, freefloatMK }) => {
row.cells[5].textContent = freefloatMK > 0 ? formatNumber(freefloatMK) : '-';
const weight = totalFreefloatMK > 0 ? (freefloatMK / totalFreefloatMK * 100) : 0;
row.cells[6].textContent = weight > 0 ? weight.toFixed(2) + ' %' : '-';
});
}

function saveData() {
const table = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
const rows = Array.from(table.rows);
const dataToSave = rows.map(row => {
const sharesInput = row.cells[3].querySelector('input');
return {
name: row.cells[1].querySelector('input').value,
price: row.cells[2].querySelector('input').value,
shares: parseSharesInput(sharesInput),
freefloat: row.cells[4].querySelector('input').value
};
});
localStorage.setItem('mdaxData', JSON.stringify(dataToSave));
alert('Daten wurden gespeichert!');
}

function loadData() {
const savedData = localStorage.getItem('mdaxData');
if (!savedData) {
alert('Keine gespeicherten Daten gefunden.');
return;
}
const data = JSON.parse(savedData);
const tableBody = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
tableBody.innerHTML = '';
data.forEach(item => addRow(item));
calculateWeights();
alert('Daten wurden geladen!');
}

// Sortieren nach Gewichtung
document.getElementById('weightHeader').addEventListener('click', () => {
const tableBody = document.getElementById('mdaxTable').getElementsByTagName('tbody')[0];
const rows = Array.from(tableBody.rows);

rows.sort((a, b) => {
const aText = a.cells[6].textContent.replace('%', '').trim();
const bText = b.cells[6].textContent.replace('%', '').trim();
const aVal = parseFloat(aText) || 0;
const bVal = parseFloat(bText) || 0;
return sortAsc ? aVal - bVal : bVal - aVal;
});

// Reihenfolge umdrehen für nächstes Mal
sortAsc = !sortAsc;

// Tabelle neu anordnen
rows.forEach(row => tableBody.appendChild(row));
updateRowNumbers();
});

window.onload = function() {
const savedData = localStorage.getItem('mdaxData');
if (savedData) {
loadData();
} else {
mdaxData.forEach(addRow);
calculateWeights();
}
};
</script>
</body>
</html>

--
Bafin-gerechte Warnung:
Obwohl ich mehr als 30 Jahre Erfahrung an der Börse habe, habe ich keine Ahnung vom Markt. Macht nicht nach was ich handle. Vertraut der Sparkasse Buxtehude und ihren Anlagetipps.


gesamter Thread:

RSS-Feed dieser Diskussion

Werbung