Brusdeylins long post

[singlepic id=39 w=150 h=240 float=right]Moderne Broker-Portale bieten einem Investor die Möglichkeit, Kurse seiner Aktien bzw. Optionen abzurufen. Dort findet er in der Regel auch Kurs-Charts und Chart-Analyse-Kurven zu den unterschiedlichsten Zeiträumen. Dem ein oder anderen privaten Investor sind diese Analysen vielleicht nicht ausreichend genug. Es mag unter ihnen Informatiker und Hobby-Programmierer geben, die den Wunsch äußern, mit Kursdaten mathematische Analysen durchzuführen, um Indikatoren selbst zu berechnen. Nur wie gelangt ein Programmierer an die aktuellen und historischen Zahlen einzelner Aktienkurse? Dieser Beitrag soll die Möglichkeiten der Yahoo!Finance-Schnittstelle näher bringen.

Für das Ermitteln unterschiedlicher Kursdaten bietet Yahoo!Finance (auch für Deutschland) verschiedene CSV-Export-Services an. CSV steht für « Comma Separated Values » und bedeutet hier nichts anderes, als dass die ganzen Kennzahlen (wie z.B. Schluss-Kurs oder Volumen) in reiner Textform mit Kommas und Zeilenumbrüchen getrennt ausgeliefert werden. Daten in solch einem Format kann ein Computerprogramm für Analysezwecke leicht verarbeiten. Im Folgenden werden die bekannten Schnittstellen genauer erläutert und dazu passende Beispiele und PHP-Scripte präsentiert. Da mir keine offizielle API von Yahoo!Finance bekannt ist und ich die hier beschriebene Schnittstelle durch Ausprobieren und Studium ermittelt habe, kann ich für eine Vollständigkeit des aufgezeigten Funktionsumfanges nicht garantieren. Für Hinweise bin ich daher sehr dankbar. Verwendet ein Entwickler die Services von Yahoo!Finance, so sollte er sich vorher die Nutzungsbedingungen (siehe auch) genau durchlesen.

Aktuelle Kursdaten ermitteln

Ganz ehrlich, « aktuell » bedeutet bei der kostenlosen Yahoo!Finance-Schnittstelle leider eine Verzögerung von 15 Minuten für NASDAQ Werte, bis hin zu 60 Minuten für andere Börsenplätze (näheres auf Yahoo!Finance). Doch für die meisten Verwendungszwecken bzw. westlichen Börsenkurse dürfte diese Verzögerung kein Problem darstellen. Yahoo! bietet Kurse aus den unterschiedlichsten Börsenplätzen an. Die Selektion des entsprechenden Handelsplatzes findet in der URL selbst, sowie in einem Anhang (Suffix) an der Symbolangabe statt. Im Kapitel « Länderunterschiede » werden die Unterschiede aufgelistet. Zum besseren Verständnis zeige ich hier nur die Basis-URL, welche vor allem für die US-Börsenkurse gültig ist. Das Ergebnis ist eine Werteliste, die durch Kommas getrennt präsentiert wird. Die Serviceadressen für aktuelle Kursinformationen lautet http://finance.yahoo.com/d/quotes.csv? und nimmt die folgenden drei bekannten Parameter entgegen:

Parameter Beschreibung
s= Das Symbol des Wertpapiers wird mit dem Parameter « s » angegeben. Z.B. liefert hier « s=AAPL » die aktuellen Kursdaten von Apple Inc. Eine Kombination mehrere durch ein Pluszeichen getrennte Symbole ist ebenfalls möglich (zum Beispiel « s=AAPL+MSFT » für Apple und Microsoft). Die Werte, getrennt durch Kommas, kommen dann jeweils in eine separaten Zeile pro Symbol zurück.
f= Die Format-Codes werden hier mit dem Parameter « f » angegeben. Dabei handelt es sich hier um einen Textzug mit lauter aneinandergereihten Kürzel. So gibt z.B. das Zeichen « s » an, dass das Symbol der Aktie ausgegeben werden soll. « n » liefert den Namen, « a » den aktuellen Anfrage-Kurs. Die Werte werden exakt in der Reihenfolge ausgegeben, wie sie hier angefordert werden. Eine Liste aller bekannten Format-Codes wird weiter unten um Kapitel « Die Format-Codes » aufgelistet. Beispiel: f=sna
e=.cvs Die Exportart wird mit dem Parameter « e » angegeben. Hier sollte immer « e=.csv » für ein « Comma Separated Values » Ergebnis übermittelt werden. Erfahrungen haben gezeigt, dass dieser Parameter wohl optional ist.

