Fundamentaldatenabgleich

Inhaltsverzeichnis:

Grundlage jeder guten Handelsstrategie ist eine fundierte und vollständige Datenbasis. Insb. die Susan Levermann Strategie baut dabei sehr stark auf Fundamentaldaten, die so auch gesichert abgeglichen werden müssen. Shareholder bietet verschiedene Optionen:

Um hier eine weitere kostenlose Möglichkeit zur Aktualisierung der enorm relevanten Aktien-Stammdaten wie GuV, Kennzahlen und Statistiken, sowie Analystenbetrachtungen zu realisieren, steht ebenfalls ein Fundamentaldatenabgleich über freie Internetangebote oder API-Datenabrufe zur Verfügung.

Technisch werden hierbei in einer Konfigurationsdatei (INI) die Basis-Adresssen (URLs) und zugehörige Ausdrücke (RegEx) definiert, die die zu verwendenden Informationen extrahieren und in in die Shareholder-Datenbank übernehmen.

Anwendung

Die Nutzung ist einheitlich über die Tool-Leiste innerhalb des Depots oder innerhalb der Detaillisten geregelt. Wie auch bei der Kursaktualisierung wird immer die aktuell sichtbare Liste für den Aktualisierungsumfang verwendet. So werden innerhalb des Depots alle Depotwerte und bei von Watchlisten alle aktuell Watchlisteneinträge für die Aktualisierung verwendet. Das gleiche gilt für Detaillisten.

Die Nutzung des Fundamental-Datenabgleichs ist der Profiversion vorbehalten! Zudem werden die Fundamentaldatenbank-Konfigurationen als eigene Zusatzmodule angeboten. In der Standardauslieferung ist die Funktionsweise nur angedeutet und nicht vollständig. Dieses Vorgehen soll sicherstellen, dass ein dauerhafter Support gewährleistet werden kann, da diese Konfigurationen wartungsintensiv sind.

Nach dem Start werden alle ausgewählten Aktien einzeln aktualisiert entsprechend dem konfigurierten Setup. Notwendige Variablen werden dabei automatisch aufgelöst und sind mit { } gekennzeichnet. Jede aufgerufene URL wird dabei gesondert angezeigt und fett markiert. Alle nachfolgenden Ausdrücke (Expressions) beziehen sich dabei immer auf den zurückgegebenen Inhalt der URL. Es werden dabei auch Seiten (paging)-Operationen unterstützt d.h. es kann zwischen verschiedenen Seiten technisch geblättert werden z.B. um für 2012-2017 und 2006-2011 die Daten abzurufen. Dabei können nicht nur Einzelwerte abgerufen werden, sondern auch Unternehmensdaten in "Jahres-Spalten" (siehe z.B. Avira).

Der nachfolgende Screenshot zeigt sehr gut das Vorgehen und die Möglichkeiten:

  • Mit den ersten zwei Zeilen wird der verwendete Modus d.h. ReadOnly und Debug angezeigt. Die Einstellungen erfolgen zusammen mit allen anderen Einstellungen direkt in der zugehörigen Konfigurationsdatei, die für die Aktie verwendet werden soll. Die Einstellung erfolgt dabei über die Aktualisierungsgruppen.
  • Mit der fett dargestellten URL-Zeile beginnt der Datenabruf einer Zieladresse (hier ariva-search) und der nachfolgenden Datenzuordnungen auf Basis der abgerufene Inhalte/HTMl-Seite. Hier wird konkret mit {ArivaID} das Ariva-Search-Ergebnis-Seite genutzt, um eine Variable zu setzen, die für nachfolgende URL-Datenabrufe genutzt werden kann. Dabei können Zieladressen zusammengesetzt werden und Variablen beinhalten.
  • Ab der Zeile "Jahr" wird eine Tabelle oder eine Griddarstellung aufgelöst in eine Art "Matrix" d.h. die Spaltenköpfe initialisieren eine entsprechende Matrix, die dann mit den nachfolgende Zeilen gefüllt werden kann. Dies funktioniert inkl. einem Paging-Ansatz d.h. kann mehrere Datenseiten beinhalten die auf der Orginal-Website mit "Vor" und "Zurück" dargestellt sind.
     

Debug-Mode und Entwicklungs-Optionen

