mandelkow.fr

Categories

Startseite > Periodika > Tageszeitungen > Bundesrepublik Deutschland > Financial Times Deutschland

Financial Times Deutschland

„Wir denken global, recherchieren gründlich, stellen Nachrichten in den Vordergrund. Unsere wichtigsten journalistischen Werte sind Präzision und Fairness. Wir haben Mut zur Meinung und ordnen Informationen in einen Kontext ein. Die FTD ist kompakt. Und sie ist lachsrosa.“ — Steffen Klusmann, Chefredakteur der Financial Times Deutschland

http://www.ftd.de/

Artikel

  • China und USA: Wirtschaft im Vergleich – Amerika bleibt Technologieführer

    25. April, von ftd_admin

    Computerplatine mit Flaggen der USA und Chinas (Foto: Freepik, coffeekai) - China und USA: Wirtschaft im Vergleich - Amerika bleibt Technologieführer

    Mannheim/Frankfurt am Main/Paris – China löst die USA trotz aller Bemühungen und milliardenschwerer Subventionen für neue Patentanmeldungen nicht als globaler Technologieführer ab. Zudem ist China stärker von Technologien aus anderen Regionen abhängig, zeigt eine Analyse des Zentrums für Europäische Wirtschaftsforschung (ZEW), der Universität Frankfurt und der IÉSEG School of Management Paris.

    Europa mehr entkoppeln

    „China hat zwar bei Anzahl und Einfluss von Erfindungen große Fortschritte gemacht, ist aber immer noch abhängig von anderen Regionen und Akteuren. Für Europa ist es innovationspolitisch erstrebenswert, mit führenden Technologienationen wie den USA, Japan und Korea zu kooperieren und dennoch Abhängigkeiten zu reduzieren“, so ZEW-Forscher Philipp Böing.

    Dem Experten nach wäre die Politik hierzulande gut damit beraten, sich auf die Förderung von Schlüsseltechnologien zu konzentrieren. Denn in diesen Bereichen habe sich Europa bereits Vorteile erarbeitet. „Gleichzeitig sollte eine zukünftige Abhängigkeit Europas von chinesischen Innovationen vermieden werden“, rät der Wirtschaftswissenschaftler.

    US-Patente häufiger zitiert

    Während im Jahr 2000 noch mehr als 3 Viertel der PCT-Anmeldungen aus den USA und Europa stammten, hat die westliche Dominanz in den folgenden 2 Jahrzehnten allmählich abgenommen, heißt es. Im Jahr 2020 stammten demnach mehr als die Hälfte der weltweiten PCT-Anmeldungen aus China, Japan und Korea.

    Und trotzdem: Im Ergebnis zeigt sich, dass Patente aus den USA häufiger und Patente aus China seltener zitiert werden. Japanische und koreanische Patente werden dagegen anfangs etwas stärker zitiert als die europäischen, verlieren jedoch im Laufe der Zeit an Bedeutung.

    US-Patente erhalten laut der Studie nicht nur mehr ISR-Zitationen, sondern haben auch in allen geografischen und technologischen Bereichen stärkeren Einfluss. „Obwohl China seinen bilateralen Einfluss in den 2010er-Jahren verbessert hat, ist sein jüngster Wachstumstrend ähnlich wie von den USA und Europa, wenn auch auf niedrigerem Niveau“, Ko-Autorin Elisabeth Müller von der IÉSEG School of Management Paris.

     

    Quelle: www.pressetext.com
    (pte026/23.04.2024/13:55)

    Der Beitrag China und USA: Wirtschaft im Vergleich – Amerika bleibt Technologieführer erschien zuerst auf ftd.de.

  • Bayer Hauptversammlung 2024: Härtetest für Aktionäre – Maxi-Probleme, Mini-Dividende

    25. April, von Klemens Vogel
    Das Bayer-Kreuz in Leverkusen (Foto: Bayer AG) - Bayer Hauptversammlung 2024: Maxi-Probleme und Mini-Dividende – Härtetest für Aktionäre

    Das Bayer-Kreuz in Leverkusen (Foto: Bayer AG)

    Leverkusen – Spitzenfußball mit einem maroden Pharma-Konzern im Gepäck – das ist der Zustand der Bayer AG. „Es wird weniger Bosse geben“, hat CEO Bill Anderson zum anstehenden Umbau gesagt. Die Hauptversammlung wird zeigen, wie stark die Rückendeckung der Aktionäre ist.

    Nur rund 26,5 Milliarden Euro ist Bayer an der Börse noch Wert. Im März ist die Aktie aus dem Index Stoxx Europe 50 geflogen. Der Kurs hat seit Jahresbeginn fast 20 Prozent verloren, notiert diese Woche um 27 Euro. Spitzenwerte über 130 Euro wie im Jahr 2015 liegen in weiter Ferne.

    JPMorgan erwartet solide Zahlen – Anderson wirbt um Vertrauen

    Zurzeit feiern es die Märkte schon, wenn Negatives ausbleibt: Nachdem am Montag die US-Bank JPMorgan ihre Einstufung „Neutral“ und das Kursziel von 34 Euro für die Bayer-Aktie bestätigt hat, stieg der Kurs gleich um 4 Prozent. JPMorgan-Analyst Richard Vosser erwartet solide Quartalszahlen.

    „Es wird keine schnelle Lösung innerhalb eines Jahres sein.“ Mit diesen Worten bittet Bayer-Chef Bill Anderson in seiner vorab publizierten Rede auf der Hauptversammlung die Investoren um Geduld. Er sei überzeugt, dass es einen Weg gebe, die Wende zu schaffen. „Und genau diesen Weg gehen wir.“

    Ein Mühlstein namens Glyphosat – Mini-Dividende vorgeschlagen

    Die hohe Schuldenlast will Anderson abbauen. Sie ist eine Folge der Monsanto-Übernahme 2018 und der Glyphosat-Prozesse. Etwa 13 Milliarden Euro kosteten Bayer allein die Rechtstreits um die gesundheitlichen Folgen des Unkrautvernichters. Mit rund 34,5 Milliarden steht der Konzern in der Kreide.

    Auch die Dividende opfert der CEO dem Sparzwang. Nur 11 Cent je Aktie sollen für das Geschäftsjahr 2023 ausgeschüttet werden – und auch 2024 und 2025 ist nur das gesetzliche Minimum geplant. Anderson möchte die Nettoverschuldung 2024 auf 32,5 bis 33,5 Milliarden Euro reduzieren.

    +++ Hauptversammlung der Bayer AG im Live-Stream +++
    Die Hauptversammlung des DAX-Konzerns kann am Freitag, den 26. April 2024, ab 10 Uhr (MESZ) im Live-Stream verfolgt werden. Alle Informationen finden sich auf der Bayer-Website.

    Aufspaltung – in der derzeitigen Lage kaum sinnvoll

    Aufgeschoben, nicht aber aufgehoben ist laut Anderson eine Zerlegung von Bayer. Während dem darbenden Pharma-Bereich Blockbuster-Medikamente fehlen und die Sparte Crop Science unter den Glyphosat-Klagen ächzt, läuft es nur bei Consumer Health mit Aspirin und Co. einigermaßen rund.

    „Eine Aufspaltung von Bayer bringt überhaupt gar nichts“, meint angesichts dessen etwa Marc Tüngler von der Deutschen Schutzvereinigung für Wertpapierbesitz. Derzeit sei der Konzern nicht in der Verfassung dazu. Auch Großaktionär Harris Associates unterstützt Andersons Entscheidung.

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "662a7a59a7a24";
    function renderTV(kursData, chartData,companyName,currency, chartHeight, chartWidth, code, exchange, kursDate, hidetitle, hidelegend, chartid) {
    console.log("render chart with id", document.querySelector(`[data-chartid="${chartid}"]`));
    let width = chartWidth?chartWidth:600;
    let ratio = 2
    let height = chartHeight?chartHeight:(width/ratio);
    document.querySelector(`[data-chartid="${chartid}"]`).style.height = chartHeight +50
    document.querySelector(`[data-chartid="${chartid}"]`).style.width = chartWidth

    // formatter for x achis dates
    function customXAchsisFormetter(timePoint, tickMarkType, locale) {
    let formatOptions = {};
    const date = new Date(timePoint);

    if(tickMarkType <=1){
    formatOptions = {day: "numeric", month: "short",year: "numeric",}

    }else{
    formatOptions = {day: "numeric", month: "short",year: "numeric",}
    }
    // from given date we should use only as UTC date or timestamp
    // but to format as locale date we can convert UTC date to local date
    const localDateFromUtc = new Date(
    date.getUTCFullYear(),
    date.getUTCMonth(),
    date.getUTCDate()
    );

    return localDateFromUtc.toLocaleString(locale, formatOptions);
    }

    //create buttons
    function createSimpleSwitcher(items, activeItem, activeItemChangedCallback) {
    var switcherElement = document.createElement("div");
    switcherElement.classList.add("switcher");

    var intervalElements = items.map(function (item) {
    var itemEl = document.createElement("button");
    itemEl.innerText = item;
    itemEl.classList.add("switcher-item");
    itemEl.classList.toggle("switcher-active-item", item === activeItem);
    itemEl.addEventListener("click", function () {
    onItemClicked(item);
    });
    switcherElement.appendChild(itemEl);
    return itemEl;
    });

    function onItemClicked(item) {
    if (item === activeItem) {
    return;
    }

    intervalElements.forEach(function (element, index) {
    element.classList.toggle("switcher-active-item", items[index] === item);
    });

    activeItem = item;

    activeItemChangedCallback(item);
    }

    return switcherElement;
    }
    // loading: true or false
    function handleAsyncUI(loading){
    var IntervalButtons = document.getElementsByClassName("switcher-item");
    for(var i = 0; i < IntervalButtons.length; i++){
    IntervalButtons[i].disabled = loading;
    }
    var chart = document.getElementsByClassName("tv-lightweight-charts")[0];
    if(loading){

    chart.style["display"] = "flex"
    chart.style["align-items"] = "center"
    chart.style["justify-content"] = "center"

    var loadingIndicator = document.createElement("div");
    loadingIndicator.classList.add("loader");
    //loadingIndicator.innerText = "Loading";
    loadingIndicator.id ="loadingIndicator"
    chart.appendChild(loadingIndicator);
    }else{
    document.getElementById("loadingIndicator").remove();
    chart.style["display"] = null
    chart.style["align-items"] =null
    chart.style["justify-content"] = null
    }

    }
    var intervals = ["1M","3M","6M","1Y","3Y","5Y"];
    var seriesesData = new Map([
    ["1M", []], // 1m (interval daten?), 3m, 6m, 1y, 3y, 5y
    ["3M", []],
    ["6M", []],
    ["1Y", chartData],
    ["3Y", []],
    ["5Y", []],
    ]);
    var switcherElement = createSimpleSwitcher(intervals, intervals[3], syncToInterval);
    var chartElement = document.createElement("div");
    const chart = LightweightCharts.createChart(chartElement, {
    width: width,
    height: height,
    rightPriceScale: {
    scaleMargins: {
    top: 0.2,
    bottom: 0.2,
    },
    borderVisible: false,
    },
    timeScale: {
    borderVisible: false,
    lockVisibleTimeRangeOnResize: true,

    rightOffset:1,
    tickMarkFormatter:customXAchsisFormetter

    },
    grid: {
    horzLines: {
    color: "#eee",
    visible: false,
    },
    vertLines: {
    color: "#ffffff",
    },
    },
    crosshair: {
    horzLine: {
    visible: false,
    labelVisible: false
    },
    vertLine: {
    visible: true,
    style: 0,
    width: 2,
    color: "rgba(80, 50, 25, 0.1)",
    labelVisible: false,
    }
    },
    handleScroll: {
    mouseWheel: false,
    pressedMouseMove: false,
    horzTouchDrag: false,
    vertTouchDrag: false
    },
    handleScale: {
    axisPressedMouseMove: false,
    mouseWheel: false,
    pinch: false,
    },
    });
    var areaSeries = null;
    var positionDIV = document.querySelector(`[data-chartid="${chartid}"]`)
    positionDIV.appendChild(chartElement);
    positionDIV.appendChild(switcherElement);
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    }
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;
    return [year, month, day].join("-");
    }
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    }
    // what happens on button click
    function syncToInterval(interval) {
    if (areaSeries && seriesesData.get(interval).length <=0) {
    console.log("GETTING REMOTE DATA")

    chart.removeSeries(areaSeries);
    areaSeries = null;
    let apiToken = "za1j116n2273ab1vxukuh6"
    let timeframe = getTimeframe(interval)
    let filter = "adjusted_close"
    handleAsyncUI(true)
    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = []
    newData = JSON.parse(res)//.map(el=>newData.push({time:el.date, value:el.close}))
    // newData = newData.map(el=>{
    // console.log(el.time.year)
    // console.log(el.time.month)
    // console.log(el.time.day)
    // console.log(el)
    // console.log(new Date(el.time.year, el.time.month-1, el.time.day));
    // return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    console.log("newData")
    console.log(newData)
    seriesesData.set(interval, newData)
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries.setData(seriesesData.get(interval));
    chart.timeScale().fitContent();
    handleAsyncUI(false)
    })
    }else{
    console.log("GETTING LOADED DATA")
    if(areaSeries){
    console.log("DELETING LOADED DATA FROM CHART")
    chart.removeSeries(areaSeries);
    areaSeries = null;
    }
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    areaSeries.setData(seriesesData.get(interval));

    chart.timeScale().fitContent();
    }


    }
    // data interval at startup
    syncToInterval(intervals[3]);
    // Name and Kurs as Text in legend



    var watermark = document.createElement("img")
    watermark.classList.add("watermark")
    watermark.setAttribute("src", "https://api.leeway.tech/leeway-sign.png")
    var testA = document.querySelector(`[data-chartid="${chartid}"]`)
    var testB = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var test = testA.getElementsByTagName("canvas")[0].getBoundingClientRect();
    watermark.style.position = "absolute";
    watermark.style.width = "90px";
    watermark.style.height = "30px";
    watermark.style.display = "block";
    //watermark.style.z-index = "1000000";
    watermark.style.bottom = "0";
    watermark.style.right = "10px";


    let linkLW = document.createElement("a")
    linkLW.href="https://www.ftd.de/leeway-tech";
    linkLW.target = "_blank";
    linkLW.appendChild(watermark)
    // append to DOM

    //div-chartwrapper -> div -> div -> table -> tr -> td td -> div
    const myElementA = document.querySelector(`[data-chartid="${chartid}"]`);
    let myElementB = myElementA.childNodes[0]
    let myElementC = myElementB.childNodes[0]
    let myElementD = myElementC.childNodes[0]
    let myElementE = myElementD.childNodes[0]
    let myElementF = myElementE.childNodes[1]
    let myElementG = myElementF.childNodes[0]
    myElementG.appendChild(linkLW);




    if(hidelegend == "false"){
    console.log("SHOW LEGEND!")
    var legend = document.createElement("div");
    legend.classList.add("legend");
    var offsets = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var chartwrapperTop = offsets.top;

    var legendHeight = height *-1
    if(legendHeight>-210){legendHeight = -210;}
    legend.style.top = legendHeight*1.2 + "px"
    positionDIV.appendChild(legend);

    if(hidetitle == "false"){
    var firstRow = document.createElement("div");
    firstRow.classList.add("titleText");

    }

    var secondRow = document.createElement("div");
    secondRow.classList.add("secondRow");

    if(kursData !== null){
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;
    legend.appendChild(secondRow);
    }else{
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    legend.appendChild(secondRow);
    }


    // cursor moving and handling third row of legend
    chart.subscribeCrosshairMove((param) => {
    if (param.time) {
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    let currentDate = new Date(param.time).toLocaleDateString("de-DE", options)
    const price = param.seriesData.get(areaSeries).value;
    secondRow.innerText = currentDate + ": " + price.toFixed(2) + " "+(currency?currency:" ");
    }
    else {
    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;

    }
    });

    }

    }
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    };
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    };
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;

    return [year, month, day].join("-");
    };
    </script>
    <script id="main">

    var scriptTV = document.querySelector("#tvChartLoader");
    scriptTV.addEventListener("load", function() {
    var chartid = "662a7a59a7a24";

    var companyName = "BAYER AG";
    if(companyName.length <=0){
    companyName = "BAYN - XETRA";
    }
    var code = "BAYN";
    var exchange = "XETRA";
    var currency ="EUR";
    var kursData = null;
    var kursDataDate = null;
    var chartHeight = "";
    var chartWidth = "250"
    var hidetitle = "false"
    var hidelegend = "false"
    let apiToken = "za1j116n2273ab1vxukuh6"
    chartWidth = document.querySelector(`[data-chartid="${chartid}"]`).offsetWidth
    var chartData = [];
    var timeframe = getTimeframe("1Y");
    var filter = "adjusted_close";

    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = null;
    chartData = newData = JSON.parse(res)
    // chartData = chartData.map(el=>{return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    kursData = chartData[chartData.length-1].value
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    kursDataDate = chartData[chartData.length-1].time
    let kursDate = new Date(kursDataDate.split("-")[0], Number(kursDataDate.split("-")[1])-1, kursDataDate.split("-")[2]).toLocaleDateString("de-DE", options)

    renderTV(kursData,chartData,companyName,currency, Number(chartHeight), Number(chartWidth), code, exchange, kursDate, hidetitle, hidelegend, chartid)
    });
    });
    </script>

    Gegenanträge der Aktionäre – Anderson mit hoher Medienwirkung

    Den Frust der Aktionäre dürften die Manager zu spüren bekommen: Die Liste mit Gegenanträgen von Kritikern wie die „Coordination gegen Bayer-Gefahren“ ist lang. Schlecht kommt etwa an, dass das Aktionärstreffen wieder nur virtuell stattfindet. Auch das Vergütungssystem steht in der Kritik.

    Zumindest an einer Stelle entfaltet CEO Anderson bereits Wirkung: in den Medien. Im 1. Quartal 2024 führt er das „CEO-Impact-Ranking“ der Dax-Konzern-Bosse an. Die Analyse der Unicepta GmbH bescheinigt seinen Plänen zum Konzernumbau und Stellenabbau hohe mediale Aufmerksamkeit.

     

    Disclaimer:
    Alle Angaben ohne Gewähr auf Vollständigkeit, Richtigkeit und Aktualität. Der Text stellt keine Handelsempfehlung oder Anlageberatung dar.

    Der Beitrag Bayer Hauptversammlung 2024: Härtetest für Aktionäre – Maxi-Probleme, Mini-Dividende erschien zuerst auf ftd.de.

  • Mensch und Maschine Aktie: die Geld-Druck-Maschine – Aufwärtstrend bei Dividende & Co

    24. April, von ftd_admin

    Handshake zwischen Mann mit Helm und Roboter (Foto: freepik) - Mensch und Maschine Aktie: die Geld-Druck-Maschine - Aufwärtstrend bei Dividende & Co

    Die Mensch und Maschine Software SE (MuM) wurde 1984 von Diplom-Informatiker Adi Drotleff als Fachhandel für CAD-Software und Hardware gegründet. Rasch entwickelte sich MuM zum CAD/CAM-Pionier. Drotleff besitzt 46,5 Prozent der Aktien und das Management Team weitere 6,3 Prozent. Im Freefloat befinden sich daher nur rund 45 Prozent der Anteile. MuM sticht durch seine Beständigkeit in allen Wirtschaftszyklen heraus. Während im neuen Markt andere CAD-Anbieter insolvent wurden, verkündete MuM wie jedes Jahr „das erfolgreichste Geschäftsjahr der Firmengeschichte“.

    Mensch, was für eine Maschine

    Der Name wurde gewählt, um die Verbindung zwischen der menschlichen Kreativität und der technologischen Innovation zu untermauern. Ingenieure und Designer sollen mithilfe der CAD-Technologie die richtigen Werkzeuge bereitgestellt bekommen, um Kreativität und Effizienz zu erhöhen. Das scheint zu gelingen.

    Denn seit dem Börsengang 1997 glänzt MuM mit einem stetigen Aufwärtstrend bei Umsatz, Gewinne und Dividende. Den Umsatz hat MuM über die vergangenen 16 Jahre mit einem CAGR von 5,5 Prozent gesteigert, das EBITDA um 12,3 Prozent per annum und die Dividende um jährlich 10,3 Prozent. Aktionäre freuen sich über eine jährliche Rendite von 14,8 Prozent seit dem Börsengang (plus 1.298 Prozent in 20 Jahren, plus 723 Prozent in 10 Jahren).

    Das Geschäftsmodell des Unternehmens

    Vom kleinen Distributor von Autodesk-Anwendungen entwickelte sich MuM über die Jahre zu einem Entwickler von Software und Digitalisierungslösungen in den Bereichen CAD/CAM/CAE und PDM/PLM/BIM. CAD/CAM/CAE sind rechnergestützte Konstruktionen, Fertigungen und Entwicklungen, während PDM/PLM- und BIM-Software-Lösungen zur Planung und Administration großer Industrie- und Bauprojekte eingesetzt werden. MuM unterteilt sich in zwei Segmente:

    • Die Vermarktung der MuM Software (Eigenentwicklung von CAD/CAM/CAE/BIM) erfolgt bereits in über 70 Ländern. Sie macht aktuell rund ein Drittel des Umsatzes aus. Aufgrund des Softwaremodells erwirtschaftet das MuM-Software-Segment jedoch deutlich höhere Margen und ist besonders krisenresilient. Die Positionierung als Nischenanbieter (CAD/CAM für Werkzeugmaschinenbau und BIM für Tiefbau) ist von Vorteil und bietet ein hohes Wachstumspotenzial.
    • Das Digitalisierungsgeschäft, welches weiterhin auch die Autodesk-Software beinhaltet, entwickelt kundenspezifische Softwarelösungen. 75 Prozent des Umsatzes im Digitalisierungsgeschäft wird mit eigenen Lösungen erzielt. Der Absatz dieses Segments erfolgt primär im DACH-Raum. Das Wachstum basiert einerseits auf einer steigenden Nachfrage an Schulungen im Baubereich, andererseits auch auf der Nachfrage nach kundenspezifischen Digitalisierungsprojekten, um eine Standardsoftware mit den nötigen situationsspezifischen Funktionalitäten zu ergänzen.

    Das Digitalisierungsgeschäft erwirtschaftet rund 60 Prozent des Umsatzes, hat aber eine geringere Bruttomarge und auch EBIT-Marge. Ab dem zweiten Halbjahr 2024 wird jedoch das Kooperationsmodell mit Autodesk umgestellt. Dabei erscheint der Vertrieb der Autodesk-Lizenz nicht mehr in der Bilanz von MuM, sondern direkt bei Autodesk. MuM wird dann nur noch die Provision, die der bisherigen Handelsmarge entspricht, ausweisen. Da jedoch direkte Kosten ausfallen, bleibt die Bruttomarge unverändert. Ebenfalls wird es damit durch Wegfall von Forderungen aus den Lizenzverkäufen zu einer Bilanzverkürzung kommen.

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "662a7a59a93ee";
    function renderTV(kursData, chartData,companyName,currency, chartHeight, chartWidth, code, exchange, kursDate, hidetitle, hidelegend, chartid) {
    console.log("render chart with id", document.querySelector(`[data-chartid="${chartid}"]`));
    let width = chartWidth?chartWidth:600;
    let ratio = 2
    let height = chartHeight?chartHeight:(width/ratio);
    document.querySelector(`[data-chartid="${chartid}"]`).style.height = chartHeight +50
    document.querySelector(`[data-chartid="${chartid}"]`).style.width = chartWidth

    // formatter for x achis dates
    function customXAchsisFormetter(timePoint, tickMarkType, locale) {
    let formatOptions = {};
    const date = new Date(timePoint);

    if(tickMarkType <=1){
    formatOptions = {day: "numeric", month: "short",year: "numeric",}

    }else{
    formatOptions = {day: "numeric", month: "short",year: "numeric",}
    }
    // from given date we should use only as UTC date or timestamp
    // but to format as locale date we can convert UTC date to local date
    const localDateFromUtc = new Date(
    date.getUTCFullYear(),
    date.getUTCMonth(),
    date.getUTCDate()
    );

    return localDateFromUtc.toLocaleString(locale, formatOptions);
    }

    //create buttons
    function createSimpleSwitcher(items, activeItem, activeItemChangedCallback) {
    var switcherElement = document.createElement("div");
    switcherElement.classList.add("switcher");

    var intervalElements = items.map(function (item) {
    var itemEl = document.createElement("button");
    itemEl.innerText = item;
    itemEl.classList.add("switcher-item");
    itemEl.classList.toggle("switcher-active-item", item === activeItem);
    itemEl.addEventListener("click", function () {
    onItemClicked(item);
    });
    switcherElement.appendChild(itemEl);
    return itemEl;
    });

    function onItemClicked(item) {
    if (item === activeItem) {
    return;
    }

    intervalElements.forEach(function (element, index) {
    element.classList.toggle("switcher-active-item", items[index] === item);
    });

    activeItem = item;

    activeItemChangedCallback(item);
    }

    return switcherElement;
    }
    // loading: true or false
    function handleAsyncUI(loading){
    var IntervalButtons = document.getElementsByClassName("switcher-item");
    for(var i = 0; i < IntervalButtons.length; i++){
    IntervalButtons[i].disabled = loading;
    }
    var chart = document.getElementsByClassName("tv-lightweight-charts")[0];
    if(loading){

    chart.style["display"] = "flex"
    chart.style["align-items"] = "center"
    chart.style["justify-content"] = "center"

    var loadingIndicator = document.createElement("div");
    loadingIndicator.classList.add("loader");
    //loadingIndicator.innerText = "Loading";
    loadingIndicator.id ="loadingIndicator"
    chart.appendChild(loadingIndicator);
    }else{
    document.getElementById("loadingIndicator").remove();
    chart.style["display"] = null
    chart.style["align-items"] =null
    chart.style["justify-content"] = null
    }

    }
    var intervals = ["1M","3M","6M","1Y","3Y","5Y"];
    var seriesesData = new Map([
    ["1M", []], // 1m (interval daten?), 3m, 6m, 1y, 3y, 5y
    ["3M", []],
    ["6M", []],
    ["1Y", chartData],
    ["3Y", []],
    ["5Y", []],
    ]);
    var switcherElement = createSimpleSwitcher(intervals, intervals[3], syncToInterval);
    var chartElement = document.createElement("div");
    const chart = LightweightCharts.createChart(chartElement, {
    width: width,
    height: height,
    rightPriceScale: {
    scaleMargins: {
    top: 0.2,
    bottom: 0.2,
    },
    borderVisible: false,
    },
    timeScale: {
    borderVisible: false,
    lockVisibleTimeRangeOnResize: true,

    rightOffset:1,
    tickMarkFormatter:customXAchsisFormetter

    },
    grid: {
    horzLines: {
    color: "#eee",
    visible: false,
    },
    vertLines: {
    color: "#ffffff",
    },
    },
    crosshair: {
    horzLine: {
    visible: false,
    labelVisible: false
    },
    vertLine: {
    visible: true,
    style: 0,
    width: 2,
    color: "rgba(80, 50, 25, 0.1)",
    labelVisible: false,
    }
    },
    handleScroll: {
    mouseWheel: false,
    pressedMouseMove: false,
    horzTouchDrag: false,
    vertTouchDrag: false
    },
    handleScale: {
    axisPressedMouseMove: false,
    mouseWheel: false,
    pinch: false,
    },
    });
    var areaSeries = null;
    var positionDIV = document.querySelector(`[data-chartid="${chartid}"]`)
    positionDIV.appendChild(chartElement);
    positionDIV.appendChild(switcherElement);
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    }
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;
    return [year, month, day].join("-");
    }
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    }
    // what happens on button click
    function syncToInterval(interval) {
    if (areaSeries && seriesesData.get(interval).length <=0) {
    console.log("GETTING REMOTE DATA")

    chart.removeSeries(areaSeries);
    areaSeries = null;
    let apiToken = "za1j116n2273ab1vxukuh6"
    let timeframe = getTimeframe(interval)
    let filter = "adjusted_close"
    handleAsyncUI(true)
    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = []
    newData = JSON.parse(res)//.map(el=>newData.push({time:el.date, value:el.close}))
    // newData = newData.map(el=>{
    // console.log(el.time.year)
    // console.log(el.time.month)
    // console.log(el.time.day)
    // console.log(el)
    // console.log(new Date(el.time.year, el.time.month-1, el.time.day));
    // return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    console.log("newData")
    console.log(newData)
    seriesesData.set(interval, newData)
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries.setData(seriesesData.get(interval));
    chart.timeScale().fitContent();
    handleAsyncUI(false)
    })
    }else{
    console.log("GETTING LOADED DATA")
    if(areaSeries){
    console.log("DELETING LOADED DATA FROM CHART")
    chart.removeSeries(areaSeries);
    areaSeries = null;
    }
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    areaSeries.setData(seriesesData.get(interval));

    chart.timeScale().fitContent();
    }


    }
    // data interval at startup
    syncToInterval(intervals[3]);
    // Name and Kurs as Text in legend



    var watermark = document.createElement("img")
    watermark.classList.add("watermark")
    watermark.setAttribute("src", "https://api.leeway.tech/leeway-sign.png")
    var testA = document.querySelector(`[data-chartid="${chartid}"]`)
    var testB = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var test = testA.getElementsByTagName("canvas")[0].getBoundingClientRect();
    watermark.style.position = "absolute";
    watermark.style.width = "90px";
    watermark.style.height = "30px";
    watermark.style.display = "block";
    //watermark.style.z-index = "1000000";
    watermark.style.bottom = "0";
    watermark.style.right = "10px";


    let linkLW = document.createElement("a")
    linkLW.href="https://www.ftd.de/leeway-tech";
    linkLW.target = "_blank";
    linkLW.appendChild(watermark)
    // append to DOM

    //div-chartwrapper -> div -> div -> table -> tr -> td td -> div
    const myElementA = document.querySelector(`[data-chartid="${chartid}"]`);
    let myElementB = myElementA.childNodes[0]
    let myElementC = myElementB.childNodes[0]
    let myElementD = myElementC.childNodes[0]
    let myElementE = myElementD.childNodes[0]
    let myElementF = myElementE.childNodes[1]
    let myElementG = myElementF.childNodes[0]
    myElementG.appendChild(linkLW);




    if(hidelegend == "false"){
    console.log("SHOW LEGEND!")
    var legend = document.createElement("div");
    legend.classList.add("legend");
    var offsets = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var chartwrapperTop = offsets.top;

    var legendHeight = height *-1
    if(legendHeight>-210){legendHeight = -210;}
    legend.style.top = legendHeight*1.2 + "px"
    positionDIV.appendChild(legend);

    if(hidetitle == "false"){
    var firstRow = document.createElement("div");
    firstRow.classList.add("titleText");

    }

    var secondRow = document.createElement("div");
    secondRow.classList.add("secondRow");

    if(kursData !== null){
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;
    legend.appendChild(secondRow);
    }else{
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    legend.appendChild(secondRow);
    }


    // cursor moving and handling third row of legend
    chart.subscribeCrosshairMove((param) => {
    if (param.time) {
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    let currentDate = new Date(param.time).toLocaleDateString("de-DE", options)
    const price = param.seriesData.get(areaSeries).value;
    secondRow.innerText = currentDate + ": " + price.toFixed(2) + " "+(currency?currency:" ");
    }
    else {
    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;

    }
    });

    }

    }
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    };
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    };
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;

    return [year, month, day].join("-");
    };
    </script>
    <script id="main">

    var scriptTV = document.querySelector("#tvChartLoader");
    scriptTV.addEventListener("load", function() {
    var chartid = "662a7a59a93ee";

    var companyName = "Mensch und Maschine Software SE";
    if(companyName.length <=0){
    companyName = "MUM - XETRA";
    }
    var code = "MUM";
    var exchange = "XETRA";
    var currency ="EUR";
    var kursData = null;
    var kursDataDate = null;
    var chartHeight = "";
    var chartWidth = "250"
    var hidetitle = "false"
    var hidelegend = "false"
    let apiToken = "za1j116n2273ab1vxukuh6"
    chartWidth = document.querySelector(`[data-chartid="${chartid}"]`).offsetWidth
    var chartData = [];
    var timeframe = getTimeframe("1Y");
    var filter = "adjusted_close";

    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = null;
    chartData = newData = JSON.parse(res)
    // chartData = chartData.map(el=>{return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    kursData = chartData[chartData.length-1].value
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    kursDataDate = chartData[chartData.length-1].time
    let kursDate = new Date(kursDataDate.split("-")[0], Number(kursDataDate.split("-")[1])-1, kursDataDate.split("-")[2]).toLocaleDateString("de-DE", options)

    renderTV(kursData,chartData,companyName,currency, Number(chartHeight), Number(chartWidth), code, exchange, kursDate, hidetitle, hidelegend, chartid)
    });
    });
    </script>

    Die Kundensegmente von MuM

    Zu den Kunden von MuM zählen die Industrie-, Architektur-, Bau- und Infrastrukturbranche. Rund 41 Prozent des Umsatzes wird in Deutschland erzielt, weitere 18 Prozent in der Schweiz und Österreich, 32,3 Prozent im Rest Europas und 8,2 Prozent international.

    MuM und die Wettbewerber

    Der Wettbewerb ist entlang der börsennotierten Unternehmen überschaubar. Als Peergroup lassen sich Autodesk, Nemetschek, Dassault Systems, Admicom und Bentley Systems nennen. Im Peer-Vergleich ist MuM mit einem KGV von 24,9 am günstigsten. Autodesk folgt mit einem KGV von 27, während Nemetschek mit einem KGV von 48 am teuersten ist. Auch auf Preis-Free-Cashflow Basis ist MuM mit einem Wert von 21,7 im Vergleich zu den Peers, die zwischen 30 und 45 bewertet sind, günstig. Die Bruttomarge liegt jedoch bei MuM und Nemetschek nur bei rund 52 Prozent, während Autodesk mit über 90 Prozent klar führend ist. Dassault Systems und Bentley Systems liegen ebenfalls im 80 Prozent Bereich.

    Beim ROIC, einer der wichtigsten Kennziffern, besticht MuM mit 23 Prozent (9 Prozent WACC). Der ROIC-Spread liegt daher bei starken 14 Prozent. MuM schafft also erheblichen Wert für Aktionäre. Autodesk hat aktuell einen negativen ROIC-Spread (9 Prozent ROIC vs. 13 Prozent WACC) und schafft somit keinen Wert für Anleger. Dassault Systems weist einen dünnen ROIC-Spread von 2 Prozent aus. Nemetschek liegt bei einem ROIC von 12 Prozent und WACC von 7,5 Prozent. MuM ist somit der klare Gewinner, wenn es um die Kapitalrendite geht.

    Dividendenausschüttung oder Aktiendividende

    MuM ist für Dividendenwachstumsinvestoren eine besonders attraktive Option. Seit 9 Jahren wurde die Dividende angehoben und die Dividende hat sich von 0,20 Euro je Aktie auf 1,60 Euro je Aktie verachtfacht (CAGR 26,441 Prozent). 2024 wird eine Erhöhung von 15,2 Prozent (1,90 Euro je Aktie) und 2025 von 15,8 Prozent (2,20 Euro je Aktie) erwartet. Grund für die laufend steigende Dividendenerhöhung sind Investitionen für Software-Entwicklung von über 24 Millionen Euro pro Jahr, die nicht aktiviert werden. Deshalb kann MuM den Gewinn voll ausschütten.

    Eine Option für Langfristanleger, die keine Dividendenausschüttung möchten, ist die Aktiendividende. Es werden, sofern das Bezugsrecht volle Aktien zulässt, die Anzahl der Aktien, auf die man Anspruch hat, ausgeschüttet. Die erhaltenen zusätzlichen Aktien werden jedoch wie eine Ausschüttung versteuert. Bruchstücke werden nicht mit Aktiendividenden vergütet. Dieser Anteil wird als Dividende ausbezahlt.

    Trotz Wirtschaftsflaute: Bei MuM läuft es wie auf Schienen

    MuM ist ein Meister in Effizienz und Kostenmanagement. Auch im ersten Quartal 2024 kam es zu neuen Rekordgewinnen, obwohl der Umsatz um 2 Prozent rückläufig war. Die Bruttomarge konnte um 6,6 Prozent gesteigert werden. Sowohl das Software- als auch das Digitalisierungs-Segment erreichten höhere Brutto- und EBIT-Margen. 2024 wird im Umsatz, aufgrund der Umstellung des Vergütungsmodells mit Autodesk, ein Rückgang erwartet, aber die Margen werden bis 2025 aufgrund dieser Umstellung von 52,4 Prozent auf 73,3 Prozent steigen.

    Das Gewinnwachstum soll sich fortsetzen. 2024 wird es auf 10 bis 20 Prozent geschätzt. 2025 dann 12 bis 25 Prozent. MuM kauft auch stetig Aktien zurück, und sofern sich eine weitere attraktive Chance im Bereich der 45 bis 47 Euro Kursmarke bietet, wird MuM das Rückkaufprogramm ausweiten. Langfristig erwartet MuM ein organisches Wachstum von CAGR 10 Prozent bis 2031. Analysten setzen MuM auf Buy oder Strong Buy mit Kurszielen zwischen 62 und 74 Euro (Kurs Stand 19. April 2024: 51 Euro).

    Fazit

    MuM erfüllt viele Anlegerwünsche: „Skin in the Game“ mit Adi Drotleff als inspirierenden Gründer, resistent in allen Wirtschaftszyklen, transparente Investor-Relations-Seite mit vielen Informationen, Aktienrückkäufe auf attraktivem Bewertungsniveau, organisches Wachstum von CAGR 10 Prozent bis 2031. Dazu ein zweistelliges Dividendenwachstum bei einem Free Cashflow von aktuell 13,7 Prozent und ein ROIC-Spread von 14 Prozent, der die Wettbewerber in den Schatten stellt.

    Die Umstellung des Vergütungsmodells mit Autodesk wird die Bruttomarge von 52 Prozent auf über 70 Prozent bringen. Die MuM-Aktie befindet sich seit rund 4 Jahren in einer Konsolidierungsphase. Das nächste Allzeithoch wäre mehr als verdient.

    Der Beitrag Mensch und Maschine Aktie: die Geld-Druck-Maschine – Aufwärtstrend bei Dividende & Co erschien zuerst auf ftd.de.

  • BASF Hauptversammlung 2024: Kurs aus der Krise mit neuem CEO – Infos und Prognose

    24. April, von Klemens Vogel
    Steamcracker-Anlage im BASF-Werk Ludwigshafen (Foto: BASF SE, Detlef W. Schmalow) - BASF Hauptversammlung 2024 Kurs Krise CEO Prognose Dividende

    Steamcracker-Anlage im BASF-Werk Ludwigshafen (Foto: BASF SE, Detlef W. Schmalow)

    Ludwigshafen – Mit Elan ins Jahr 2024 – ob das dem weltgrößten Chemiekonzern gelingt, werden nicht nur die Ergebnisse des 1. Quartals zeigen. 2023 waren Umsatz und Gewinn zurückgegangen, hatten die Prognosen verfehlt. Auch von der Hauptversammlung erwarten die Märkte Impulse.

    Denn Martin Brudermüller geht – und Markus Kamieth kommt: Der Wechsel an der Vorstandsspitze ist das Großereignis des Aktionärstreffens. Ebenso wie sein Vorgänger ist Kamieth ein Eigengewächs, trat 1999 bei BASF ein. Seit 2020 leitete der promovierte Chemiker das BASF-Asiengeschäft.

    +++ Ordentliche Hauptversammlung der BASF SE +++
    Die Hauptversammlung des DAX-Konzerns findet am Donnerstag, den 25. April 2024, um 10 Uhr (MESZ) statt. Aktionäre können auch online teilnehmen. Die Rede von Martin Brudermüller überträgt BASF live. Informationen zur Hauptversammlung auf der BASF-Website.

    Krisenmanager und Mahner – Geschäftsklima bessert sich

    Brudermüller war jahrelang die Stimme der Chemie in Deutschland, forderte vehement bessere Bedingungen für den Standort. Seine Amtszeit war von Krisen geprägt: Die Corona-Pandemie, die Energiekrise nach Russlands Angriff und die weltweite Nachfrageschwäche setzten BASF stark zu.

    Aktuell ist Licht am Ende Tunnels: Das Münchener ifo Institut meldet für März ein verbessertes Geschäftsklima in der Chemie, vor allem die Aussichten haben sich verbessert. Im Februar wuchs auch die deutsche Chemie-Produktion um 4,6 Prozent. BASF-Chef Brudermüller spricht mit Blick auf seinen Konzern von „Bodenbildung“.

    Leichte Erholungstendenzen an der Börse – Dividende trotz Krise

    Auch der Aktienkurs spiegelt die keimende Hoffnung, ist seit Jahresbeginn knapp 4,5 Prozent geklettert. Mit dem russischen Überfall auf die Ukraine war die Notierung eingebrochen, dümpelt seither um die 40 bis 50 Euro. Höchststände von über 90 Euro wie Ende 2017 sind in weiter Ferne.

    Trotz Krise, eines bleibt sicher: die Dividende. Für 2023 schlägt der Vorstand 3,40 Euro je Aktie vor und hält damit das Niveau der beiden Vorjahre. Stimmen die Aktionäre wie erwartet zu, ist die Zahlung zum 30. April fällig. Allerdings könnte 2024 der Cashflow sinken – Gefahr für die Dividende.

    Brudermüllers Vermächtnis: Dekarbonisierung eingeleitet

    Grüne Transformation, Umbau Richtung Klimaneutralität – das war Brudermüllers großes Projekt. Auf der Zielgeraden kann er mit der weltweit ersten elektrischen Steamcracker-Anlage in Ludwigshafen, die Grundstoffe für die Plastikherstellung liefert, einen weiteren Schritt vorweisen.

    Die Abkehr von fossiler Energie steigert den Stromhunger. BASF will sich daher große Windkraft-Kapazitäten sichern. Nun hat der Chemie-Riese einen 49-Prozent-Anteil an Offshore-Projekten von Vattenfall in der Nordsee erworben. Auch in China investiert BASF in einen Offshore-Windpark.

    Deka lehnt Aufsichtsrat ab – Menschenrechtler protestieren

    Ärger droht der BASF zur Hauptversammlung sowohl im Saal als auch davor. So lehnt die bekannte Fondsgesellschaft Deka als Aktionär die Wiederwahl des Ex-Vorstandschefs Kurt Bock (bis 2018) zum Vorsitzenden des Aufsichtsrats ab. Trotz „Cooling-Off-Phase“ zweifelt die Deka seine Neutralität an.

    Und Proteste gegen uigurische Zwangsarbeit haben Aktivisten vor dem Mannheimer Congress Center Rosengarten angekündigt. Zwar ist BASF aus 2 Joint-Ventures mit chinesischen Partnern ausgestiegen. Die Menschenrechtler kritisieren aber, dass dies erst auf Druck geschah und fordern eine Aufarbeitung.

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "662a7a59aaf2c";
    function renderTV(kursData, chartData,companyName,currency, chartHeight, chartWidth, code, exchange, kursDate, hidetitle, hidelegend, chartid) {
    console.log("render chart with id", document.querySelector(`[data-chartid="${chartid}"]`));
    let width = chartWidth?chartWidth:600;
    let ratio = 2
    let height = chartHeight?chartHeight:(width/ratio);
    document.querySelector(`[data-chartid="${chartid}"]`).style.height = chartHeight +50
    document.querySelector(`[data-chartid="${chartid}"]`).style.width = chartWidth

    // formatter for x achis dates
    function customXAchsisFormetter(timePoint, tickMarkType, locale) {
    let formatOptions = {};
    const date = new Date(timePoint);

    if(tickMarkType <=1){
    formatOptions = {day: "numeric", month: "short",year: "numeric",}

    }else{
    formatOptions = {day: "numeric", month: "short",year: "numeric",}
    }
    // from given date we should use only as UTC date or timestamp
    // but to format as locale date we can convert UTC date to local date
    const localDateFromUtc = new Date(
    date.getUTCFullYear(),
    date.getUTCMonth(),
    date.getUTCDate()
    );

    return localDateFromUtc.toLocaleString(locale, formatOptions);
    }

    //create buttons
    function createSimpleSwitcher(items, activeItem, activeItemChangedCallback) {
    var switcherElement = document.createElement("div");
    switcherElement.classList.add("switcher");

    var intervalElements = items.map(function (item) {
    var itemEl = document.createElement("button");
    itemEl.innerText = item;
    itemEl.classList.add("switcher-item");
    itemEl.classList.toggle("switcher-active-item", item === activeItem);
    itemEl.addEventListener("click", function () {
    onItemClicked(item);
    });
    switcherElement.appendChild(itemEl);
    return itemEl;
    });

    function onItemClicked(item) {
    if (item === activeItem) {
    return;
    }

    intervalElements.forEach(function (element, index) {
    element.classList.toggle("switcher-active-item", items[index] === item);
    });

    activeItem = item;

    activeItemChangedCallback(item);
    }

    return switcherElement;
    }
    // loading: true or false
    function handleAsyncUI(loading){
    var IntervalButtons = document.getElementsByClassName("switcher-item");
    for(var i = 0; i < IntervalButtons.length; i++){
    IntervalButtons[i].disabled = loading;
    }
    var chart = document.getElementsByClassName("tv-lightweight-charts")[0];
    if(loading){

    chart.style["display"] = "flex"
    chart.style["align-items"] = "center"
    chart.style["justify-content"] = "center"

    var loadingIndicator = document.createElement("div");
    loadingIndicator.classList.add("loader");
    //loadingIndicator.innerText = "Loading";
    loadingIndicator.id ="loadingIndicator"
    chart.appendChild(loadingIndicator);
    }else{
    document.getElementById("loadingIndicator").remove();
    chart.style["display"] = null
    chart.style["align-items"] =null
    chart.style["justify-content"] = null
    }

    }
    var intervals = ["1M","3M","6M","1Y","3Y","5Y"];
    var seriesesData = new Map([
    ["1M", []], // 1m (interval daten?), 3m, 6m, 1y, 3y, 5y
    ["3M", []],
    ["6M", []],
    ["1Y", chartData],
    ["3Y", []],
    ["5Y", []],
    ]);
    var switcherElement = createSimpleSwitcher(intervals, intervals[3], syncToInterval);
    var chartElement = document.createElement("div");
    const chart = LightweightCharts.createChart(chartElement, {
    width: width,
    height: height,
    rightPriceScale: {
    scaleMargins: {
    top: 0.2,
    bottom: 0.2,
    },
    borderVisible: false,
    },
    timeScale: {
    borderVisible: false,
    lockVisibleTimeRangeOnResize: true,

    rightOffset:1,
    tickMarkFormatter:customXAchsisFormetter

    },
    grid: {
    horzLines: {
    color: "#eee",
    visible: false,
    },
    vertLines: {
    color: "#ffffff",
    },
    },
    crosshair: {
    horzLine: {
    visible: false,
    labelVisible: false
    },
    vertLine: {
    visible: true,
    style: 0,
    width: 2,
    color: "rgba(80, 50, 25, 0.1)",
    labelVisible: false,
    }
    },
    handleScroll: {
    mouseWheel: false,
    pressedMouseMove: false,
    horzTouchDrag: false,
    vertTouchDrag: false
    },
    handleScale: {
    axisPressedMouseMove: false,
    mouseWheel: false,
    pinch: false,
    },
    });
    var areaSeries = null;
    var positionDIV = document.querySelector(`[data-chartid="${chartid}"]`)
    positionDIV.appendChild(chartElement);
    positionDIV.appendChild(switcherElement);
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    }
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;
    return [year, month, day].join("-");
    }
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    }
    // what happens on button click
    function syncToInterval(interval) {
    if (areaSeries && seriesesData.get(interval).length <=0) {
    console.log("GETTING REMOTE DATA")

    chart.removeSeries(areaSeries);
    areaSeries = null;
    let apiToken = "za1j116n2273ab1vxukuh6"
    let timeframe = getTimeframe(interval)
    let filter = "adjusted_close"
    handleAsyncUI(true)
    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = []
    newData = JSON.parse(res)//.map(el=>newData.push({time:el.date, value:el.close}))
    // newData = newData.map(el=>{
    // console.log(el.time.year)
    // console.log(el.time.month)
    // console.log(el.time.day)
    // console.log(el)
    // console.log(new Date(el.time.year, el.time.month-1, el.time.day));
    // return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    console.log("newData")
    console.log(newData)
    seriesesData.set(interval, newData)
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries.setData(seriesesData.get(interval));
    chart.timeScale().fitContent();
    handleAsyncUI(false)
    })
    }else{
    console.log("GETTING LOADED DATA")
    if(areaSeries){
    console.log("DELETING LOADED DATA FROM CHART")
    chart.removeSeries(areaSeries);
    areaSeries = null;
    }
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    areaSeries.setData(seriesesData.get(interval));

    chart.timeScale().fitContent();
    }


    }
    // data interval at startup
    syncToInterval(intervals[3]);
    // Name and Kurs as Text in legend



    var watermark = document.createElement("img")
    watermark.classList.add("watermark")
    watermark.setAttribute("src", "https://api.leeway.tech/leeway-sign.png")
    var testA = document.querySelector(`[data-chartid="${chartid}"]`)
    var testB = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var test = testA.getElementsByTagName("canvas")[0].getBoundingClientRect();
    watermark.style.position = "absolute";
    watermark.style.width = "90px";
    watermark.style.height = "30px";
    watermark.style.display = "block";
    //watermark.style.z-index = "1000000";
    watermark.style.bottom = "0";
    watermark.style.right = "10px";


    let linkLW = document.createElement("a")
    linkLW.href="https://www.ftd.de/leeway-tech";
    linkLW.target = "_blank";
    linkLW.appendChild(watermark)
    // append to DOM

    //div-chartwrapper -> div -> div -> table -> tr -> td td -> div
    const myElementA = document.querySelector(`[data-chartid="${chartid}"]`);
    let myElementB = myElementA.childNodes[0]
    let myElementC = myElementB.childNodes[0]
    let myElementD = myElementC.childNodes[0]
    let myElementE = myElementD.childNodes[0]
    let myElementF = myElementE.childNodes[1]
    let myElementG = myElementF.childNodes[0]
    myElementG.appendChild(linkLW);




    if(hidelegend == "false"){
    console.log("SHOW LEGEND!")
    var legend = document.createElement("div");
    legend.classList.add("legend");
    var offsets = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var chartwrapperTop = offsets.top;

    var legendHeight = height *-1
    if(legendHeight>-210){legendHeight = -210;}
    legend.style.top = legendHeight*1.2 + "px"
    positionDIV.appendChild(legend);

    if(hidetitle == "false"){
    var firstRow = document.createElement("div");
    firstRow.classList.add("titleText");

    }

    var secondRow = document.createElement("div");
    secondRow.classList.add("secondRow");

    if(kursData !== null){
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;
    legend.appendChild(secondRow);
    }else{
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    legend.appendChild(secondRow);
    }


    // cursor moving and handling third row of legend
    chart.subscribeCrosshairMove((param) => {
    if (param.time) {
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    let currentDate = new Date(param.time).toLocaleDateString("de-DE", options)
    const price = param.seriesData.get(areaSeries).value;
    secondRow.innerText = currentDate + ": " + price.toFixed(2) + " "+(currency?currency:" ");
    }
    else {
    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;

    }
    });

    }

    }
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    };
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    };
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;

    return [year, month, day].join("-");
    };
    </script>
    <script id="main">

    var scriptTV = document.querySelector("#tvChartLoader");
    scriptTV.addEventListener("load", function() {
    var chartid = "662a7a59aaf2c";

    var companyName = "BASF SE";
    if(companyName.length <=0){
    companyName = "BAS - XETRA";
    }
    var code = "BAS";
    var exchange = "XETRA";
    var currency ="EUR";
    var kursData = null;
    var kursDataDate = null;
    var chartHeight = "";
    var chartWidth = "250"
    var hidetitle = "false"
    var hidelegend = "false"
    let apiToken = "za1j116n2273ab1vxukuh6"
    chartWidth = document.querySelector(`[data-chartid="${chartid}"]`).offsetWidth
    var chartData = [];
    var timeframe = getTimeframe("1Y");
    var filter = "adjusted_close";

    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = null;
    chartData = newData = JSON.parse(res)
    // chartData = chartData.map(el=>{return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    kursData = chartData[chartData.length-1].value
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    kursDataDate = chartData[chartData.length-1].time
    let kursDate = new Date(kursDataDate.split("-")[0], Number(kursDataDate.split("-")[1])-1, kursDataDate.split("-")[2]).toLocaleDateString("de-DE", options)

    renderTV(kursData,chartData,companyName,currency, Number(chartHeight), Number(chartWidth), code, exchange, kursDate, hidetitle, hidelegend, chartid)
    });
    });
    </script>

    Gewinn und Umsatz: Schätzungen der Analysten

    Der BASF-Gewinn pro Aktie wird nach der mittleren Schätzung von 4 Analysten auf finanzen.net im 1. Quartal 2024 bei rund 1,31 Euro liegen. Das ist ein Plus gegenüber dem 4. Quartal 2023 mit einem Verlust von 0,18 Euro. Rund 1,93 Euro betrug der Gewinn pro Aktie allerdings von Januar bis März 2023.

    Wachstum verheißen die Umsatzprognosen – rund 18,40 Milliarden Euro schätzen die Analysten im Mittel für das 1. Quartal 2024. Das ist mehr als im Vorjahresquartal (rund 17,50 Milliarden Euro) und auch als im 4. Quartal 2023 (rund 15,87 Milliarden). Das Geschäftsjahr endet am 31. Dezember.

     

    Disclaimer:
    Alle Angaben ohne Gewähr auf Vollständigkeit, Richtigkeit und Aktualität. Der Text stellt keine Handelsempfehlung oder Anlageberatung dar.

    Der Beitrag BASF Hauptversammlung 2024: Kurs aus der Krise mit neuem CEO – Infos und Prognose erschien zuerst auf ftd.de.

  • Boeing Quartalszahlen: Aktie in Turbulenzen nach 737-Desaster – Prognose und Überblick

    24. April, von Klemens Vogel
    Verkehrsflugzeug vor Gewitterwolken (Foto: Freepik, Hashmi3) - Boeing Quartalszahlen: Sicherheitsmängel bei 737, Aktie in Turbulenzen – Prognose und Überblick

    Boeing ist in Turbulenzen (Symbolbild, Foto: Freepik, Hashmi3)

    Arlington – Pleiten, Pech und Pannen sind für kein Unternehmen schön – für einen Flugzeugbauer sind sie katastrophal. Seit zwei 737 Max vor über 5 Jahren softwarebedingt abstürzten, wird der Konzern das Sicherheitsthema nicht los. Heute legt Boeing Geschäftszahlen für das 1. Quartal vor.

    Aktuell muss der Konzern den Alaska-Airlines-Unfall im Januar verarbeiten, als der Notausstieg einer 737 beim Flug abriss – zum Glück ohne Todesopfer. Die US-Aufsichtsbehörde sowie eine kurz danach publizierte Studie stellten fest, dass Boeing viele Sicherheitsstandards nicht eingehalten hat.

    Volatiler Kursverlauf an der Börse – weniger 737 ausgeliefert

    Der Boeing-Aktienkurs gleicht derzeit einem Jet in schweren Turbulenzen – es geht Auf und Ab. Seit Jahresbeginn hat das Papier über 33 Prozent nachgegeben, notierte Dienstag (17 Uhr MESZ) unter 170 US-Dollar. Dabei war es vor dem Alaska-Air-Vorfall steil hoch gegangen, vorangegangen war ein Absturz im Herbst.

    Extra-Qualitätskontrollen, auch durch die staatliche Aufsicht, verzögerten zuletzt die Produktion. Boeing lieferte daher im 1. Quartal 40,7 Prozent weniger 737 aus als im Quartal des Vorjahres. Allerdings konnte der Konzern bei den margenstärkeren 767- und 787-Modellen etwas zulegen.

    Die Passagierzahlen auf Rekordhoch – Airlines sind Leidtragende

    Fliegen ist wieder en vogue – daher trifft der Lieferstau infolge der Qualitätsmängel die Airlines hart. Die International Air Transport Association erwartet 2024 rund 4,7 Milliarden Passagiere – 2019 waren es 4,5 Milliarden. Bereits vor der jüngsten Boeing-Krise fehlten den Airlines rund 3.000 Jets.

    Hinzu kommt: 737-Max-9-Jets mussten nach dem Alaska-Airlines-Vorfall 3 Wochen lang am Boden bleiben. So meldete die US-Fluggesellschaft United Airlines, durch das Flugverbot habe sie im 1. Quartal 124 Millionen US-Dollar verloren. Hunderte Flüge entfielen, der Gewinn ging um 200 Millionen US-Dollar zurück.

    CEO Calhoun geht – Whistleblower prangert Fehler an

    Vorläufiger Höhepunkt war letzten Mittwoch der Auftritt des Boeing-Insiders Sam Salehpour vor dem US-Senat: „Ich war Zeuge von schweren Montagefehlern“, berichtete er über die Produktion des 787 Dreamliner. Boeing wies die Kritik zurück: Man habe die Flieger gecheckt und keine Mängel entdeckt.

    Folge des Sicherheitsdesasters bei Boeing: CEO Dave Calhoun hat nun seinen Rückzug angekündigt, Ende 2024 ist Schluss. In seinem Brief an die Boeing-Belegschaft forderte er „Demut und völlige Transparenz“. Sicherheit und Qualität müssten an erster Stelle stehen. „Die Augen der Welt sind auf uns gerichtet.“

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "662a7a59ac6db";
    function renderTV(kursData, chartData,companyName,currency, chartHeight, chartWidth, code, exchange, kursDate, hidetitle, hidelegend, chartid) {
    console.log("render chart with id", document.querySelector(`[data-chartid="${chartid}"]`));
    let width = chartWidth?chartWidth:600;
    let ratio = 2
    let height = chartHeight?chartHeight:(width/ratio);
    document.querySelector(`[data-chartid="${chartid}"]`).style.height = chartHeight +50
    document.querySelector(`[data-chartid="${chartid}"]`).style.width = chartWidth

    // formatter for x achis dates
    function customXAchsisFormetter(timePoint, tickMarkType, locale) {
    let formatOptions = {};
    const date = new Date(timePoint);

    if(tickMarkType <=1){
    formatOptions = {day: "numeric", month: "short",year: "numeric",}

    }else{
    formatOptions = {day: "numeric", month: "short",year: "numeric",}
    }
    // from given date we should use only as UTC date or timestamp
    // but to format as locale date we can convert UTC date to local date
    const localDateFromUtc = new Date(
    date.getUTCFullYear(),
    date.getUTCMonth(),
    date.getUTCDate()
    );

    return localDateFromUtc.toLocaleString(locale, formatOptions);
    }

    //create buttons
    function createSimpleSwitcher(items, activeItem, activeItemChangedCallback) {
    var switcherElement = document.createElement("div");
    switcherElement.classList.add("switcher");

    var intervalElements = items.map(function (item) {
    var itemEl = document.createElement("button");
    itemEl.innerText = item;
    itemEl.classList.add("switcher-item");
    itemEl.classList.toggle("switcher-active-item", item === activeItem);
    itemEl.addEventListener("click", function () {
    onItemClicked(item);
    });
    switcherElement.appendChild(itemEl);
    return itemEl;
    });

    function onItemClicked(item) {
    if (item === activeItem) {
    return;
    }

    intervalElements.forEach(function (element, index) {
    element.classList.toggle("switcher-active-item", items[index] === item);
    });

    activeItem = item;

    activeItemChangedCallback(item);
    }

    return switcherElement;
    }
    // loading: true or false
    function handleAsyncUI(loading){
    var IntervalButtons = document.getElementsByClassName("switcher-item");
    for(var i = 0; i < IntervalButtons.length; i++){
    IntervalButtons[i].disabled = loading;
    }
    var chart = document.getElementsByClassName("tv-lightweight-charts")[0];
    if(loading){

    chart.style["display"] = "flex"
    chart.style["align-items"] = "center"
    chart.style["justify-content"] = "center"

    var loadingIndicator = document.createElement("div");
    loadingIndicator.classList.add("loader");
    //loadingIndicator.innerText = "Loading";
    loadingIndicator.id ="loadingIndicator"
    chart.appendChild(loadingIndicator);
    }else{
    document.getElementById("loadingIndicator").remove();
    chart.style["display"] = null
    chart.style["align-items"] =null
    chart.style["justify-content"] = null
    }

    }
    var intervals = ["1M","3M","6M","1Y","3Y","5Y"];
    var seriesesData = new Map([
    ["1M", []], // 1m (interval daten?), 3m, 6m, 1y, 3y, 5y
    ["3M", []],
    ["6M", []],
    ["1Y", chartData],
    ["3Y", []],
    ["5Y", []],
    ]);
    var switcherElement = createSimpleSwitcher(intervals, intervals[3], syncToInterval);
    var chartElement = document.createElement("div");
    const chart = LightweightCharts.createChart(chartElement, {
    width: width,
    height: height,
    rightPriceScale: {
    scaleMargins: {
    top: 0.2,
    bottom: 0.2,
    },
    borderVisible: false,
    },
    timeScale: {
    borderVisible: false,
    lockVisibleTimeRangeOnResize: true,

    rightOffset:1,
    tickMarkFormatter:customXAchsisFormetter

    },
    grid: {
    horzLines: {
    color: "#eee",
    visible: false,
    },
    vertLines: {
    color: "#ffffff",
    },
    },
    crosshair: {
    horzLine: {
    visible: false,
    labelVisible: false
    },
    vertLine: {
    visible: true,
    style: 0,
    width: 2,
    color: "rgba(80, 50, 25, 0.1)",
    labelVisible: false,
    }
    },
    handleScroll: {
    mouseWheel: false,
    pressedMouseMove: false,
    horzTouchDrag: false,
    vertTouchDrag: false
    },
    handleScale: {
    axisPressedMouseMove: false,
    mouseWheel: false,
    pinch: false,
    },
    });
    var areaSeries = null;
    var positionDIV = document.querySelector(`[data-chartid="${chartid}"]`)
    positionDIV.appendChild(chartElement);
    positionDIV.appendChild(switcherElement);
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    }
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;
    return [year, month, day].join("-");
    }
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    }
    // what happens on button click
    function syncToInterval(interval) {
    if (areaSeries && seriesesData.get(interval).length <=0) {
    console.log("GETTING REMOTE DATA")

    chart.removeSeries(areaSeries);
    areaSeries = null;
    let apiToken = "za1j116n2273ab1vxukuh6"
    let timeframe = getTimeframe(interval)
    let filter = "adjusted_close"
    handleAsyncUI(true)
    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = []
    newData = JSON.parse(res)//.map(el=>newData.push({time:el.date, value:el.close}))
    // newData = newData.map(el=>{
    // console.log(el.time.year)
    // console.log(el.time.month)
    // console.log(el.time.day)
    // console.log(el)
    // console.log(new Date(el.time.year, el.time.month-1, el.time.day));
    // return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    console.log("newData")
    console.log(newData)
    seriesesData.set(interval, newData)
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries.setData(seriesesData.get(interval));
    chart.timeScale().fitContent();
    handleAsyncUI(false)
    })
    }else{
    console.log("GETTING LOADED DATA")
    if(areaSeries){
    console.log("DELETING LOADED DATA FROM CHART")
    chart.removeSeries(areaSeries);
    areaSeries = null;
    }
    kursData = seriesesData.get(interval)[seriesesData.get(interval).length-1].value
    areaSeries = chart.addAreaSeries({
    topColor: "rgba(33, 108, 173, 0.56)",
    bottomColor: "rgba(33, 108, 173, 0.04)",
    lineColor: "rgba(33, 108, 173, 1)",
    lineWidth: 2,
    });
    areaSeries.setData(seriesesData.get(interval));

    chart.timeScale().fitContent();
    }


    }
    // data interval at startup
    syncToInterval(intervals[3]);
    // Name and Kurs as Text in legend



    var watermark = document.createElement("img")
    watermark.classList.add("watermark")
    watermark.setAttribute("src", "https://api.leeway.tech/leeway-sign.png")
    var testA = document.querySelector(`[data-chartid="${chartid}"]`)
    var testB = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var test = testA.getElementsByTagName("canvas")[0].getBoundingClientRect();
    watermark.style.position = "absolute";
    watermark.style.width = "90px";
    watermark.style.height = "30px";
    watermark.style.display = "block";
    //watermark.style.z-index = "1000000";
    watermark.style.bottom = "0";
    watermark.style.right = "10px";


    let linkLW = document.createElement("a")
    linkLW.href="https://www.ftd.de/leeway-tech";
    linkLW.target = "_blank";
    linkLW.appendChild(watermark)
    // append to DOM

    //div-chartwrapper -> div -> div -> table -> tr -> td td -> div
    const myElementA = document.querySelector(`[data-chartid="${chartid}"]`);
    let myElementB = myElementA.childNodes[0]
    let myElementC = myElementB.childNodes[0]
    let myElementD = myElementC.childNodes[0]
    let myElementE = myElementD.childNodes[0]
    let myElementF = myElementE.childNodes[1]
    let myElementG = myElementF.childNodes[0]
    myElementG.appendChild(linkLW);




    if(hidelegend == "false"){
    console.log("SHOW LEGEND!")
    var legend = document.createElement("div");
    legend.classList.add("legend");
    var offsets = document.querySelector(`[data-chartid="${chartid}"]`).getBoundingClientRect();
    var chartwrapperTop = offsets.top;

    var legendHeight = height *-1
    if(legendHeight>-210){legendHeight = -210;}
    legend.style.top = legendHeight*1.2 + "px"
    positionDIV.appendChild(legend);

    if(hidetitle == "false"){
    var firstRow = document.createElement("div");
    firstRow.classList.add("titleText");

    }

    var secondRow = document.createElement("div");
    secondRow.classList.add("secondRow");

    if(kursData !== null){
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;
    legend.appendChild(secondRow);
    }else{
    if(hidetitle == "false"){
    firstRow.innerText = companyName
    legend.appendChild(firstRow);
    }

    legend.appendChild(secondRow);
    }


    // cursor moving and handling third row of legend
    chart.subscribeCrosshairMove((param) => {
    if (param.time) {
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    let currentDate = new Date(param.time).toLocaleDateString("de-DE", options)
    const price = param.seriesData.get(areaSeries).value;
    secondRow.innerText = currentDate + ": " + price.toFixed(2) + " "+(currency?currency:" ");
    }
    else {
    secondRow.innerText = kursDate +": " + Number(kursData).toFixed(2) + " "+currency;

    }
    });

    }

    }
    function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.send(null);
    };
    function getTimeframe(interval){
    let from = null;
    let to = formatDate(new Date());
    switch (interval) {
    case "1M": from = formatDate(new Date(Date.now() - 31 * 24 * 60 * 60 * 1000)); break;
    case "3M": from = formatDate(new Date(Date.now() - 93 * 24 * 60 * 60 * 1000)); break;
    case "6M": from = formatDate(new Date(Date.now() - 186 * 24 * 60 * 60 * 1000)); break;
    case "1Y": from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000)); break;
    case "3Y": from = formatDate(new Date(Date.now() - 1116 * 24 * 60 * 60 * 1000)); break;
    case "5Y": from = formatDate(new Date(Date.now() - 1860 * 24 * 60 * 60 * 1000)); break;
    default:from = formatDate(new Date(Date.now() - 372 * 24 * 60 * 60 * 1000));

    }
    return {from:from, to:to}
    };
    function formatDate(date) {

    var month = "" + (date.getMonth()+1);
    var day = "" + date.getDate();
    var year = date.getFullYear();

    if (month.length < 2)
    month = "0" + month;
    if (day.length < 2)
    day = "0" + day;

    return [year, month, day].join("-");
    };
    </script>
    <script id="main">

    var scriptTV = document.querySelector("#tvChartLoader");
    scriptTV.addEventListener("load", function() {
    var chartid = "662a7a59ac6db";

    var companyName = "Boeing Company (The)";
    if(companyName.length <=0){
    companyName = "BA - NYSE";
    }
    var code = "BA";
    var exchange = "NYSE";
    var currency ="USD";
    var kursData = null;
    var kursDataDate = null;
    var chartHeight = "";
    var chartWidth = "250"
    var hidetitle = "false"
    var hidelegend = "false"
    let apiToken = "za1j116n2273ab1vxukuh6"
    chartWidth = document.querySelector(`[data-chartid="${chartid}"]`).offsetWidth
    var chartData = [];
    var timeframe = getTimeframe("1Y");
    var filter = "adjusted_close";

    httpGetAsync("https://api.leeway.tech/api/v1/public/historicalquotes/"+encodeURIComponent(code+"."+exchange)+"?apitoken="+apiToken+"&filter="+filter+"&from="+timeframe.from+"&to="+timeframe.to, function (res) {
    let newData = null;
    chartData = newData = JSON.parse(res)
    // chartData = chartData.map(el=>{return{value:el.value, time:el.time, timestamp:new Date(el.time.year, el.time.month-1, el.time.day).getTime()}})
    kursData = chartData[chartData.length-1].value
    let options = { weekday: "short", year: "numeric", month: "numeric", day: "numeric" };
    kursDataDate = chartData[chartData.length-1].time
    let kursDate = new Date(kursDataDate.split("-")[0], Number(kursDataDate.split("-")[1])-1, kursDataDate.split("-")[2]).toLocaleDateString("de-DE", options)

    renderTV(kursData,chartData,companyName,currency, Number(chartHeight), Number(chartWidth), code, exchange, kursDate, hidetitle, hidelegend, chartid)
    });
    });
    </script>

    Gewinn und Umsatz: Prognosen der Marktbeobachter

    Nach der mittleren Prognose von 21 Analysten auf finanzen.net wird der Boeing-Verlust pro Aktie im 1. Quartal 2024 bei rund 1,63 US-Dollar liegen. Rund 0,47 US-Dollar betrug der Verlust pro Aktie im 4. Quartal 2023. Im Vorjahresquartal lag der Verlust pro Aktie bei rund 1,27 US-Dollar.

    Auch der Umsatz soll im 1. Quartal sinken. Rund 16,24 Milliarden US-Dollar im Schnitt erwarten 19 Analysten. Das wäre ein Minus gegenüber dem Vorjahresquartal (rund 17,92 Milliarden US-Dollar) und dem 4. Quartal 2023 (rund 22,02 Milliarden). Das Boeing-Geschäftsjahr endet am 31. Dezember.

     

    Disclaimer:
    Alle Angaben ohne Gewähr auf Vollständigkeit, Richtigkeit und Aktualität. Der Text stellt keine Handelsempfehlung oder Anlageberatung dar.

    Der Beitrag Boeing Quartalszahlen: Aktie in Turbulenzen nach 737-Desaster – Prognose und Überblick erschien zuerst auf ftd.de.