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

  • Geld abheben bei DM: Gebühren & Anleitung für 2024

    17. Mai, von Carlos Arad — Konto & Karten

    Wünschen Sie sich eine einfache Möglichkeit, beim Einkaufen Bargeld zu erhalten?

    Bei Rewe ist das problemlos möglich! In diesem Artikel zeigen wir Ihnen, wie Sie bei Rewe Geld abheben können.

    Außerdem informieren wir Sie über die aktuellen Gebühren, die bei Rewe für das Abheben von Bargeld anfallen.

    Bei DM Geld abheben: So erhalten Sie Bargeld an der Kasse

    Bei dm Geld abheben ist eine praktische Möglichkeit, während des Einkaufs Bargeld zu erhalten. Dies erspart Ihnen den zusätzlichen Weg zum Geldautomaten und ermöglicht es Ihnen, Einkäufe und Bargeldabhebungen in einem Schritt zu erledigen. Hier sind die Schritte, die Sie befolgen müssen:

    1. Einkauf tätigen: Um Bargeld abheben zu können, müssen Sie bei dm einkaufen. Sie müssen mindestens ein Produkt kaufen, es gibt keinen festen Mindesteinkaufswert.

    2. Zum Bezahlen an die Kasse gehen: Gehen Sie mit Ihren Einkäufen zur Kasse und legen Sie Ihre Artikel auf das Band.

    3. Bargeldabhebung anfragen: Informieren Sie den Kassierer oder die Kassiererin, dass Sie zusätzlich zum Einkauf Bargeld abheben möchten. Nennen Sie den gewünschten Betrag.

    4. Einkauf und Bargeldabhebung bezahlen: Der gewünschte Abhebungsbetrag wird zur Einkaufssumme addiert. Bezahlen Sie den Gesamtbetrag mit Ihrer Girocard oder Kreditkarte (Mastercard oder Visa).

    5. PIN eingeben: Geben Sie Ihre PIN-Nummer in das Kartenterminal ein, um die Transaktion zu bestätigen. Achten Sie darauf, dass niemand Ihre PIN einsehen kann.

    6. Bargeld erhalten: Nach der Bestätigung der Transaktion wird Ihnen der gewünschte Bargeldbetrag vom Kassierer ausgezahlt.

    Gebühren: Was kostet Geld abheben bei DM?

    Bei dm können Sie während Ihres Einkaufs bequem Bargeld abheben. Der Drogeriemarkt erhebt keine zusätzlichen Gebühren für diesen Service. Achten Sie darauf, mindestens ein Produkt zu kaufen und mögliche Bankgebühren zu überprüfen.

    Aspekt Details
    DM-Gebühren Keine zusätzlichen Gebühren für die Bargeldabhebung.
    Mindesteinkaufswert Mindestens 1 Produkt
    Bankgebühren Mögliche Gebühren seitens Ihrer Bank für die Nutzung fremder Terminals.

    Alternative zu DM: In diesen Märkten können Sie Bargeld „abheben“

    Neben DM bieten viele andere Supermärkte und Drogerien in Deutschland die Möglichkeit, beim Einkaufen Bargeld abzuheben. Hier ist eine Übersicht der Märkte, der benötigten Einkaufswerte und der akzeptierten Karten:

    Geschäft Einkaufswert Bargeld Benötigte Karte
    Aldi Süd ab 5 Euro max. 200 Euro Girocard, Debit- oder Kreditkarte (Mastercard oder Visa)
    Aldi Nord nicht verfügbar nicht verfügbar nicht verfügbar
    Denns Biomarkt ab 20 Euro max. 200 Euro Girocard
    dm mindestens 1 Produkt max. 200 Euro Girocard, Kreditkarte (Mastercard oder Visa)
    Edeka ab 20 Euro max. 200 Euro Girocard
    famila ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Kaufland ab 10 Euro max. 200 Euro Girocard
    Lidl ab 5 Euro 10 bis 200 Euro Girocard
    Markant ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Marktkauf ab 10 oder 20 Euro je nach Markt max. 200 Euro Girocard
    Müller mindestens 1 Produkt max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Netto ab 10 Euro 10 bis 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Norma ab 5 Euro max. 200 Euro Girocard, Mastercard oder Maestro-Karte
    NP Discount ab 10 Euro max. 200 Euro Girocard
    Penny ab 10 Euro max. 200 Euro Girocard
    Rewe ab 10 Euro max. 200 Euro Girocard
    Rossmann ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    tegut ab 10 Euro max. 200 Euro Girocard
    Wasgau ab 20 Euro max. 200 Euro Girocard

    Sind Bargeldabhebungen bei DM sicher?

    Bargeldabhebungen bei DM sind im Allgemeinen sicher, da sie bestimmten Sicherheitsstandards folgen. Hier sind einige Faktoren, die zur Sicherheit bei DM beitragen:

    Maßnahme Beschreibung
    Verifizierung des Einkaufs Um Bargeld abheben zu können, müssen Sie einen Einkauf tätigen und den Kassenbon vorlegen. Dies stellt sicher, dass nur Kunden, die tatsächlich im Laden sind, die Dienstleistung nutzen können.
    Sicherheitsstandards der Banken Die Abhebung erfolgt über Ihr Bankkonto, wobei hohe Sicherheitsstandards wie PIN-Abfragen und Verschlüsselungstechniken zum Einsatz kommen.
    Videoüberwachung Viele DM-Filialen sind videoüberwacht, was potenzielle Täter abschreckt und die Sicherheit für die Kunden erhöht.
    Geschultes Personal Das Personal ist darin geschult, verdächtiges Verhalten zu erkennen und gegebenenfalls Maßnahmen zu ergreifen.
    Regelmäßige Kontrollen Die Kassensysteme werden regelmäßig gewartet und überprüft, um Manipulationen zu verhindern.

    Trotz dieser Maßnahmen sollten Sie stets wachsam sein und grundlegende Sicherheitsregeln befolgen, wie zum Beispiel Ihre PIN geheim zu halten und auf Ihr Umfeld zu achten, während Sie Geld abheben.

    Bargeld abheben.

    Der Beitrag Geld abheben bei DM: Gebühren & Anleitung für 2024 erschien zuerst auf ftd.de.

  • Geld abheben bei Edeka: Gebühren & Anleitung für 2024

    17. Mai, von Carlos Arad — Konto & Karten

    Möchten Sie bequem beim Einkaufen Bargeld abheben?

    Edeka macht es möglich! In unserem aktuellen Leitfaden zeigen wir Ihnen Schritt für Schritt, wie Sie bei Edeka Geld abheben können.

    Zudem erfahren Sie, welche Gebühren aktuell bei Edeka anfallen, wenn Sie dort Geld abheben.

    Bei Edeka Geld abheben: So erhalten Sie Bargeld an der Kasse

    Bei Edeka können Kunden bequem an der Kasse Bargeld abheben.

    Dieser Service ist besonders nützlich, wenn kein Geldautomat in der Nähe ist oder man zusätzliche Erledigungen vermeiden möchte. Hier ist eine ausführliche Anleitung, wie Sie bei Edeka Bargeld abheben können, sowie Informationen zu den möglichen Gebühren.

    Anleitung zum Geldabheben bei Edeka

    1. Einkauf erledigen:
      • Bevor Sie Bargeld abheben können, müssen Sie einen Einkauf bei Edeka tätigen. Es gibt in der Regel einen Mindestumsatz, der erforderlich ist, um diesen Service nutzen zu können (oftmals 10 Euro).
    2. Zum Bezahlen an die Kasse gehen:
      • Gehen Sie mit Ihren Einkäufen zur Kasse und legen Sie Ihre Artikel auf das Band.
    3. Bargeldabhebung anfragen:
      • Informieren Sie den Kassierer oder die Kassiererin, dass Sie zusätzlich zum Einkauf Bargeld abheben möchten. Nennen Sie den gewünschten Betrag. Der Mindestbetrag für die Abhebung liegt oft bei 10 Euro und der Höchstbetrag bei 200 Euro.
    4. Einkauf und Bargeldabhebung bezahlen:
      • Der Betrag, den Sie abheben möchten, wird zur Einkaufssumme addiert. Bezahlen Sie den Gesamtbetrag mit Ihrer EC-Karte. Die Kassiererin wird den gewünschten Bargeldbetrag zur Gesamtsumme hinzufügen.
    5. PIN eingeben:
      • Geben Sie Ihre PIN-Nummer in das Kartenterminal ein, um die Transaktion zu bestätigen.
    6. Bargeld erhalten:
      • Nach der Bestätigung der Transaktion wird Ihnen der gewünschte Bargeldbetrag ausgezahlt.

    Wichtige Hinweise und Gebühren

    • Keine zusätzlichen Gebühren:
      • Edeka erhebt in der Regel keine zusätzlichen Gebühren für die Bargeldabhebung. Es kann jedoch sein, dass Ihre Bank Gebühren für Bargeldabhebungen an fremden Terminals berechnet. Informieren Sie sich daher bei Ihrer Bank über mögliche Kosten.
    • Verfügbarkeit prüfen:
      • Nicht alle Edeka-Filialen bieten diesen Service an. Erkundigen Sie sich im Voraus, ob Ihre Filiale die Möglichkeit der Bargeldabhebung anbietet.
    • Betragsgrenzen beachten:
      • Der Mindestbetrag für die Abhebung liegt häufig bei 10 Euro und der Höchstbetrag bei 200 Euro. Diese Grenzen können je nach Filiale variieren.
    • Bankkarte erforderlich:
      • Für die Bargeldabhebung benötigen Sie eine EC-Karte. Kreditkarten oder andere Zahlungsmethoden sind in der Regel nicht für diesen Service zugelassen.

    Dieser Service bei Edeka ist besonders praktisch und spart Zeit, da man den Einkauf und die Bargeldabhebung in einem Schritt erledigen kann. Nutzen Sie die Möglichkeit, um bequem und sicher an Bargeld zu gelangen, während Sie Ihre Einkäufe erledigen.

    Gebühren: Was kostet Geld abheben bei Edeka?

    Beim Geldabheben bei Edeka fallen in der Regel keine zusätzlichen Gebühren an. Dies bedeutet, dass Edeka selbst keine Gebühr für diesen Service erhebt. Allerdings gibt es einige wichtige Aspekte zu beachten:

    Mögliche Gebühren, die beim Abheben von Bargeld anfallen können

    1. Edeka:
      • Keine zusätzlichen Gebühren: Edeka erhebt normalerweise keine Gebühren für die Bargeldabhebung. Der Service ist kostenlos, solange Sie den Mindesteinkaufswert erreichen.
    2. Ihre Bank:
      • Bankgebühren: Einige Banken können Gebühren für Bargeldabhebungen an fremden Terminals erheben. Diese Gebühren variieren je nach Bank und Kontomodell. Es ist ratsam, sich vorab bei Ihrer Bank zu informieren, ob und in welcher Höhe Gebühren anfallen könnten.
    3. Mindestumsatz:
      • Mindesteinkaufswert: Um den Service der Bargeldabhebung nutzen zu können, muss ein Mindesteinkaufswert (oft 10 Euro) erreicht werden. Es entstehen keine zusätzlichen Kosten, solange dieser Betrag erreicht wird.

    Zusammenfassung der Gebühren

    • Edeka-Gebühren: Keine zusätzlichen Gebühren für den Service.
    • Bankgebühren: Möglicherweise Gebühren seitens Ihrer Bank für die Nutzung fremder Terminals. Informieren Sie sich bei Ihrer Bank über die genauen Konditionen.
    • Mindesteinkaufswert: In der Regel 10 Euro, die als Bedingung für die Nutzung des Services gelten.

    Alternative zu Edeka: In diesen Märkten kannst du Bargeld „abheben“

    Neben Edeka bieten viele andere Supermärkte und Drogerien in Deutschland die Möglichkeit, beim Einkaufen Bargeld abzuheben. Hier ist eine Übersicht der Märkte, der benötigten Einkaufswerte und der akzeptierten Karten:

    Geschäft Einkaufswert Bargeld Benötigte Karte
    Aldi Süd ab 5 Euro max. 200 Euro Girocard, Debit- oder Kreditkarte (Mastercard oder Visa)
    Aldi Nord nicht verfügbar nicht verfügbar nicht verfügbar
    Denns Biomarkt ab 20 Euro max. 200 Euro Girocard
    dm mindestens 1 Produkt max. 200 Euro Girocard, Kreditkarte (Mastercard oder Visa)
    Edeka ab 20 Euro max. 200 Euro Girocard
    famila ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Kaufland ab 10 Euro max. 200 Euro Girocard
    Lidl ab 5 Euro 10 bis 200 Euro Girocard
    Markant ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Marktkauf ab 10 oder 20 Euro je nach Markt max. 200 Euro Girocard
    Müller mindestens 1 Produkt max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Netto ab 10 Euro 10 bis 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    Norma ab 5 Euro max. 200 Euro Girocard, Mastercard oder Maestro-Karte
    NP Discount ab 10 Euro max. 200 Euro Girocard
    Penny ab 10 Euro max. 200 Euro Girocard
    Rewe ab 10 Euro max. 200 Euro Girocard
    Rossmann ab 10 Euro max. 200 Euro Girocard oder Kreditkarte (Mastercard oder Visa)
    tegut ab 10 Euro max. 200 Euro Girocard
    Wasgau ab 20 Euro max. 200 Euro Girocard

    Mit dieser Übersicht können Sie leicht herausfinden, in welchen Geschäften Sie beim Einkauf Bargeld abheben können, welche Einkaufswerte erforderlich sind und welche Karten akzeptiert werden. So sparen Sie sich den Weg zum Geldautomaten und erledigen alles bequem beim Einkaufen.

    Ist das Geldabheben im Supermarkt sicher?

    Das Geldabheben im Supermarkt ist in der Regel sicher, wenn einige grundlegende Sicherheitsmaßnahmen beachtet werden. Supermärkte sind meist gut beleuchtet und verfügen über Überwachungskameras, was das Risiko krimineller Aktivitäten reduziert. Achten Sie darauf, bei der Eingabe Ihrer PIN diskret zu sein, um zu verhindern, dass jemand Ihre Nummer sieht. Decken Sie das Tastenfeld ab und stellen Sie sicher, dass niemand zu nah bei Ihnen steht.

    Beobachten Sie den Kassierer während der Transaktion, um sicherzustellen, dass der abgehobene Betrag korrekt ist und keine Fehler gemacht werden. Bewahren Sie das Bargeld sofort sicher in Ihrer Brieftasche oder Handtasche auf, bevor Sie den Supermarkt verlassen, um nicht unnötig Aufmerksamkeit zu erregen.

    Das Geldabheben im Supermarkt bietet viele Vorteile, darunter die Bequemlichkeit, Bargeld abheben zu können, während Sie Ihre Einkäufe erledigen. Dies spart Zeit und erfordert keinen zusätzlichen Weg zu einem Geldautomaten. Es ist besonders praktisch in ländlichen Gebieten oder außerhalb der Öffnungszeiten von Banken.

    Obwohl das Risiko gering ist, sollten Sie dennoch wachsam sein. Achten Sie auf verdächtige Geräte an Kartenterminals, die auf Skimming hinweisen könnten. Wenn Sie Unregelmäßigkeiten bemerken, melden Sie diese sofort. Halten Sie Ihre EC-Karte und Ihr Bargeld sicher und informieren Sie im Falle eines Verlusts oder Diebstahls sofort Ihre Bank, um die Karte sperren zu lassen.

    Bargeld abheben.

    Der Beitrag Geld abheben bei Edeka: Gebühren & Anleitung für 2024 erschien zuerst auf ftd.de.

  • Solar-Kraftwerke: Vulkan-Asche wird zum Energiespeicher

    16. Mai, von ftd_admin

    Ausbrechender Vulkan mit Aschewolke - Solar-Kraftwerke: Vulkan-Asche wird zum Energiespeicher (Foto: Freepik, wirestock_creators)

    Barcelona – Vulkanische Asche ist nicht nur ein guter Boden-Verbesserer, sondern auch ein idealer Speicher für überschüssige Solarenergie. Genauer: für solare Wärme, die in solarthermischen Kraftwerken zur Stromerzeugung genutzt werden kann, wenn die Sonne nicht scheint. Das jedenfalls sind die Erfahrungen von Forschern der Universität Barcelona.

    Mehr als 600 Grad Celsius

    In solarthermischen Kraftwerken wird die Wärme der Sonne durch Spiegel konzentriert. In Turmkraftwerken lassen sich so Temperaturen von mehr als 600 Grad Celsius erreichen. Die Wärmeenergie wird an einen Wasser-Dampf-Kreislauf abgegeben, in den ein Turbogenerator zur Stromerzeugung integriert ist.

    Soll das Kraftwerk auch Strom liefern, wenn die Sonne untergegangen oder der Himmel von Wolken bedeckt ist, muss ein Teil der solaren Wärme gespeichert werden. Das geschieht heute in riesigen Behältern mit flüssigem Salz. Das ist jedoch korrosiv, was zuweilen zu Lecks führt, deren Reparatur schnell Millionen kostet, wie kürzlich im marokkanischen Solarkraftwerk Noor III. Zudem wird der Speicher irreversibel beschädigt, wenn die Temperatur unter ein bestimmtes Niveau fällt.

    Asche übersteht viele Zyklen

    Mit Vulkanasche kann nichts davon passieren. Sie kann auf hunderte Grad Celsius erwärmt und bis auf Umgebungstemperatur abgekühlt werden, ohne bleibende Schäden davonzutragen. Die Kapazität pro Volumeneinheit ist kaum geringer als die von Flüssigsalz. Dieser Nachteil wird kompensiert, weil das Salz nach einer bestimmten Zahl von Zyklen zu schwächeln beginnt, während die Vulkanasche durch Erhitzen und Abkühlen auch langfristig keinen Schaden nimmt. Zudem sei Asche kostengünstig zu beschaffen.

    Die solare Wärme wird in Form von Dampf durch mäandernde Rohre geleitet, die durch den gut wärmeisolierten Aschespeicher führen. Wenn die Sonne nicht mehr scheint, kehrt sich der Prozess um. Wasser, das durch die Rohre gepumpt wird, nimmt die Wärme auf und verwandelt sich in Dampf, der den Turbogenerator antreibt. Meist sind die Speicher für einen sechsstündigen Volllastbetrieb für die Zeit ausgelegt, in der die Sonne Pause hat.

    In einer Zeit, in der immer mehr Solar- und Windstrom in die Netze eingespeist wird, werden die Stromlücken immer größer, die bei Windstille und in Sonnenpausen gerissen werden. Um diese zu füllen, werden meist fossile Kraftwerke in Betrieb gesetzt, die Schadstoffe und CO2 emittieren. Mit Alternativlösungen wie Wärmespeichern auf Salz- oder Aschebasis würde die Stromversorgung umweltverträglicher.

     

    Quelle: www.pressetext.com
    (pte002/16.05.2024/06:05)

    Der Beitrag Solar-Kraftwerke: Vulkan-Asche wird zum Energiespeicher erschien zuerst auf ftd.de.

  • Biontech Hauptversammlung 2024: Impfstoff-Innovator im Umbruch – Dividende gestrichen

    16. Mai, von Klemens Vogel

    Illustration eines Corona-Virus (Foto: Freepik, S Furrukh) Biontech Hauptversammlung 2024: Impfstoff-Innovator im Wandel – Dividende gestrichen

    Mainz – „Der Boom ist vorbei“ oder „Tristesse bei Biontech“ – so titelten die Medien zuletzt über die Mainzer, die mit dem revolutionären mRNA-Impfstoff Corona entschärft haben. Nun liegt der Fokus auf der Krebstherapie. Kann CEO Uğur Şahin auf der Hauptversammlung Optimismus entfachen?

    Die Aktie bewegt sich seit Februar seitwärts, schloss gestern an des Nasdaq knapp über 92 US-Dollar. Ein kleiner Einbruch im April ist überwunden. Nach 2022 hat Biontech keine Dividende mehr gezahlt. Der Bilanzgewinn 2023 soll vollständig als Kapitalreserve ins neue Geschäftsjahr übertragen werden.

    +++ Virtuelle Hauptversammlung der Biontech SE +++
    Am Freitag, 17. Mai 2024, um 14 Uhr (MESZ) beginnt die rein virtuelle Biontech-Hauptversammlung. Aktionäre können an dem Event nach voriger Anmeldung über das Investorportal teilnehmen und ihre Aktionärsrechte ausüben. Zudem wird die komplette Veranstaltung öffentlich live gestreamt.

    Dort wird er gebraucht, denn 2024 ist erwartungsgemäß schwach angelaufen: Nur 190 Millionen Euro Umsatz im 1. Quartal nach 1,28 Milliarden im Vorjahresquartal und ein Verlust je Aktie von 1,31 Euro. Allerdings ist das „Festgeldkonto“ gut gefüllt: mit 16,9 Milliarden Euro aus dem Corona-Geschäft.

    Krebswirkstoffe in der Testung – Beschleunigung durch KI

    Der Kampf gegen den Krebs soll nun den Turnaround bringen. 2 Wirkstoffe testet Biontech derzeit in Phase-3-Studien, das erste marktreife Medikament gegen Krebs ist für 2026 geplant. Biontech-Chef Şahin hält Krebs perspektivisch für heilbar – dank Wissensrevolution und Künstlicher Intelligenz.

    Auch Wettbewerber Moderna forciert den KI-Einsatz: Das US-Unternehmen kooperiert mit den Pionieren von OpenAI und nutzt deren bekanntes Sprachmodell ChatGPT in rund 750 Varianten. Der ebenfalls auf die mRNA-Technik spezialisierte Konzern will so Prozesse schneller machen.

    Covid-19 weiter im Fokus – neue Gehaltsregeln für Top-Manager

    Biontech widmet im Herbst seine Eventreihe „Innovation Series“ dem Themenfeld KI und Digitales. Neben Krebs bleibt Corona weiter im Fokus der Biontech-Entwickler – 2024 soll ein angepasster Impfstoff bereitstehen. Zudem wird an einem Kombi-Impfstoff für Grippe und Corona geforscht.

    Neue Vergütungsregeln sollen die Aktionäre unter anderem auf der Hauptversammlung absegnen. So ist geplant, dass die langfristigen variablen Anteile des Vorstandssalärs größer werden, die fixe Komponente sinkt. Das Grundentgeld im Aufsichtsrat soll von 70.000 auf 120.000 Euro ansteigen.

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "66473d8679d49";
    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 = "66473d8679d49";

    var companyName = "BioNTech SE";
    if(companyName.length <=0){
    companyName = "BNTX - NASDAQ";
    }
    var code = "BNTX ";
    var exchange = "NASDAQ";
    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>

     

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

    Der Beitrag Biontech Hauptversammlung 2024: Impfstoff-Innovator im Umbruch – Dividende gestrichen erschien zuerst auf ftd.de.

  • Frosta Aktie: attraktives KGV – aber Marke hat noch Potenzial

    15. Mai, von ftd_admin
    Lieferwagen vollbeladen mit Gemüse (Foto: Freepik, adwire) - Frosta Aktie: attraktives KGV - aber Marke hat noch Potenzial

    Der Großteil der Konsumenten in Deutschland kennt Frosta (Foto: Freepik, adwire)

    Keine Zeit für das Kochen? Keine Lust auf eine lange Einkaufsliste, um sich ein schönes und auch nahrhaftes Gericht zu zaubern? Kein Interesse, täglich 10 bis 20 Euro für den Lieferdienst oder deutlich mehr für einen Restaurantbesuch auszugeben? Dann könnte Frosta die Lösung sein. Und die Kosten für die Gerichte könnten durch die möglichen Kursgewinne gedeckt werden. Die Aktie hat den Anlegern tatsächlich über die letzten 10 Jahre eine Kursrendite von 12 Prozent pro Jahr beschert (Dividenden nicht eingerechnet).

    Die Wende zum Frosta-Reinheitsgebot

    Das unter der Familie Ahlers geführte Unternehmen war lange Zeit eines der vielen Tiefkühlgerichte-Hersteller ohne Differenzierungsmerkmal. Hauptfokus war das Tiefkühlfischsegment, doch auch Submarken wurden unter „Dinner Martime“ und „Dinner International“ etabliert. Alle Fertiggerichte waren mit zahlreichen Zusatzstoffen und Geschmacksverstärkern versehen.

    Doch dann, im Jahr 2000, eine Krisensituation: Frosta kämpft mit Marktanteilen und stark zurückgehenden Margen. Die Händler wollen nur noch ihre Eigenmarken und Wettbewerber Iglo als Platzhirsch im Sortiment. Es war kein Platz mehr für Frosta. Die Familie setzte sich kritisch mit den eigenen Produkten auseinander und so entstand das „ Frosta Reinheitsgebot“.

    Seit 2003 verzichtet Frosta zu 100 Prozent auf jegliche Zusätze, Aromen oder Farbstoffe und weist die Zutaten bis zum letzten Pfefferkorn auf der Verpackung aus. Doch die hohe Qualität hatte ihren Preis, den die Kunden nicht tragen wollten. Umsatz und Gewinn brachen ein. Rote Zahlen waren das Ergebnis hoher Qualität. Mit Hilfe von TV-Spots wurde den Konsumenten das Frosta-Reinheitsgebot näher gebracht. Die Umsätze begannen wieder zu steigen und 2006 erreichte Frosta wieder die Marktführerschaft für Tiefkühlfertiggerichte.

    Mehr Transparenz gefordert – Frosta kann punkten

    Während im EU-Parlament noch über eine Lebensmittel-Ampel diskutiert wird, verpflichtet sich Frosta selbst, die Ampelkennzeichnung auf einzelnen Produkten umzusetzen. Damit hatte sich das Unternehmen von Wettbewerbern Kritik eingeholt. Felix Ahlers störte das nicht und er legte sogar nach, indem er schärfere Kennzeichnungspflichten und mehr Transparenz einforderte.

    Formulierungen wie „ohne künstliche Aromen“ sollen verboten werden, wenn der Fruchtgeschmack durch Zusatzstoffe wie Sägespäne erzeugt wird. Nur wenn diese Tricksereien aufhören, könne man wieder das Vertrauen der Konsumenten zurückgewinnen. Das Konzept gibt der Ahlers-Familie recht, denn während andere Hersteller 2009 mit Umsatzrückgängen kämpften, konnte Frosta den Umsatz um satte 5 Prozent steigern.

    Mit der Zeit gewann auch die CO2-Reduktion entlang der gesamten Wertschöpfungskette an Bedeutung. Seit 2010 wird der CO2-Fußabdruck als Nachhaltigkeitskriterium auf allen Produkten ausgewiesen. Mit den selbst gemahlenen Pfefferkörnern aus der eigenen Pfeffermühle, kleinen eigenen Anbauflächen und klimaschonenderen Verpackungsmaterialien setzt man klare Zeichen für Nachhaltigkeit.

    Heute ist Frosta transparent wie ein Glashaus. Als Symbol dafür gilt die Glasfabrik in Bremerhaven, die komplett einsehbar ist. Damit wird das Prinzip der höchstmöglichen Transparenz untermauert. Die Herkunft, Produktionsweise und die komplette Zutatenliste lassen sich natürlich einfach über die Webseite in Erfahrung bringen.

    Frosta und Copack – Geschäftsbereiche mit Wachstumschancen

    Frosta untergliedert sich in 2 Geschäftsbereiche.

    1. Einerseits Frosta als Geschäftsbereich (68 Prozent) mit dem Marken-, dem Out-of-Home, dem Heimdienst- sowie dem Industriegeschäft.
    2. Andererseits dem Geschäftsbereich Copack (32 Prozent), welcher das Handelsmarkengeschäft in Europa repräsentiert. Die Umsatz- und Margentreiber sind die Marken- und Out-of-Home Kategorien, während das Industriegeschäft aufgrund auslaufender Verträge mit Handelspartnern mit Umsatzrückgängen konfrontiert war. Selbiges gilt für das Copack-Segment. Hier wurden bewusst unprofitable Lieferverträge nicht weiter verlängert. 2 Drittel der Umsätze erzielt das Unternehmen in Deutschland. Weitere wichtige Märkte sind Italien (20 Prozent) sowie Österreich und Polen mit jeweils 7,5 Prozent.

    Auf Segmentbasis steckt das Wachstumspotenzial im Frosta-Geschäftsbereich. Die Marke erfüllt den zunehmenden Kundenwunsch nach mehr Transparenz und Nachhaltigkeit und deckt diverse Geschmacksrichtungen und Diätformen ab. Es werden nationale und internationale Gerichte, Gerichte mit Fleisch und Fisch, aber auch vegetarische und vegane Gerichte angeboten. Natürlich gibt es auch Gemüsemischungen und Kräuter.

    Die Preise sind für die Qualität und den Geschmack sehr preiswert. Eine 500-Gramm-Packung Nasi Goreng ist bereits um 4,69 Euro erhältlich. Für ein Veggie Schlemmerfilet werden 3,99 Euro im Onlineshop verlangt.

    Auf regionaler Ebene hat Frosta noch reichlich Potenzial zu wachsen. Sowohl der Heimatmarkt Deutschland als auch international gibt es Raum, sich neue Kunden zu erschließen. Eine Bremse für den weiteren Erfolg könnte die Kostendisziplin des Unternehmens darstellen, denn Frosta macht kaum Werbung. Die Vertriebs- und Verwaltungskosten belaufen sich auf nur 12 Prozent, während die Kultmarke Coca-Cola 30 Prozent für diesen Bereich vereinnahmt.

    Der Großteil der Konsumenten in Deutschland kennt Frosta aufgrund der langen Firmengeschichte. Doch vermutlich assoziiert die Zielgruppe das Unternehmen nicht mit dem heute tatsächlich vorhandenen Wertversprechen des leckeren, nachhaltigen, raschen Gerichts, welches auf Transparenz und fairen Preisen aufbaut.

     

    <script id="tvChartLoader" async src="https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js"></script> <script id="declarations">
    var chartid = "66473d867b28d";
    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 = "66473d867b28d";

    var companyName = "FROSTA Aktiengesellschaft";
    if(companyName.length <=0){
    companyName = "NLM - F";
    }
    var code = "NLM";
    var exchange = "F";
    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>

    Familienunternehmen mit nachhaltiger Kultur

    Felix Ahlers als Vorstand hält 33,7 Prozent der Aktien und Dirk Ahlers gehören 10 Prozent. Die Familie agiert wie viele Familienunternehmen nachhaltig und vorausschauend. Frosta bietet Mitarbeiteraktien an, und viele nutzen dieses Angebot. Die durchschnittliche Firmenzugehörigkeit ist beachtlich und liegt bei 16 Jahren. Einerseits liegt das an der guten Firmenkultur, andererseits aber auch am Generationenmix. Das Durchschnittsalter liegt bei 44 Jahren und Babyboomer sind bekanntlich loyaler als die jüngere Generation. Immer mehr Mitarbeiter gehen in den Ruhestand, und diese Stellen werden nur teilweise nachbesetzt. Die Mitarbeiteranzahl ist daher im Jahr 2023 um 3 Prozent gesunken.

    Die Frosta-Aktie als Investment

    Die Bewertung von Frosta ist attraktiv mit einem KGV (Kurs-Gewinn-Verhältnis) von 12,5. Der frei verfügbare Cashflow liegt bei 15 Prozent und das Unternehmen ist schuldenfrei. Die EBITDA-Marge liegt bei rund 10 Prozent und die operative Marge bei 5,3 Prozent. Das Umsatzwachstum für 2024 wird mit 3 bis 5 Prozent prognostiziert.

    Wer als Aktionär mehr als die geforderten Berichte erwartet, wird enttäuscht. Das Unternehmen begründet die geringe Arbeit im Bereich Investor Relations mit den damit verbundenen Kosten. Anleger sollten diese Aussage im Hinterkopf behalten, denn auch die Börsennotierung kostet Geld. Die Eigentümer halten einen hohen Anteil und könnten eines Tages auf ein Delisting abzielen.

    Die Sparschiene spiegelt sich auch in den Marketingkosten wider. Da auch die Marke häufig nicht als das was sie ist wahrgenommen wird, stellt sich die Frage, ob die Kostenoptimierung nicht das Wachstum unterbindet. Eine klare Marketingkampagne könnte einen wichtigen Impuls geben, der das Wachstum über Jahre hinweg befeuert.

     

    Disclaimer:
    Keine Anlageberatung. Kein Aufruf zum Kauf oder Verkauf von Wertpapieren.

    Der Beitrag Frosta Aktie: attraktives KGV – aber Marke hat noch Potenzial erschien zuerst auf ftd.de.