Ottieni dati storici bitcoin [chiuso]


122

Voglio fare il mio grafico bitcoin.

Conosceresti un modo affidabile per recuperare i dati storici sui prezzi dei bitcoin? C'è un modo per recuperarlo usando REST? Ho visto Bitfloor, che supporta REST, ma non restituisce alcun valore utile, ha un "errore interno del server".

Ho visto anche Bitcoinchart, ma penso che sia limitato a 2000 valori di dati.

Mi suggeriresti qualche framework o sistema per lavorarci?



Puoi pagare i dati storici sui bitcoin che coprono molti scambi / mercati da Coinigy: coinigy.com/bitcoin-data
Joe Phillips

Risposte:


150

In realtà, puoi ottenere l'intera cronologia degli scambi di Bitcoin da Bitcoincharts in formato CSV qui: http://api.bitcoincharts.com/v1/csv/

viene aggiornato due volte al giorno per gli scambi attivi e ci sono anche alcuni scambi morti.

MODIFICA: poiché non ci sono intestazioni di colonna nei CSV, ecco cosa sono: colonna 1) data e ora dell'operazione, colonna 2) prezzo, colonna 3) volume dell'operazione


2
+1 sì, in effetti è molto utile per tracciare grafici consolidati. I dati possono anche essere acquisiti in tempo reale tramite l'API pusher di bitstamp, che è quello che sto facendo in questo momento. Dopo aver indicizzato bitstamp per un giorno, ho scaricato bitstampUSD.csv e aggiunto i dati all'inizio per avere un quadro completo
nurettin

2
@ Lykegenes Qual è la seconda colonna? I valori sono compresi nell'intervallo 0,5-33, che non può essere il tasso di cambio USD / BTC.
holdenlee

4
Attenzione alle grandi lacune nei bitcoincharts.comdati. Si noti inoltre che non sono presenti informazioni "acquista / vendi".
Petr Javorik

2
@theJerm È nel formato timestamp UNIX, quindi il numero di secondi dal 01/01/1970 nel fuso orario UTC
Lykegenes

2
Dove posso ottenere dati per Litecoin, Ethereum o altre monete importanti?
skan

31

1
Le risposte solo link non sono incoraggiate su SO. Inoltre sta cercando un modo per recuperare i dati, non solo i dati stessi.
fancyPants

1
Hai ragione, avrei dovuto essere più esauriente nella mia risposta. Tuttavia risponde alla sua richiesta, poiché le chiamate API per il recupero dei dati sono elencate sul lato destro della pagina.
Sean

Il collegamento è interrotto
Guillaume Chevalier


1
Bel sito interessante. Un altro servizio che amo, è walletinvestor.com/forecast/bitcoin-prediction che utilizza l'intelligenza artificiale e l'apprendimento automatico per fare previsioni giornaliere sui prezzi delle criptovalute, per investimenti a breve e lungo termine.
Johnny

15

Nel caso in cui desideri raccogliere dati commerciali bitstamp dal loro websocket con una risoluzione più elevata per un periodo di tempo più lungo, puoi utilizzare lo script log_bitstamp_trades.py di seguito.

Lo script utilizza le librerie python websocket-client e pusher_client_python, quindi installale.

#!/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

e 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
}

quindi puoi eseguirlo in background

nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &

Usare un archivio di serie temporali come InfluxDB sarebbe un bel miglioramento.
MrYellow

7

Bitstamp ha dati bitcoin in tempo reale che sono pubblicamente disponibili JSONa questo link . Non tentare di accedervi più di 600 volte in dieci minuti altrimenti bloccheranno il tuo IP (inoltre, non è comunque necessario; leggi di più qui ). Il seguente è un C#approccio per ottenere dati in tempo reale:

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
}

Da qui, puoi analizzarlo JSONe memorizzarlo in un database (o MongoDBinserirlo direttamente) e quindi accedervi.

Per i dati storici (a seconda del database, se è così che ti avvicini), fai un inserimento da un file flat, che la maggior parte dei database ti consente di utilizzare (ad esempio, SQL Serverpuoi fare un BULK INSERTda un CSVfile).


4

Ho scritto un esempio java per questo caso:

Usa la libreria json.org per recuperare JSONObjects e JSONArrays. L'esempio seguente utilizza i dati di blockchain.info che possono essere ottenuti come JSONObject.

    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;
            }
        }
    }

Quale libreria sta usando?
Michael A

JSON standard: json.org
domi

4

Coinbase ha un'API REST che ti dà accesso ai prezzi storici dal loro sito web. I dati sembrano mostrare il prezzo spot di Coinbase (in USD) circa ogni dieci minuti.

I risultati vengono restituiti in formato CSV. È necessario interrogare il numero di pagina desiderato tramite l'API. Ci sono 1000 risultati (o punti di prezzo) per pagina. Si tratta di circa 7 giorni di dati per pagina.


4

Raschiarlo in JSON con Node.js sarebbe divertente :)

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

inserisci qui la descrizione dell'immagine

[
  [
    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)
  ]
]

Grazie per la sceneggiatura! Sembra che ora i file scaricati contengano solo "undefined".
Chad Johnson

Ho appena controllato il repository, eseguito npm installe poi cat bitstampUSD-2014-9-9.jsonmi sembra a posto. Se hai intenzione di farlo funzionare, portiamolo su Github piuttosto che sui commenti di Stackoverflow? Lasciami una segnalazione di bug?
f1lt3r

se capisco il tuo codice mi permette di avere lo storico completo del prezzo di bitcoin su una scala di 1 minuto?
Mayeul sgc

Sì, è vero
f1lt3r
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.