Das folgende Beispiel ermittelt von Apple und Microsoft das Symbol, den Firmen-Namen, den aktuellen Anfrage-Kurs und die dazu gehörige Zeit ab. Dabei sind Zeit und Kurswert immer länderspezifisch zu verstehen (US-Zeit und Dollar). Wenn Sie diese URL in den Browser eingeben, können Sie das Ergebnis abspeichern. Danach können Sie die Rohdaten in einem Texteditor öffnen und betrachten (nicht mit Excel öffnen, da hier die Formatierung nicht ersichtlich wird).

http://finance.yahoo.com/d/quotes.csv?s=AAPL+MSFT&f=snat1
---
"AAPL","APPLE INC",151.47,"3:31pm"
"MSFT","MICROSOFT CP",29.09,"3:31pm"

Ein Programm kann nun diese Daten in einem mehrdimensionalen Array ablegen. Dabei enthalten die Spalten die Inhalte der Werte, welche durch die Format-Codes angefordert wurden. Die Zeilen bilden jeweils das Zahlentupel eines Wertpapiers ab. Eine PHP-Funktion zur Ermittlung der Kursdaten könnte somit folgendermaßen aussehen:

<?php
    /*
     * Getting current quotes:
     * Reading multible lines of values into an array depending on the given symbols and function tags.
     * Each line holds the values of one symbol. In the argument, symbols are separated by "+".
     *
     * (c) Matthias Brusdeylins, 2008
     * License: CC-GNU GPL (http://creativecommons.org/licenses/GPL/2.0/)
     */    

    define ("QUOTES_URL", "http://finance.yahoo.com/d/quotes.csv?");
    function loadYahooQuotes ($symbol,
                              $tags)
    {
        $lineCount = 0;
        $stocks = array();

        // load the stock quotes: we are opening it for reading
        // http://finance.yahoo.com/d/quotes.csv?s=  STOCK SYMBOLS  &f=  FORMAT TAGS
        $URL = QUOTES_URL."s=$symbol&f=$tags&e=.csv";
        $fileHandle = fopen ($URL,"r");

        if ($fileHandle) {
            // use the fgetcsv function to store quote values into an array $lineValues
            // one symbol in one line
            do {
                $stockValues = fgetcsv ($fileHandle, 999999, ",");
                if ($stockValues) {
                    $lineCount++;
                    $stocks[$lineCount] = $stockValues;
                }
            } while ($stockValues);

        fclose ($fileHandle);
        } else {
            // ERROR-Message in the array
            $stocks[0][0] = "ERROR";
            $stocks[0][1] = "No data found.";
        }

        return $stocks;
    }
?>

Devisen

Sie können nicht nur einzelne Aktienkurse erfragen, sondern auch Devisenkurse. Dazu müssen Sie an der oben vorgestellten Adresse als Symbol-Parameter ein spezielles Konstrukt der Form AB=X übermitteln. Hier steht der Buchstabe A für die erste zu vergleichende Währung und der Buchstabe B dann natürlich für die zweite Währung. X steht wohl für Exchange und wird nicht ersetzt. Wollen Sie mehrere Währungen abfragen, können mehrere Konstrukte mittels dem Pluszeichen « + » aneinander gehängt werden. Folgendes Beispiel soll dies verdeutlichen:

http://quote.yahoo.com/d/quotes.csv?s=USDCAD=X+JPYUSD=X&f=nl1d1t1
---
"USD to CAD",1.0088,"4/4/2008","5:02pm"
"JPY to USD",0.0098,"4/4/2008","5:26pm"

