比特幣鏈上指標深度分析:從數據獲取到投資決策的完整實務指南

深入介紹比特幣鏈上指標的理論基礎、計算方法、數據來源,提供可直接執行的 Python 程式碼範例,涵蓋 NVT、MVRV、庫存流量模型等關鍵指標的分析與應用。

比特幣鏈上指標深度分析:從數據獲取到投資決策的完整實務指南

概述

比特幣區塊鏈蘊含豐富的數據,這些數據可以用於分析網路健康狀態、評估比特幣基本面、預測價格走勢,以及理解比特幣的實際使用情況。本文將深入介紹比特幣鏈上指標的理論基礎、計算方法、數據來源,並提供可直接執行的 Python 程式碼範例,幫助讀者建立完整的比特幣鏈上數據分析能力。我們將涵蓋從基礎指標到進階分析的全方位內容,並說明如何將這些數據應用於實際的投資決策中。

鏈上數據分析的核心理念

為什麼鏈上數據重要

比特幣區塊鏈是一個完全公開的帳本。每一筆交易、每一個地址餘額、每一次比特幣移動都永久記錄在區塊鏈上。這種透明度是傳統金融系統無法比擬的,也是比特幣作為分析資產的獨特優勢。

鏈上數據的價值:
═══════════════════════════════════════════════════════════════════════════════

傳統金融 vs 比特幣數據可獲取性:

傳統金融:
• 上市公司財務數據(季報、年報)
• 經濟指標(GDP、失業率等)
• 市場情緒指標(少數幾個)
• 數據往往滯後、不完整

比特幣區塊鏈:
• 所有交易數據即時可查
• 完整透明的供給數據
• 地址分佈、持倉行為
• 鏈上活動指標(網路使用量)
• 礦工收益、成本結構
• 數據即時、精確、完整

這使得比特幣成為可以用數據「透視」的資產

鏈上數據分析的核心假設是:比特幣的長期價格與其基本面的健康程度相關。當網路使用量增加、持倉行為健康、礦工成本支撐強勁時,比特幣的長期價值應該得到支撐。

比特幣區塊鏈數據結構

在深入分析指標之前,我們需要理解比特幣區塊鏈的基本數據結構。

比特幣區塊由區塊頭和交易列表組成:

比特幣區塊結構:
┌─────────────────────────────────────────────────────────────────────────────┐
│                           區塊頭 (Block Header)                              │
├─────────────────────────────────────────────────────────────────────────────┤
│  版本號 (4 bytes)        │  區塊的版本號                                   │
│  前區塊哈希 (32 bytes)   │  指向區塊鏈中前一區塊的哈希值                    │
│  Merkle 根 (32 bytes)    │  區塊中所有交易的 Merkle 樹根                   │
│  時間戳 (4 bytes)        │  區塊創建的近似時間                             │
│  難度目標 (4 bytes)      │  工作量證明的目標值                             │
│  Nonce (4 bytes)         │  礦工用於工作量證明的隨機數                     │
├─────────────────────────────────────────────────────────────────────────────┤
│                           交易計數 (VarInt)                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│                           交易列表 (Transaction List)                      │
│  ┌─────────────────────────────────────────────────────────────────────┐   │
│  │  Coinbase 交易(區塊獎勵)                                         │   │
│  ├─────────────────────────────────────────────────────────────────────┤   │
│  │  交易 1                                                           │   │
│  ├─────────────────────────────────────────────────────────────────────┤   │
│  │  交易 2                                                           │   │
│  ├─────────────────────────────────────────────────────────────────────┤   │
│  │  ...                                                              │   │
│  └─────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘

比特幣使用 UTXO(未花費交易輸出)模型,而非帳戶模型。這意味著餘額不是「存儲」的,而是通過追蹤一系列未花費輸出來計算。

UTXO 模型詳解:
═══════════════════════════════════════════════════════════════════════════════

假設 Alice 有 0.5 BTC,她的「餘額」實際上是:

