Wer hat eigentlich "unadjusted" Kursdaten (in Daily oder Monthly ist egal)?
Yahoo hat sie, stimmen aber leider nicht immer, die sind manchmal auch adjustiert. Quandl (die Kostenlosen) und Google sind glaub ich immer justiert. iextrading scheint auch nur justierte zu haben.
tiingo und alphavantage.co bieten sie an, hab ich aber noch nicht getestet. Hat jemand Erfahrungen mit historischen, also ein paar Jahre zurückliegenden Daten?
https://www.quotemedia.com/
API (Beispiel)
http://app.quotemedia.com/quotetools/get...ymbol=AAPL
Lässt sich leicht in Excel einbinden:
Beispiel:
Das Tickersymbol steht in A1, die Ausgabe erfolgt ab A3. Die Daten werden als csv übertragen und in Excel eingefügt.
in der Variable
en wird das aktuelle Datum eingefügt (Enddatum).
In der Variable
st mit wird vom aktuellen Jahr zwei Jahre zurück gegangen (Startdatum).
Nur die ersten 5 Werte werden durch
TextFileColumnDataTypes formatiert.
Die Procedure lässt sich über eine do while-Schleife aufrufen, wobei in A1 immer das aktuelle Tickersymbol eingetragen wird.
Übertragen werden folgende Daten:
Date, open, high, low, close, volume, changed, changed percentaged, adj close, trade value, trade volume
Code:
Sub Kurse_Hist()
Dim ticker As String
Dim st, en As Date
Dim Pfad As String
Dim tmp As String
en = Date
st = DateSerial(Year(en) - 2, Month(en), Day(en)) '<- Hier bitte für das Startjahr rumfummeln
Pfad = "http://app.quotemedia.com/quotetools/getHistoryDownload.csv?&webmasterId=501&startDay=" + Trim(Str(Day(st))) + "&startMonth=" + Trim(Str(Month(st))) + "&startYear=" + Trim(Str(Year(st))) + "&endDay=" + Trim(Str(Day(en))) + "&endMonth=" + Trim(Str(Month(en))) + "&endYear=" + Trim(Str(Year(en))) + "&isRanged=true&symbol="
ticker = Range("A1")
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Pfad & ticker, Destination:=Range("$A$3"))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(xlMDYFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
(24.11.2018, 23:28)Beth schrieb: [ -> ]https://www.quotemedia.com/
API (Beispiel)
http://app.quotemedia.com/quotetools/get...ymbol=AAPL
Lässt sich leicht in Excel einbinden:
Beispiel:
Das Tickersymbol steht in A1, die Ausgabe erfolgt ab A3. Die Daten werden als csv übertragen und in Excel eingefügt.
in der Variable en wird das aktuelle Datum eingefügt (Enddatum).
In der Variable st mit wird vom aktuellen Jahr zwei Jahre zurück gegangen (Startdatum).
Nur die ersten 5 Werte werden durch TextFileColumnDataTypes formatiert.
Die Procedure lässt sich über eine do while-Schleife aufrufen, wobei in A1 immer das aktuelle Tickersymbol eingetragen wird.
Übertragen werden folgende Daten:
Date, open, high, low, close, volume, changed, changed percentaged, adj close, trade value, trade volume
Code:
Sub Kurse_Hist()
Dim ticker As String
Dim st, en As Date
Dim Pfad As String
Dim tmp As String
en = Date
st = DateSerial(Year(en) - 2, Month(en), Day(en)) '<- Hier bitte für das Startjahr rumfummeln
Pfad = "http://app.quotemedia.com/quotetools/getHistoryDownload.csv?&webmasterId=501&startDay=" + Trim(Str(Day(st))) + "&startMonth=" + Trim(Str(Month(st))) + "&startYear=" + Trim(Str(Year(st))) + "&endDay=" + Trim(Str(Day(en))) + "&endMonth=" + Trim(Str(Month(en))) + "&endYear=" + Trim(Str(Year(en))) + "&isRanged=true&symbol="
ticker = Range("A1")
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Pfad & ticker, Destination:=Range("$A$3"))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(xlMDYFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Wow, und das von allen gelisteten Stocks.
Das kommt mir schon fast zu gut vor, wenn die Daten zuverlässig sind (bei Apple scheint das alles zu stimmen). Das kann doch nicht kostenlos sein, gibt's da nicht irgendwelche Beschränkungen? Preise bzw. was da Geld kostet konnte ich gar nicht finden.
(24.11.2018, 23:28)Beth schrieb: [ -> ]https://www.quotemedia.com/
API (Beispiel)
http://app.quotemedia.com/quotetools/get...ymbol=AAPL
Lässt sich leicht in Excel einbinden:
Beispiel:
Das Tickersymbol steht in A1, die Ausgabe erfolgt ab A3. Die Daten werden als csv übertragen und in Excel eingefügt.
in der Variable en wird das aktuelle Datum eingefügt (Enddatum).
In der Variable st mit wird vom aktuellen Jahr zwei Jahre zurück gegangen (Startdatum).
Nur die ersten 5 Werte werden durch TextFileColumnDataTypes formatiert.
Die Procedure lässt sich über eine do while-Schleife aufrufen, wobei in A1 immer das aktuelle Tickersymbol eingetragen wird.
Übertragen werden folgende Daten:
Date, open, high, low, close, volume, changed, changed percentaged, adj close, trade value, trade volume
Code:
Sub Kurse_Hist()
Dim ticker As String
Dim st, en As Date
Dim Pfad As String
Dim tmp As String
en = Date
st = DateSerial(Year(en) - 2, Month(en), Day(en)) '<- Hier bitte für das Startjahr rumfummeln
Pfad = "http://app.quotemedia.com/quotetools/getHistoryDownload.csv?&webmasterId=501&startDay=" + Trim(Str(Day(st))) + "&startMonth=" + Trim(Str(Month(st))) + "&startYear=" + Trim(Str(Year(st))) + "&endDay=" + Trim(Str(Day(en))) + "&endMonth=" + Trim(Str(Month(en))) + "&endYear=" + Trim(Str(Year(en))) + "&isRanged=true&symbol="
ticker = Range("A1")
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Pfad & ticker, Destination:=Range("$A$3"))
.Name = ""
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(xlMDYFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat, xlGeneralFormat)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Kannst du vielleicht mehr über deine Erfahrungen mit diesem Anbieter Berichten ? Hab den Link mal mit zu der Sammlung auf der ersten Seite hinzugefügt.
(25.11.2018, 17:37)atze2000 schrieb: [ -> ]Kannst du vielleicht mehr über deine Erfahrungen mit diesem Anbieter Berichten ? Hab den Link mal mit zu der Sammlung auf der ersten Seite hinzugefügt.
Ich rufe damit immer alle Kurse ab (z.B. die hier vorgestellten REIT-Kurse). Hatte früher Yahoo und Google, bis dir ihre APIs abgeschaltet bzw. den Zugriff erschwert haben. Bin dann über diese Seite auf Quotemedia gestoßen:
https://www.quantshare.com/sa-620-10-new...s-for-free
Der Code ist so gestaltet, dass fast alle gelisteten Seiten funktionieren, Hauptsache, das Ergebnis ist csv. Quotemedia hat mit am besten zugesagt, da einige nicht weit genug zurückreichen.
Hier ein Beispiel-Code für quotemedia mittels direkter URL in Javascript (genauer Nodejs). Die CSV-Ausgabe direkt in eine Datei gepipet, deht natürlich auch in einen String bzw. Array zur direkten Weiterverarbeitung. Achtung, das Plugin https in der ersten Zeile kann nur https Adressen verarbeiten, ungeschützte Adressen werfen einen Ausnahmefehler:
Code:
var http = require ('https');
var fs = require ('fs');
var fdest = "quotemedia.csv";
var url = "https://app.quotemedia.com/quotetools/getHistoryDownload.csv?&webmasterId=501&startDay=1&startMonth=1&startYear=2013&endDay=31&endMonth=12&endYear=2099&isRanged=true&symbol=AAPL";
dbg ("starte " + url + " ...");
var file = fs.createWriteStream (fdest);
http.get (url, function (response) {
response.pipe (file);
});
file.on('finish', function() {
file.close();
dbg (file.path + " bytesWritten:" + file.bytesWritten);
});
function dbg (txt) { console.log (txt); }
Sehr nett!
Bei statischen Weblinks (also ohne viel JavaScript-Gedöns dabei) nehme ich meist wget (oder in bestimmten Fällen curl).
In diesem Fall:
wget "https://app.quotemedia.com/quotetools/getHistoryDownload.csv?&webmasterId=501&startDay=1&startMonth=1&startYear=2013&endDay=31&endMonth=12&endYear=2099&isRanged=true&symbol=AAPL" -O AAPL.csv
Ich gehe davon aus, dass Quotemedia da irgendwann mal eine Bezahlschranke einbaut. Die API ist m.W. nicht offiziell freigegeben.
Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
(26.11.2018, 14:59)Solventix schrieb: [ -> ]Ich gehe davon aus, dass Quotemedia da irgendwann mal eine Bezahlschranke einbaut. Die API ist m.W. nicht offiziell freigegeben.
Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Das kann schon gut sein. Deren Bilanzdaten sehen ja auch nicht gerade gut aus.
Das mit der kleinen Programmier-Ecke, von mir aus gern. Ich befürchte nur ich kann da selbst nicht so viel dazu beitragen. Ich tummel mich im Allgemeinen immer noch in den Tiefen der SEC-Berichte, da bin ich aber der einzige glaube ich. Insofern hab ich leider selten nützliche Tipps für andere.
(26.11.2018, 14:59)Solventix schrieb: [ -> ]Vielleicht sollten wir mal eine kleine Programmier-Ecke mit Tipps und Tricks zur Kursversorgung, Webscraping und Tradingsystemen aufbauen?
Ich lass mir mal was einfallen, mir würde so eine Ecke auch gefallen.