Die Kürzel der Währungen bestehen aus drei Buchstaben und werden hier aufgelistet:

Land Kürzel
Afganistan Afghani AFA
Albanian Lek ALL
Algerian Dinar DZD
Argentinian Peso ARS
Aruban Florin AWG
Australian Dollar AUD
Austrian Schilling ATS
Bahraini Dinar BHD
Bangladesh Taka BDT
Barbados Dollar BBD
Belgian Franc BEF
Belize Dollar BZD
Bermuda Dollar BMD
Bhutan Ngultrum BTN
Bolivian Boliviano BOB
Botswana Pula BWP
Brazilian Real BRL
British Pound GBP
Brunei Dollar BND
Bulgarian Lev BGN
Cambodian Riel KHR
Canadian Dollar CAD
Cape Verde Escudo CVE
Cayman Islands Dollar KYD
CFA Franc (BCEAO) XOF
CFA Franc(BEAC) XAF
CFP Franc XPF
Chilean Peso CLP
Colombian Peso COP
Comoros Franc KMF
Costa Rican Colon CRC
Croatian Kuna HRK
Cuban Peso CUP
Cypriot Pound CYP
Czech Koruna CZK
Danish Krone DKK
Djibouti Franc DJF
Dominican Peso DOP
Dutch Guilder NLG
East Caribbean Dollar XCD
Egyptian Pound EGP
El Salvador Colon SVC
Estonian Kroon EEK
Ethiopian Birr ETB
Euro EUR
Fiji Dollar FJD
Finnish Markka FIM
French Franc FRF
Gambia Dalasi GMD
German Mark DEM
Ghanaian Cedi GHC
Gibraltar Pound GIP
Greek Drachma GRD
Guatemala Quetzal GTQ
Guinea Franc GNF
Guyana Dollar GYD
Haitian Gourde HTG
Honduras Lempira HNL
Hong Kong Dollar HKD
Hungarian Forint HUF
Iceland Krona ISK
Indian Rupee INR
Indonesian Rupiah IDR
Irish Punt IEP
Israeli Shekel ILS
Italian Lira ITL
Jamaican Dollar JMD
Japanese Yen JPY
Jordanian Dinar JOD
Kenyan Shilling KES
Kuwaiti Dinar KWD
Laos Kip LAK
Latvian Lats LVL
Lebanese Pound LBP
Lesotho Loti LSL
Lithuanian Litas LTL
Malagasy Franc MGF
Malawi Kwacha MWK
Malaysian Ringgit MYR
Maldives Rufiyan MVR
Maltese Pound MTL
Mauritania Ouguiya MRO
Mauritius Rupee MUR
Mexican Peso MXN
Mongolian Tugrik MNT
Moroccan Dirham MAD
Mozambique Metical MZM
Myanmar Kyat MMK
Namibian Dollar NAD
Nepal Rupee NPR
Netherlands Antilles Guilder ANG
New Zealand Dollar NZD
Nicaraguan Cordoba NIO
Nigerian Naira NGN
Norwegian Krone NOK
Oman Rial OMR
Pakistani Rupee PKR
Papua New Guinea Kina PGK
Peruvian Sol PEN
Philippines Peso PHP
Polish Zloty PLN
Portuguese Escudo PTE
Qatari Rial QAR
Renmimbi Yuan CNY
Romanian Leu ROL
Russian Ruble RUB
Salomon Islands Dollar SBD
Sao Tome & Principe Dobra STD
Saudi Arabian Riyal SAR
Seychelles Rupee SCR
Sierra Leone Leone SLL
Singapore Dollar SGD
Slovak Koruna SKK
Slovenian Tolar SIT
South African Rand ZAR
South Korean Won KRW
Spanish Peseta ESP
Sri Lanka Rupee LKR
St. Helena Pound SHP
Sudanese Dinar SDD
Surinam Guilder SRG
Swaziland Lilangeni SZL
Swedish Krona SEK
Swiss Franc CHF
Syria Pound SYP
Taiwan New Dollar TWD
Tanzanian Shilling TZS
Thai Baht THB
Tonga Isl Pa’anga TOP
Trinidad Dollar TTD
Tunisian Dinar TND
Turkish Lira TRL
Ugandan Shilling UGX
Ukraine Hryvnia UAH
United Arab Emirates Dirham AED
US Dollar USD
Vanuatu Vatu VUV
Venezuelan Bolivar VEB
Vietnam Dong VND
Western Samoa Tala WST
Zambia Kwacha ZMK
Zimbabwean Dollar ZWD

