期末報告子組題(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 資料
- 取得下載的資料
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向上,通常是看漲訊號。