รับข้อมูลย้อนหลัง bitcoin [ปิด]


122

ฉันต้องการสร้างแผนภูมิ bitcoin ของตัวเอง

คุณจะรู้วิธีที่เชื่อถือได้ในการดึงข้อมูลราคาในอดีตของ bitcoins หรือไม่? มีวิธีการดึงข้อมูลโดยใช้ REST หรือไม่? ฉันเห็น Bitfloor ซึ่งรองรับ REST แต่ไม่ส่งคืนค่าที่เป็นประโยชน์ แต่อย่างใดมี "ข้อผิดพลาดภายในเซิร์ฟเวอร์"

ฉันเห็น Bitcoincharts ด้วย แต่ฉันคิดว่ามัน จำกัด ไว้ที่ 2,000 ค่าข้อมูล

คุณช่วยแนะนำกรอบหรือระบบใด ๆ ให้ฉันได้ไหม


4
nmat

คุณสามารถชำระเงินสำหรับข้อมูล bitcoin ในอดีตที่ครอบคลุมการแลกเปลี่ยน / ตลาดต่างๆได้จาก Coinigy: coinigy.com/bitcoin-data
Joe Phillips

คำตอบ:


150

จริงๆแล้วคุณสามารถรับประวัติการซื้อขาย Bitcoin ทั้งหมดจาก Bitcoincharts ในรูปแบบ CSV ได้ที่นี่: http://api.bitcoincharts.com/v1/csv/

มีการอัปเดตวันละสองครั้งสำหรับการแลกเปลี่ยนที่ใช้งานอยู่และมีการแลกเปลี่ยนที่ตายไปแล้วเล็กน้อยเช่นกัน

แก้ไข: เนื่องจากไม่มีส่วนหัวคอลัมน์ใน CSV จึงมีดังนี้คอลัมน์ 1) การประทับเวลาของการซื้อขายคอลัมน์ 2) ราคาคอลัมน์ 3) ปริมาณการซื้อขาย


2
+1 ใช่จริงๆแล้วมันมีประโยชน์มากสำหรับการสร้างแผนภูมิการซื้อขายที่จัดตั้งขึ้น นอกจากนี้ยังสามารถรับข้อมูลสดผ่าน API pusher ของ bitstamp ซึ่งเป็นสิ่งที่ฉันกำลังทำอยู่ตอนนี้ หลังจากจัดทำดัชนี bitstamp เป็นเวลาหนึ่งวันฉันดาวน์โหลด bitstampUSD.csv และใส่ข้อมูลไว้ข้างหน้าเพื่อให้ได้ภาพที่สมบูรณ์
nurettin

2
@Lykegenes คอลัมน์ที่สองคืออะไร? ค่าอยู่ในช่วง 0.5-33 ซึ่งไม่สามารถเป็นอัตราแลกเปลี่ยน USD / BTC ได้
holdenlee

4
ระวังช่องว่างขนาดใหญ่ในbitcoincharts.comข้อมูล โปรดทราบว่าไม่มีการติ๊กข้อมูล "ซื้อ / ขาย"
Petr Javorik

2
@theJerm มันอยู่ในรูปแบบการประทับเวลา UNIX ดังนั้นจำนวนวินาทีตั้งแต่ 01/01/1970 ในเขตเวลา UTC
Lykegenes

2
ฉันจะหาข้อมูลของ Litecoin, Ethereum หรือเหรียญสำคัญอื่น ๆ ได้จากที่ใด
กัน

31

คุณสามารถค้นหาข้อมูลย้อนหลังมากมายได้ที่นี่: https://www.quandl.com/data/BCHARTS-Bitcoin-Charts-Exchange-Rate-Data


1
ลิงก์เฉพาะคำตอบไม่ได้รับการสนับสนุนใน SO นอกจากนี้เขากำลังมองหาวิธีดึงข้อมูลไม่ใช่แค่ตัวข้อมูลเท่านั้น
fancyPants

1
คุณพูดถูกฉันควรจะเข้าใจคำตอบของฉันมากกว่านี้ อย่างไรก็ตามจะตอบสนองคำขอของเขาเนื่องจาก API เรียกร้องให้ดึงข้อมูลแสดงอยู่ทางด้านขวาของหน้า
ฌอน

ลิงก์เสีย
Guillaume Chevalier


1
เว็บไซต์ที่ดีและน่าสนใจ อีกบริการหนึ่งที่ฉันชอบคือwalletinvestor.com/forecast/bitcoin-predictionซึ่งใช้ AI และแมชชีนเลิร์นนิงในการทำนายราคาสกุลเงินดิจิทัลรายวันสำหรับการลงทุนระยะสั้นและระยะยาว
Johnny

15

ในกรณีที่คุณต้องการรวบรวมข้อมูลการค้าbitstampในรูปแบบwebsocketของพวกเขาด้วยความละเอียดที่สูงขึ้นในช่วงเวลาที่นานขึ้นคุณสามารถใช้สคริปต์ log_bitstamp_trades.py ด้านล่าง

สคริปต์ใช้ python websocket-client และ pusher_client_python libraries ดังนั้นให้ติดตั้ง

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

/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 มีข้อมูล Bitcoin สดที่มีการเผยแพร่อยู่ใน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

Standard JSON: json.org
domi

4

Coinbase มีREST APIที่ให้คุณเข้าถึงราคาย้อนหลังได้จากเว็บไซต์ของพวกเขา ดูเหมือนว่าข้อมูลจะแสดงราคาสปอตของ Coinbase (ในสกุลเงิน USD) ทุกๆสิบนาที

ผลลัพธ์จะแสดงในรูปแบบ CSV คุณต้องค้นหาหมายเลขหน้าที่คุณต้องการผ่าน API มีผลลัพธ์ 1,000 รายการ (หรือแต้มราคา) ต่อหน้า นั่นคือประมาณ 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)
  ]
]

ขอบคุณสำหรับคริป! ดูเหมือนว่าตอนนี้ไฟล์ที่ดาวน์โหลดจะมี "ไม่ได้กำหนด"
Chad Johnson

ฉันเพิ่งตรวจสอบ repo วิ่งnpm installและcat bitstampUSD-2014-9-9.jsonดูดีสำหรับฉัน หากคุณลงทุนเพื่อให้มันใช้งานได้ให้นำไปที่ Github แทนที่จะแสดงความคิดเห็น Stackoverflow? ปล่อยให้ฉันรายงานข้อผิดพลาด?
f1lt3r

ถ้าฉันเข้าใจรหัสของคุณช่วยให้ฉันได้รับประวัติทั้งหมดของราคา bitcoin ในระดับ 1 นาที?
Mayeul sgc

ใช่ถูกต้อง
f1lt3r
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.