Die Format-Codes

Für den Parameter der Formate-Codes (”f”) stehen eine ganze Reihe akzeptierter Format-Tags zur Verfügung. Viele sind dabei wohl redundant und werden hier einfach zusammengefasst (z.B. “a” und “b2″ für Anfrage-Kurs). Die folgende Tabelle listet alle bekannten Codes auf.

Achtung: In einigen Fällen liefert Yahoo!Finance mehrstellige Werte zurück, die ebenfalls mit Kommas getrennt dargestellt werden. Dies ist an sich ungeschickt, da es für Sie als Programmierer schwierig wird, die Kommas zwischen den einzelnen Werten von den Kommas in einem Wert zu unterscheiden. Hier empfehle ich, diese Parameter getrennt abzufragen.

Code Bedeutung
a, a0, a4 Ask (sometimes) – Nicht alle Kursanfragen liefern hier einen Wert.
a3, b2 Ask – incl. Pre- und Post-Market Werte
a1 – unknown –
a2 Average Daily Volume
a5 Ask Size

Achtung: hier wird der Wert unter Umständen in Zahlengruppen, getrennt durch ein Komma zurückgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.

b, b0 Bid (sometimes) – Nicht alle Kursanfragen liefern hier einen Wert.
b1, b3 Bid – incl. Pre- und Post-Market Werte
b4 Book Value
b6 Bid Size

Achtung: hier wird der Wert unter Umständen in Zahlengruppen, getrennt durch ein Komma zurückgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.

c, c2, q1 Change & Percent Change
c1, c0, c6, c7 Change
c3 Commission
c4 Currency
c5 – unknown –
c8 After Hours Change
d, d0 Dividend/Share
d1 Last Trade Date
d2 Trade Date
d3 Last Trade Date (text)
e, e0 Earnings/Share
e1 Error Indication (returned for symbol changed / invalid)
e2 Verfallsdatum bei Optionsscheinen
e3 – unknown –
e4 – unknown –
e7 EPS Estimate Current Year
e8 EPS Estimate Next Year
e9 EPS Estimate Next Quarter
f, f0, f1, f2, f3, f4, f5, g2 – HTML Fragment mit Company name, market place und Trade Link –
f6 Float Shares

Achtung: hier wird der Wert unter Umständen in Zahlengruppen, getrennt durch ein Komma zurückgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.

f7, f8, – HTML Fragment mit Trade-Link –
g, g0 Day’s Low
g1 Holdings Gain Percent
g3 Annualized Gain
g4, g6 Holdings Gain
g5 Holdings Gain Percent
h, h0 Day’s High
h1, h2, h3, h4, h5, h6 – HTML Fragment –
i, i0 More Info
i2 – unknown –
i3 – unknown –
i4 – unknown –
i5 Order Book
i6 – unknown –
i7, l1, l7, l9, q2, v2, y2 Last Trade (price only)
j, j0 52-week Low
j1 Market Capitalization
j2 Shares Outstanding

Achtung: hier wird der Wert unter Umständen in Zahlengruppen, getrennt durch ein Komma zurückgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.

j3 – unknown –
j4 EBITDA
j5 Change From 52-week Low
j6 Percent Change From 52-week Low
k, k0 52-week High
k1 Last Trade (with -unknown-)
k2 Change Percent (with -unknown-)
k3 Last Trade Size

Achtung: hier wird der Wert unter Umständen in Zahlengruppen, getrennt durch ein Komma zurückgeliefert! Die Anzahl der durch Komma getrennten Gruppen variiert.

