[.設定所需的函式庫(libraries)以及載入資料]
library(quantmod)
getSymbols("AAPL")
## [1] "AAPL"
#"getSymbols("AAPL")"是直接取用Yahoo Finance 裡蘋果(AAPL)股價的歷史資料。
[補充].你也可以抓台灣的資料,比如說:
library(quantmod)
getSymbols("2330.TW")
## [1] "2330.TW"
TSMC<-get("2330.TW")
chartSeries(TSMC, theme="white")
1.股價基本資料與畫出線圖
head(AAPL)
## AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2007-01-03 86.28998 86.57999 81.90000 83.80001 309579900
## 2007-01-04 84.04998 85.94999 83.82003 85.65998 211815100
## 2007-01-05 85.77002 86.20003 84.39998 85.05000 208685400
## 2007-01-08 85.96000 86.53001 85.28002 85.47000 199276700
## 2007-01-09 86.45000 92.98002 85.15003 92.57003 837324600
## 2007-01-10 94.74997 97.80001 93.45000 96.99998 738220000
## AAPL.Adjusted
## 2007-01-03 11.24516
## 2007-01-04 11.49475
## 2007-01-05 11.41289
## 2007-01-08 11.46925
## 2007-01-09 12.42201
## 2007-01-10 13.01647
tail(AAPL)
## AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2015-05-13 126.15 127.19 125.87 126.01 34322000
## 2015-05-14 127.41 128.95 127.16 128.95 44487500
## 2015-05-15 129.07 129.49 128.21 128.77 37921200
## 2015-05-18 128.38 130.72 128.36 130.19 50176600
## 2015-05-19 130.69 130.88 129.64 130.07 44351200
## 2015-05-20 130.00 130.98 129.34 130.06 35965000
## AAPL.Adjusted
## 2015-05-13 126.01
## 2015-05-14 128.95
## 2015-05-15 128.77
## 2015-05-18 130.19
## 2015-05-19 130.07
## 2015-05-20 130.06
#包含每天開盤價(AAPL.Open)、最高價(AAPL.High)、最低價(AAPL.Low)、收盤價(AAPL.Close)、成交量(AAPL.Volume)、(還原權值)AAPL.Adjusted。
chartSeries(AAPL)
chartSeries(AAPL["2012-01::2014-12"],theme="white") #我只要看此段區間的資料,同時把版面調成白色
2.畫出20日平均線(月線),60日平均線(季線)
#AAPL[,4]代表蘋果股價每日的收盤價(AAPL.Close),因為收盤價放在第四行所以這樣表示。runMean這個函數以即n=20表示計算過去20天的平均數。因此。ma_20是一個時間序列,每一時間點表示過去20天的收盤平均。
ma_20<-runMean(AAPL[,4],n=20)
#過去60天的收盤平均
ma_60<-runMean(AAPL[,4],n=60)
#將20日均線(ma_20)的圖形,用藍色線條加到目前K線圖上
addTA(ma_20,on=1,col="blue")
#將60日均線(ma_60)的圖形,用紅色線條加到目前K線圖上
addTA(ma_60,on=1,col="red")
3.進行策略回測
#為了方便講解回測,我們用最普通的均線策略:當20ma大於60ma時,全壓買進;當20ma小於60ma時,空手。
#position為一個時間序列,以日為單位,如果20ma大於60ma,設值為1;否則設值為0。由於我們是日資料,訊號發生時只能隔天做交易,故將這向量全部往後遞延一天。
position<-Lag(ifelse(ma_20>ma_60, 1,0))
#ROC計算:log(今天收盤價/昨天收盤價),乘上poistion代表。若1則持有,若0則空手。
return<-ROC(Cl(AAPL))*position
#由於我們策略條件是60ma>20ma之後才會交易,故統計值從2007-03-20開始;另外APPLE在2004年有配發股利,故我們只統計2007年到2014年的資料
return<-return['2007-03-30/2014-12-31']
#cumsum計算累計值,即將每一分量之前的值累加起來。取exp函數是要計算累計損亦。(這裡運用國中數學:log(a)+log(b)=log(ab),exp(log(ab))=ab)
return<-exp(cumsum(return))
#將累計損益圖畫出來。此策略的損益圖形如下,橫軸為時間軸,縱軸為報酬率,1代表原始自有資金100%。
plot(return)
4 .布靈通道
chartSeries(AAPL["2012-01::2015-04"],theme="white") #我只要看此段區間的資料
addBBands()
addBBands(draw="p")#另外加上Bollinger%b的圖形: Bollinger%b = (Close-LowerBound) / (UpperBound-LowerBound)