機器學習
機器學習能從歷史資料中找出人工難以歸納的規律,在量化交易中常見的應用包括價格預測、產生交易訊號、以及風險與情緒分析。這一頁介紹三種入門模型:線性迴歸、隨機森林與 LSTM。
用線性迴歸預測股價
import numpy as np
import yfinance as yf
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
data = yf.download("AAPL", start="2022-01-01", end="2024-01-01")
X = np.array(data[["Open", "High", "Low", "Volume"]])
y = np.array(data["Close"])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
用隨機森林產生交易訊號
隨機森林是分類模型,適合用來預測「明天是漲還是跌」這種二元問題,而不是直接預測價格數字:
from sklearn.ensemble import RandomForestClassifier
data["Signal"] = (data["Close"].pct_change() > 0).astype(int) # 隔日上漲為 1,下跌為 0
X = np.array(data[["Open", "High", "Low", "Volume"]])[:-1]
y = np.array(data["Signal"])[1:]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
用 LSTM 處理時間序列
LSTM(長短期記憶網路)是專門處理序列資料的深度學習模型,能捕捉價格隨時間變化的關聯,常用於較長期的走勢預測:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])),
LSTM(50),
Dense(1),
])
model.compile(optimizer="adam", loss="mse")
model.fit(X_train, y_train, epochs=10, batch_size=16)
推薦影音
用 LSTM 預測股價(Stacked LSTM)
簡述:Krish Naik(知名機器學習教育者)示範如何用 Keras 建立 Stacked LSTM 模型預測股價,完整涵蓋資料前處理、模型訓練與結果評估,對應本頁「用 LSTM 處理時間序列」的部分。