## page was copied from GnuCash/Kursabfrage
#pragma section-numbers on

[[GnuCash|Zurück zur GnuCash Wiki Hauptseite]]

----

'''Inhalt'''
<<TableOfContents>>

<<Anchor(Kursabfrage)>>
= Maschinelle Kursabfrage mit GnuCash =

== Nomenklatur ==

'''The name of the game'''

Jede Kursabfrage setzt zwei Angaben voraus:

  * Eine genaue Bezeichnung des Wertpapiers
  * Eine genaue Angabe des Handelsplatzes bzw. des Handelssystems

Um Eindeutigkeit zu gewährleisten, werden in der Praxis nicht die
Umgangssprache, sondern wohldefinierte Bezeichnungen, oder Schlüssel,
verwendet.

Leider ist der Standardisierungsprozess noch nicht so weit fortgeschritten,
daß nur eine Identifikation für ein und dieselbe Größe
verwendet wird. Da eine genaue Kenntnis der Bezeichnungsvielfalt
für die Kursabfrage essentiell ist, soll die Nomenklatur
hier kurz dargestellt werden. Der Schwerpunkt liegt dabei auf Deutschland.

=== Die Wertpapier-Kenn-Nummer (WKN) in Deutschland ===

Die Wertpapier-Kenn-Nummer (WKN) wurde 1955 zur eindeutigen Identifizierung von Wertpapieren (Aktie,
Anleihe, Option etc.) in Deutschland eingeführt und wird von den Wertpapier
Mitteilungen vergeben. Ursprünglich war die WKN eine sechstellige
numerische Größe ohne Prüfziffer. Der Nummernraum war dabei in
verschiedene WKN-Kreise eingeteilt, die jeweils eine Gruppe an Wertpapieren
repräsentieren. Darüber hinaus enthielt die letzte Ziffer eine gewisse
Systematik: 0 = Stammaktien, 1 = junge Aktien, 2 = jüngste Aktien, 3 =
Vorzugsaktien.

||||||<rowbgcolor="#FFFFE0">'''WKN-Kreise'''||
||<:rowbgcolor="#FFFFE0">Bereich           ||Gruppe||
||||<rowbgcolor="#FFFFE0">Schuldverschreibungen||
||100 000 - 199 999 ||Bund, Länder, Gemeinden, öffentliche Verbände||
||200 000 - 349 999 ||Emissionsinstitute||
||350 000 - 399 999 ||Industrieunternehmen||
||400 000 - 499 999 ||ausländische Emittenten||
||||<rowbgcolor="#FFFFE0">Aktien, Anteilsscheine, Kuxe, Optionsscheine||
||500 000 - 789 999 ||Industrieunternehmen||
||790 000 - 799 999 ||Kuxe||
||800 000 - 819 999 ||Banken||
||820 000 - 839 999 ||Verkehrsunternehmen||
||840 000 - 846 939 ||Versicherungen||
||||<rowbgcolor="#FFFFE0">Sonstige||
||847 000 - 849 939 ||inländische Investmentzertifikate||
||850 000 - 879 999 ||Auslandsaktien||
||880 000 - 909 999 ||Bezugsrechte||
||910 000 - 939 999 ||Junge Aktien||
||940 000 - 969 999 ||Jüngste Aktien, Sonderfälle||
||970 000 - 979 999 ||ausländische Investmentzertifikate||
||980 000 - 999 999 ||Immobilienzertifikate||

Ältere Wertpapiere können anhand Ihrer Nummer noch einer dieser Gruppen
zugeordnet werden.

Da die Nummernkreise jedoch vor der ISIN-Einführung zu klein wurden, mussten
sie im Jahr 2000 zu größeren Bereichen zusammengefasst werden. Auch die Systematik
der letzten Ziffer wurde im Jahr 2000 aufgehoben. Darüber hinaus
wurde der Zeichensatz der Wertpapier-Kenn-Nummern im Jahr 2003 von rein
numerisch [0-9] auf alphanumerisch [0-9A-Z] erweitert.

Quelle: http://www.pruefziffernberechnung.de/W/WKN.html

=== Die International Securities Identification Number (ISIN) ===

