Получить исторические данные о биткойнах [закрыто]


122

Я хочу создать свой собственный биткойн-график.

Знаете ли вы какой-либо надежный способ получить исторические данные о ценах на биткойны? Есть ли способ получить его с помощью REST? Я видел Bitfloor, который поддерживает REST, но не возвращает никакого полезного значения, имеет «внутреннюю ошибку сервера».

Я видел также биткойн-диаграммы, но я думаю, что они ограничены 2000 значениями данных.

Не могли бы вы предложить мне какую-нибудь структуру или систему для работы с этим?



Вы можете заплатить за исторические данные о биткойнах, охватывающие многие биржи / рынки, с Coinigy: coinigy.com/bitcoin-data
Джо Филлипс,

Ответы:


150

На самом деле, вы МОЖЕТЕ получить всю историю торгов биткойнами из биткойнчартов в формате CSV здесь: http://api.bitcoincharts.com/v1/csv/

он обновляется дважды в день для активных бирж, а также есть несколько мертвых бирж.

РЕДАКТИРОВАТЬ: Поскольку в CSV нет заголовков столбцов, вот что они: столбец 1) временная метка сделки, столбец 2) цена, столбец 3) объем сделки


2
+1 да, это на самом деле очень полезно для построения графиков сделок. Данные также могут быть получены в реальном времени через API толкателя bitstamp, чем я сейчас и занимаюсь. После дневной индексации bitstamp я загрузил bitstampUSD.csv и добавил данные, чтобы получить полную картину
nurettin

2
@Lykegenes Какой второй столбец? Значения находятся в диапазоне 0,5-33, что не может быть обменным курсом USD / BTC.
Холденли

4
Остерегайтесь больших пробелов в bitcoincharts.comданных. Также обратите внимание, что нет галочки «покупка / продажа».
Петр Яворик

2
@theJerm Это в формате временной метки UNIX, поэтому количество секунд с 01.01.1970 в часовом поясе UTC
Lykegenes

2
Где я могу получить данные для Litecoin, Ethereum или других важных монет?
skan

31

Здесь вы можете найти множество исторических данных: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
Ответы только по ссылкам не приветствуются на SO. Также он ищет способ извлекать данные, а не только сами данные.
fancyPants 05

1
Вы правы, я должен был дать более исчерпывающий ответ. Однако он отвечает на его запрос, поскольку вызовы API для получения данных перечислены в правой части страницы.
Шон

Ссылка не работает
Гийом Шевалье


1
Хороший, интересный сайт. Еще один сервис, который мне нравится, - это walletinvestor.com/forecast/bitcoin-prediction, который использует ИИ и машинное обучение для ежедневного прогнозирования цен на криптовалюту для краткосрочных и долгосрочных инвестиций.
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по этой ссылке . Не пытайтесь получить к нему доступ более 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 INSERTиз CSVфайла).


4

Я написал пример java для этого случая:

Используйте библиотеку json.org для получения объектов JSONObjects и JSONArrays. В приведенном ниже примере используются данные blockchain.info, которые можно получить как 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;
            }
        }
    }

Какую библиотеку это использует?
Michael A

Стандартный JSON: json.org
domi

4

Coinbase имеет REST API, который дает вам доступ к историческим ценам со своего веб-сайта. Данные, кажется, показывают спотовую цену Coinbase (в долларах США) примерно каждые десять минут.

Результаты возвращаются в формате CSV. Вы должны запросить номер нужной страницы через API. На странице 1000 результатов (или ценовых пунктов). Это примерно 7 дней данных на страницу.


4

Было бы весело перенести его в JSON с помощью Node.js :)

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

Спасибо за сценарий! Похоже, теперь в загруженных файлах просто «undefined».
Чад Джонсон

Я только что проверил репо, побежал npm install, и cat bitstampUSD-2014-9-9.jsonмне это нравится. Если вы заинтересованы в том, чтобы он работал, давайте перенесем его на Github, а не в комментарии Stackoverflow? Оставить мне отчет об ошибке?
f1lt3r 02

если я понимаю, что ваш код позволяет мне получить полную историю цен биткойнов в масштабе 1 минуты?
Mayeul sgc

Да, именно так
f1lt3r
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.