我今天要介紹用R 來寫 SMA5 和SMA 30 的交易策略
quantmod 和 TTR 是R裡面用來 進行量化分析的兩個好的套件

install.packages("quantmod")
install.packages("TTR")
基本上直接安裝就可以了

稍微介紹一下 他可以用getSymbols 函數直接來抓股價 非常方便
例如

#獲取台積電2015至今的股價資料
TWdata=getSymbols("2330.tw",from="2015-01-01",auto.assign = FALSE)

出來的結果是長這樣的 

注意: 有一欄是寫 Adjuseted 是指還原權值 的股價 這對分析是很有幫助的

1.png

2.png

你可以看到 屬性是屬於 xts

這樣的話 有些矩陣阿 數值阿 的函數是不能直接套用的喔~~ 

例如 : mean(TWdata[,4])

1.png
另外 因為有些特殊情況的交易日 他會塞NA (例如 颱風假)
所以 簡單的處理是把NA 直接刪除
 

stk<-na.omit(TWdata)    ## 刪除NA 值
 

下面再講幾個函數  Cl 和 SMA 及 embed
stkclose<-Cl(stk)     ## 另外 量化分析上常常用 收盤價 所以  直接打Cl()  就可以拿到收盤價了
#計算sma5
sma5<-SMA(Cl(stk),5)
length(sma5)
#計算sma30
sma30<-SMA(Cl(stk),30)
 

接下來我們用用embed() 函數
#embed  是這樣的 他可以幫你 多生一欄 lag 的資料
# 你可以不用重新生成 挺方便的

SMA5<-embed(sma5,2)
SMA30<-embed(sma30,2)
head(SMA5)

挺特別的~~~ 用embed() 函數後 SMA5 又變成 matrix了 真神奇@@

好拉 因為怕文章寫得 太長 以下我認為簡單的部分就直接貼上囉!!

#合併長短期sma
smaLS<-cbind(SMA5,SMA30)
#轉換xts
smaLS<-xts(smaLS,order.by = index(sma5[-1]))
smaLs<-na.omit(smaLS)
colnames(smaLS)<-c("sma5","lagsma5","sma30","lagsma30")
head(smaLS)

 

也就是說我建立了  SMA5 和SMA5 前一期  / SMA30 和 SMA30 前一期
這跟底下的函數是呼應的
 

#建構向上突破點函數
Upcross<-function(x){  ifelse(x[2]<x[4]&x[1]>x[3],1,0) }
#建構向下突破點函數
Downcross<-function(x){  ifelse(x[2]>x[4]&x[1]<x[3],-1,0) }

簡單來說 我設了兩個 FUNCTION 他分別要去 找出向上突破 和向下突破
用一個我自己畫得很醜的圖來解釋這個邏輯

當我前一期的SMA30 > SMA5 而且 當期的 SMA 5 > SMA30  => 短線向上突破 


接著新手小白 用apply() 這個函數把 Upcross 套用在每一筆日期


Upsig<-apply(smaLS,1,Upcross)  #找出所有短線向上突破長線日期
Upsig<-xts(Upsig,order.by = index(smaLS))   #再轉為xts檔 

!!!! 注意喔 上面是找出買進訊號的日期

!!!! 但是你要買進的時間應該是後一天吧~~ 所以下面用了一個 lag() 函數 

他話讓你的資料往後一項
例如:
UpBuy<-lag(Upsig)
那麼結果如下
               使用 lag 前                            使用 lag 後

 #查詢所有買入點  
UpBuy[UpBuy==1]

#根據 新手小白岡社的FUN 買點就是1囉


#找出賣出點的方式就一樣囉~~
Downsig<-apply(smaLS,1,Downcross)
Downsig<-xts(Downsig,order.by = index(smaLS))
DownSell<-lag(Downsig)
DownSell[DownSell==-1]




以上就是今天新手小白想告訴大家的
怎麼用R去寫一策略 並執行 (找出買賣點)
下一次新手小白  先預告一下  我們要來談談
用這樣子寫出的策略  來進行回測績效囉~~ 
 

感謝大家收看

 

 

arrow
arrow

    Markjong001 發表在 痞客邦 留言(0) 人氣()