Dapatkan data historis bitcoin [tutup]

122

Saya ingin membuat grafik bitcoin saya sendiri.

Apakah Anda tahu cara yang dapat diandalkan untuk mengambil data harga historis bitcoin? Apakah ada cara untuk mengambilnya kembali menggunakan REST? Saya melihat Bitfloor, yang mendukung REST, tetapi tidak mengembalikan nilai berguna apa pun, ia memiliki "kesalahan server internal".

Saya juga melihat Bitcoincharts, tapi saya pikir itu terbatas pada 2000 nilai data.

Apakah Anda menyarankan saya kerangka kerja atau sistem untuk mengerjakannya?

Cod1ngFree
sumber
Anda dapat membayar data bitcoin historis yang mencakup banyak bursa / pasar dari Coinigy: coinigy.com/bitcoin-data
Joe Phillips

Jawaban:

150

Sebenarnya, Anda BISA mendapatkan seluruh riwayat perdagangan Bitcoin dari Bitcoincharts dalam format CSV di sini: http://api.bitcoincharts.com/v1/csv/

itu diperbarui dua kali sehari untuk pertukaran aktif, dan ada beberapa pertukaran mati juga.

EDIT: Karena tidak ada tajuk kolom di CSV, berikut adalah: kolom 1) stempel waktu perdagangan, kolom 2) harga, kolom 3) volume perdagangan

Lykegenes
sumber
2
+1 ya, ini sebenarnya sangat berguna untuk memetakan perdagangan yang sudah mapan. Data juga dapat diperoleh secara langsung melalui API pendorong bitstamp yang saya lakukan sekarang. Setelah mengindeks bitstamp selama sehari, saya mengunduh bitstampUSD.csv dan menambahkan data untuk mendapatkan gambaran yang lengkap
nurettin
2
@Lykegenes Apa kolom kedua? Nilainya berada dalam kisaran 0,5-33, yang tidak bisa menjadi nilai tukar USD / BTC.
holdenlee
4
Waspadai celah besar dalam bitcoincharts.comdata. Perhatikan juga bahwa tidak ada informasi "beli / jual" centang.
Petr Javorik
2
@theJerm Ada dalam format stempel waktu UNIX, jadi jumlah detik sejak 01/01/1970 di zona waktu UTC
Lykegenes
2
Di mana saya bisa mendapatkan data untuk Litecoin, Ethereum, atau koin penting lainnya?
skan
31

Anda dapat menemukan banyak data historis di sini: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data

Sean
sumber
1
Tautan saja jawaban tidak dianjurkan di SO. Dia juga mencari cara untuk mengambil data, tidak hanya data itu sendiri.
fancyPants
1
Anda benar, saya seharusnya lebih komprehensif dalam jawaban saya. Namun itu menjawab permintaannya, karena panggilan API untuk mengambil data terdaftar di sisi kanan halaman.
Sean
Tautan rusak
Guillaume Chevalier
2
@GuillaumeChevalier Saya telah menemukan quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
Jörn
1
Situs yang bagus dan menarik. Layanan lain yang saya suka, adalah walletinvestor.com/forecast/bitcoin-prediction yang menggunakan AI dan pembelajaran mesin untuk membuat prediksi harga cryptocurrency harian, untuk investasi jangka pendek & panjang.
Johnny
15

Jika, Anda ingin mengumpulkan data perdagangan bitstamp dari websocket mereka dalam resolusi yang lebih tinggi dalam jangka waktu yang lebih lama, Anda dapat menggunakan skrip log_bitstamp_trades.py di bawah.

Skrip ini menggunakan pustaka websocket-client python dan pusher_client_python, jadi instal mereka.

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

dan konfigurasi file logrotate

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

lalu Anda dapat menjalankannya di latar belakang

nohup ./log_bitstamp_trades.py /mnt/data/bitstamp_logs/bitstamp-trade.log /mnt/data/bitstamp_logs/reload_log &
mettw
sumber
Menggunakan toko deret waktu seperti InfluxDB akan menjadi peningkatan yang bagus.
MrYellow
7

Bitstamp memiliki data yang bitcoin hidup yang tersedia untuk umum di JSONdi link ini . Jangan mencoba mengaksesnya lebih dari 600 kali dalam sepuluh menit atau mereka akan memblokir IP Anda (plus, itu tidak perlu; baca lebih lanjut di sini ). Di bawah ini adalah C#pendekatan untuk mendapatkan data langsung:

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
}

Dari sini, Anda dapat mengurai JSONdan menyimpannya dalam database (atau dengan MongoDBmenyisipkannya secara langsung) lalu mengaksesnya.

Untuk data historis (tergantung pada database - jika itu cara Anda mendekatinya), lakukan penyisipan dari file datar, yang sebagian besar database memungkinkan Anda untuk menggunakannya (misalnya, dengan SQL ServerAnda dapat melakukan BULK INSERTdari CSVfile).

pengguna123
sumber
4

Saya telah menulis contoh java untuk kasus ini:

Gunakan perpustakaan json.org untuk mengambil JSONObjects dan JSONArrays. Contoh di bawah ini menggunakan data blockchain.info yang dapat diperoleh sebagai 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
sumber
Perpustakaan apa yang digunakan ini?
Michael A
Standar JSON: json.org
domi
4

Coinbase memiliki REST API yang memberi Anda akses ke harga historis dari situs web mereka. Data tersebut tampaknya menunjukkan harga spot Coinbase (dalam USD) setiap sepuluh menit.

Hasil dikembalikan dalam format CSV. Anda harus menanyakan nomor halaman yang Anda inginkan melalui API. Ada 1000 hasil (atau poin harga) per halaman. Itu berarti data sekitar 7 hari per halaman.

leishman
sumber
4

Memasukkannya ke JSON dengan Node.js akan menyenangkan :)

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

masukkan deskripsi gambar di sini

[
  [
    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
sumber
Terima kasih untuk naskahnya! Tampaknya sekarang file yang diunduh hanya berisi "tidak ditentukan".
Chad Johnson
Saya baru saja memeriksa repo, berlari npm install, dan kemudian cat bitstampUSD-2014-9-9.jsonterlihat baik-baik saja bagi saya. Jika Anda berinvestasi untuk membuatnya berfungsi, mari bawa ke Github daripada di komentar Stackoverflow? Tinggalkan saya laporan bug?
f1lt3r
apakah saya mengerti kode Anda memungkinkan saya untuk mendapatkan riwayat lengkap harga bitcoin dalam skala 1 menit?
Mayeul sgc
Ya, itu benar
f1lt3r