UTXO Set for Alice:
┌────────────────────────────────────────────────────────────────────────────┐
│  UTXO #1: 0.3 BTC  (來自交易 A, 輸出 #0)                                 │
│  UTXO #2: 0.2 BTC  (來自交易 B, 輸出 #1)                                 │
│                                                                            │
│  總餘額 = 0.3 + 0.2 = 0.5 BTC                                           │
└────────────────────────────────────────────────────────────────────────────┘

當 Alice 發送 0.1 BTC 給 Bob 時:

交易結構:
┌────────────────────────────────────────────────────────────────────────────┐
│  輸入:                                                                    │
│  ├─ UTXO #1 (0.3 BTC) - Alice 使用這個 UTXO                             │
│  └─ UTXO #2 (0.2 BTC) - Alice 使用這個 UTXO                              │
│                                                                            │
│  輸出:                                                                    │
│  ├─ 0.1 BTC → Bob 的地址                                                 │
│  └─ 0.4 BTC → Alice 的找零地址(通常是新的)                             │
│                                                                            │
│  費用 = 輸入總額 - 輸出總額 = 0.5 - 0.4 = 0.1 BTC (假設)               │
└────────────────────────────────────────────────────────────────────────────┘

交易後的 UTXO 狀態:
• UTXO #1, #2 被標記為「已花費」
• 新增 Bob 的 UTXO (0.1 BTC)
• 新增 Alice 的新 UTXO (0.4 BTC)

數據來源與 API 整合

主要數據提供商

比特幣鏈上數據可以通過多種渠道獲取:

主要比特幣區塊鏈數據來源:
═══════════════════════════════════════════════════════════════════════════════

1. 區塊瀏覽器 API
   • blockchain.info        - 最早、最全面的比特幣數據 API
   • Blockstream API        - 開源的比特幣節點數據 API
   • mempool.space          - 注重隱私和用戶體驗的瀏覽器
   • Blockchair            - 支持多幣種的區塊鏈搜索引擎

2. 節點軟體內置 API
   • Bitcoin Core RPC      - 完全節點的 JSON-RPC 接口
   • btcd (Go 實現)        - 可定制化的節點軟體

3. 專業數據提供商
   • Glassnode             - 機構級區塊鏈數據分析平台
   • CryptoQuant           - 鏈上分析與警報服務
   • Santiment             - 區塊鏈數據與社交情緒數據

4. 交易所數據
   • Binance API           - 交易數據
   • Coinbase API          - 價格與訂單簿數據

讓我們詳細介紹如何使用 Python 獲取這些數據。

使用 Python 獲取區塊鏈數據

首先,我們需要安裝必要的 Python 庫:

# 安裝必要的庫
pip install requests pandas numpy matplotlib

現在讓我們編寫一個完整的數據獲取腳本:

import requests
import pandas as pd
import time
from datetime import datetime

class BitcoinDataFetcher:
    """比特幣區塊鏈數據獲取類"""
    
    def __init__(self):
        self.base_url_blockstream = "https://blockstream.info/api"
        self.base_url_blockchaininfo = "https://blockchain.info"
        
    def get_block_height(self):
        """獲取當前區塊高度"""
        response = requests.get(f"{self.base_url_blockstream}/blocks/tip/height")
        return int(response.text)
    
    def get_block_hash(self, height):
        """獲取指定高度的區塊哈希"""
        response = requests.get(f"{self.base_url_blockstream}/block-height/{height}")
        return response.text
    
    def get_block_data(self, block_hash):
        """獲取區塊詳細數據"""
        response = requests.get(f"{self.base_url_blockstream}/block/{block_hash}")
        return response.json()
    
    def get_address_data(self, address):
        """獲取地址餘額和交易歷史"""
        response = requests.get(f"{self.base_url_blockstream}/address/{address}")
        return response.json()
    
    def get_address_transactions(self, address):
        """獲取地址的所有交易"""
        response = requests.get(f"{self.base_url_blockstream}/address/{address}/txs")
        return response.json()
    
    def get_mempool_info(self):
        """獲取記憶池信息"""
        response = requests.get(f"{self.base_url_blockstream}/mempool")
        return response.json()
    
    def get_fee_estimates(self):
        """獲取費用估算(satoshi/vByte)"""
        response = requests.get(f"{self.base_url_blockstream}/fee-estimates")
        return response.json()

