Phân Tích Dữ Liệu Thị Trường
· 3 min read
Trong bài viết này, chúng ta sẽ tìm hiểu về cách phân tích dữ liệu thị trường để xây dựng chiến lược giao dịch định lượng.
Thu thập dữ liệu
Sử dụng API
import yfinance as yf
import pandas as pd
import numpy as np
# Tải dữ liệu chứng khoán
def get_stock_data(symbol, start_date, end_date):
data = yf.download(symbol, start=start_date, end=end_date)
return data
# Tải dữ liệu crypto
def get_crypto_data(symbol, start_date, end_date):
data = yf.download(f"{symbol}-USD", start=start_date, end=end_date)
return data
Xử lý dữ liệu cơ bản
def process_market_data(data):
# Tính toán các chỉ báo kỹ thuật
data['Returns'] = data['Close'].pct_change()
data['SMA_20'] = data['Close'].rolling(window=20).mean()
data['SMA_50'] = data['Close'].rolling(window=50).mean()
data['Volatility'] = data['Returns'].rolling(window=20).std()
return data
Phân tích kỹ thuật
Chỉ báo xu hướng
def calculate_trend_indicators(data):
# RSI
delta = data['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
rs = gain / loss
data['RSI'] = 100 - (100 / (1 + rs))
# MACD
data['EMA_12'] = data['Close'].ewm(span=12).mean()
data['EMA_26'] = data['Close'].ewm(span=26).mean()
data['MACD'] = data['EMA_12'] - data['EMA_26']
data['Signal_Line'] = data['MACD'].ewm(span=9).mean()
return data
Chỉ báo khối lượng
def calculate_volume_indicators(data):
# OBV (On-Balance Volume)
data['OBV'] = (np.sign(data['Close'].diff()) * data['Volume']).fillna(0).cumsum()
# Volume SMA
data['Volume_SMA_20'] = data['Volume'].rolling(window=20).mean()
return data
Phân tích thống kê
Phân tích phân phối
def analyze_distribution(data):
# Tính toán các thống kê cơ bản
stats = {
'mean': data['Returns'].mean(),
'std': data['Returns'].std(),
'skew': data['Returns'].skew(),
'kurtosis': data['Returns'].kurtosis()
}
return stats
Phân tích tương quan
def analyze_correlation(data1, data2):
# Tính toán hệ số tương quan
correlation = data1['Returns'].corr(data2['Returns'])
return correlation
Phân tích mẫu hình
Mẫu hình nến
def identify_candlestick_patterns(data):
# Doji
data['Doji'] = abs(data['Open'] - data['Close']) <= (data['High'] - data['Low']) * 0.1
# Hammer
data['Hammer'] = (data['Close'] > data['Open']) & \
((data['High'] - data['Low']) > 3 * (data['Open'] - data['Low'])) & \
((data['Close'] - data['Low']) / (0.001 + data['High'] - data['Low']) > 0.6)
return data
Mẫu hình giá
def identify_price_patterns(data):
# Double Top
data['Double_Top'] = (data['High'].shift(1) < data['High']) & \
(data['High'] > data['High'].shift(-1)) & \
(abs(data['High'] - data['High'].shift(1)) < data['High'] * 0.01)
return data
Visualize dữ liệu
Biểu đồ giá
import matplotlib.pyplot as plt
def plot_price_data(data):
plt.figure(figsize=(12, 6))
plt.plot(data.index, data['Close'], label='Close Price')
plt.plot(data.index, data['SMA_20'], label='20-day SMA')
plt.plot(data.index, data['SMA_50'], label='50-day SMA')
plt.title('Price Chart with Moving Averages')
plt.legend()
plt.show()
Biểu đồ phân phối
def plot_distribution(data):
plt.figure(figsize=(10, 6))
plt.hist(data['Returns'], bins=50, density=True)
plt.title('Returns Distribution')
plt.show()
Best Practices
- Sử dụng dữ liệu chất lượng cao
- Xử lý dữ liệu thiếu và nhiễu
- Chuẩn hóa dữ liệu
- Kiểm tra tính ổn định của dữ liệu
- Lưu trữ dữ liệu hiệu quả
Kết luận
Phân tích dữ liệu thị trường là bước quan trọng trong việc xây dựng chiến lược giao dịch định lượng. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về cách xây dựng chiến lược giao dịch dựa trên các phân tích này.