Spielte das Cross-Border-Geschäft in der Vergangenheit nur eine
untergeordnete Rolle, da nur wenige Marktteilnehmer international
investierten, änderte sich dies Mitte der 80er Jahre, als internationale
Investoren und Broker ihre Investments international diversifizierten. Zu
diesem Zeitpunkt nutzten diese Marktteilnehmer die nationalen
Nummerierungssysteme (NKN), in Deutschland die Wertpapier-Kenn-Nummer
(WKN). Dadurch war für das Cross-Border-Geschäft die Konvertierung von
einer NKN in eine andere erforderlich. Die eindeutige Zuordnung
ausländischer Wertpapiere erwies sich als extrem schwierig, da für ein
einzelnes Wertpapier sogar eine Doppelvergabe innerhalb eines nationalen
Systems möglich war.

Obwohl der ISO-Standard 6166 (ISIN) zu diesem
Zeitpunkt bereits existierte, wurde er kaum genutzt. Daher gründete eine
Gruppe von ISIN-Experten ein Komitee innerhalb der ISO (ISO TC68/SC4), das
sich die Aufgabe gesetzt hatte, die Länder bei der Implementierung der ISIN
zu unterstützen.

Der ISO Standard 6166 stellt der Finanzindustrie nicht nur
eine eindeutige Identifizierung, sondern auch einheitliche Regularien für
die ISIN-Vergabe zur Verfügung. Durch die Substitute Numbering Agencies
werden ISINs auch für die Emerging Markets vergeben, in denen eine
Vergabestelle noch nicht existiert. Dadurch ist eine 100%ige weltweite
ISIN-Abdeckung garantiert. Dieses Instrumentarium hat die Finanzindustrie
überzeugt, daß die ISIN exakt ihren Bedarf deckt.

Aus o.g. Gründen wurde
im Jahre 1992 die Association of National Numbering Agencies, ANNA, durch
22 nationale Vergabestellen gegründet. Dieses Ereignis markierte den Beginn
einer Serie von wichtigen Meilensteinen. Mehr Information über ANNA gibt
es im Internet unter: http://www.anna-web.com

Kurz nach der Gründung wurde
1995 mit GIAM (Global ISIN Access Mechanism) eine elektronische
Kommunikationsplattform für den Austausch ISIN-relevanter Daten geschaffen.
Durch dieses Medium, das seit dem zweiten Quartal 1999 als GIAM-2 das
Internet als Kommunikationsschiene nutzt, steht den nationalen
Vergabestellen und anderen Marktteilnehmern (zzt. primär internationalen
Datenanbietern) ein suchfähiger globaler ISIN-Referenzfile zur Verfügung.
Die GIAM-Mitglieder haben Zugriff auf ca. 500.000 international relevante
Finanzinstrumente sowie über die Internet-Seiten der nationalen
Organisationen Zugriff auf die ISIN-Gesamtbestände der jeweiligen Länder.

Die ISIN ist weltweit anerkannt, nicht nur im internationalen Handel,
Clearing und Settlement, sondern zunehmend auch national als
Primärschlüssel in diversen europäischen Ländern, z.B. Spanien, Italien und
den skandinavischen Ländern. Neben Deutschland begannen auch
Frankreich, die Niederlande und Belgien im Jahre 2003 die Einführung der
ISIN.

||||||||<rowbgcolor="#FFFFE0">'''ISIN-Struktur'''||
||''Bestandteil'' ||Präfix        ||NSIN                  ||Prüfziffer||
||''Feldlänge''   ||2             ||9                     ||1||
||''Bedeutung''   ||Ländercode    ||nationale Kenn-Nummer ||Ziffer (0-9)||
||''Beispiel 1''  ||DE            ||000723610             ||1||
||''Beispiel 2''  ||LU            ||005786592             ||4||

Der Ländercode ist dabei gemäß ISO 3166 angegeben. Die Formel zur
Berechnung der Prüfziffer findet man in Internet z.B. unter:
http://www.pruefziffernberechnung.de.

Trotz der in Deutschland erfolgten Umstellung auf die ISIN als
Primärschlüssel wird die WKN noch parallel geführt.

Quelle: ISIN-Einführung, Wertpapier Mitteilungen

=== Kürzel für Wertpapiere ===

Für den Handel mit Wertpapieren ist die Beobachtung der Kursentwicklung
essentiell. Daher werden Wertpapierkurse seit langen durch eine Vielzahl
kommerzieller Dienstleister angeboten, z.B. Reuters, Bloomberg, Börsen, ...

