期末報告子組題(A)

研究動機

  • 近年來高股息ETF(指數股票型基金)受市場歡迎,這次選擇了00940,也就是元大的ETF進行程式。
  • 將這學期在應用統計學習的內容應用於實務上。

方法

  • 這次報告使用了 R 語言中的三種套件:
    • quantmod: 用於從 Yahoo Finance 下載金融市場的歷史股價數據。
    • TTR: 用於計算技術指標,在這裡我們將專注於計算簡單移動平均線 (SMA)。
    • dygraphs: 用於繪製互動式、基於時間序列的圖表,特別是我們需要其來呈現蠟燭圖和疊加的指標線。
  • 整個流程會是:首先利用quantmod下載00940的歷史股價數據,然後使用 TTR 計算出不同週期的 SMA,最後將這些數據整合到 dygraphs 中,生成一個美觀且具互動性的蠟燭圖。

程式說明

  • 安裝和載入必要的套件
if (!require(quantmod)) {
  install.packages("quantmod")
}
if (!require(dygraphs)) {
  install.packages("dygraphs")
}
if (!require(TTR)) {
  install.packages("TTR")
}
library(quantmod)
library(dygraphs)
library(TTR)
  • 設定要下載的 ETF 代碼和時間範圍
symbol <- "00940.TW"
# 00940 於 2024 年 3 月 20 日上市。請確保起始日期不早於此。
start_date <- "2024-03-20"
end_date <- Sys.Date() # 今日日期
  • 下載 ETF 資料
getSymbols(symbol,
           from = start_date,
           to = end_date,
           auto.assign = TRUE)
  • 取得下載的資料
etf_data <- get(symbol)
etf_data <- na.approx(etf_data)

# 為 TTR 套件重新命名欄位,使其符合標準的 OHLCV 格式
colnames(etf_data) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")
  • 使用 TTR 計算簡單移動平均線 (SMA)
# 計算 10 日簡單移動平均線
etf_data$SMA10 <- SMA(etf_data$Close, n = 10)

# 計算 20 日簡單移動平均線
etf_data$SMA20 <- SMA(etf_data$Close, n = 20)
  • 準備資料並繪製 dygraphs 圖表
# 將原始的 OHLC 數據與計算出的 SMA 合併
# 我們只選取蠟燭圖所需的 Open, High, Low, Close 以及要疊加的 SMA 線
chart_data <- etf_data[, c("Open", "High", "Low", "Close", "SMA10", "SMA20")]

dygraph(chart_data,
        main = paste(symbol, " 蠟燭圖與簡單移動平均線")) %>%
  dyCandlestick() %>%
  dySeries("Open", axis = "y", label = "開盤") %>% # 明確定義蠟燭圖的欄位
  dySeries("High", axis = "y", label = "最高") %>%
  dySeries("Low", axis = "y", label = "最低") %>%
  dySeries("Close", axis = "y", label = "收盤") %>%
  dySeries("SMA10", label = "10日 SMA", color = "blue", strokeWidth = 2) %>%
  dySeries("SMA20", label = "20日 SMA", color = "red", strokeWidth = 2) %>%
  dyRangeSelector() %>%
  dyLegend(show = "always", width = 300)

程式執行結果

# 安裝和載入必要的套件

library(quantmod)
library(dygraphs)
library(TTR)

# 1. 設定要下載的 ETF 代碼和時間範圍
symbol <- "00940.TW"
# 00940 於 2024 年 3 月 20 日上市。請確保起始日期不早於此。
start_date <- "2024-03-20"
end_date <- Sys.Date() # 今日日期

# 2. 下載 ETF 資料
getSymbols(symbol,
           from = start_date,
           to = end_date,
           auto.assign = TRUE)
## [1] "00940.TW"
# 取得下載的資料
etf_data <- get(symbol)
etf_data <- na.approx(etf_data)

# 為 TTR 套件重新命名欄位,使其符合標準的 OHLCV 格式
colnames(etf_data) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")

# 3. 使用 TTR 計算簡單移動平均線 (SMA)

# 計算 10 日簡單移動平均線
etf_data$SMA10 <- SMA(etf_data$Close, n = 10)

# 計算 20 日簡單移動平均線
etf_data$SMA20 <- SMA(etf_data$Close, n = 20)

# 4. 準備資料並繪製 dygraphs 圖表

# 將原始的 OHLC 數據與計算出的 SMA 合併
# 我們只選取蠟燭圖所需的 Open, High, Low, Close 以及要疊加的 SMA 線
chart_data <- etf_data[, c("Open", "High", "Low", "Close", "SMA10", "SMA20")]

dygraph(chart_data,
        main = paste(symbol, " 蠟燭圖與簡單移動平均線")) %>%
  dyCandlestick() %>%
  dySeries("Open", axis = "y", label = "開盤") %>% # 明確定義蠟燭圖的欄位
  dySeries("High", axis = "y", label = "最高") %>%
  dySeries("Low", axis = "y", label = "最低") %>%
  dySeries("Close", axis = "y", label = "收盤") %>%
  dySeries("SMA10", label = "10日 SMA", color = "blue", strokeWidth = 2) %>%
  dySeries("SMA20", label = "20日 SMA", color = "red", strokeWidth = 2) %>%
  dyRangeSelector() %>%
  dyLegend(show = "always", width = 300)

結論

  • 趨勢判斷:股價位於 SMA 之上且 SMA 向上傾斜,顯示上升趨勢;反之為下降趨勢。
  • 動態支撐與阻力:SMA 線可作為股價回調時的支撐或反彈時的阻力。
  • 交易訊號:黃金交叉(短期 SMA 向上穿越長期 SMA)為潛在買入訊號;死亡交叉(短期 SMA 向下穿越長期 SMA)為潛在賣出訊號。
  • 對00940的初步觀察:
    • 可透過觀察00940股價與SMA線的相對位置及交叉點,來初步判斷其當前趨勢、潛在支撐阻力,並尋找可能的買賣時機。
    • 例如:股價穩定在SMA上方且SMA向上,通常是看漲訊號。