Im Dialog kann über die untere Toolleiste ein Debug-Mode aktiviert werden. Dies bewirkt, dass jede Aktie einzeln aufgelöst wird und erst mit "Starten/Weiter" der nächste Durchlauf erfolgt. Als weitere Option besteht mit "Wiederholen" die Möglichkeit einen Durchlauf für den aktuellen Titel zu wiederholen. Dies ist insb. in der Konfigurationsphase hoch relevant, da im Hintergrund die Daten geändert werden können und mit Wiederholen bereits ein Testlauf erfolgen kann ohne ständig die Dialoge zu wechseln.

Einrichtung und Konfiguration

Im \Daten-Verzeichnis (Hilfe / Infos / Öffne Datenverzeichnis) können verschiedene Konfigurationsdateien abgelegt werden mit einem festen Namensschema: "Internet.Fundamental-Data-*.ini".
Diese Konfigurationen können dabei in den Aktualisierungsgruppen zugeordnet werden. Mit der Zuordnung ist es möglich analog zu den Kursaktualisierungen auch Aktualisierungen für Fundamentaldaten zu verwenden. Dies orientieren sich vollständig an den Konfigurationen in der Konfigurationsdatei. 


Einstellungen 

Spezial-AttributeAusprägungen
@include

<String>

Fügt ein Segment oder eine komplette Definition von einer anderen Datei ein. Damit können Definitions-Dubletten komplett vermieden werden

@include Internet.Fundamental-Data-Ariva-RegVersion.ini

# oder einzeln mit Segmenten

@include Internet.Fundamental-Data-Ariva.ini[Variablen]
@include Internet.Fundamental-Data-Ariva.ini[Profildaten]
@include Internet.Fundamental-Data-Ariva-RegVersion.ini[Finanzen-GuV-5y]
@include Internet.Fundamental-Data-Ariva-RegVersion.ini[Finanzen-GuV-10y]
@include Internet.Fundamental-Data-Ariva-RegVersion.ini[Finanzen-GuV-15y]
debug

<True|False>

Wenn aktiviert wird:

  • Eine detailliertere Protokollanzeige beim Aufruf dargestellt 
  • Pro Aktie wird zunächst gewartet, bis der Nutzer den weiteren Abruf wünscht
  • Es wird eine Protokolldatei geschrieben unter: "\Daten\Internet.Fundamental-Data-Debug-Include-Config.log"
readonly

<True|False>

Wenn "False" definiert, werden:

  • Keine Variablen verändert
  • Keine Notizen geschrieben
decimalseperator

<Char>

Für die Interpreation für alle Zahlenwerte wird diese Definition verwendet:

decimalseperator=,
disablerefreshifconditions<True|False>
Caching
url
URL=https://www.ariva.de/search/search.m?searchname={ISIN}
url.refreshif.anyfieldisempty

Wichtig ist die Definition vor der eigentlichen URL-Definition zu setzen! Für Array-Definitionen kann in Klammern das gewünschte Geschäftsjahr geschrieben werden z.B. [ 2020 ]

URL.RefreshIf.MinDaysSinceLastUpdate=7
URL.RefreshIf.MaxDaysSinceLastUpdate=30
URL.RefreshIf.AnyFieldIsEmpty=(Mitarbeiter; Notizen; Mitarbeiter[2019]; Eigenkapital-in-Mio[2019]; Bilanzsumme-in-Mio[2019]; Tätigkeitsbereich )
URL=https://www.ariva.de/{WebArivaID}/bilanz-guv
url..refreshif.mindayssincelastupdate
url.refreshif.maxdayssincelastupdate
Verhalten
RegEx.Settings
[RegEx-Settings]
# Optionale Einstellungen für die Perl-Expressions
# TPerlRegExOptions = set of (
#   preCaseLess,       // /i -> Case insensitive
#   preMultiLine,      // /m -> ^ and $ also match before/after a newline, not just at the beginning and the end of the string
#   preSingleLine,     // /s -> Dot matches any character, including \n (newline). Otherwise, it matches anything except \n
#   preExtended,       // /x -> Allow regex to contain extra whitespace, newlines and Perl-style comments, all of which will be filtered out
#   preAnchored,       // /A -> Successful match can only occur at the start of the subject or right after the previous match
#   preUnGreedy,       // Repeat operators (+, *, ?) are not greedy by default (i.e. they try to match the minimum number of characters instead of the maximum)
#   preNoAutoCapture   // (group) is a non-capturing group; only named groups capture
# );

RegEx.Settings=[preCaseLess, preSingleLine, preUnGreedy]
Datenabruf
url

Als Variablen dürfen alle internen Internet-Variablen genutzt werden in { } Klammern ebens wie  ISIN, WKN

