Jump to content

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Geschrieben (bearbeitet)

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

Diesen Beitrag teilen


Link zum Beitrag
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.)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Geschrieben (bearbeitet)

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Geschrieben (bearbeitet)
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

Diesen Beitrag teilen


Link zum Beitrag
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 ?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
18 minutes ago, Serpens66 said:

Gehts da dann einfach in einem schritt von 14 auf 18 uhr ?

Genau.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


×
×
  • Neu erstellen...

Wichtige Information

Wir speichern Cookies auf Ihrem Gerät, um diese Seite besser zu machen. Sie können Ihre Cookie-Einstellungen anpassen, ansonsten gehen wir davon aus, dass Sie damit einverstanden sind. In unseren Datenschutzerklärungen finden sie weitere Informationen.