2019年5月30日 星期四

[量化狼]粉絲的RSI大挑戰


有粉絲私訊我,他看了節目使用了某位老師的RSI策略但效果不彰,想請我們幫他回測看看;RSI的計算方法之前就有寫過了,在這篇就不多說明囉。
  我也去看了一下節目,發現那位老師一開始雖然說RSI多好用多好用,但在不同的例子裡又追加了很多需要參考的條件,像是RSI明明到了他的出場訊號結果又追加了參考五日均線如果沒跌破就不賣,又或者明明說RSI80已經超賣了就要出場,但有時又要再觀察兩天看是不是鈍化;各種的追加條件想必看節目的人也很困擾到底該不該進出場吧?

  在此將網路老師的邏輯簡化如下:
若收盤價突破5日、10日和20日均線,則多單進場
若收盤價小於5日均線且RSI跌破80(超買區),則多單出場
若收盤價跌破5日、10日和20日均線,則空單進場
若收盤價大於5日均線且RSI突破20(超賣區),則空單出場
策略基本設定:
策略名稱
均線RSI策略
交易層級
1day
交易成本
單口來回600
回測期間
2001-2019/5
程式碼:

Input :
  len(6) ;
Var :
  x(0),sum_up(0),sum_down(0),RSI_(0) ,
  MA_5(0),MA_10(0),MA_20(0) ;

//RSI 
sum_up = 0 ;
sum_down = 0 ;
for x = 0 to len-1 begin
  if c[x]-c[x+1]>0 then begin
    sum_up = sum_up + (c[x]-c[x+1]) ;
  end ;
  if c[x]-c[x+1]<0 then begin
    sum_down = sum_down - (c[x]-c[x+1]) ;
  end ;
end ;

if ( sum_up + sum_down )<>0 then
  RSI_ = sum_up / ( sum_up + sum_down ) *100 ;
 
//MA
MA_5 = Average(c,5) ;
MA_10 = Average(c,10) ;
MA_20 = Average(c,20) ;

if marketposition<=0 and c>maxlist(MA_5,MA_10,MA_20) then
  buy 1 share at next bar market ;
if marketposition>=0 and c<minlist(MA_5,MA_10,MA_20) then
  sellshort 1 share at next bar market ;
if marketposition>0 and c<MA_5 and RSI_<80 then
  sell all shares at next bar market ;
if marketposition<0 and c>MA_5 and RSI_>20 then
  buytocover all shares at next bar market ;

if dayofmonth(date)>14 and dayofmonth(date)<22 and dayofweek(date)=3 then
  setexitonclose ;


邏輯中文翻譯:
做出RSI指標
做出5日、10日和20日均線
當收盤價大於三條均線時做多
當收盤價小於三條均線時做空
當收盤價小於5日均線且RSI小於80時,多單出場
當收盤價大於5日均線且RSI大於20時,空單出場
若收盤價小於MA,多單平倉
結算時出場

權益曲線

回測績效檢視:

歷年績效分析:
網路名師果然不可信,大家還是小心一點,不然只會越賠越多!