Letztere verwenden eigene Bezeichnungen für die Wertpapiere,
Tickersymbole, Symbole, Börsenkürzel, Reuterskürzel, Bloombergkürzel etc. genannt.
Leider ist hier ein ganzer Zoo an Kürzeln im Gebrauch.

Für die Siemens-Aktie findet man z.B. folgende Bezeichnungen

   * WKN   723610
   * ISIN  DE0007236101
   * Kürzel SIE, verwendet durch
      * die deutschen Börsen und des Handelssystem XETRA
      * London Domestic Quotes und London Ireland
   * Kürzel SIN, verwendet durch die Börse in Zürich
   * Kürzel SIA, verwendet durch die Börse in Amsterdam
   * Kürzel SIE-EUR, verwendet durch VIRT-X

Zu beachten ist, daß Londen in diesem Fall dasselbe Symbol verwendet, wie
die deutschen Börsen; im Allgemeinen sind jedoch auch hier
unterschiedliche Kürzel im Gebrauch. Auch Reuters und Bloomberg verwenden
verschiedene Kürzel.

=== Kürzel für Börsen ===

Auch für Börsenplätze und Handelssysteme ist keine einheitliche Bezeichnung
im Gebrauch. Bekannt sind zum einen die bereits in der GnuCash Dokumentation
aufgeführten Kürzel:


||||<rowbgcolor="#FFFFE0">'''Marktkürzel, Tab. 1'''||
||<rowbgcolor="#FFFFE0">Kürzel ||Markt||
||BC     ||Barcelona||
||BE     ||Berlin||
||BI     ||Bilbao||
||BR     ||Bremen||
||CO     ||Kopenhagen||
||D      ||Düsseldorf||
||F      ||Frankfurt||
||FX     ||Xetra||
||H      ||Hamburg||
||HA     ||Hannover||
||L      ||London||
||MA     ||Madrid||
||MC     ||Madrid (MC)||
||MI     ||Milan||
||MU     ||München||
||O      ||Oslo||
||PA     ||Paris||
||ST     ||Stockholm||
||SG     ||Stuttgart||
||VA     ||Valencia||

Zum anderen werden auch folgende Symbole verwendet:

||||<rowbgcolor="#FFFFE0">'''Marktkürzel, Tab. 2'''||
||<rowbgcolor="#FFFFE0">Kürzel ||Markt||
||MUN    ||München||
||BER    ||Berlin-Bremen||
||FSE    ||Frankfurt||
||ETR    ||XETRA||
||STU    ||Stuttgart||
||HAN    ||Hannover||
||HAM    ||Hamburg||
||DUS    ||Düsseldorf||
||NYS    ||NYSE||
||NOO    ||Nasdac other OTC||
||NAP    ||Nasdac OTC BBS||
||EAV    ||WIEN||
||ZRH    ||Zürich||
||PSE    ||Paris||
||ASX    ||Amsterdamm||
||ISE    ||Londen Dom Quotes||
||ISS    ||London Ireland||
||VTX    ||VIRT-X||
||SON    ||Sonderwerte||
||ASE    ||Amex||
||DFK    ||Fondsgesellschaft||

Beide Listen sind natürlich nicht vollständig. Neben der Angabe von Börsenplätzen
bzw. Handelssystemen (z.B. XETRA) sind auch andere Angaben möglich, z.B.
DFK für Fondsgesellschaft.

Fonds können nicht nur über Börsen sondern auch direkt bei der
jeweiligen Fondsgesellschaft gehandelt werden. (Je nach Kurs kann dabei das
eine oder das andere vorteilhaft sein.) Da jedem Fonds immer eindeutig
eine Fondsgesellschaft zugeordnet ist, kann letztere durch ein
allgemeines Kürzel spezifiziert werden: DFK.


== Kursabfrage mit GnuCash ==

'''Get your prey'''

Die automatische Kursabfrage erfolgt nicht direkt durch die Anwendung
GnuCash. Letztere stützt sich dazu vielmehr auf die Open-Source Anwendung
Finance::Quote, einem Perl-Modul. Finance::Quote wiederum ist modular
aufgebaut und kann Kurse bei verschiedenen Dienstleistern abrufen. Daher
müssen zur maschinellen Kursabfrage drei Größen angegeben werden:

   1. Der Dienstleister
   2. Eine Bezeichnung des Wertpapiers
   3. Eine genaue Bezeichnung der Handelssystems bzw. -platzes