URL=https://www.ariva.de/{WebArivaID}/bilanz-guv
URL=https://www.ariva.de/search/search.m?searchname={ISIN}
URL=http://www.stockpup.com/data/{RIC[isin]}_quarterly_financial_data.csv
url.paging
URL.Paging=https://www.ariva.de/{WebArivaID}/bilanz-guv?page=6
url.startpaging

Keine weiteren Parameter notwendig, da nur die Position verwendet wird. Der mit startpaging und endpaging definierte Block wird durch "paging" effektiv als URL angefragt und dann mit allen Teilelementen aufgelöst.

URL.StartPaging

Jahr="subtitle.*">.*<td.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>

URL.EndPaging
url.endpagingKeine weiteren Parameter notwendig, da nur die Position verwendet wird (s.o.)
Wert-Attribute
<key>.removespaces
Anzahl-Aktien.RemoveSpaces=true
Anzahl-Aktien=<b>Aktien</b>.*<td.*>.*</td><td.*>.*</td><td class="nfvtR">(.*)</td>
<key>.umrechnungsfaktor

Nur für Anzahl-Aktien relevant z.B. um Anzahl-Aktien in Mio. umzurechnen. Intern werden <Int64> Zahlwerte verwendet.

Anzahl-Aktien.UmrechnungsFaktor=1000000
Anzahl-Aktien=Aktien.im.Umlauf.*<td class="right"\s*>([-+]?[0-9]*.?[0-9]*)</td>.*([-+]?[0-9]*.?[0-9]*)</td>.*([-+]?[0-9]*.?[0-9]*)</td>.*([-+]?[0-9]*.?[0-9]*)</td>.*([-+]?[0-9]*.?[0-9]*)</td>.*([-+]?[0-9]*.?[0-9]*)</td>.*subtitle level

<key>.datumsformat

Nur für Datumsformate interessant

HV-Termin.datumsformat = dd.mm.yyyy    
HV-Termin=HV-Termin<div>(.*)</div>
Ausprägungen für Aktualisierungen
anzahl-aktien<integer>
notizen

<string>

Notizen=<div id="profil_text" class="arrow0">(.*)Copyright.*</div>
fullname<string>
shortname<string>
wkn<wkn>
wpart<wertpapierart> - Zuordnung über Name
isin<isin>
basiswertisin<string>
logo-url<string>
ir-weblink<string>
weblink<string>
x-analysten-buy<int>
x-analysten-hold<int>
x-analysten-sell<int>
land<string>
branche<string>
tätigkeitsbereich<string>
bilanzierungsmethode<string>
mitarbeiter<double> - Array basierend auf dem durch Jahr definierten Array
währung<string> - Zuordnung durch Short-Name
ende-fiskaljahr<string> als Datum
hv-termin

<string> als Datum

HV-Termin=">\s*(\d{1,2}\.\d{1,2}\.\d{0,4})\s*</td>.<td.>\s*Hauptversammlung 
letzter-quartalsberichtszeitpunkt<string> als Datum
kommender-quartalsberichtszeitpunkt<string> als Datum
streubesitz-in%<double>
verschuldungsgrad-in%<double>
Array-Definitionen d.h. Definitionen pro Jahr z.B. Gewinn pro Jahr
jahr

<int> - Array was nachfolgende Feldzuordnungen erlaubt

Jahr="subtitle.*">.*<td.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>.*"right year">([0-9]*|- \  )</td>

Mitarbeiter=Personal.am.Ende.des.Jahres\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \  )</td> </tr>\s+<tr>\s+<td class="subtitle level"\s+>\s+Personalaufwand

umsatz<double> - Array basierend auf dem durch Jahr definierten Array
ebit<double> - Array basierend auf dem durch Jahr definierten Array
gewinn<double> - Array basierend auf dem durch Jahr definierten Array
buchwert<double> - Array basierend auf dem durch Jahr definierten Array
cashflow<double> - Array basierend auf dem durch Jahr definierten Array
dividende<double> - Array basierend auf dem durch Jahr definierten Array
jahresueberschuss-in-Mio<double> - Array basierend auf dem durch Jahr definierten Array
bilanzsumme-in-mio<double> - Array basierend auf dem durch Jahr definierten Array
liquide-mittel-in-mio<double> - Array basierend auf dem durch Jahr definierten Array
eigenkapital-in-mio<double> - Array basierend auf dem durch Jahr definierten Array
cashflow-in-mio<double> - Array basierend auf dem durch Jahr definierten Array
dilutedEPS<double> - Array basierend auf dem durch Jahr definierten Array
Array-Definitionen als ... pro Aktie
Gewinn-pro-Aktie
Gewinn-pro-Aktie=Ergebnis.je.Aktie.\(brutto\)\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \  )</td>
Cashflow-pro-Aktie
Dividende-pro-Aktie
Buchwert-pro-Aktie
Variablen
{<Variablen-Name>} = <Wert>