k4 Change From 52-week High
k5 Percebt Change From 52-week High
l, l0, n1, n5, y1 Last Trade (with Date)
l2 High Limit
l3 Low Limit
l4 – unknown –
l5 – unknown –
l6 – unknown –
m, m0 Day’s Range
m1 – unknown –
m2 – unknown – (Day?) Range
m3 50-day Moving Average
m4 200-day Moving Average
m5 Change From 200-day Moving Average
m6 Percent Change From 200-day Moving Average
m7 Change From 50-day Moving Average
m8 Percent Change From 50-day Moving Average
n, n0 Name
n2 – unknown –
n3 – unknown –
n4 Notes
n6 – unknown –
n7 – unknown –
n8 – unknown –
n9 – unknown –
o, o0 Open
o1, o2 Open Interest bei Optionsscheinen
o4 – unknown –
o5 – unknown –
p, p0, p8 Previous Close
p1 Price Paid
p2, p4 Change in Percent
p3 – unknown –
p5, p9 Price/Sales
p6 Price/Book
q, q0 Ex-Dividend Date
q3 – HTML Fragment für Zeitraumauswahl –
q4 – HTML Fragment für Auswahl des Grafentyps –
q5 – HTML Fragment für Auswahl der Skalierung –
q6 – HTML Fragment für Auswahl der Chart-Größe –
q7 – HTML Fragment für Auswahl des Moving Avg. –
q8 – HTML Fragment für Auswahl des EMA –
q9 – HTML Fragment für Vergleichs-Formular –
r, r0 P/E Ratio
r1 Dividend Pay Date
r2 – unknown –
r3 – HTML Fragment für Auswahl der Indikatoren –
r4 – HTML Fragment für Auswahl der Overlays –
r5 PEG Ratio
r6 Price/EPS Estimate Current Year
r7 Price/EPS Estimate Next Year
r9 – unknown –
s, s0, s2, s4 Symbol
s1 Shares Owned
s3 Bezugspreis bei Optionsscheinen
s6 Revenue ?
s7 Short Ratio
t, t0, t2, u, u0, u2, u3 – HTML Fragment für ein Chart-Bild –
t1 Last Trade Time
t3 – unknown –
t4 – unknown –
t5 – unknown –
t6 – HTML Fragment mit Trade-Link –
t7 Ticker Trend
t8 1 yr Target Price
v, v0, v6 Volume
v3 – unknown –
v4 – unknown –
v5 – unknown –
v1 Holdings Value
v7 – unknown –
w, w0 52-week Range
w1 Day’s Value Change
w4 – unknown –
x, x0 Stock Exchange
y, y0 Dividend Yield
z2 – HTML Fragment –
z3 – liefert « Oops! » –

Höhere Indexwerte führen nur noch zu einer Wiederholung der Inhalte. Vermutlich sollen die Codes zweistellig sein (Buchstabe + Zahl). Fällt die Zahl weg, so wir automatisch der Index 0 angenommen.

Daytrading-Daten

Leider bietet Yahoo!Finance nur die letzten 100 Tages-Kurswerte zum Ermittlungszeitpunkt an. Auch hier wirkt die Verzögerung von 15-60 Minuten, wie im Abschnitt « Aktuelle Kursdaten » beschrieben. Die Serviceadresse für die Daytrading-Daten lautet http://logtrade.finance.vip.ukl.yahoo.com/lastTrades? und nimmt folgende drei bekannte Parameter entgegen:

Parameter Beschreibung
s= Das Symbol des Wertpapiers wird mit dem Parameter « s » angegeben. Z.B. liefert hier « s=AAPL » die letzten 100 Daytrading-Daten von Apple Inc.
output=user Der Sinn dieses Parameters ist leider noch nicht bekannt. Für weitere Hinweise bin ich sehr dankbar.
i=eu Auch hier ist mir der Sinn des Parameters noch nicht bekannt.