# 使用示例
fetcher = BitcoinDataFetcher()
current_height = fetcher.get_block_height()
print(f"當前區塊高度: {current_height}")

# 獲取最新區塊
latest_hash = fetcher.get_block_hash(current_height)
block_data = fetcher.get_block_data(latest_hash)

print(f"最新區塊:")
print(f"  - 哈希: {block_data['id']}")
print(f"  - 交易數: {len(block_data['tx'])}")
print(f"  - 區塊大小: {block_data['size']} bytes")
print(f"  - 區塊重量: {block_data['weight']} WU")

使用 Bitcoin Core RPC

如果你運行自己的比特幣節點,可以使用 Bitcoin Core 的 RPC 接口:

import requests
import json

class BitcoinCoreRPC:
    """Bitcoin Core RPC 接口封裝"""
    
    def __init__(self, rpc_user, rpc_password, rpc_host='127.0.0.1', rpc_port=8332):
        self.url = f"http://{rpc_host}:{rpc_port}/"
        self.auth = (rpc_user, rpc_password)
        
    def call(self, method, *params):
        """調用 RPC 方法"""
        payload = {
            "jsonrpc": "1.0",
            "id": "python-script",
            "method": method,
            "params": params
        }
        response = requests.post(
            self.url, 
            json=payload, 
            auth=self.auth,
            headers={'content-type': 'text/plain'}
        )
        return response.json()['result']
    
    def get_block_count(self):
        """獲取當前區塊高度"""
        return self.call('getblockcount')
    
    def get_block_hash(self, height):
        """獲取區塊哈希"""
        return self.call('getblockhash', height)
    
    def get_block(self, block_hash, verbosity=2):
        """獲取區塊數據(verbosity: 0=只有哈希, 1=區塊頭, 2=完整數據)"""
        return self.call('getblock', block_hash, verbosity)
    
    def get_raw_mempool(self):
        """獲取記憶池中的所有交易"""
        return self.call('getrawmempool')
    
    def get_transaction(self, txid, verbose=False):
        """獲取交易詳情"""
        return self.call('getrawtransaction', txid, verbose)
    
    def list_unspent(self, min_confirmations=1, max_confirmations=9999999):
        """列出未花費的交易輸出"""
        return self.call('listunspent', min_confirmations, max_confirmations)

# 使用示例
# 注意:需要先配置 bitcoin.conf 中的 rpcuser 和 rpcpassword
# rpcuser=your_user
# rpcpassword=your_password
# server=1

# rpc = BitcoinCoreRPC("your_user", "your_password")
# block_count = rpc.get_block_count()
# print(f"當前區塊: {block_count}")

核心鏈上指標詳解

網路價值與交易比率(NVT)

NVT(Network Value to Transactions Ratio)是比特幣領域最常用的基本面指標之一,被稱為「比特幣的市盈率」。

NVT 指標詳解:
═══════════════════════════════════════════════════════════════════════════════

計算公式:
         NVT = 網路價值 / 日均交易量

其中:
• 網路價值 = 比特幣價格 × 流通量
• 日均交易量 = 每日通過區塊鏈轉移的比特幣總量(美元計)

解讀:
• NVT 高:比特幣相對於其實際使用「昂貴」
• NVT 低:比特幣相對於其實際使用「便宜」

歷史數據:
┌────────────────────────────────────────────────────────────────────────────┐
│  時間        比特幣價格    網路價值       日交易量      NVT              │
├────────────────────────────────────────────────────────────────────────────┤
│  2013/1     $13         $1.7億        $200萬        8.5              │
│  2013/12    $1,100      $140億        $5,000萬      28               │
│  2017/12    $20,000     $3,300億      $30億         110              │
│  2020/3     $6,500      $1,200億      $50億         24              │
│  2021/11    $60,000     $11,000億     $100億        110             │
│  2025/2     $100,000    $20,000億     $80億         250             │
└────────────────────────────────────────────────────────────────────────────┘

