Bitcoin geçmiş verilerini alın [kapalı]


122

Kendi bitcoin grafiğimi yapmak istiyorum.

Bitcoin geçmiş fiyat verilerini almanın güvenilir bir yolunu biliyor musunuz? REST kullanarak geri almanın bir yolu var mı? REST'i destekleyen Bitfloor'u gördüm, ancak kullanışlı bir değer döndürmüyor, "dahili sunucu hatası" var.

Bitcoincharts'ı da gördüm, ancak bunun 2000 veri değeriyle sınırlı olduğunu düşünüyorum.

Bunun üzerinde çalışmam için bana herhangi bir çerçeve veya sistem önerir misiniz?



Coinigy'den birçok borsayı / piyasayı kapsayan geçmiş bitcoin verileri için ödeme yapabilirsiniz: coinigy.com/bitcoin-data
Joe Phillips

Yanıtlar:


150

Aslında, Bitcoin ticaret geçmişinin tamamını Bitcoincharts'tan CSV formatında buradan edinebilirsiniz: http://api.bitcoincharts.com/v1/csv/

aktif borsalar için günde iki kez güncellenir ve birkaç ölü borsa da vardır.

DÜZENLEME: CSV'lerde sütun başlığı olmadığından, bunlar şunlardır: sütun 1) ticaretin zaman damgası, sütun 2) fiyat, sütun 3) ticaretin hacmi


2
+1 evet, aslında yerleşik işlemlerin grafiğini çizmek için çok kullanışlıdır. Veriler, şu anda yaptığım şey olan bitstamp'ın itici API'si aracılığıyla canlı olarak da elde edilebilir. Bir gün boyunca bitstamp'ı indeksledikten sonra, bitstampUSD.csv dosyasını indirdim ve tam bir resim elde etmek için verinin başına ekledim
nurettin

2
@Lykegenes İkinci sütun nedir? Değerler 0,5-33 aralığındadır ve USD / BTC döviz kuru olamaz.
holdenlee

4
bitcoincharts.comVerilerdeki büyük boşluklara dikkat edin . Ayrıca hiçbir "al / sat" bilgisi olmadığına dikkat edin.
Petr Javorik

2
@theJerm Bu UNIX zaman damgası biçiminde, bu nedenle UTC saat diliminde 01/01/1970 tarihinden bu yana geçen saniye sayısı
Lykegenes

2
Litecoin, Ethereum veya diğer önemli paralar için verileri nereden alabilirim?
Skan

31

Burada birçok geçmiş veriyi bulabilirsiniz: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate verileri


1
SO'da yalnızca bağlantı yanıtları teşvik edilmemektedir. Ayrıca, yalnızca verinin kendisini değil, veriyi almanın bir yolunu arıyor.
fancyPants

1
Haklısın, cevabımda daha kapsamlı olmalıydım. Ancak, verileri almak için API çağrıları sayfanın sağ tarafında listelendiği için isteğine cevap veriyor.
Sean

Bağlantı koptu
Guillaume Chevalier


1
Güzel, ilginç site. Sevdiğim bir diğer hizmet , kısa ve uzun vadeli yatırımlar için günlük kripto para birimi fiyat tahminleri yapmak için AI ve makine öğrenimini kullanan walletinvestor.com/forecast/bitcoin-prediction .
Johnny

15

Bitstamp ticaret verilerini web soketlerinden daha uzun süre yüksek çözünürlükte toplamak istiyorsanız, aşağıdaki log_bitstamp_trades.py komut dosyasını kullanabilirsiniz.

Komut dosyası python websocket-client ve pusher_client_python kitaplıklarını kullanır, bu yüzden onları kurun.

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

ve logrotate dosya yapılandırması

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

sonra arka planda çalıştırabilirsin

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

InfluxDB gibi bir zaman serisi mağaza kullanmak güzel bir gelişme olacaktır.
MrYellow

7

Bitstamp içinde herkese açık olan canlı Bitcoin verilerine sahip JSONen bu bağlantı . Do not on dakika içinde erişime o 600'den fazla kez dene veya bunlar IP engelleyeceksiniz (artı, gereksiz zaten var; burada daha fazla okumak ). Aşağıda C#canlı veri elde etmeye yönelik bir yaklaşım verilmiştir:

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
}

Buradan, onu ayrıştırıp JSONbir veritabanında depolayabilir (veya MongoDBdoğrudan ekleyerek) ve sonra ona erişebilirsiniz.

Tarihsel veriler için (veritabanı bağlı - Sizin nasıl yaklaşım olduğunu en varsa), en veritabanları ile (örneğin kullanmak için izin düz bir dosya, bir ekleme yapmak SQL Serverbir yapabilirsiniz BULK INSERTbir gelen CSVdosyası).


4

Bu dava için bir java örneği yazdım:

JSONObjects ve JSONArrays almak için json.org kitaplığını kullanın. Aşağıdaki örnek, JSONObject olarak elde edilebilen blockchain.info verilerini kullanır.

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

Bu hangi kitaplığı kullanıyor?
Michael A

Standart JSON: json.org
domi

4

Coinbase, web sitelerinden geçmiş fiyatlara erişmenizi sağlayan bir REST API'ye sahiptir. Veriler Coinbase spot fiyatını (USD cinsinden) her on dakikada bir gösteriyor gibi görünüyor.

Sonuçlar CSV formatında döndürülür. API aracılığıyla istediğiniz sayfa numarasını sorgulamalısınız. Her sayfada 1000 sonuç (veya fiyat noktası) vardır. Bu, sayfa başına yaklaşık 7 günlük veri demektir.


4

Node.js ile JSON'a kopyalamak eğlenceli olurdu :)

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

görüntü açıklamasını buraya girin

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

Senaryo için teşekkürler! Görünüşe göre şimdi indirilen dosyalar sadece "tanımsız" içeriyor.
Chad Johnson

Depoyu kontrol ettim, koştum npm installve sonra cat bitstampUSD-2014-9-9.jsonbana iyi göründü. Çalışmasına yatırım yapıyorsanız, Stackoverflow yorumları yerine Github'a götürelim mi? Bana bir hata raporu bırakır mısınız?
f1lt3r

Kodunuzun bitcoin fiyatının tam geçmişini 1 dakikalık bir ölçekte almamı sağladığını anlarsam?
Mayeul sgc

Evet doğru
f1lt3r
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.