Jump to content

Historische Chartdaten


Stefan999

Recommended Posts

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

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 by Ulli
  • Like 1
Link to comment
Share on other sites

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 to comment
Share on other sites

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'

 

Edited by Serpens66
  • Up 1
Link to comment
Share on other sites

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 by PeWi
  • Like 1
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.