Setzen einer beliebigen Variable

{WebArivaID}=<a href="/([\w-]*)/kurs"

Beispiel-Konfiguration "Internet.Fundamental-Data-Template.ini"

Nachfolgend eine Beispiel-Konfiguration die so im \Daten-Verzeichnis abgelegt werden könnte.

# Reine Template-Version, die jedoch alle typischen Kombinationen aufnimmt und als Beispiel-Referenz dienen sollte
# Status: INIT-Version
# History: 04.10.2017: Initialversion inkl. der neuen Stammdaten aus der 13.12.2 Version (04.10.2017)

[Development-Settings]

# debug true(default)|false
debug=true

# readonly true(default)|false
readonly=false

[RegEx-Settings]
# Optionale Einstellungen für die Perl-Expressions
# TPerlRegExOptions = set of (
#   preCaseLess,       // /i -> Case insensitive
#   preMultiLine,      // /m -> ^ and $ also match before/after a newline, not just at the beginning and the end of the string
#   preSingleLine,     // /s -> Dot matches any character, including \n (newline). Otherwise, it matches anything except \n
#   preExtended,       // /x -> Allow regex to contain extra whitespace, newlines and Perl-style comments, all of which will be filtered out
#   preAnchored,       // /A -> Successful match can only occur at the start of the subject or right after the previous match
#   preUnGreedy,       // Repeat operators (+, *, ?) are not greedy by default (i.e. they try to match the minimum number of characters instead of the maximum)
#   preNoAutoCapture   // (group) is a non-capturing group; only named groups capture
# );

RegEx.Settings=[preCaseLess, preSingleLine, preUnGreedy]

[Variablen]

# Das Dezimaltrennzeichen kann jederzeit neu gesetzt werden und ist dann fortan gültig
decimalseperator=,

# URLS können abhängig von dem letzten Aktualisierungszeitpunkt aufgerufen werden, um unnötige Aktualisierungen zu vermeiden
URL.RefreshIf.MinDaysSinceLastUpdate=7

# AnyFields enthält per Komma getrennt alle Stammdaten-Felder/Variablen die geprüft werden sollen, ob diese leer sind. Nur wenn dies der Fall ist, erfolgt die URL-Auflösung. 
# Die Verarbeitung erfolgt dann erst beim nächstfolgenden URL-Request. Variablen werden dabei ohne { aufgeschrieben. Stammdaten-Felder werden analog der normalen Schreibweise 
# vor dem = Zeichen aufgeschrieben
URL.RefreshIf.AnyFieldIsEmpty=(ArivaID)

# Jede URL wird genutzt um neuen Content abzurufen. 
# Alle nachfolgenden RegEx werden dann auf diesem Content angewendet. Zeilenvorschübe werden dabei ersetzt mit einem Leerzeichen, um die RegEx zu vereinfachen

URL=https://www.zieladresse.com/search/search.m?searchname={ISIN}

# Mit einem Contentabruf können auch Variablen gebildet werden, die durch { } gekennzeichnet sind und nachfolgend wie andere Variablen genutzt werden können
{ReqID}.SaveInDatabase=true
{ReqID}=<a href="/([\w-]*)/kurs"

[Analystendaten]

URL.RefreshIf.MinDaysSinceLastUpdate=7
URL.RefreshIf.AnyFieldIsEmpty=(x-Analysten-Buy, x-Analysten-Hold, x-Analysten-Sell, Anzahl-Aktien, IR-Weblink)

URL=https://www.zieladresse.com/{ReqID}

x-Analysten-StrongBuy=

x-Analysten-Buy=analyst_type=analyst\&recommendation=buy"\>(\d*) \<\/a\>

x-Analysten-Hold=analyst_type=analyst\&recommendation=hold"\>(\d*) \<\/a\>

x-Analysten-Sell=analyst_type=analyst\&recommendation=sell"\>(\d*) \<\/a\>

x-Analysten-StrongSell=

# EPS-Revisionen=

[Stammdaten]

Anzahl-Aktien=Aktienanzahl</td>.*([0-9]*.[0-9]*).Mio

Notizen=div class="text".(.*)./div

IR-Weblink=class="subtitle">Website</td>.*href="(.*)"

Weblink=

