Nhận dữ liệu lịch sử bitcoin [đã đóng]


122

Tôi muốn lập biểu đồ bitcoin của riêng mình.

Bạn có biết bất kỳ cách đáng tin cậy nào để truy xuất dữ liệu giá lịch sử của bitcoin không? Có cách nào để lấy nó bằng REST không? Tôi đã thấy Bitfloor, hỗ trợ REST, nhưng nó không trả về bất kỳ giá trị hữu ích nào, nó có "lỗi máy chủ nội bộ".

Tôi cũng thấy Bitcoincharts, nhưng tôi nghĩ nó bị giới hạn ở 2000 giá trị dữ liệu.

Bạn có thể gợi ý cho tôi bất kỳ khuôn khổ hoặc hệ thống nào để làm việc về nó không?



Bạn có thể thanh toán cho dữ liệu bitcoin lịch sử bao gồm nhiều sàn giao dịch / thị trường từ Coinigy: coinigy.com/bitcoin-data
Joe Phillips

Câu trả lời:


150

Trên thực tế, bạn CÓ THỂ lấy toàn bộ lịch sử giao dịch Bitcoin từ Bitcoincharts ở định dạng CSV tại đây: http://api.bitcoincharts.com/v1/csv/

nó được cập nhật hai lần một ngày cho các sàn giao dịch đang hoạt động và cũng có một số sàn giao dịch đã chết.

CHỈNH SỬA: Vì không có tiêu đề cột trong CSV, đây là những gì chúng có: cột 1) dấu thời gian của giao dịch, cột 2) giá, cột 3) khối lượng giao dịch


2
+1 vâng, nó trên thực tế rất hữu ích để lập biểu đồ các giao dịch đã thiết lập. Dữ liệu cũng có thể được thu thập trực tiếp thông qua API bộ đẩy của bitstamp, đó là những gì tôi đang làm ngay bây giờ. Sau khi lập chỉ mục bitstamp trong một ngày, tôi tải xuống bitstampUSD.csv và thêm dữ liệu trước để có một bức tranh hoàn chỉnh
nurettin

2
@Lykegenes Cột thứ hai là gì? Các giá trị nằm trong khoảng 0,5-33, không thể là tỷ giá hối đoái USD / BTC.
holdenlee

4
Cẩn thận với những khoảng trống lớn trong bitcoincharts.comdữ liệu. Cũng lưu ý rằng không có thông tin "mua / bán" đánh dấu.
Petr Javorik

2
@theJerm Nó ở định dạng dấu thời gian UNIX, vì vậy số giây kể từ ngày 01/01/1970 trong múi giờ UTC
Lykegenes

2
Tôi có thể lấy dữ liệu cho Litecoin, Ethereum hoặc các đồng tiền quan trọng khác ở đâu?
skan

31

Bạn có thể tìm thấy rất nhiều dữ liệu lịch sử tại đây: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
Câu trả lời chỉ liên kết không được khuyến khích trên SO. Ngoài ra, anh ta đang tìm cách để lấy dữ liệu, không chỉ dữ liệu của chính nó.
favouritePants

1
Bạn nói đúng, tôi nên trả lời toàn diện hơn. Tuy nhiên, nó trả lời yêu cầu của anh ấy, vì các lệnh gọi API truy xuất dữ liệu được liệt kê ở phía bên phải của trang.
Sean

Liên kết bị hỏng
Guillaume Chevalier

2
@GuillaumeChevalier tôi đã tìm thấy quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data
Jörn

1
Tốt, trang web thú vị. Một dịch vụ khác mà tôi yêu thích, là walletinvestor.com/forecast/bitcoin-prediction sử dụng AI và máy học để đưa ra dự đoán giá tiền điện tử hàng ngày, cho các khoản đầu tư ngắn hạn và dài hạn.
Johnny

15

Trong trường hợp, bạn muốn thu thập dữ liệu thương mại bitstamp từ biểu mẫu websocket của họ ở độ phân giải cao hơn trong khoảng thời gian dài hơn, bạn có thể sử dụng script log_bitstamp_trades.py bên dưới.

Tập lệnh sử dụng thư viện python websocket-client và pushher_client_python, vì vậy hãy cài đặt chúng.

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

và cấu hình tệp 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
}

sau đó bạn có thể chạy nó trên nền

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

Sử dụng cửa hàng chuỗi thời gian như InfluxDB sẽ là một cải tiến tốt.
MrYellow 13/1117

7

Bitstamp có dữ liệu bitcoin trực tiếp có sẵn công khai JSONtại liên kết này . Đừng cố gắng truy cập nó hơn 600 lần trong mười phút, nếu không họ sẽ chặn IP của bạn (ngoài ra, nó không cần thiết; đọc thêm ở đây ). Dưới đây là một C#cách tiếp cận để nhận dữ liệu trực tiếp:

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
}

Từ đây, bạn có thể phân tích cú pháp JSONvà lưu trữ nó trong cơ sở dữ liệu (hoặc vớiMongoDB chèn trực tiếp) rồi truy cập.

Đối với dữ liệu lịch sử (tùy thuộc vào cơ sở dữ liệu - nếu đó là cách bạn tiếp cận nó), làm một chèn từ một tập tin bằng phẳng, mà hầu hết cơ sở dữ liệu cho phép bạn sử dụng (ví dụ, với SQL Serverbạn có thể làm một BULK INSERTtừ một CSVtập tin).


4

Tôi đã viết một ví dụ java cho trường hợp này:

Sử dụng thư viện json.org để truy xuất JSONObjects và JSONArrays. Ví dụ bên dưới sử dụng dữ liệu của blockchain.info có thể được lấy dưới dạng 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;
            }
        }
    }

Thư viện này đang sử dụng là gì?
Michael A

JSON chuẩn: json.org
domi

4

Coinbase có API REST cho phép bạn truy cập vào giá lịch sử từ trang web của họ. Dữ liệu dường như hiển thị giá giao ngay trên Coinbase (tính bằng USD) khoảng mười phút một lần.

Kết quả được trả về ở định dạng CSV. Bạn phải truy vấn số trang bạn muốn thông qua API. Có 1000 kết quả (hoặc điểm giá) trên mỗi trang. Đó là khoảng 7 ngày giá trị dữ liệu trên mỗi trang.


4

Chuyển nó thành JSON với Node.js sẽ rất thú vị :)

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

nhập mô tả hình ảnh ở đây

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

Cảm ơn bạn vì kịch bản! Có vẻ như bây giờ các tệp đã tải xuống chỉ chứa "không xác định".
Chad Johnson

Tôi chỉ kiểm tra repo, chạy npm install, và sau đó cat bitstampUSD-2014-9-9.jsontrông ổn đối với tôi. Nếu bạn đầu tư vào việc làm cho nó hoạt động, hãy đưa nó đến Github thay vì nhận xét Stackoverflow? Để lại cho tôi một báo cáo lỗi?
f1lt3r

nếu tôi hiểu mã của bạn cho phép tôi xem toàn bộ lịch sử giá bitcoin trên thang điểm 1 phút?
Mayeul sgc

Vâng, đúng vậy
f1lt3r
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.