注意:NVT 有局限性
• 交易量可以被「洗交易」人為抬高
• 交易所內部轉帳也計入鏈上交易
• 閃電網路等二層交易不計入

讓我們編寫計算 NVT 的 Python 代碼:

import requests
import pandas as pd
from datetime import datetime, timedelta

class NVTAnalyzer:
    """NVT 比率分析器"""
    
    def __init__(self):
        self.price_url = "https://api.coingecko.com/api/v3/simple/price"
        self.blockstream_url = "https://blockstream.info/api"
        
    def get_bitcoin_price(self, date=None):
        """獲取比特幣歷史價格"""
        if date:
            # 獲取歷史價格
            timestamp = int(date.timestamp())
            url = f"{self.price_url}?ids=bitcoin&vs_currencies=usd&ast={timestamp}"
        else:
            # 獲取當前價格
            url = f"{self.price_url}?ids=bitcoin&vs_currencies=usd"
        
        response = requests.get(url)
        return response.json()['bitcoin']['usd']
    
    def get_daily_volume(self, days=90):
        """計算日均交易量(美元計)"""
        # 獲取最近交易的總輸出值
        total_volume = 0
        current_height = self._get_block_height()
        
        # 計算過去 N 天的交易總量
        for i in range(days * 144):  # 每天約 144 個區塊
            try:
                block_hash = self._get_block_hash(current_height - i)
                block_data = self._get_block(block_hash)
                
                for tx in block_data['tx']:
                    # 累加所有輸出的美元價值
                    total_volume += sum([v['value'] for v in tx['vout']]) / 100000000 * self.get_bitcoin_price()
            except:
                continue
                
        return total_volume / days
    
    def calculate_nvt(self, window=90):
        """計算 NVT 比率"""
        current_price = self.get_bitcoin_price()
        supply = 19600000  # 比特幣流通量(約)
        network_value = current_price * supply
        
        daily_volume = self.get_daily_volume(window)
        
        return network_value / daily_volume if daily_volume > 0 else 0
    
    def _get_block_height(self):
        response = requests.get(f"{self.blockstream_url}/blocks/tip/height")
        return int(response.text)
    
    def _get_block_hash(self, height):
        response = requests.get(f"{self.blockstream_url}/block-height/{height}")
        return response.text
    
    def _get_block(self, block_hash):
        response = requests.get(f"{self.blockstream_url}/block/{block_hash}")
        return response.json()

# 使用示例
analyzer = NVTAnalyzer()
nvt = analyzer.calculate_nvt()
print(f"當前 NVT 比率: {nvt:.2f}")

MVRV 比率

MVRV(Market Value to Realized Value)是評估比特幣是否處於泡沫或價值低估狀態的重要指標。

MVRV 指標詳解:
═══════════════════════════════════════════════════════════════════════════════

計算公式:
         MVRV = 市場價值 / 已實現價值

其中:
• 市場價值 = 比特幣當前價格 × 流通量
• 已實現價值 = 每個比特幣上次移動時的價格 加權總和

解讀:
• MVRV > 3.7:比特幣可能處於泡沫區域(歷史高點)
• MVRV < 1.0:比特幣可能嚴重低估
• MVRV = 1.0:市場價值等於已實現價值

歷史數據與解讀:
┌────────────────────────────────────────────────────────────────────────────┐
│  時間        比特幣價格   市場價值      已實現價值    MVRV    信號         │
├────────────────────────────────────────────────────────────────────────────┤
│  2013/4     $266         $33億         $15億         2.2     適中        │
│  2013/12    $1,100       $140億        $60億         2.3     適中        │
│  2017/12    $20,000      $3,300億      $150億        22      極度高估    │
│  2018/12    $3,700       $670億        $650億        1.03    底部信號    │
│  2020/3     $6,500       $1,200億      $800億        1.5     適中        │
│  2021/11    $60,000      $11,000億     $2,500億      4.4     高估        │
│  2022/11    $16,000      $3,000億      $3,200億      0.94    低估        │
│  2025/2     $100,000     $20,000億     $8,000億      2.5     適中        │
└────────────────────────────────────────────────────────────────────────────┘