Land=class="subtitle">Land</td> <td>(.*)</td>

Branche=class="subtitle">Branche</td> <td>(.*)</td>

Tätigkeitsbereich=class="subtitle">Sektor</td> <td>(.*)</td>

Mitarbeiter=Personal.am.Ende.des.Jahres\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td> </tr>\s+<tr>\s+<td class="subtitle level0"\s+>\s+Personalaufwand

Währung=class="subtitle">Währung</td> <td>(.*)</td>

Ende-Fiskaljahr=

HV-Termin.datumsformat = dd.mm.yyyy     
HV-Termin=HV-Termin<div>(.*)</div>

Streubesitz-in%=

Bilanzierungsmethode=

Letzter-Quartalsberichtszeitpunkt=

Kommender-Quartalsberichtszeitpunkt=


[Kennzahlen]
URL=https://www.zieladresse.com/{ReqID}/bilanz-guv

# Reguläre Ausdrücke analog: https://www.regular-expressions.info/quickstart.html. Es werden die Matchgruppen 1-10 verwendet.

Eigenkapitalquote-in%=Eigenkapitalquote.in.%\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

Eigenkapitalrendite-in%=Eigenkapitalrendite.in.%\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

Netto-Marge-in-%=Gewinnrendite.in.%\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

EBIT-Marge-in%=

EBITDA-marge-in%=


Cashquote-in%=

Verschuldungsgrad-in%=

[Bilanz]

Bilanzsumme-in-Mio=Summe Aktiva\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

Liquide-Mittel-in-Mio=

Cashflow-in-Mio=

Jahresueberschuss-in-Mio=


[Bilanz-mit-Jahresdaten]

URL.StartPaging

Jahr="subtitle.*">.*<td.*"right year">([0-9]*|- \&nbsp; )</td>.*"right year">([0-9]*|- \&nbsp; )</td>.*"right year">([0-9]*|- \&nbsp; )</td>.*"right year">([0-9]*|- \&nbsp; )</td>.*"right year">([0-9]*|- \&nbsp; )</td>.*"right year">([0-9]*|- \&nbsp; )</td>

Jahr=Gewinn-.und.Verlustrechnung.*<thead>.*<th>([0-9]{4}).?</th>.*<th>([0-9]{4}).?</th>.*<th>([0-9]{4}).?</th>.*<th>([0-9]{4}).?</th>.*<th>([0-9]{4}).?</th>.*<th>([0-9]{4}).?</th>

Umsatz=(?:Umsatz|Gesamtertrag)\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

Jahresueberschuss-in-Mio=Jahresüberschuss\/-fehlbetrag\s+</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>\s+<td class="right"  >([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

EBIT.UmrechnungsFaktor=1000
EBIT=EBIT</td>.*<td>([-+]?[0-9,\,]*)</td>.*<td>([-+]?[0-9,\,]*)</td>.*<td>([-+]?[0-9,\,]*)</td>.*<td>([-+]?[0-9,\,]*)</td>.*<td>([-+]?[0-9,\,]*)</td>.*<td>([-+]?[0-9,\,]*)</td>

# ... wird umgerechnet in Gewinn-pro-Aktie
Gewinn=

Gewinn-pro-Aktie=Ergebnis.je.Aktie.\(brutto\)\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

# ... wird umgerechnet in Buchwert-pro-Aktie
Buchwert=

Buchwert-pro-Aktie=Buchwert.je.Aktie\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

# ... wird umgerechnet in Cashflow-pro-Aktie
Cashflow=

Cashflow-pro-Aktie=Cashflow.je.Aktie\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>

# ... wird umgerechnet in Dividende-pro-Aktie
Dividende=

Dividende-pro-Aktie=Dividende.je.Aktie\s.*class="right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>(.*)</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>.*"right"\s+>([-+]?[0-9]*.?[0-9]*|- \&nbsp; )</td>


URL.EndPaging

[Finanzen-GuV-10y]
# Wenn ein Paging benötigt wird, kann dies mit .Paging eingeleitet werden. Es erfolgt automatisch ein Rücksprung auf die letzte definierte URL und dessen Formatbeschreibungen
# URL.Paging=https://www.zieladresse.com/{ReqID}/bilanz-guv?page=6

[Finanzen-GuV-15y]
# Wenn ein Paging benötigt wird, kann dies mit .Paging eingeleitet werden. Es erfolgt automatisch ein Rücksprung auf die letzte definierte URL und dessen Formatbeschreibungen
# URL.Paging=https://www.zieladresse.com/{ReqID}/bilanz-guv?page=12