Bitcoin-Verlaufsdaten abrufen [geschlossen]

122

Ich möchte mein eigenes Bitcoin-Diagramm erstellen.

Würden Sie einen zuverlässigen Weg kennen, um historische Preisdaten von Bitcoins abzurufen? Gibt es eine Möglichkeit, es mit REST abzurufen? Ich habe Bitfloor gesehen, das REST unterstützt, aber keinen nützlichen Wert zurückgibt. Es hat einen "internen Serverfehler".

Ich habe auch Bitcoincharts gesehen, aber ich denke, es ist auf 2000 Datenwerte beschränkt.

Würden Sie mir ein Framework oder System vorschlagen, um daran zu arbeiten?

Cod1ngFree
quelle
Sie können für historische Bitcoin-Daten, die viele Börsen / Märkte abdecken, bei Coinigy
Joe Phillips

Antworten:

150

Tatsächlich können Sie die gesamte Bitcoin-Handelshistorie von Bitcoincharts im CSV-Format hier abrufen: http://api.bitcoincharts.com/v1/csv/

Es wird zweimal täglich für den aktiven Austausch aktualisiert, und es gibt auch einige tote Austausche.

BEARBEITEN: Da die CSVs keine Spaltenüberschriften enthalten, sind diese wie folgt: Spalte 1) Zeitstempel des Handels, Spalte 2) Preis, Spalte 3) Handelsvolumen

Lykegenes
quelle
2
+1 Ja, es ist in der Tat sehr nützlich, um etablierte Trades zu zeichnen. Daten können auch live über die Pusher-API von Bitstamp erfasst werden, was ich gerade mache. Nachdem ich bitstamp für einen Tag indiziert hatte, lud ich bitstampUSD.csv herunter und stellte die Daten voran, um ein vollständiges Bild zu erhalten
nurettin
2
@ Lykegenes Was ist die zweite Spalte? Die Werte liegen im Bereich von 0,5 bis 33, was nicht der Wechselkurs USD / BTC sein kann.
Holdenlee
4
Achten Sie auf große Datenlücken bitcoincharts.com. Beachten Sie auch, dass es keine Tick "Kauf / Verkauf" -Informationen gibt.
Petr Javorik
2
@theJerm Es ist im UNIX-Zeitstempelformat, also die Anzahl der Sekunden seit dem 01.01.1970 in der UTC-Zeitzone
Lykegenes
2
Wo kann ich Daten für Litecoin, Ethereum oder andere wichtige Münzen erhalten?
Skan
31

Viele historische Daten finden Sie hier: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

Sean
quelle
1
Nur-Link-Antworten werden auf SO nicht empfohlen. Außerdem sucht er nach einer Möglichkeit, Daten abzurufen, nicht nur die Daten selbst.
FancyPants
1
Sie haben Recht, ich hätte in meiner Antwort umfassender sein sollen. Es beantwortet jedoch seine Anfrage, da die API-Aufrufe zum Abrufen der Daten auf der rechten Seite aufgelistet sind.
Sean
Die Verbindung ist unterbrochen
Guillaume Chevalier
2
@ GuillaumeChevalier Ich habe quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
Jörn
1
Schöne, interessante Seite. Ein weiterer Service, den ich liebe, ist walletinvestor.com/forecast/bitcoin-prediction, bei dem mithilfe von KI und maschinellem Lernen tägliche Preisvorhersagen für Kryptowährungen für kurz- und langfristige Investitionen erstellt werden.
Johnny
15

Im Fall möchten Sie bitstamp Handelsdaten bilden , um ihren sammeln websocket in höherer Auflösung über einen längeren Zeitraum unten stehende Skript log_bitstamp_trades.py verwenden.

Das Skript verwendet die Bibliotheken python websocket-client und pusher_client_python. Installieren Sie sie daher.

#!/usr/bin/python

import pusherclient
import time
import logging
import sys
import datetime
import signal
import os

logging.basicConfig()
log_file_fd = None

def sigint_and_sigterm_handler(signal, frame):
    global log_file_fd
    log_file_fd.close()
    sys.exit(0)


class BitstampLogger:

    def __init__(self, log_file_path, log_file_reload_path, pusher_key, channel, event):
        self.channel = channel
        self.event = event
        self.log_file_fd = open(log_file_path, "a")
        self.log_file_reload_path = log_file_reload_path
        self.pusher = pusherclient.Pusher(pusher_key)
        self.pusher.connection.logger.setLevel(logging.WARNING)
        self.pusher.connection.bind('pusher:connection_established', self.connect_handler)
        self.pusher.connect()

    def callback(self, data):
        utc_timestamp = time.mktime(datetime.datetime.utcnow().timetuple())
        line = str(utc_timestamp) + " " + data + "\n"
        if os.path.exists(self.log_file_reload_path):
            os.remove(self.log_file_reload_path)
            self.log_file_fd.close()
            self.log_file_fd = open(log_file_path, "a")
        self.log_file_fd.write(line)

    def connect_handler(self, data):
        channel = self.pusher.subscribe(self.channel)
        channel.bind(self.event, self.callback)


def main(log_file_path, log_file_reload_path):
    global log_file_fd
    bitstamp_logger = BitstampLogger(
        log_file_path,
        log_file_reload_path,
        "de504dc5763aeef9ff52",
        "live_trades",
        "trade")
    log_file_fd = bitstamp_logger.log_file_fd
    signal.signal(signal.SIGINT, sigint_and_sigterm_handler)
    signal.signal(signal.SIGTERM, sigint_and_sigterm_handler)
    while True:
        time.sleep(1)