已實現價格的計算方式:
已實現價值 = Σ(每個 UTXO 的價值 × 該 UTXO 上次移動時的比特幣價格)

例如:
• 100 BTC 在 2015 年以 $300 購買 → 已實現價值貢獻 = 100 × 300 = $30,000
• 50 BTC 在 2020 年以 $10,000 購買 → 已實現價值貢獻 = 50 × 10,000 = $500,000
• ...
• 總已實現價值 = 所有 UTXO 的貢獻總和

讓我們編寫計算 MVRV 的代碼:

class MVRVAnalyzer:
    """MVRV 比率分析器"""
    
    def __init__(self):
        self.coingecko_url = "https://api.coingecko.com/api/v3"
        
    def calculate_realized_value(self):
        """
        計算比特幣已實現價值
        使用 Blockstream API 獲取 UTXO 數據並計算加權平均
        """
        # 這是一個簡化版本
        # 實際實現需要遍歷所有 UTXO
        
        # 獲取當前供應量
        supply_url = "https://api.coingecko.com/api/v3/coins/bitcoin"
        response = requests.get(supply_url)
        data = response.json()
        circulating_supply = data['market_data']['circulating_supply'][0]
        
        # 使用已實現 cap 的估算值
        # 數據來源:various blockchain analytics
        # 這裡使用模擬數據,實際應使用準確數據源
        realized_cap_estimates = {
            '2024-01-01': 38000000000,  # $380 億
            '2024-06-01': 42000000000,  # $420 億
            '2024-12-01': 55000000000,  # $550 億
            '2025-02-01': 80000000000,  # $800 億
        }
        
        return realized_cap_estimates
    
    def calculate_mrvr(self, date=None):
        """計算 MVRV 比率"""
        # 獲取當前價格
        price_url = f"{self.coingecko_url}/simple/price?ids=bitcoin&vs_currencies=usd"
        response = requests.get(price_url)
        current_price = response.json()['bitcoin']['usd']
        
        # 獲取流通量
        supply_url = f"{self.coingecko_url}/coins/bitcoin?localization=false"
        response = requests.get(supply_url)
        data = response.json()
        circulating_supply = data['market_data']['circulating_supply']
        
        # 計算市場價值
        market_value = current_price * circulating_supply
        
        # 估算已實現價值(使用平均持倉成本)
        # 這裡使用簡化方法:假設平均持倉成本為當前價格的 40%
        # 實際應使用鏈上數據精確計算
        realized_value = market_value * 0.4
        
        return market_value / realized_value

# 使用示例
mvrv_analyzer = MVRVAnalyzer()
mvrv = mvrv_analyzer.calculate_mrvr()
print(f"當前 MVRV 比率: {mvrv:.2f}")

if mvrv > 3.7:
    print("警告:比特幣可能處於泡沫區域")
elif mvrv < 1.0:
    print("機會:比特幣可能被嚴重低估")

比特幣彩虹圖指標

彩虹圖是一個長期價格指標,使用對數刻度將比特幣歷史價格分為不同的顏色區間,每個區間代表不同的市場情緒。

比特幣彩虹圖:
═══════════════════════════════════════════════════════════════════════════════

顏色區間與含義:

深紅色 (Dark Red)    ████████████████████████████████████████  $500,000+
                       「極度泡沫,賣出!」

紅色 (Red)           ██████████████████████████████████████  $100,000-$500,000
                       「泡沫形成」

橙色 (Orange)        ██████████████████████████████████████  $50,000-$100,000
                       「FOMO 加速」

黃色 (Yellow)        ██████████████████████████████████    $30,000-$50,000
                       「估計仍然很高」

淺綠色 (Light Green) ████████████████████████████████       $13,000-$30,000
                       「仍然不錯」

綠色 (Green)         ████████████████████████████████       $8,000-$13,000
                       「購買區」

深綠色 (Dark Green)  █████████████████████████████           $5,000-$8,000
                       「嚴重低估」

藍色 (Blue)          █████████████████████████               $2,000-$5,000
                       「比特幣風暴中的低位」

