電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus

第一次使用R語言做回測:六分鐘,就上手!


資訊科技瞬息萬變,交易也受到資訊科技的影響在改變。舉例來說,以前黑板報價,現在網路下單,甚至是程式交易。以前把歷史線圖列印出來,每天當線仙日以繼夜研究;現在只需要幾個程式指令,便可做完所有股票的歷史回測。

然而,並不是所有的投資朋友都熟悉軟體操作、程式撰寫,有些朋友甚至不熟悉上網。對這一類電腦恐慌症的朋友來說,接觸資訊設備簡直就是一件比登天還難的事。

太多太多的不確定性,該學什麼? 該買什麼軟體? 改有怎樣的電腦技能? 這些都是投資人使用資訊科技的阻礙。

所以牧清華準備開始介紹一系列的資料分析上手課程。我們就從R語言開始。為什麼選擇R語言? 兩個重點:1. R免費。2. R功能可完全取代MultiChart,甚至更有彈性。

你可能沒聽過R語言,但開始接觸後你會愛上他!

R語言是當下最紅的統計程式語言,隨著巨量資料成為顯學,使用R語言將變成基本功夫。牧清華最近很常說一句話:至少把R安裝後放在電腦桌面,取代"小算盤"也不錯!

我們不囉說,這篇文章就專門寫給程式語言生手,目的是讓你六分鐘就能實際做回測,當然也包括股價歷史資料的下載。下面我們開始介紹。

第一步:下載R語言。http://cran.r-project.org/bin/windows/base/

使用windows的朋友,請點選畫面第一個 "Download R 3.1.2 for Windoes (54 megabytes, 32/64 bit)"


下載後請按執行,不停的 "下一步"、"下一步" 安裝下去。

第二步:安裝套件quantmod

安裝好R語言後,請選"程式套件" => "安裝程式套件" 選擇 "Taiwan(Taipei)" 後按確定。

接著選擇"載入程式套件" => 選擇 "quantmod" 後按確定。

說明:quantmod是R裡面很強大的finance相關套件,其功能對大部分的朋友來說絕對足夠。

第三步:下載股市資料(以APPLE為例)

開啟桌面的R圖示,輸入 "library(quantmod)"後,再輸入 "getSymbols("AAPL")",如下畫面:


說明: "library(quantmod)"是將quantmod套件引進函式庫。"getSymbols("AAPL")"是直接取用Yahoo Finance 裡蘋果(AAPL)股價的歷史資料。

輸入完成後,這時輸入"AAPL",可得到2007-01-03開始的蘋果股價資料,包含每天開盤價(AAPL.Open)、最高價(AAPL.High)、最低價(AAPL.Low)、收盤價(AAPL.Close)、成交量(AAPL.Volume)、(還原權值)AAPL.Adjusted。如下畫面:


這時你可以開始畫蘋果股價的歷史線圖了。quantmod裡的畫圖功能當然不輸一般看盤軟體。最直接的指令便是輸入 "chartSeries(AAPL)",得到圖形如下:


當然,上面圖形沒有很好看,至少背景黑漆漆一片該換成白色;再說,如果我只想要看2012年1月到2012年6月的圖形。chartSeries也提供很方便的指令。輸入指令

 chartSeries(AAPL["2012-01::2012-06"],theme="white")


圖形如下:


白色背景,是不是好看且更專業看盤軟體了呢?

第四步:畫出20日平均線(月線),60日平均線(季線)。

輸入指令:



ma_20<-runMean(AAPL[,4],n=20)   
說明:AAPL[,4]代表蘋果股價每日的收盤價(AAPL.Close),因為收盤價放在第四行所以這樣表示。runMean這個函數以即n=20表示計算過去20天的平均數。因此。ma_20是一個時間序列,每一時間點表示過去20天的收盤平均。

ma_60<-runMean(AAPL[,4],n=60)
說明:過去60天的收盤平均。

addTA(ma_20,on=1,col="blue")
說明:將20日均線(ma_20)的圖形,用藍色線條加到目前K線圖上。

addTA(ma_60,on=1,col="red")
說明:將60日均線(ma_60)的圖形,用紅色線條加到目前K線圖上。

圖形如下:


第五步:進行策略回測

為了方便講解回測,我們用最普通的均線策略:當20ma大於60ma時,全壓買進;當20ma小於60ma時,空手。輸入指令:

position<-Lag(ifelse(ma_20>ma_60, 1,0))
解說:position為一個時間序列,以日為單位,如果20ma大於60ma,設值為1;否則設值為0。由於我們是日資料,訊號發生時只能隔天做交易,故將這向量全部往後遞延一天。

return<-ROC(Cl(AAPL))*position
解說:ROC計算:log(今天收盤價/昨天收盤價),乘上poistion代表。若1則持有,若0則空手。

return<-return['2007-03-30/2013-12-31']
解說:由於我們策略條件是60ma>20ma之後才會交易,故統計值從2007-03-20開始;另外APPLE在2004年有配發股利,故我們只統計2007年到2013年的資料

return<-exp(cumsum(return))
解說:cumsum計算累計值,即將每一分量之前的值累加起來。取exp函數是要計算累計損亦。(這裡運用國中數學:log(a)+log(b)=log(ab),exp(log(ab))=ab)

plot(return)
解說:將累計損益圖畫出來。

此策略的損益圖形如下,橫軸為時間軸,縱軸為報酬率,1代表原始自有資金100%。


由圖可知,在2007年3月後開始交易到2013年底,用這最簡單的策略,資產整整翻了將近6倍!

(註:這裡只是為了方便解釋使用R語言很容易做策略回測,並不是說這個簡單的交易策略可行,事實上APPLE這幾年長期多頭,隨便買了持有幾乎都會賺錢!)

Quantmod的其他技術指標

當然,套件quantmod也包含了其他的技術指標,最常用的我想就是布靈通道。再畫出股價走勢圖後,再輸入指令 "addBBands()"


圖形顯示為


我們也可另外加上Bollinger%b的圖形。

Bollinger%b = (Close-LowerBound) / (UpperBound-LowerBound)

輸入"addBBands(draw="p")"


圖形顯示為


當1.0代表股價碰到布靈通到上緣,0.0代表股價碰到布靈通到下緣。Bollinger%b公式為(Close-LowerBound) / (UpperBound-LowerBound)

當然,quantmod還有很多好玩的東西,我們以後陸續介紹,希望到這沒超過你6分鐘時間,也希望這篇文章能開啟大家對R語言的喜愛。

打完收工!

星期二;一天一錠,效果一定,歡迎訂閱「幣圖誌Bituzi電子報」

寫程式,玩資料,會上癮。

重點是先跨出第一步,即使是簡單的第一步,小有成就,很快就陷進無法自拔的深淵!

關於quantmod套件的介紹使用,可參考官方網站 http://www.quantmod.com/examples/intro/#data



0 意見: