網頁

2020年12月10日 星期四

R:KDJ 指標的計算


 KDJ指標中文名隨機指標,由喬治·萊恩(GeorgeLane)創立,是目前期貨和股票市場上常用的技術分析指標。KDJ指標在設計過程中主要是研究最高價、最低價和收盤價之間的關系,體現市場情緒,可以用來測度超買或超賣現象,被廣泛應用於中短期趨勢分析中。

     一般說來,KD線超過80意味著超買,KD線低於20意味著超賣;K線在低位上穿D線為“金叉”是買入信號,K線在高位下穿D線為“死叉”是賣出信號。由此可見KDJ是非常簡單實用的技術指標。但是在R語言常用的幾個量化套件(如quantmod、PerformanceAnalytics 和 TTR)中都沒有用於計算KDJ指標的函數。這篇就根據 KDJ 的定義總結 KDJ 的計算方法。

  計算 KDJ 首先要計算周期的 RSV值,就是未成熟隨機指標值,然後再依次計算K值、D值及J值。以 KDJ 日線數據的計算為例,其計算公式為:(圖片摘自理財周刊)

J值 = (3 * 當日K值) - (2 * 當日D值)

那我就以特斯拉(美股代號:TSLA)來說明,
首先我們先抓取2020/03/01 到 2020/12/09 TESLA的股價資訊
library(quantmod)
library(PerformanceAnalytics)
d_from <- "2020-03-01"
symbo <- c("TSLA")
s <- symbo
col <- c("white", "black")
getSymbols(s, src="yahoo", from=d_from, col=col[2])
stock <- get(s)
 

接著根據股價資訊來計算 KDJ 值
stock_length <- nrow(stock)        # 數據長度
KDJ <- matrix(NA, stock_length, 3) # 構建存放數據的矩陣
KDJ <- as.data.frame(KDJ)          # 轉換為data.frame
colnames(KDJ) <- c("K", "D", "J")  # 1-3列的名稱為K,D,J
KDJ[1:8, ] <- 50                   # 前8天的K,D,J均設為50
high_max <- runMax(Hi(stock), n=9) # 計算9日內最高價
low_min <- runMin(Lo(stock), n=9)  # 計算9日內最低價
rsv <- (Cl(stock) - low_min)/(high_max - low_min) * 100 #計算rvs
for(i in 9:stock_length) {
  KDJ[i, 1] <- 2/3 * KDJ[(i-1), 1] + 1/3 * rsv[i, ]  #計算K值
  KDJ[i, 2] <- 2/3 * KDJ[(i-1), 2] + 1/3 * KDJ[i, 1]
#計算D值
  KDJ[i, 3] <- 3 * KDJ[i, 1] - 2 * KDJ[i, 2]         #計算J值
}

KDJ <- as.xts(KDJ, order.by=index(rsv)) #將KDJ轉化為xts格式
cols <- c("red","blue","darkcyan")      #KDJ線顏色分別為紅
、藍、暗青色
chartSeries(stock, theme=col[1], name=s, TA="addTA(KDJ, col=cols)")

執行結果如下:

和看盤軟體比對一下,結果正確:

也可以輸入 tail(KDJ, n=10)來看最後10天的KDJ值:


難怪小摩昨天說 Tesla只值90美元,股價馬上就修正了7%。

使用圖表、圖形和把數據進行可視化,可以幫你更容易的解釋數據模式、趨勢、統計規律和數據的相關性。至於投資還是要注意風險,就如廣告所說:「投資一定有風險,基金投資有賺有賠,申購前應詳閱公開說明書」

 

1 則留言:

  1. dino titanium ecosport - Indian Art
    ‎Dinodont- titanium-ecosport titanium rings · titanium athletics ‎Indian Art · ‎Indian titanium jewelry for piercings Art titanium 3d printing · ‎Indian Art · how much is titanium worth ‎Indian Art

    回覆刪除