Leider hängen (2.) und (3.) im allgemeinen von (1.) ab. Dies erfordert zum einen die
Kenntnis des oben beschriebenen Bezeichnungszoos, zum anderen ist ein
Wechsel des Dienstleisters mit einem entsprechenden Aufwand
zum Ändern der Stammdaten verbunden.

Der Dienstleister wird am Konto (vom Typ ''Aktie'' oder ''Investmentfonds'' --
der Typ ''Anleihe'' fehlt leider noch) angegeben (GnuCash Release 1.8.7).

Die Bezeichnungen des Wertpapiers und des Marktes werden im Feld
''Symbol/Abkürzung'' der Aktie bzw. des Investmentfonds angegeben, die dem
Konto zugeordnet ist (GnuCash Release 1.8.7).

(Anmerkung: Die Datenstruktur ist diesem Problem nicht angepasst. Da die
Angaben (1.) bis
(3.) voneinander abhängen, müssen sie auch demselben Objekt zugeordnet
werden, entweder dem ''Konto'' oder der ''Aktie'' etc.  Beides macht Sinn,
letzteres ist aber eine Einschränkung:
Schließlich kann ein Anwender mehrere Depots
haben, in denen sich z.T. dieselben Wertpapiere befinden. Unter Umständen
möchte der Anwender aber derselben Aktie ein vom Depot abhängigen Kurs
zuordnen. Herbert Thoma: Im CVS Head (GnuCash 1.9.x) sind alle Angaben
(1 bis 3) der Aktie zugeordnet.)

Damit ist das Prinzip klar. Der Arbeitsaufwand besteht nun darin, zu jedem
Modul von Finance::Quote zu dokumentieren, wie die Angaben (2.) und (3.) zu
erfolgen haben. (Anmerkung: der Autor dieser Anmerkung hat sich aus Frustration ein eigenes
Modul gebaut, da er mit angemessenem Arbeitsaufwand nicht herausfinden
konnte, wie die Angaben (2.) und (3.) bei den einzelnen Dienstleistern zu
wählen sind.) Die Spezifikation könnte folgendermaßen aussehen (Vorschlag):

Dienst XYZ (für das Beispiel wird das vom Autor selbst gebaute Modul
angenommen, da er keine Aussage zu den anderen Modulen machen kann, s.o.)

||||||||||||<rowbgcolor="#FFFFE0">'''Dienst XYZ'''||
||<rowbgcolor="#FFFFE0">WP-Typ    ||Symbol/Abkürzung            ||Beispiel         ||Name                        ||ISIN         ||Markt||
||Aktien                          || <Tickersymbol>.<Marktkürzel, Tab. 2>||SIE.ETR  ||Siemens AG NA               ||DE0007236101 ||XETRA||
||Fonds                           || <ISIN>.<Marktkürzel, Tab. 2>||DE0009752477.DFK ||Activest Euro-Geldmarkt Plus||DE0009752477 ||Fondsgesellschaft||
||Anleihen (inkl. Optionsanleihen)|| <ISIN>.<Marktkürzel, Tab. 2>||DE0001069540.FSE ||Stada Arzneimittel MO 00/05 ||DE0001069540 ||Börse Frankfurt||

== Ein Modul zur Kursabfrage erstellen ==

'''Rollin' your own'''

Ein Modul zur Kursabfrage lässt sich leicht selbst erstellen. Perl-Kenner
sollten dies in ca. 1 Stunde schaffen können, Neulinge in etwa einem Tag.

Folgende Dokumentation ist vorhanden:

   * Perl allgemein: (z.B.) http://de.wikipedia.org/wiki/Perl
   * Perl Modul HTML::Table``Extract: http://cpan.uwinnipeg.ca/htdocs/HTML-TableExtract/HTML/TableExtract.html
   * Finance::Quote Die Module selbst sind bereits eine gute Dokumentation. Darüber hinaus findet man eine ausführliche Dokumentation unter: http://finance-quote.sourceforge.net/


=== Schnittstelle zwischen Finance::Quote und GnuCash ===