使用說明:
• 彩虹圖是長期指標,適用於至少 4 年以上的投資視角
• 僅供參考,不構成投資建議
• 過去的表現不代表未來

庫存流量模型(Stock-to-Flow)

庫存流量模型是評估比特幣長期價值的另一重要框架,它將比特幣視為類似黃金的稀缺商品。

Stock-to-Flow 模型詳解:
═══════════════════════════════════════════════════════════════════════════════

基本概念:

• Stock(庫存):目前存在的總量
• Flow(流量):每年的新增產量
• S/F = Stock / Flow

比特幣的獨特之處:
比特幣是唯一具有預可知曉的有限供應的資產。黃金的 S/F 約為 60,白銀約為 22。
比特幣的 S/F 持續增加(因為產量每 4 年減半)。

比特幣 S/F 歷史:
┌────────────────────────────────────────────────────────────────────────────┐
│  時間         區塊獎勵    年產量      流通量      S/F                    │
├────────────────────────────────────────────────────────────────────────────┤
│  2009         50 BTC      3,285,000   3,685,000   1.1                   │
│  2012         25 BTC      1,642,500   10,325,000  6.3                   │
│  2016         12.5 BTC    821,250     15,737,500  19.2                  │
│  2020         6.25 BTC    410,625     18,375,000  44.8                  │
│  2024         3.125 BTC   205,312     19,687,500  95.9                  │
│  2028         1.5625 BTC  102,656     19,843,750  193.3                 │
└────────────────────────────────────────────────────────────────────────────┘

價格預測模型:
基於 S/F 的比特幣價格模型:

模型公式(PlanB 模型):
     price = 0.001 * S/F^3.3

這個模型預測比特幣在減半後會達到特定的價格目標。

重要提醒:
• S/F 模型有爭議,不是所有分析師都認同
• 模型基於歷史數據,未來可能不同
• 不應作為唯一的投資依據

進階指標與分析

長期持有者供應量(LTH Supply)

長期持有者(Long-Term Holders, LTH)是指持有比特幣超過 155 天的地址。這個指標可以幫助判斷市場處於哪個階段。

長期持有者分析:
═══════════════════════════════════════════════════════════════════════════════

定義:
• 短期持有者 (STH):持有時間 < 155 天
• 長期持有者 (LTH):持有時間 >= 155 天

分析方法:

1. LTH 供應量比例
   • 當 LTH 供應量處於低點(< 40%):
     → 早期採用者獲利了結
     → 新投資者接手
     → 通常是牛市初期
   
   • 當 LTH 供應量處於高點(> 60%):
     → 長期投資者鎖倉
     → 流通量減少
     → 通常是牛市頂部或熊市底部

2. LTH 行為模式
   • 在牛市頂部:LTH 開始拋售
   • 在熊市底部:LTH 停止拋售,開始累積
   • 在牛市中期:LTH 保持觀望

歷史數據:
┌────────────────────────────────────────────────────────────────────────────┐
│  時間        BTC 價格    LTH 供應比例   市場階段                         │
├────────────────────────────────────────────────────────────────────────────┤
│  2015/1     $200        65%           熊市底部,LTH 累積中              │
│  2017/12    $20,000     45%           牛市頂部,LTH 開始拋售           │
│  2018/12    $3,700      55%           熊市底部,LTH 停止拋售           │
│  2020/3     $6,500      60%           宏觀恐慌,LTH 累積               │
│  2021/11    $60,000     40%           牛市頂部,LTH 大幅拋售           │
│  2022/11    $16,000     65%           熊市底部,LTH 累積               │
└────────────────────────────────────────────────────────────────────────────┘

比特幣彩虹圖與情緒週期

比特幣市場存在明顯的週期性規律,理解這些規律可以幫助投資者做出更好的決策。

比特幣減半週期:
═══════════════════════════════════════════════════════════════════════════════

比特幣每 4 年減半一次,這創造了可預測的供應衝擊:

