Zum Inhalt springen

Historische Chartdaten


Stefan999

Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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?

Bearbeitet von Ulli
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.)

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D 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'

 

Bearbeitet von Serpens66
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ...)

Bearbeitet von PeWi
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.