Die Angabe des Dienstes, des Wertpapiers und des Marksplatzes wurde oben
bereits beschrieben. Die Daten werden durch GnuCash unverändert an Finance::Quote übergeben.

GnuCash ermittelt, welche Kurse abgefragt werden
müssen, und ruft Finance::Quote einmal auf. Das Kommando
enthält den Dienst und eine Liste aller Symbole. (Was passiert, wenn
mehrere Dienste parallel genutzt werden? Herbert Thoma: Finance::Quote wird
mehrfach, je einmal pro Dienst, aufgerufen.)

Anmerkung: GnuCash macht hier aktuell noch einen Fehler. Falls ein Wertpapier mehrfach
als Konto, z.B. Aktienkonto, angelegt wurde, z.B. weil mehrere Depots
verwaltet werden, die dasselbe Wertpapier enthalten, so wird der
entsprechende Kurs auch mit der gleichen Kardinalität abgerufen und in die
Preisdatenbank eingetragen. Er sollte nur einmal aufgerufen und in die
Datenbank eingetragen werden. Herbert Thoma: Seit 1.8.10 wird der Kurs
nur noch einmal in die Preisdatenbank eingetragen. (er wird aber immer
noch mehrmals abgefragt ...)

Folgende Angaben scheinen keine Auswirkung auf die Kursabfrage zu haben:

   * Angabe der ''Zeitzone'' am ''Konto''
   * Angabe des ''Typs'' der ''Aktie'' (hier müsste der Text in ''Wertpapier'' geändert werden)
   * Angabe von ''CUSIP oder anderem Code''

Ein neues Modul kann mit Hilfe des Programms {{{dump-finance-quote}}} getestet
werden. Letzteres informiert darüber, welche Daten das Modul zurückliefert
und ob die notwendigen Angaben darin enthalten sind. Aufruf:

{{{dump-finance-quote <Dienst> <Liste mit Symbolen>}}}

oder in neueren Versionen

{{{gnc-fq-dump <Dienst> <Liste mit Symbolen>}}}

Aktuell (GnuCash Release 1.8.7) sind folgende Rückgabewerte erforderlich:

   * Symbol (Feld ''symbol'')
   * Datum (Feld ''date'')
   * Währung (Feld ''currency'')
   * Preis oder Kurs (eines der Felder ''price'', ''last'' oder ''nav'')

Da weder Finance::Quote noch GnuCash vorsehen, daß den einzelnen Modulen
eine Schnittstellenbeschreibung in einem Metaformat beigefügt wird, sind
bestimmte Konventionen zwingend einzuhalten, damit sich beide Anwendungen
verstehen.

'''Kurse und Preise'''

Kurse und Preise müssen im US-Format an GnuCash übergeben werden, d.h. mit einem "." zum Abtrennen der
Nachkommastellen. Beispiel für einen Kurs: {{{97.2}}}.

Für den Preis bzw. den Kurs werden reine Zahlenwerte übergeben, eine Interpretation kann 
erst in GnuCash anhand des Wertpapiertyps erfolgen, da Finance::Quote diesen in der Regel
nicht kennt.

'''Datum'''

Auch hier ist US-Format erforderlich. Verstanden werden (u.a.?)

||||<rowbgcolor="#FFFFE0">'''Mögliche Datumsformate'''||
||{{{MM/DD/YY}}}    ||{{{01/31/05}}}||
||{{{MM/DD/YYYY}}}  ||{{{01/31/2005}}}||
||{{{MM.DD.YY}}}    ||{{{01.31.05}}}||
||{{{MM.DD.YYYY}}}  ||{{{01.31.2005}}}||
(Frage: Geht vielleicht auch das hier sinnvollere ISO-Format, also YYYY-MM-DD? -- ChristianStimming <<DateTime(2005-02-07T10:00:36Z)>>)

'''Währung'''

Die Verwendung des ISO-Codes für die Währung funktioniert.

'''Angaben zum Symbol'''

Gemäß {{{dump-finance-quote}}} ist die Angabe des Symbols auch als Rückgabewert
von Finance::Quote an GnuCash erforderlich. Dies widerspricht jedoch dem Experiment. Auch wenn
{{{Blödsinn}}} als Symbol zurückgeliefert wird, scheint die Kursabfrage zu
funktionieren.