減半時間表:
┌────────────────────────────────────────────────────────────────────────────┐
│  減半編號   日期           區塊獎勵    理論年化通脹率                    │
├────────────────────────────────────────────────────────────────────────────┤
│  1          2012/11/28     50→25 BTC   25% → 12.5%                       │
│  2          2016/07/09     25→12.5 BTC 12.5% → 8.3%                      │
│  3          2020/05/11     12.5→6.25  8.3% → 4.2%                       │
│  4          2024/04/20     6.25→3.125 4.2% → 2.1%                       │
└────────────────────────────────────────────────────────────────────────────┘

每個週期通常經歷以下階段:

1. 減半前 1-2 年
   • 價格開始上漲
   • 媒體關注增加
   • 新投資者進場

2. 減半後 1 年
   • 供應減少效應顯現
   • 價格快速上漲
   • FOMO(錯失恐懼)達到頂峰

3. 週期頂部
   • 價格創新高
   • 長期持有者開始拋售
   • 媒體狂熱

4. 修正期
   • 價格大幅回調
   • 短期投資者離場
   • 長期投資者累積

5. 下一個減半前
   • 橫盤整理
   • 機構布局
   • 等待下一次催化劑

實務應用:建立比特幣基本面儀表板

讓我們結合所有指標,建立一個完整的基本面分析儀表板:

import requests
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt

class BitcoinFundamentalDashboard:
    """比特幣基本面分析儀表板"""
    
    def __init__(self):
        self.coingecko_url = "https://api.coingecko.com/api/v3"
        self.blockstream_url = "https://blockstream.info/api"
        
    def get_comprehensive_data(self):
        """獲取全面的比特幣數據"""
        
        # 1. 基本市場數據
        market_data = self._get_market_data()
        
        # 2. 鏈上指標
        onchain_metrics = self._get_onchain_metrics()
        
        # 3. 礦工指標
        miner_metrics = self._get_miner_metrics()
        
        # 4. 整合儀表板數據
        dashboard = {
            'timestamp': datetime.now().isoformat(),
            'price': market_data['price'],
            'market_cap': market_data['market_cap'],
            'circulating_supply': market_data['circulating_supply'],
            '24h_volume': market_data['24h_volume'],
            'block_height': onchain_metrics['block_height'],
            'mempool_txs': onchain_metrics['mempool_txs'],
            'difficulty': onchain_metrics['difficulty'],
            'hashrate': miner_metrics['hashrate'],
            'miner_revenue_usd': miner_metrics['revenue_24h'],
            'fees_percentage': miner_metrics['fees_percentage'],
        }
        
        return dashboard
    
    def _get_market_data(self):
        """獲取市場數據"""
        url = f"{self.coingecko_url}/coins/bitcoin?localization=false"
        response = requests.get(url)
        data = response.json()
        
        return {
            'price': data['market_data']['current_price']['usd'],
            'market_cap': data['market_data']['market_cap']['usd'],
            'circulating_supply': data['market_data']['circulating_supply'],
            '24h_volume': data['market_data']['total_volume']['usd'],
        }
    
    def _get_onchain_metrics(self):
        """獲取鏈上指標"""
        # 區塊高度
        height_response = requests.get(f"{self.blockstream_url}/blocks/tip/height")
        block_height = int(height_response.text)
        
        # 記憶池交易數
        mempool_response = requests.get(f"{self.blockstream_url}/mempool")
        mempool_data = mempool_response.json()
        
        # 難度
        latest_hash = requests.get(f"{self.blockstream_url}/block-height/{block_height}").text
        block_data = requests.get(f"{self.blockstream_url}/block/{latest_hash}").json()
        
        return {
            'block_height': block_height,
            'mempool_txs': len(mempool_data),
            'difficulty': block_data['bits'],
        }
    
    def _get_miner_metrics(self):
        """獲取礦工指標"""
        # 這裡需要連接比特幣節點或使用專業 API
        # 使用模擬數據
        return {
            'hashrate': '500 EH/s',  # 模擬值
            'revenue_24h': 35000000,  # $35M/day 模擬值
            'fees_percentage': 5,  # 5% 來自費用
        }
    
    def generate_report(self):
        """生成基本面分析報告"""
        data = self.get_comprehensive_data()
        
        report = f"""
╔══════════════════════════════════════════════════════════════════════════════╗
║                     比特幣基本面分析報告                                     ║
║                     {data['timestamp']}                              ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  【價格與市值】                                                            ║
║  • 比特幣價格: ${data['price']:,.2f}                                     ║
║  • 總市值: ${data['market_cap']/1e9:.2f} 億美元                              ║
║  • 流通量: {data['circulating_supply']:,.0f BTC                                 ║
║  • 24h 交易量: ${data['24h_volume']/1e9:.2f} 億美元                           ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  【鏈上數據】                                                              ║
║  • 區塊高度: {data['block_height']:,}                                      ║
║  • 記憶池交易: {data['mempool_txs']:,}                                    ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  【礦工數據】                                                              ║
║  • 算力: {data['hashrate']}                                                ║
║  • 日收益: ${data['miner_revenue_usd']/1e6:.2f} 百萬美元                       ║
║  • 費用佔比: {data['fees_percentage']}%                                     ║
╚══════════════════════════════════════════════════════════════════════════════╝
        """
        
        return report