if __name__ == '__main__':
    log_file_path = sys.argv[1]
    log_file_reload_path = sys.argv[2]
    main(log_file_path, log_file_reload_path

und logrotate file config

/mnt/data/bitstamp_logs/bitstamp-trade.log
{
    rotate 10000000000
    minsize 10M
    copytruncate
    missingok
    compress
    postrotate
        touch /mnt/data/bitstamp_logs/reload_log > /dev/null
    endscript
}

dann können Sie es im Hintergrund ausführen

nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &
mettw
quelle
Die Verwendung eines Zeitreihenspeichers wie InfluxDB wäre eine schöne Verbesserung.
MrYellow
7

Bitstamp verfügt über Live-Bitcoin-Daten, die JSONunter diesem Link öffentlich verfügbar sind . Versuchen Sie nicht , in zehn Minuten mehr als 600 Mal darauf zuzugreifen, da sonst Ihre IP blockiert wird (außerdem ist dies sowieso nicht erforderlich; lesen Sie hier mehr ). Das Folgende ist ein C#Ansatz zum Abrufen von Live-Daten:

using (var WebClient = new System.Net.WebClient())
{
     var json = WebClient.DownloadString("https://www.bitstamp.net/api/ticker/");
     string value = Convert.ToString(json);
     // Parse/use from here
}

Von hier aus können Sie das analysieren JSONund in einer Datenbank speichern (oder MongoDBdirekt einfügen) und dann darauf zugreifen.

Aus historischen Daten (abhängig von der Datenbank - wenn das ist , wie man sich ihr nähert), einen Einsatz aus einer flachen Datei tun, die meisten Datenbanken können Sie (zum Beispiel mit verwenden SQL ServerSie tun können , BULK INSERTaus einer CSVDatei).

user123
quelle
4

Ich habe ein Java-Beispiel für diesen Fall geschrieben:

Verwenden Sie die Bibliothek json.org, um JSONObjects und JSONArrays abzurufen. Im folgenden Beispiel werden die Daten von blockchain.info verwendet, die als JSONObject abgerufen werden können.

    public class main 
    {
        public static void main(String[] args) throws MalformedURLException, IOException
        {
            JSONObject data = getJSONfromURL("https://blockchain.info/charts/market-price?format=json");
            JSONArray data_array = data.getJSONArray("values");

            for (int i = 0; i < data_array.length(); i++)
            {
                JSONObject price_point = data_array.getJSONObject(i);

                //  Unix time
                int x = price_point.getInt("x");

                //  Bitcoin price at that time
                double y = price_point.getDouble("y");

                //  Do something with x and y.
            }

        }

        public static JSONObject getJSONfromURL(String URL)
        {
            try
            {
                URLConnection uc;
                URL url = new URL(URL);
                uc = url.openConnection();
                uc.setConnectTimeout(10000);
                uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
                uc.connect();

                BufferedReader rd = new BufferedReader(
                        new InputStreamReader(uc.getInputStream(), 
                        Charset.forName("UTF-8")));

                StringBuilder sb = new StringBuilder();
                int cp;
                while ((cp = rd.read()) != -1)
                {
                    sb.append((char)cp);
                }

                String jsonText = (sb.toString());            

                return new JSONObject(jsonText.toString());
            } catch (IOException ex)
            {
                return null;
            }
        }
    }
domi
quelle
Welche Bibliothek benutzt das?
Michael A
Standard JSON: json.org
domi
4

Coinbase verfügt über eine REST-API , mit der Sie über die Website auf historische Preise zugreifen können. Die Daten scheinen den Coinbase-Spotpreis (in USD) etwa alle zehn Minuten anzuzeigen.

Die Ergebnisse werden im CSV-Format zurückgegeben. Sie müssen die gewünschte Seitenzahl über die API abfragen. Es gibt 1000 Ergebnisse (oder Preispunkte) pro Seite. Das sind ungefähr 7 Tage Daten pro Seite.

Leishman
quelle
4

Es würde Spaß machen, es mit Node.js nach JSON zu kratzen :)

https://github.com/f1lt3r/bitcoin-scraper

Geben Sie hier die Bildbeschreibung ein

[
  [
    1419033600,  // Timestamp (1 for each minute of entire history)
    318.58,      // Open
    318.58,      // High
    318.58,      // Low
    318.58,      // Close
    0.01719605,  // Volume (BTC)
    5.478317609, // Volume (Currency)
    318.58       // Weighted Price (USD)
  ]
]
f1lt3r
quelle
Danke für das Drehbuch! Es scheint, dass die heruntergeladenen Dateien jetzt nur noch "undefiniert" enthalten.
Chad Johnson
Ich habe gerade das Repo ausgecheckt, bin gelaufen npm installund sehe dann cat bitstampUSD-2014-9-9.jsonfür mich gut aus. Wenn Sie in das Funktionieren investiert sind, können Sie es zu Github und nicht zu Stackoverflow-Kommentaren bringen. Hinterlasse mir einen Fehlerbericht?
f1lt3r
Wenn ich verstehe, dass Ihr Code es mir ermöglicht, den vollständigen Verlauf des Bitcoin-Preises auf einer Skala von 1 Minute abzurufen?
Mayeul sgc
Ja das ist richtig
f1lt3r