最近給了幾場實做的課程,原本是為了教學R語言與quantmod套件,沒想到隨意開發的結果,這績效竟然也還能看,似乎真的可以拿來上線操作。於是我決定把他寫下來分享,但我也沒實際玩過,所以後過自負。畢竟有些我使用了很有"致命吸引力"的馬丁。在風險沒控制好的前提下,這絕對不是一個好的做法!!
第二步:安裝quantmod套件,兩行指令如下:(輸入後按ctrl+a 全選,ctrl+r 執行就對了)
install.packages("quantmod")
library(qantmod)
第三步:下載雅虎股市日K資料
STK=get(getSymbols("2330.tw")) ##下載台積電歷史日K資料
STK=as.matrix(to.weekly(STK)) ##將日K資料轉為週K資料
chartSeries(STK) ##畫出台積電歷史周K
第四步:設定參數與損益向量
profit=setNames(numeric(length(rownames(STK))), rownames(STK))
##設定profit向量紀錄每周損益
lastC=STK[1,4] ##先記錄第一週的收盤價
資料下載ready後,便可開始做回測。我們進場依據為為每周第一天,開低買進台積電一張,週五收盤結束部位。因此實際的行情回測需從第二週開始,第一週只能記錄收盤價:
for (m in rownames(STK)[-1]) { ##開始以每週為單位跑迴圈
fee=ceiling(STK[m,1]*1000*(0.001425*2*0.5+0.003))
##設定手續費與稅(假設手續費打5折)
##設定手續費與稅(假設手續費打5折)
if(STK[m,1]<=lastC){profit[m]=(STK[m,4]-STK[m,1])*1000-fee} ##開低買進的損益
lastC=STK[m,4] ##紀錄本周收盤價,做為下週判斷開高開低的依據
}
第五步:檢查策略程式碼的回測結果是否正確?
head(cbind(STK,profit),20)
## 可觀察前20筆的績效,是否確實執行策略
## 可觀察前20筆的績效,是否確實執行策略
第六步: 畫出績效曲線圖
由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)
使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。
績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。
當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。
等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。
雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。
當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
左圖是原始策略,右圖是資金控管後的損益。總獲利達到NT 121,735,最大回檔為NT 34,289。且最大張數只有2張。當然,我們可以把上面的策略弄得更完美,舉例來說,只有上次輸,這次才會壓1張。
很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。
另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!
上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!