Das Ergebnis einer solchen Abfrage liefert eine Liste mit Wertegruppen – eine Gruppe für jeden Trade. Ein solches Tupel enthält den Trading-Zeitpunkt, den Kurswert und die Volumina des Trades.

Historische Kursdaten

Für ein Wertpapier stehen bei Yahoo ebenfalls historische Daten zur Verfügung. Die Service-URL hierfür lautet http://ichart.finance.yahoo.com/table.csv? und besitzt Parameter für das Symbol, sowie für das Zeitintervall, innerhalb ein Entwickler die täglichen bzw. wöchentlichen Kursdaten ermitteln will:

Parameter Beschreibung
a= Start-Monat -1 (Januar ist hier der Wert « 0 »)
b= Start-Tag
c= Start-Jahr
d= End-Monat -1 (Januar ist hier der Wert « 0 »)
e= End-Tag
f = End-Jahr
g= Chart-Abstufung (d=tägliche Werte, w=wöchentliche Werte, m=monatliche Werte, v=Dividendenausschüttungen)
s= Symbol des Aktienkurses
ignore=.cvs (konstanter Wert, aber optional)
y= Verschiebung um eine angegebene Anzahl an Tagen/Wochen/Monaten. Macht eigentlich keinen Sinn, da oben bereits ein Intervall angegeben wurde. Trotzdem unterscheiden sich z.B. die Volumen-Werte eines Monats (g=m), wenn hier eine Verschiebung Y>0 angegeben wird. Für weitere Hinweise bin ich hier dankbar!

Das Ergebnis besteht aus einer Liste täglicher, wöchentlicher oder monatlicher Werte zu dem übermittelten Zeitraum. Die erste Zeile enthält die Überschrift der einzelnen Spaltenwerte. In allen weiteren Zeilen liefert Yahoo!Finance danach das Datum, den Eröffnungskurs, den höchsten und tiefsten Kurswert, sowie den Tagesschlusskurs und das Handelsvolumen für jeden einzelnen Tag. Da diese Werte gegenüber Splits und Dividenden unbereinigt sind, liefert Yahoo! in der letzten Spalte « Adj. Close » noch bereinigte Schlusskurse. Ein bisschen anders sieht das Ergebnis aus, wenn als Chart-Abstufung der Wert « v » für die Dividendenausschüttungen angegeben wird. Dann werden nur noch zwei Spalten mit einem Datum sowie dem Wert selbst zurückgeliefert. Hier noch zwei Beispiele mit den ersten paar Zeilen der Ergebnisse:

http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=3&e=3&f=2008&g=d&a=8&b=7&c=1984&ignore=.cvs
---
Date,Open,High,Low,Close,Volume,Adj Close
2008-04-02,148.78,151.20,145.85,147.49,37253700,147.49
2008-04-01,146.30,149.66,143.61,149.53,36846400,149.53
2008-03-31,143.27,145.71,142.52,143.50,27418300,143.50
2008-03-28,141.80,144.65,141.60,143.01,25521800,143.01
...
http://itable.finance.yahoo.com/table.csv?s=AAPL&d=3&e=3&f=2008&g=v&a=8&b=7&c=1984&ignore=.cvs
---
Date,Dividends
1995-11-21,0.030000
1995-08-16,0.030000
1995-05-26,0.030000
...

Für die programmatische Auswertung dieser Daten bietet sich auch hier das Array als Ergebnisträger an. In jeder Zeile können so die Werte eines Tages (bzw. einer Woche, eines Monats oder der Dividenden) abgelegt werden. Folgende PHP-Funktion soll dies verdeutlichen:

