비트 코인 과거 데이터 가져 오기 [닫기]


122

나만의 비트 코인 차트를 만들고 싶습니다.

비트 코인 과거 가격 데이터를 검색하는 신뢰할 수있는 방법을 알고 계십니까? REST를 사용하여 검색하는 방법이 있습니까? REST를 지원하는 Bitfloor를 보았지만 유용한 값을 반환하지 않고 "내부 서버 오류"가 있습니다.

Bitcoincharts도 보았지만 2000 데이터 값으로 제한되어 있다고 생각합니다.

이에 대해 작업 할 프레임 워크 나 시스템을 제안 하시겠습니까?



답변:


150

실제로 Bitcoincharts에서 전체 Bitcoin 거래 내역을 CSV 형식으로 가져올 수 있습니다. http://api.bitcoincharts.com/v1/csv/

활성 교환을 위해 하루에 두 번 업데이트되며 몇 가지 죽은 교환도 있습니다.

수정 : CSV에 열 헤더가 없기 때문에 다음과 같습니다. 열 1) 거래의 타임 스탬프, 열 2) 가격, 열 3) 거래량


2
+1 예, 실제로 기존 거래 차트를 작성하는 데 매우 유용합니다. 데이터는 현재 제가하고있는 bitstamp의 푸셔 API를 통해 실시간으로 수집 할 수도 있습니다. 하루 동안 bitstamp를 인덱싱 한 후 bitstampUSD.csv를 다운로드하고 데이터 앞에 완전한 그림을 추가했습니다
nurettin 2014 년

2
@Lykegenes 두 번째 열은 무엇입니까? 값은 0.5-33 범위에 있으며 환율 USD / BTC 일 수 없습니다.
holdenlee 2014 년

4
bitcoincharts.com데이터 의 큰 격차에주의하십시오 . 또한 틱 "매수 / 매도"정보가 없습니다.
페트르 Javorik

2
@theJerm UNIX 타임 스탬프 형식이므로 UTC 시간대에서
1970

2
라이트 코인, 이더 리움 또는 기타 중요한 코인에 대한 데이터는 어디서 얻을 수 있습니까?
skan

31

여기에서 많은 과거 데이터를 찾을 수 있습니다 : https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
링크 전용 답변은 SO에서 권장되지 않습니다. 또한 그는 데이터 자체뿐만 아니라 데이터를 검색하는 방법을 찾고 있습니다.
fancyPants

1
당신 말이 맞아요, 제 대답에 좀 더 포괄적 이었어 야 했어요. 그러나 데이터 검색을위한 API 호출이 페이지 오른쪽에 나열되어 있으므로 그의 요청에 응답합니다.
Sean

링크가 깨진
기욤 슈발리에을

2
@GuillaumeChevalier 나는 quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data를 찾았 습니다
Jörn

1
멋지고 흥미로운 사이트. 제가 좋아하는 또 다른 서비스는 walletinvestor.com/forecast/bitcoin-prediction으로 , AI와 기계 학습을 사용하여 단기 및 장기 투자를 위해 매일 암호 화폐 가격을 예측합니다.
Johnny

15

경우에 따라 비트 스탬프 거래 데이터를 수집하려는 경우 더 오랜 기간 동안 더 높은 해상도로 웹 소켓 에서 하려면 아래의 log_bitstamp_trades.py 스크립트를 사용할 수 있습니다.

이 스크립트는 python websocket-client 및 pusher_client_python 라이브러리를 사용하므로 설치합니다.

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

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

그런 다음 백그라운드에서 실행할 수 있습니다.

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

InfluxDB와 같은 시계열 저장소를 사용하면 좋은 개선이 될 것입니다.
MrYellow

7

Bitstamp에는 이 링크JSON 에서 공개적으로 사용할 수있는 라이브 비트 코인 데이터가 있습니다 . 10 분 동안 600 번 이상 액세스 하지 마십시오. 그렇지 않으면 IP가 차단됩니다 (어쨌든 불필요합니다. 여기에서 자세한 내용을 읽으십시오 ). 다음은 라이브 데이터를 가져 오는 방법입니다.C#

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
}

여기에서 파싱하여 JSON데이터베이스에 저장 MongoDB한 다음 (또는 직접 삽입하여) 액세스 할 수 있습니다.

히스토리 데이터 (데이터베이스에 따라 다름-접근 방식에 따라 다름)의 경우 대부분의 데이터베이스에서 사용할 수있는 플랫 파일에서 삽입을 수행합니다 (예 : 파일 에서 SQL Server수행 할 수 있음 ).BULK INSERTCSV


4

이 경우에 대한 Java 예제를 작성했습니다.

json.org 라이브러리를 사용하여 JSONObject 및 JSONArray를 검색합니다. 아래 예제는 JSONObject로 얻을 수있는 blockchain.info의 데이터를 사용합니다.

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

어떤 라이브러리를 사용하고 있습니까?
Michael A

표준 JSON은 : json.org
DOMI

4

Coinbase에는 REST API가 있습니다. 웹 사이트에서 과거 가격에 액세스 할 수 가 있습니다. 데이터는 약 10 분마다 Coinbase 현물 가격 (USD)을 표시하는 것 같습니다.

결과는 CSV 형식으로 반환됩니다. API를 통해 원하는 페이지 번호를 쿼리해야합니다. 페이지 당 1000 개의 결과 (또는 가격 포인트)가 있습니다. 이는 페이지 당 약 7 일 분량의 데이터입니다.


4

Node.js로 JSON으로 스크랩하는 것은 재미있을 것입니다. :)

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

여기에 이미지 설명 입력

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

스크립트 감사합니다! 이제 다운로드 한 파일에 "정의되지 않음"만 포함 된 것 같습니다.
Chad Johnson

방금 repo를 확인하고 실행 npm installcat bitstampUSD-2014-9-9.json다음 괜찮아 보입니다. 작동하는 데 투자했다면 Stackoverflow 댓글 대신 Github로 가져가 보시겠습니까? 버그 보고서를 남겨주시겠습니까?
f1lt3r

귀하의 코드를 이해하면 1 분 단위로 비트 코인 가격의 전체 내역을 얻을 수 있습니까?
Mayeul SGC

예를 맞아입니다
f1lt3r
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.