# 使用示例
dashboard = BitcoinFundamentalDashboard()
report = dashboard.generate_report()
print(report)

數據來源的選擇與驗證

數據源比較

選擇可靠的數據源是進行準確分析的關鍵。讓我們比較不同的數據源:

數據源比較:
═══════════════════════════════════════════════════════════════════════════════

1. 區塊瀏覽器

| 提供商          | 優點                          | 缺點                    |
|-----------------|-------------------------------|-------------------------|
| blockchain.info | 歷史數據豐富、API穩定         | 數據可能不完整          |
| blockstream     | 開源、隱私友好               | 功能相對較少           |
| mempool.space   | 費用估算準確、界面直觀        | 歷史數據有限           |
| blockchair      | 多幣種支持、查詢靈活          | 免費配額有限           |

2. 專業分析平台

| 提供商          | 優點                          | 缺點                    |
|-----------------|-------------------------------|-------------------------|
| Glassnode       | 指標全面、分析深入            | 昂貴($99+/月)        |
| CryptoQuant     | 即時數據、警報功能            | 學習曲線陡峭           |
| Santiment       | 社交+鏈上數據整合            | 數據質量參差不齊        |

3. 自建節點

| 提供商          | 優點                          | 缺點                    |
|-----------------|-------------------------------|-------------------------|
| Bitcoin Core    | 完全控制、數據最準確           | 需要 500GB+ 儲存       |
| btcd            | Go 語言、可定制                | 文檔較少               |

推薦策略:
• 業餘愛好者:blockchain.info + mempool.space
• 進階用戶:blockstream API + 比特幣 Core
• 專業分析:Glassnode 或自建節點

數據驗證方法

確保數據準確性需要交叉驗證:

def validate_data():
    """數據驗證示例"""
    
    # 從多個來源獲取比特幣價格
    sources = {
        'coingecko': get_coingecko_price(),
        'binance': get_binance_price(),
        'coinbase': get_coinbase_price(),
        'kraken': get_kraken_price(),
    }
    
    # 計算平均值
    prices = list(sources.values())
    avg_price = sum(prices) / len(prices)
    
    # 檢查偏差
    for source, price in sources.items():
        deviation = abs(price - avg_price) / avg_price * 100
        if deviation > 1:  # 超過 1% 偏差
            print(f"警告:{source} 價格偏差過大 ({deviation:.2f}%)")
    
    return avg_price

結論

比特幣鏈上指標為投資者提供了觀察這個去中心化資產基本面的獨特視角。通過理解 NVT、MVRV、S2F 等關鍵指標,並學會使用 Python 等工具獲取和分析數據,投資者可以做出更有根據的決策。

然而,必須記住:

建議讀者在實踐中不斷學習,逐漸建立自己的分析框架。區塊鏈數據分析是一個持續發展的領域,新的指標和方法論不斷湧現。保持好奇心和學習熱情,是在這個快速變化的領域中成功的關鍵。


更新日期:2026-03-04

版本:1.0

本文提供 Python 程式碼範例僅供學習研究,不構成投資建議

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!