🤖 Dùng Machine Learning để dự đoán giá cổ phiếu

2024-05-01 — QuantTrade

🤖 Dùng Machine Learning để dự đoán giá cổ phiếu

Phân tích tiền điện tử

Giới thiệu

Tiền điện tử đã trở thành một lớp tài sản được giao dịch rộng rãi trong thập kỷ qua. Với sự biến động cao và hoạt động 24/7, thị trường tiền điện tử tạo ra nhiều cơ hội cho các nhà giao dịch và nhà đầu tư. Python, với các thư viện phong phú cho phân tích dữ liệu và học máy, là một công cụ mạnh mẽ để phân tích và tự động hóa các chiến lược giao dịch tiền điện tử.

Lấy Dữ Liệu từ Binance

Binance là một trong những sàn giao dịch tiền điện tử lớn nhất trên thế giới, cung cấp API mạnh mẽ cho phép truy cập dữ liệu thị trường và thực hiện giao dịch. Dưới đây là cách bạn có thể sử dụng Python để lấy dữ liệu lịch sử từ Binance:

import pandas as pd
from binance.client import Client
import datetime

# Khởi tạo client với các khóa API của bạn
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
client = Client(api_key, api_secret)

# Định dạng thời gian bắt đầu (1 năm trước)
start_date = datetime.datetime.now() - datetime.timedelta(days=365)
start_date_str = start_date.strftime("%d %b, %Y")

# Lấy dữ liệu nến (OHLCV) lịch sử cho Bitcoin
klines = client.get_historical_klines(
    "BTCUSDT",         # Cặp giao dịch
    Client.KLINE_INTERVAL_1DAY,  # Khoảng thời gian (1 ngày)
    start_date_str     # Thời gian bắt đầu
)

# Chuyển đổi dữ liệu sang DataFrame
df = pd.DataFrame(klines, columns=[
    'timestamp', 'open', 'high', 'low', 'close', 'volume',
    'close_time', 'quote_asset_volume', 'number_of_trades',
    'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'
])

# Xử lý dữ liệu
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
for col in ['open', 'high', 'low', 'close', 'volume']:
    df[col] = pd.to_numeric(df[col])
df.set_index('timestamp', inplace=True)

# Hiển thị dữ liệu
print(df.head())

Dự Đoán Giá với Hồi Quy Tuyến Tính

Hồi quy tuyến tính là một kỹ thuật học máy đơn giản nhưng mạnh mẽ để dự đoán giá trị liên tục. Trong bối cảnh tiền điện tử, chúng ta có thể sử dụng hồi quy tuyến tính để dự đoán giá đóng cửa dựa trên các đặc điểm khác như giá mở cửa, giá cao nhất, giá thấp nhất và khối lượng giao dịch.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

# Chuẩn bị dữ liệu cho mô hình
X = df[['open', 'high', 'low', 'volume']].values
y = df['close'].values

# Chia dữ liệu thành tập huấn luyện và tập kiểm tra
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Tạo và huấn luyện mô hình
model = LinearRegression()
model.fit(X_train, y_train)

# Dự đoán trên tập kiểm tra
predictions = model.predict(X_test)

# Đánh giá mô hình
mse = mean_squared_error(y_test, predictions)
r2 = r2_score(y_test, predictions)

print(f"Mean Squared Error: {mse:.2f}")
print(f"R² Score: {r2:.2f}")

# Hiển thị hệ số của mô hình
feature_names = ['open', 'high', 'low', 'volume']
coefficients = dict(zip(feature_names, model.coef_))
print("Hệ số của mô hình:")
for feature, coef in coefficients.items():
    print(f"{feature}: {coef:.4f}")

Tạo Dự Đoán cho Tương Lai

Sau khi đã huấn luyện mô hình, chúng ta có thể sử dụng nó để dự đoán giá trong tương lai:

# Lấy dữ liệu gần đây nhất
latest_data = df.iloc[-1]

# Giả định các giá trị cho ngày tiếp theo (có thể điều chỉnh theo mong muốn)
tomorrow_features = np.array([[
    latest_data['open'] * 1.01,  # Giả định giá mở cửa tăng 1%
    latest_data['high'] * 1.02,  # Giả định giá cao tăng 2%
    latest_data['low'] * 1.005,  # Giả định giá thấp tăng 0.5%
    latest_data['volume'] * 0.9   # Giả định khối lượng giảm 10%
]])

# Dự đoán giá đóng cửa cho ngày tiếp theo
next_day_prediction = model.predict(tomorrow_features)
print(f"Giá đóng cửa dự đoán cho ngày tiếp theo: ${next_day_prediction[0]:.2f}")

Chiến Lược Giao Dịch Đơn Giản

Với thông tin từ mô hình, chúng ta có thể tạo một chiến lược giao dịch đơn giản:

# Mô phỏng chiến lược giao dịch đơn giản
def simple_trading_strategy(data, predictions, threshold=0.02):
    signals = pd.DataFrame(index=data.index)
    signals['price'] = data['close']
    signals['prediction'] = predictions
    signals['returns'] = data['close'].pct_change()
    
    # Tạo tín hiệu giao dịch
    # Mua khi dự đoán tăng hơn ngưỡng
    signals['position'] = 0
    signals['position'] = np.where(
        signals['prediction'] > signals['price'] * (1 + threshold),
        1,  # Mua
        signals['position']
    )
    
    # Bán khi dự đoán giảm hơn ngưỡng
    signals['position'] = np.where(
        signals['prediction'] < signals['price'] * (1 - threshold),
        -1,  # Bán
        signals['position']
    )
    
    # Tính toán lợi nhuận của chiến lược
    signals['strategy_returns'] = signals['position'].shift(1) * signals['returns']
    
    return signals

# Tạo dự đoán cho toàn bộ dữ liệu
all_predictions = model.predict(df[['open', 'high', 'low', 'volume']].values)

# Mô phỏng chiến lược
strategy_results = simple_trading_strategy(df, all_predictions)

# Đánh giá hiệu suất
cumulative_returns = (1 + strategy_results['strategy_returns']).cumprod()
print(f"Lợi nhuận tích lũy cuối cùng: {(cumulative_returns.iloc[-1] - 1) * 100:.2f}%")

Lời Kết

Phân tích tiền điện tử và tự động hóa giao dịch với Python là một lĩnh vực rộng lớn với nhiều khả năng. Hồi quy tuyến tính là một khởi đầu tốt, nhưng các mô hình phức tạp hơn như mạng nơ-ron và học sâu có thể cung cấp kết quả dự đoán chính xác hơn.

Hãy nhớ rằng không có chiến lược giao dịch nào đảm bảo lợi nhuận. Thị trường tiền điện tử rất biến động và bị ảnh hưởng bởi nhiều yếu tố không thể dự đoán được. Luôn sử dụng cách tiếp cận đa dạng và quản lý rủi ro phù hợp khi giao dịch tiền điện tử.

Giao dịch tiền điện tử

← Xem tất cả bài viết · Trang chủ