Quay lại danh sách bài viết

Tự động lấy và trực quan hóa dữ liệu giá tiền điện tử từ Binance với Python

30 tháng 11, 2025
admin
Tự động lấy và trực quan hóa dữ liệu giá tiền điện tử từ Binance với Python
# Tự động lấy và trực quan hóa dữ liệu giá tiền điện tử từ Binance với Python ## Giới thiệu Trong bài viết này, chúng ta sẽ học cách sử dụng Python và thư viện CCXT để lấy dữ liệu giá tiền điện tử từ sàn Binance, sau đó phân tích và trực quan hóa dữ liệu này. Đây là kỹ năng quan trọng cho các nhà giao dịch và phân tích thị trường tiền điện tử. ## 1. Cài đặt và Cấu hình ### 1.1. Cài đặt các thư viện cần thiết ```bash pip install ccxt pandas numpy plotly openpyxl ``` ### 1.2. Kết nối với Binance qua CCXT ```python import ccxt import pandas as pd import plotly.graph_objects as go from datetime import datetime # Khởi tạo exchange exchange = ccxt.binance({ 'enableRateLimit': True, # Tự động xử lý rate limit 'options': { 'defaultType': 'spot' # Sử dụng spot trading } }) # Kiểm tra kết nối print(f"Exchange: {exchange.name}") print(f"Markets: {len(exchange.markets)}") ``` ## 2. Lấy dữ liệu OHLCV (Candlestick) ### 2.1. Lấy dữ liệu theo timeframe ```python def fetch_ohlcv(symbol, timeframe='1h', limit=1000): """ Lấy dữ liệu OHLCV từ Binance Parameters: - symbol: Cặp giao dịch (ví dụ: 'BTC/USDT') - timeframe: Khung thời gian ('1m', '5m', '1h', '4h', '1d') - limit: Số lượng nến muốn lấy (tối đa 1000) """ try: ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit) df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') return df except Exception as e: print(f"Error fetching data: {e}") return None # Ví dụ sử dụng btc_data = fetch_ohlcv('BTC/USDT', '1h', 1000) print(btc_data.head()) ``` ### 2.2. Lấy nhiều hơn 1000 nến ```python def fetch_multiple_ohlcv(symbol, timeframe='1h', since=None, limit=1000): """ Lấy nhiều hơn 1000 nến bằng cách sử dụng since parameter """ all_ohlcv = [] while True: try: ohlcv = exchange.fetch_ohlcv(symbol, timeframe, since=since, limit=limit) if len(ohlcv) == 0: break all_ohlcv.extend(ohlcv) since = ohlcv[-1][0] + 1 except Exception as e: print(f"Error: {e}") break return pd.DataFrame(all_ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) ``` ## 3. Xử lý và Lưu trữ Dữ liệu ### 3.1. Xử lý dữ liệu với Pandas ```python def process_ohlcv_data(df): """ Xử lý dữ liệu OHLCV """ # Chuyển đổi timestamp df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') # Tính toán các chỉ báo df['returns'] = df['close'].pct_change() df['volatility'] = df['returns'].rolling(window=20).std() # Tính toán SMA df['SMA20'] = df['close'].rolling(window=20).mean() df['SMA50'] = df['close'].rolling(window=50).mean() return df # Xử lý dữ liệu btc_data = process_ohlcv_data(btc_data) ``` ### 3.2. Lưu trữ dữ liệu ```python def save_data(df, filename, format='csv'): """ Lưu dữ liệu ra file """ if format == 'csv': df.to_csv(f"{filename}.csv", index=False) elif format == 'excel': df.to_excel(f"{filename}.xlsx", index=False) elif format == 'html': df.to_html(f"{filename}.html", index=False) else: print("Unsupported format") # Ví dụ lưu dữ liệu save_data(btc_data, 'btc_data', 'csv') save_data(btc_data, 'btc_data', 'excel') ``` ## 4. Trực quan hóa dữ liệu với Plotly ### 4.1. Vẽ biểu đồ nến (Candlestick) ```python def plot_candlestick(df, title='BTC/USDT Price'): """ Vẽ biểu đồ nến với Plotly """ fig = go.Figure(data=[go.Candlestick( x=df['timestamp'], open=df['open'], high=df['high'], low=df['low'], close=df['close'] )]) # Thêm SMA fig.add_trace(go.Scatter( x=df['timestamp'], y=df['SMA20'], name='SMA20', line=dict(color='blue') )) fig.add_trace(go.Scatter( x=df['timestamp'], y=df['SMA50'], name='SMA50', line=dict(color='red') )) # Cập nhật layout fig.update_layout( title=title, yaxis_title='Price (USDT)', xaxis_title='Date', template='plotly_dark' ) return fig # Vẽ và hiển thị biểu đồ fig = plot_candlestick(btc_data) fig.show() ``` ### 4.2. Vẽ biểu đồ volume ```python def plot_volume(df, title='BTC/USDT Volume'): """ Vẽ biểu đồ volume """ fig = go.Figure(data=[go.Bar( x=df['timestamp'], y=df['volume'], name='Volume' )]) fig.update_layout( title=title, yaxis_title='Volume', xaxis_title='Date', template='plotly_dark' ) return fig # Vẽ và hiển thị biểu đồ volume volume_fig = plot_volume(btc_data) volume_fig.show() ``` ## 5. Lấy giá hiện tại (Ticker) ```python def get_current_price(symbol): """ Lấy giá hiện tại của một cặp giao dịch """ try: ticker = exchange.fetch_ticker(symbol) return { 'symbol': symbol, 'last': ticker['last'], 'bid': ticker['bid'], 'ask': ticker['ask'], 'volume': ticker['baseVolume'], 'timestamp': datetime.fromtimestamp(ticker['timestamp']/1000) } except Exception as e: print(f"Error fetching ticker: {e}") return None # Ví dụ lấy giá BTC/USDT btc_ticker = get_current_price('BTC/USDT') print(btc_ticker) ``` ## 6. Mở rộng: Các tính năng nâng cao ### 6.1. Lấy dữ liệu từ nhiều cặp giao dịch ```python def fetch_multiple_symbols(symbols, timeframe='1h', limit=1000): """ Lấy dữ liệu từ nhiều cặp giao dịch """ data = {} for symbol in symbols: data[symbol] = fetch_ohlcv(symbol, timeframe, limit) return data # Ví dụ lấy dữ liệu nhiều cặp symbols = ['BTC/USDT', 'ETH/USDT', 'BNB/USDT'] multi_data = fetch_multiple_symbols(symbols) ``` ### 6.2. Tính toán tương quan giữa các cặp ```python def calculate_correlation(data_dict): """ Tính toán tương quan giữa các cặp giao dịch """ # Tạo DataFrame với giá đóng cửa của các cặp closes = pd.DataFrame() for symbol, df in data_dict.items(): closes[symbol] = df['close'] # Tính toán ma trận tương quan correlation = closes.corr() return correlation # Tính và hiển thị tương quan correlation = calculate_correlation(multi_data) print(correlation) ``` ## Kết luận Trong bài viết này, chúng ta đã học cách: 1. Kết nối với Binance qua CCXT 2. Lấy và xử lý dữ liệu OHLCV 3. Lưu trữ dữ liệu dưới nhiều định dạng 4. Trực quan hóa dữ liệu với Plotly 5. Thực hiện các phân tích nâng cao Đây là nền tảng cơ bản để bạn có thể tự động hóa việc phân tích dữ liệu tiền điện tử. Bạn có thể mở rộng thêm bằng cách: - Thêm các chỉ báo kỹ thuật - Tạo chiến lược giao dịch tự động - Phân tích sentiment từ social media - Tích hợp với các nguồn dữ liệu khác ## Tài liệu tham khảo 1. [CCXT Documentation](https://docs.ccxt.com/) 2. [Binance API Documentation](https://binance-docs.github.io/apidocs/) 3. [Pandas Documentation](https://pandas.pydata.org/docs/) 4. [Plotly Documentation](https://plotly.com/python/) ## Liên hệ Nếu bạn có thắc mắc hoặc cần hỗ trợ thêm, hãy liên hệ: - Email: support@huongnghiepdulieu.com - GitHub: [huongnghiepdulieu](https://github.com/huongnghiepdulieu)
Python
Cryptocurrency
Data Analysis
Binance
CCXT
Chia sẻ:

Bài viết liên quan

Phân tích chênh lệch giá tiền điện tử giữa các sàn giao dịch với Python

Phân tích chênh lệch giá tiền điện tử giữa các sàn giao dịch với Python Giới thiệu Chênh lệch giá (Arbitrage) là một chiến lược giao dịch phổ b...

Báo cáo TokenInsight Q3/2025 - Bitget Vươn Lên Top 3 Sàn Giao Dịch Lớn Nhất Toàn Cầu

Báo cáo TokenInsight Q3/2025 - Bitget vượt Bybit trở thành sàn giao dịch lớn thứ 3 thế giới với 11.75% thị phần. OKX sụt giảm 1.55% trong khi Bitget tăng trưởng mạnh mẽ. Universal Exchange (UEX) thu hút nhà đầu tư tổ chức và retail toàn cầu.

Giới thiệu Bootcamp Blockchain Mastery - Khóa học toàn diện về Blockchain

![Bootcamp Blockchain Mastery](https://rdikewdce6dfbzdu.public.blob.vercel-storage.com/Bootcamp%20BlockChain%20Mastery.jpg) Giới thiệu Bootcamp Bl...