<?php
    /*
     * Getting historical quotes in a given time period
     * Parameters:
     * $symbol:                             symbol
     * $startDay, $startMonth, $startYear:  the first day for the historical quotes
     * $endDay, $endMonth, $endYear:        the last day for the historical quotes
     * $step  (d/w/m/v):                    d=daily, w=weekly, m=monthly, v=dividends
     *
     * (c) Matthias Brusdeylins, 2008
     * License: CC-GNU GPL (http://creativecommons.org/licenses/GPL/2.0/)
     */
    define ("HISTORY_QUOTES_URL", "http://ichart.yahoo.com/table.csv?");
    function loadHistoricalYahooQuotes ($symbol,
                                        $startDay,
                                        $startMonth,
                                        $startYear,
                                        $endDay,
                                        $endMonth,
                                        $endYear,
                                        $step)
    {
        $lineCount = 0;
        $days = array();

        // modify parameters
        $sM=$startMonth-1;
        $eM=$endMonth-1;

        // load the historical stock quotes: we are opening it for reading
        // http://ichart.yahoo.com/table.csv?s=  SYMBOL.COUNTRY  &a,b,c START $d,e,f ENDE $g d=daily/w=weekly/m=monthly/v=dividends
        $URL = HISTORY_QUOTES_URL."s=$symbol&a=$sM&b=$startDay&c=$startYear&d=$eM&e=$endDay&f=$endYear&g=$step&y=0&ignore=.cvs";
        $fileHandle = fopen ($URL,"r");

        if ($fileHandle) {
            // use the fgetcsv function to store quote values into a array $lineValues
            // store one symbol in one line
            do {
                $stockValues = fgetcsv ($fileHandle, 999999, ",");
                if ($stockValues) {
                    $lineCount++;
                    $days[$lineCount] = $stockValues;
                }
            } while ($stockValues);

            // close handle
            fclose ($fileHandle);
        } else {
            $days[0][0] = "ERROR";
            $days[0][1] = "No data found.";
        }        

        return $days;
    }
?>

Länderunterschiede

An der Börse werden nicht nur Aktien in unterschiedlichen Währungen gehandelt, sondern auch Nebenwerte wie beispielsweise Optionsscheine. Der Handel solcher Wertpapiere ist meist auf ein Land bzw. Börsenplatz beschränkt. Aus diesem Grund bietet Yashoo!Finance auch unterschiedliche Serviceadressen an. In diesem Artikel wurden bisher nur die Adressen für US-Börsendaten aufgezeigt. So kann unter der URL http://finance.yahoo.com/d/quotes.csv? der aktuelle Kurs einer Aktie in US-Dollars ermittelt werden. Wollen Sie hingegen einen Kurs aus dem deutschen Raum ermitteln, steht Ihnen die URL http://de.finance.yahoo.com/d/quotes.csv? zur Verfügung.

Die folgende Tabelle zeigt die Adressen (URL) zum Yahoo!Finance-Service für aktuelle Börsenkurse. In der ersten Spalte werden auch die Symbol-Suffixe aufgelistet, welche für eine aktive Börsenplatz-Wahl an die Symbolangabe gehängt werden können (z.B. « AAPL.DE » für den XETRA-Kurs des Apple-Aktie). Ein Besuch auf die Webseite von Yahoo! Finance hilft hier bei der Auswahl der richtigen Symbolbezeichnung.

Land & Suffix URLs
Argentinien

.BA (Buenos Aires)

http://finance.yahoo.com/d/quotes.csv?

http://ar.finance.yahoo.com/d/quotes.csv?

Australien

.AX (Australia)

http://au.finance.yahoo.com/d/quotes.csv?
Belgien

.BR (Brussels)

http://finance.yahoo.com/d/quotes.csv?
Brasilien

.SA (São Paulo)

http://finance.yahoo.com/d/quotes.csv?

http://br.finance.yahoo.com/d/quotes.csv?

Dänemark

.CO (Copenhagen)

http://finance.yahoo.com/d/quotes.csv?

http://dk.finance.yahoo.com/d/quotes.csv?

Deutschland

.BE (Berlin-Bremen)

.DU (Düsseldorf)

.F (Frankfurt)

.HM (Hamburg)

.HA (Hanover)

.MU (München)

.SG (Stuttgart)

.DE (XETRA)

http://de.finance.yahoo.com/d/quotes.csv?
China

.SS (Shanghai)

.SZ (Shenzhen)

http://finance.yahoo.com/d/quotes.csv?

