Obtener datos históricos de bitcoin [cerrado]

122

Quiero hacer mi propio gráfico de bitcoin.

¿Conocería alguna forma confiable de recuperar datos históricos de precios de bitcoins? ¿Hay alguna forma de recuperarlo usando REST? Vi Bitfloor, que admite REST, pero no devuelve ningún valor útil, tiene un "error interno del servidor".

También vi Bitcoincharts, pero creo que está limitado a 2000 valores de datos.

¿Me sugeriría algún marco o sistema para trabajar al respecto?

Cod1ngFree
fuente
Puede pagar los datos históricos de bitcoin que cubren muchos intercambios / mercados desde Coinigy: coinigy.com/bitcoin-data
Joe Phillips

Respuestas:

150

En realidad, PUEDES obtener todo el historial de operaciones de Bitcoin de Bitcoincharts en formato CSV aquí: http://api.bitcoincharts.com/v1/csv/

se actualiza dos veces al día para intercambios activos, y también hay algunos intercambios muertos.

EDITAR: Dado que no hay encabezados de columna en los CSV, esto es lo que son: columna 1) la marca de tiempo de la operación, columna 2) el precio, columna 3) el volumen de la operación

Lykegenes
fuente
2
+1 sí, de hecho es muy útil para trazar operaciones establecidas. Los datos también se pueden adquirir en vivo a través de la API de empuje de bitstamp, que es lo que estoy haciendo en este momento. Después de indexar bitstamp por un día, descargué bitstampUSD.csv y antepuse los datos para tener una imagen completa
nurettin
2
@Lykegenes ¿Cuál es la segunda columna? Los valores están en el rango 0.5-33, que no puede ser el tipo de cambio USD / BTC.
holdenlee
44
Cuidado con las grandes brechas en los bitcoincharts.comdatos. También tenga en cuenta que no hay información de "comprar / vender".
Petr Javorik
2
@theJerm Está en el formato de marca de tiempo UNIX, por lo que la cantidad de segundos desde 01/01/1970 en la zona horaria UTC
Lykegenes
2
¿Dónde puedo obtener datos para Litecoin, Ethereum u otras monedas importantes?
skan
31

Puede encontrar muchos datos históricos aquí: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

Sean
fuente
1
Las respuestas de solo enlace no se recomiendan en SO. También está buscando una forma de recuperar datos, no solo los datos en sí.
fancyPants
1
Tienes razón, debería haber sido más completo en mi respuesta. Sin embargo, responde a su solicitud, ya que las llamadas API para recuperar los datos se enumeran en el lado derecho de la página.
Sean
El enlace está roto
Guillaume Chevalier
2
@GuillaumeChevalier he encontrado quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
Jörn
1
Bonito e interesante sitio. Otro servicio que me encanta es walletinvestor.com/forecast/bitcoin-prediction, que utiliza inteligencia artificial y aprendizaje automático para hacer predicciones diarias de precios de criptomonedas, para inversiones a corto y largo plazo.
Johnny
15

En caso de que desee recopilar datos de comercio de sello de bits de su websocket en una resolución más alta durante un período de tiempo más largo, puede usar el script log_bitstamp_trades.py a continuación.

El script utiliza las bibliotecas python websocket-client y pusher_client_python, así que instálelas.

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

y logrotate la configuración del archivo

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

entonces puedes ejecutarlo en segundo plano

nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &
mettw
fuente
Usar una tienda de series temporales como InfluxDB sería una buena mejora.
MrYellow
7

Bitstamp tiene datos bitcoin en vivo que están disponibles públicamente en JSONen este enlace . No intente acceder a ella más de 600 veces en diez minutos o de lo contrario bloquearán su IP (además, de todos modos, es innecesario; lea más aquí ). El siguiente es un C#enfoque para obtener datos en vivo:

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
}

Desde aquí, puede analizar JSONy almacenarlo en una base de datos (o con MongoDBinsertarlo directamente) y luego acceder a él.

Para los datos históricos (dependiendo de la base de datos, si así es como lo aborda), inserte desde un archivo plano, que la mayoría de las bases de datos le permiten usar (por ejemplo, SQL Serverpuede hacerlo BULK INSERTdesde un CSVarchivo).

usuario123
fuente
4

He escrito un ejemplo de Java para este caso:

Use la biblioteca json.org para recuperar JSONObjects y JSONArrays. El siguiente ejemplo utiliza los datos de blockchain.info que se pueden obtener como 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;
            }
        }
    }
domi
fuente
¿Qué biblioteca está usando esto?
Michael A
JSON estándar: json.org
domi
4

Coinbase tiene una API REST que le brinda acceso a precios históricos desde su sitio web. Los datos parecen mostrar el precio spot de Coinbase (en USD) aproximadamente cada diez minutos.

Los resultados se devuelven en formato CSV. Debe consultar el número de página que desea a través de la API. Hay 1000 resultados (o puntos de precio) por página. Eso equivale a unos 7 días de datos por página.

Leishman
fuente
4

Rasparlo a JSON con Node.js sería divertido :)

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

ingrese la descripción de la imagen aquí

[
  [
    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
fuente
Gracias por el guion! Parece que ahora los archivos descargados solo contienen "indefinido".
Chad Johnson el
Acabo de revisar el repositorio, corrí npm instally luego me cat bitstampUSD-2014-9-9.jsonparece bien. Si está interesado en hacerlo funcionar, ¿vamos a llevarlo a Github en lugar de los comentarios de Stackoverflow? Déjame un informe de error?
f1lt3r
si entiendo que su código me permite obtener el historial completo del precio de bitcoin en una escala de 1 minuto?
Mayeul sgc
Sí, eso es correcto
f1lt3r