琴子 [財經程式設計] 股票資料的描述性統計 (Descriptive Statistics)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

說明

本文說明利用 R 對單一股票進行描述性統計的方法。

在投資網站可以看到一些描述性統計的東西,像是 52 週高點、52 週低點、平均交易量等。但投資網站給予的統計項目有限,無法客製化。會一點 R 語言的話,就可以自己下載原始股票資料,從中取得想看的統計項目。

前置作業

VT 的交易資料載入 R session,將日期字串轉為日期 (出處):

vt <- read.csv("C:/Users/user/Downloads/VT-20230702.csv", header=TRUE, stringsAsFactors=FALSE)
vt$Date <- as.Date(vt$Date)

VT 是全球巿場的典型實例。很多被動投資者把 VT 當成其投資工具。

去除用不到的欄位 (出處):

vt2 <- subset(vt, select=-c(Open, High, Low, Adj.Close))

只取近三年多的資料:

vt3 <- vt2[2019 <= as.numeric(format(vt2$Date, "%Y")), ]

要取多長時距的資料沒有一定的做法,視當下的分析需求而定。

最大值 (Maximum) 和最小值 (Minimum)

max 函式取得波段高點 (最大值):

> max(vt3$Close)
[1] 109.23

min 函式取得波段低點 (最小值):

> min(vt3$Close)
[1] 54.48

五分位數 (Quantile)

承上,用 quantile 函式取得波段的相對高低點 (五分位數):

> quantile(vt3$Close)
      0%      25%      50%      75%     100%
 54.4800  76.2775  87.7050  97.1050 109.2300

取得這些數據後,就可以和當前股價比對,得知目前是在高點還是低點。

平均數 (Mean) 和標準差 (Standard Deviation)

mean 函式取得波段股價的平均值:

> mean(vt3$Close)
[1] 87.28086

注意平均值不代表真正的股價,只是那段時間內巿場投入資金的平均價格。移動平均線 (moving average) 也是用到平均數的概念。

sd 函式取得波段股價的標準差:

> sd(vt3$Close)
[1] 12.08036

用當前股價、平均股價、標準差三個數字結合,就可以推估目前巿場是否有超買或超賣。這就是布林通道 (Bollinger Bands) 的計算原理。

用平均數和標準差,也可以觀察股價區間:

> vt3mean <- mean(vt3$Close)
> vt3sd <- sd(vt3$Close)
> vt3vec <- numeric()
> for (x in -2:2) { vt3vec <- c(vt3vec, vt3mean + x * vt3sd) }
> vt3vec
[1]  63.12014  75.20050  87.28086  99.36122 111.44158

但是用這種方式推估出來的價格和五分位數運算出來的不一樣,有可能會出現巿場上不存在的價格。不要把計算結果當成目標價。

注意事項

本文所展示的計算方式不代表買賣點。因為股票有可能創新高、破新低,仍然要以當前的巿場情勢做評估。

關於作者 琴子喜歡觀察市場邏輯,也喜歡沉靜地彈鋼琴。旅行時總習慣記錄風景背後的脈絡,投資時則偏好慢慢思考而非追高殺低。

現實中關注全球經濟與資產配置,虛擬世界則熱衷於在《黑色沙漠》裡操作漁業與貿易鏈,研究市場機制與角色配置的效率極限。

「理性投資」是琴子整理思緒、檢視決策的地方。不是為了給建議,而是希望留下清楚的腳印,提醒自己:判斷永遠比預測重要。