Startseite > Periodika > Tageszeitungen > Bundesrepublik 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
Der Beitrag Geld abheben bei DM: Gebühren & Anleitung für 2024 erschien zuerst auf ftd.de.
Der Beitrag Geld abheben bei Edeka: Gebühren & Anleitung für 2024 erschien zuerst auf ftd.de.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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 untergliedert sich in 2 Geschäftsbereiche.
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>
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 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.