iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

金融量化交易系列 第 11

11.技術分析中的回歸應用

  • 分享至 

  • xImage
  •  

Python 中常用的回歸模型函式庫

要在 Python 中執行線性回歸,主要有以下幾個熱門函式庫:

  • Statsmodels: 提供 statsmodels.api.OLS() 函數,專為統計分析設計,提供詳盡的統計結果,如 R-squared、t-統計量等。
  • Scikit-learn: 使用 sklearn.linear_model.LinearRegression() 類別,是機器學習領域的首選,介面簡潔,易於整合到機器學習流程中。
  • NumPy: 可使用 numpy.polyfit() 函數(設定 degree=1)進行簡單的線性擬合。

在我們深入資產定價模型的數學理論前,先來看看交易員如何在技術分析中使用回歸工具。

1. 回歸通道 (Regression Channel)

回歸通道是由三條線組成的技術指標,用於描繪價格趨勢及其波動範圍。

  • 中線 (Linear Regression Line, LRL): 對特定時間段內的價格數據進行線性回歸後得到的趨勢線。
  • 上通道線 (UCL) 與下通道線 (LCL): 分別是中線向上和向下平移特定標準差(通常是 2 個)後形成的通道邊界。價格觸及或穿越通道邊界可能意味著超買/超賣,預示著價格可能回歸至趨勢線。

Python 實作:布林通道與回歸通道疊加

以下程式碼使用 yfinance 取得 NVIDIA (NVDA) 的股價,並同時繪製布林通道與回歸通道。

import pandas as pd
import yfinance as yf
import mplfinance as mpf
import pandas_ta as ta
import numpy as np

# 1. 取得 NVIDIA 股價資料
start_date = "2020-08-01"
end_date = "2021-01-01"
stock_symbol = "NVDA"
data = yf.download(stock_symbol, start=start_date, end=end_date)

# 2. 計算布林通道 (長度為 20)
data.ta.bbands(close='Close', length=20, append=True)

# 3. 計算回歸通道
x = np.array(range(len(data)))
y = data['Close'].values
slope, intercept = np.polyfit(x, y, 1)
data['Regression'] = slope * x + intercept

# 計算殘差的標準差
residuals = y - data['Regression']
std_error = np.std(residuals)

# 計算上下通道線
data['Upper Regression'] = data['Regression'] + (2 * std_error)
data['Lower Regression'] = data['Regression'] - (2 * std_error)

# 4. 繪製 K 線圖、布林通道與回歸通道
ap = [
    mpf.make_addplot(data['BBL_20_2.0'].values, color='cyan', label='Lower Bollinger Band'),
    mpf.make_addplot(data['BBU_20_2.0'].values, color='cyan', label='Upper Bollinger Band'),
    mpf.make_addplot(data['Lower Regression'].values, color='orange', label='Lower Regression Channel'),
    mpf.make_addplot(data['Regression'].values, color='red', label='Mid Regression Channel'),
    mpf.make_addplot(data['Upper Regression'].values, color='orange', label='Upper Regression Channel')
]

mpf.plot(data, type='candle', style='charles', title=f"{stock_symbol} Candlestick Chart",
         ylabel='Stock Price', addplot=ap, volume=True, figsize=(15,10))

2. 線性回歸指標 (Linear Regression Indicator, LRI)

LRI 繪製的是特定週期(例如 20 天)線性回歸線的終點值,用來預測價格的期望位置。相較於移動平均線 (Moving Average) 僅計算歷史價格的平均,LRI 更具預測性反應靈敏度

Python 實作:線性回歸趨勢線

以下程式碼使用 pandas-ta 函式庫計算並繪製線性回歸趨勢線。

import yfinance as yf
import pandas as pd
import mplfinance as mpf
import pandas_ta as ta

# 1. 取得股價資料
start_date = "2020-01-01"
end_date = "2021-01-01"
stock_symbol = "NVDA"
data = yf.download(stock_symbol, start=start_date, end=end_date)

# 2. 使用 pandas-ta 計算線性回歸趨勢 (長度為 50)
linreg = ta.linreg(data["Close"], length=50)
data["LINREG"] = linreg

# 3. 繪製 K 線圖與回歸趨勢線
ap = [
    mpf.make_addplot(data["LINREG"], color='red', width=1.5)
]

mpf.plot(data, type='candle', style='yahoo', addplot=ap, title=f"{stock_symbol} with Linear Regression Trend", volume=True, figsize=(15,10))

上一篇
10.均值回歸策略
下一篇
12.經典資產定價模型
系列文
金融量化交易24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言