http://cn.finance.yahoo.com/d/quotes.csv?

England

.L (London)

http://uk.finance.yahoo.com/d/quotes.csv?
Frankreich

.PA (Paris)

http://finance.yahoo.com/d/quotes.csv?

http://fr.finance.yahoo.com/d/quotes.csv?

Hong Kong

.HK (Hong Kong)

http://hk.finance.yahoo.com/d/quotes.csv?
Indien

.BO (Bombay)

.NS (Nationale Börse Indien)

http://in.finance.yahoo.com/d/quotes.csv?
Indonesien

.JK (Jakarta)

http://sg.finance.yahoo.com/d/quotes.csv?
Irland

.IR (Irish)

http://uk.finance.yahoo.com/d/quotes.csv?
Israel

.TA (Tel Aviv)

http://finance.yahoo.com/d/quotes.csv?
Italien

.MI (Milano)

http://finance.yahoo.com/d/quotes.csv?

http://it.finance.yahoo.com/d/quotes.csv?

Kanada

.TO (Toronto)

.V (TSX Venture Exchange)

http://ca.finance.yahoo.com/d/quotes.csv?
Korea (Süd)

.KS (Korea)

.KQ (KOSDAQ)

http://kr.finance.yahoo.com/d/quotes.csv?
Malaysien

.KL (Kuala Lumpur) ?

http://sg.finance.yahoo.com/d/quotes.csv?
Mexico

.MX (Mexico)

http://finance.yahoo.com/d/quotes.csv?
Neu Seeland

.NZ (New Zealand)

http://au.finance.yahoo.com/d/quotes.csv?
Niederlande

.AS (Amsterdam)

http://finance.yahoo.com/d/quotes.csv?
Norwegen

.OL (Oslo)

http://finance.yahoo.com/d/quotes.csv?

http://no.finance.yahoo.com/d/quotes.csv?

Österreich

.VI (Vienna)

http://finance.yahoo.com/d/quotes.csv?
Pakistan

.KA (Karachi) ?

http://finance.yahoo.com/d/quotes.csv?
Portugal

.LS (Lissabon)

http://finance.yahoo.com/d/quotes.csv?
Schweden

.ST (Stockholm)

http://finance.yahoo.com/d/quotes.csv?

http://se.finance.yahoo.com/d/quotes.csv?

Schweiz

.SW (Swiss)

.VX (Virt-X)

http://finance.yahoo.com/d/quotes.csv?
Singapore

.SI (Singapore)

http://sg.finance.yahoo.com/d/quotes.csv?
Spanien

.BC (Barcelona)

.BI (Bilbao)

.MF (Madrid Fixed Income Market)

.MC (Madrid SE C.A.T.S.)

.MA (Madrid)

http://es.finance.yahoo.com/d/quotes.csv?
Taiwan

.TWO (OTC Börse Taiwan)

.TW (Taiwan)

http://sg.finance.yahoo.com/d/quotes.csv?
Thailand

.BK (Bangkok)

http://sg.finance.yahoo.com/d/quotes.csv?
USA

kein Suffix für AMEX, NASDAQ und NYSE

.OB (OTC Bulletin Board Market)

.PK (Pink Sheets)

http://finance.yahoo.com/d/quotes.csv?

Download

Die Klasse Finance_API_Yahoo bietet einen einfachen Zugriff auf die hier beschriebene Schnittstelle. Mit ihr lassen sich aktuelle, sowie historische Kursdaten ermitteln. Das Ergebnis wird in einem zweidimensionalen Array zurückgeliefert (siehe Beispiele im Text). Für die Package-Struktur diente das Zend-Framework als Vorlage. Somit ist eine einfache Integration in dieses gewährleistet.

Yahoo! Finance API, Version 1.0

Change-Log

0.5 31.03.2008 – First release
0.6 06.04.2008 – Function code list completed
1.0 04.05.2008 – Zend-Framework package structure integrated

CC-GNU GPL

Diese Software und die hier gezeigten Codestücke fallen unter den Lizenzvertrag CC-GNU GPL.