Stefan999 Posted June 11, 2019 Share Posted June 11, 2019 Hallo, ich suche historische Chartdaten, z.B. für Backtesting. Und zwar: -Tagesdaten möglichst weit zurück, so weit wie möglich. -Stundencharts, wenn es geht etwa 1 - 2 Jahre -Minutencharts, einige Wochen Jeweils als Tabelle mit Min, Max, Anfangs- und Schlusskurs Wo kann man so etwas downloaden? Link to comment Share on other sites More sharing options...
Ulli Posted June 11, 2019 Share Posted June 11, 2019 (edited) Schau dir mal CryptoCompare an. Da geht das glaub ich ganz gut. Ansonsten kannst du dir bei CoinMarketCap auch die täglichen historischen Kurse ziehen. Interessehalber: was fängt man mit historischen Minutencharts an? Edited June 11, 2019 by Ulli 1 Link to comment Share on other sites More sharing options...
PeWi Posted June 11, 2019 Share Posted June 11, 2019 Tages- und Stunden-Candles bekommt man von cryptocompare.com über Jahre zurück problemlos. Minutendaten, egal, ob sehr kurz (1min) oder ziemlich lang (30min), gibt es leider üblicherweise nur eine Woche zurück, was ziemlich wenig ist. Ich wäre ebenfalls an kostenlosen Quellen für Minutendaten über längere Zeiträume interessiert. 57 minutes ago, Ulli said: Interessehalber: was fängt man mit historischen Minutencharts an? Bot-Strategien testen, die auf Candledaten kürzer als eine Stunde basieren, z.B. 30min oder 15min. Bei schnellen, aggressiven Strategien ggfs sogar 5min oder 1min. (Viele kurze und kleine Trades geben - laut Theorie - verlässlichere und oft auch bessere Ergebnisse als wenige große Trades. Kurze schnelle Trades lassen sich auch im Bärenmarkt noch eher unterbringen als langsamere. große Trades.) 2 Link to comment Share on other sites More sharing options...
Serpens66 Posted June 12, 2019 Share Posted June 12, 2019 (edited) ist cryptocompare kostenlos brauchbar? hatte da vor nem Jahr oderso mal geschaut und da wars echt übertrieben teuer, also daten die du selbst kostenlos von nem exchange per api holen kannst/konntest, ksoten dann mal mehrere hundert euro allgemein sollten solche daten immer kostenlos verfügbar sein, daher heiße ich es nicht gut ein Unternehmen zu unterstützen, dass absolute wucherpreise für etwas verlangt dass kostenlos sein sollte. Am besten ists natürlich immer die apis der exchanges zu nutzen, zb binance die candelstick daten. Wenn diese nicht beliebig weit zurück abgefragt werden können, dann sofort eine datenbank oderso einrichten, wo man alle paar Tage mal abfragt und sich die daten dann selbst speichert. Für Bitcoin preise gibts einige alte Daten hier kostenlos http://api.bitcoincharts.com/v1/csv/ Am besten ist sicherlich bitstamp USD, weil nie große abweichungen (wies bei bitfinex ist) und reicht am weitesten zurück. Das ist jeder einzelne Trade, muss man also selbst noch zu candelstick Daten aufbereiten, ist aber nicht das problem, zb hier mein python skript um es in stündliche oder tägliche candlestickdaten umzuwandeln (schon ne ganze weile her dass ich das geschrieben hab, also verzeiht evtl komischen codestil :D): from datetime import datetime from decimal import * import collections # zum sortieren von dict # die csv die man von bitcoincharts bekommt enthält womöglich jeden einzelnen Trade. # trading csv datei meint historische Preisdaten zb von http://api.bitcoincharts.com/v1/csv/ # dort sind die Einträge: unix timestamp, close price, volume # Dieses Skipt fasst die Daten zu hourly oder daily zusammen und gibt aus: # date %Y-%m-%d %H:%M:%S , High, Low, Open, Close, Volume if __name__ == '__main__': filename = input("Gib den Namen der csv Datei ein.\n") art = input("(h)ourly, (d)aily.\n") art = art=="h" and "Hourly" or art=="d" and "Daily" or "nichts" with open(filename+'.csv', 'r') as f : zeilenliste = list(f) with open(filename+"_candle"+art+".csv", 'w') as neu : neu.write("Date, High, Low, Open, Close, Volume\n") # add a header dic = {} if art=="Daily": for zeile in range(len(zeilenliste)): try: # there is no header line in original ListederZeile = zeilenliste[zeile].split(',') date = "{}".format(datetime.fromtimestamp(int(ListederZeile[0].replace('\"',''))).strftime('%Y-%m-%d')) if dic.get(date): dic[date]["volume"] = dic[date]["volume"] + Decimal(ListederZeile[2]) price = Decimal(ListederZeile[1]) if price > dic[date]["high"]: dic[date]["high"] = price if price < dic[date]["low"]: dic[date]["low"] = price dic[date]["close"] = price else: dic[date] = {"high":Decimal(ListederZeile[1]),"low":Decimal(ListederZeile[1]),"open":Decimal(ListederZeile[1]),"close":Decimal(ListederZeile[1]),"volume":Decimal(ListederZeile[2])} except Exception as err: print("Fehler: {}".format(err)) # dictionary sorted by key dic = collections.OrderedDict(sorted(dic.items(), key=lambda t: datetime.timestamp(datetime.strptime("{}".format(t[0]), '%Y-%m-%d')))) for date,entry in dic.items(): neu.write("{}, {} ,{} ,{} ,{} ,{}\n".format(datetime.strptime("{}".format(date), '%Y-%m-%d'),entry["high"],entry["low"],entry["open"],entry["close"],entry["volume"])) # mit date umgewandelt in '%Y-%m-%d %H:%M:%S' elif art=="Hourly": for zeile in range(len(zeilenliste)): try: # there is no header line in original ListederZeile = zeilenliste[zeile].split(',') date = "{}".format(datetime.fromtimestamp(int(ListederZeile[0].replace('\"',''))).strftime('%Y-%m-%d %H')) if dic.get(date): dic[date]["volume"] = dic[date]["volume"] + Decimal(ListederZeile[2]) price = Decimal(ListederZeile[1]) if price > dic[date]["high"]: dic[date]["high"] = price if price < dic[date]["low"]: dic[date]["low"] = price dic[date]["close"] = price else: dic[date] = {"high":Decimal(ListederZeile[1]),"low":Decimal(ListederZeile[1]),"open":Decimal(ListederZeile[1]),"close":Decimal(ListederZeile[1]),"volume":Decimal(ListederZeile[2])} except Exception as err: print("Fehler: {}".format(err)) # dictionary sorted by key dic = collections.OrderedDict(sorted(dic.items(), key=lambda t: datetime.timestamp(datetime.strptime("{}".format(t[0]), '%Y-%m-%d %H')))) for date,entry in dic.items(): neu.write("{}, {} ,{} ,{} ,{} ,{}\n".format(datetime.strptime("{}".format(date), '%Y-%m-%d %H'),entry["high"],entry["low"],entry["open"],entry["close"],entry["volume"])) # mit date umgewandelt in '%Y-%m-%d %H:%M:%S' Edited June 12, 2019 by Serpens66 1 Link to comment Share on other sites More sharing options...
PeWi Posted June 12, 2019 Share Posted June 12, 2019 (edited) 2 hours ago, Serpens66 said: ist cryptocompare kostenlos brauchbar? [...] daher heiße ich es nicht gut ein Unternehmen zu unterstützen, dass absolute wucherpreise für etwas verlangt dass kostenlos sein sollte. CryptoCompare hat mehrere Modelle, das erste ist kostenlos und wird wohl von den meisten genutzt. Da bekommt man alles ab 1h-Candles und länger über Jahre zurück. Alles unter 1h-Candles (wie oben geschrieben) leider nur für ca. 1 Woche. 2 hours ago, Serpens66 said: Am besten ists natürlich immer die apis der exchanges zu nutzen, zb binance die candelstick daten. Gerade Binance hat da einen Nachteil. Immer, wenn die Wartung machen, fehlen die Daten; sprich, deren historische Werte haben immer wieder Löcher. CryptoCompare füllt diese Löcher mit irgendwelchen Ersatzwerten, d.h. du bekommst von CryptoCompare durchgehende Werte, auch, wenn du speziell die Werte für Binance anforderst. Das finde ich schon angenehm. 2 hours ago, Serpens66 said: Das ist jeder einzelne Trade, muss man also selbst noch zu candelstick Daten aufbereiten, ist aber nicht das problem, zb hier mein python skript um es in stündliche oder tägliche candlestickdaten umzuwandeln Super Sache, dass du das reinstellst! 👍 (Auch, wenn ich es momentan selber nicht brauche, ich finde das klasse von dir - Großzügigkeit und Hilfsbereitschaft sind heutzutage nicht mehr so verbreitet ...) Edited June 12, 2019 by PeWi 1 Link to comment Share on other sites More sharing options...
Serpens66 Posted June 12, 2019 Share Posted June 12, 2019 vor 19 Minuten schrieb PeWi: Gerade Binance hat da einen Nachteil. Immer, wenn die Wartung machen, fehlen die Daten; sprich, deren historische Werte haben immer wieder Löcher. ah gut zu wissen, wie sehen diese Löcher denn genau aus? Gehts da dann einfach in einem schritt von 14 auf 18 uhr ? Link to comment Share on other sites More sharing options...
PeWi Posted June 12, 2019 Share Posted June 12, 2019 18 minutes ago, Serpens66 said: Gehts da dann einfach in einem schritt von 14 auf 18 uhr ? Genau. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now