You are currently viewing 15 年年均報酬率 45% 的策略!? 淺談 Python 程式選股心得

15 年年均報酬率 45% 的策略!? 淺談 Python 程式選股心得

文章最後更新時間 2020年 2月 18日

PS:我在以前的部落格曾寫過一篇 【程式投資】15 年 527 倍報酬的策略!? 淺談 Python 程式選股心得 的文章,但近期發現之所以有這麼高的報酬率是因為資料庫的月營收部分有誤,可以提前一個月取得月營收資料所以才會有這麼高的報酬率,正確的報酬率應為年均報酬率 45 %,總報酬率 309 倍。

在上一篇程式投資文中,我提到一個以月營收為主的策略,這個策略在 15 年內有著 150 倍的報酬,年均報酬率為 40%,已經算是個不錯的策略了。

註:以下的回測圖中,彩色線為沒有計算手續費,藍色線有計算手續費,灰色線為 0050 走勢。

報酬 150 倍的策略

不過這個策略的缺點就是選股數量過多,所以我在最近又對這個策略優化了一番,稍微調整了參數有了以下結果↓

年均報酬率 45% ,總報酬率 309 倍的策略

是的,從 2004 年 6 月至今有 309 倍的報酬,並且年均報酬率來到了 45% 以上,這個策略經過了 2008 年金融海嘯的洗禮,還是有這麼好的報酬率滿誇張的。

這個策略在 15 年內共選了 455 檔股票,大大減少了股票數量,讓我用少少的資金也能投資。

以下就來聊聊這個誇張報酬率怎麼來的吧!

 

策略

這個策略依然是使用「用 Python 理財:打造小資族選股策略」課程的回測程式碼,不過資料庫我是採用同一個老師的最新課程「用 Python 理財:打造自己的 AI 股票理專」,這個資料庫包含了上市上櫃的股票及 2007 年至今的股價歷史資料,而我有改過老師的程式碼,所以我的資料還包括了 2004 年 6 月到 2007 年的上市股票股價資料。

我的策略只用了月營收、成交量、收盤價這三個股票資料,並使用了 MACD、20 日均線兩個技術面。

選股邏輯則是參考老師以下文章中的<成長法選股>,不過策略參數及指標我都有改過↓

絕無僅有的超強指標!

三種看月營收的進階方法!

Python-簡單的月營收選股!

至於用月營收作為選股指標的原因,單純是因為我不喜歡把錢放在股市就不動它,個人習慣還是操作短線居多,真要放長線我會選擇投資 ETF 或是金融類股。

以下列出我這個策略除了月營收的其他指標:

收盤價

當日收盤價 < 100:因為股票太多或太貴我都買不起,不過我曾經拿掉這個條件發現有沒有限制收盤價其實沒有太大影響。

 

成交量

當日成交量 > 2000 張:會設定大於 2000 張是因為當股票交易數量太少會不好脫手。

 

MACD

今天的 OSC > 昨天的 OSC,不知道什麼是 OSC 的讀者可以參考維基百科的解釋。

之所以要設定這個條件是為了確認當前的 MACD 波段是否向上。

 

20 日均線

收盤價 > 20 日均線,因為我的策略主要以「月」為單位,20 日均線是比較接近月這個單位的均線,因此以股價站上 20 日均線代表多頭。

今天的 20 日均線 > 昨天的 20 日均線,原因同上,代表多頭。

 

至於月營收的部分畢竟是策略主體,我就不公開了,大家可以使用上述的幾篇文章找到我使用的月營收策略,再依照自己對月營收的理解做一些過濾即可。

 

策略的運作方式

這個策略只會在月報更新的隔天 ( 每月 11 號 ) 進行選股,所以一年僅有 12 天在做股票交易,是一個非常被動的交易策略。

當選完股票後會買進股票,直到下一次要做選股時再將其賣出,例如我在 7/11 買入台積電,就會在 8/11 賣出台積電,並再做一次程式選股。

在計算報酬時若有選進多檔股票就把股票的報酬做平均,雖然這種計算方式不符合實際上的股票買賣,例如我在 7/11 選到 1 檔 100 元的股票及 1 檔 20 元的股票,若要達到平均的效果且不考慮購買零股的狀況下,100 元的股票需要買 1 張但 20 元的股票需要買 5 張。

為什麼要使用上述的方式而不是許多人在做程式選股所使用的「每天判斷,若有判斷到股票就買進,直到賣點出現就賣出」呢?

這是因為在資金有限的時候,買入的股票常常會有限制,如果每天都判斷買點可能會買不起這麼多股票,而老師的這堂課是開給小資族的,所以就沒有使用每天判斷買點的方式。

其實在老師最新的「用 Python 理財:打造自己的 AI 股票理專」課程就有採用每天判斷買點的方式,最近正在研究,若有什麼心得也會放上來跟讀者分享。

 

程式選股問題及心得

看過上面的誇張報酬率後,接下來的才是重點,這邊會列出這個程式選股的問題及實際帶給我的獲利。

實際操作上的困難

在上面的運作方式有提到,實際上是沒辦法像程式面直接把報酬平均的,尤其體現在小資族的資金並不高,選中 4 檔以上就已經非常難做平均了,這也是為什麼我不斷的壓低選股數量。

但壓低選股數量卻又造成樣本數不夠多的問題,造成這個報酬率或許並不這麼準確,只是「根據這個條件剛好選到報酬率高的股票」。

 

程式面的缺失

這個回測程式沒有過濾除權息、增減資,所以在報酬率上一定會有問題。

除權息的部分個人認為影響還好,因為除權息會造成報酬下滑,但是在沒過濾掉除權息的情況下還有年均 45% 的報酬,若算入除權息報酬會更高。

但增減資的部分就沒有過濾,這也是為什麼我加上了技術線來過濾,盡可能避免增減資的狀況出現。

且程式沒辦法預測大局,例如最近的中美貿易戰,或是其他消息面的資訊都沒辦法預測,我也沒有特地透過網路爬蟲找關鍵字熱度,所以常有突然的大跌出現。

 

在大盤崩跌時會有不小的跌幅

這個策略經過了 2008 年的金融海嘯,下圖是這個策略歷年來的跌幅。

歷年跌幅

其中的灰色線是 0050 的連續跌幅,可以發現在 2008 年年初這個策略比 0050 跌得更快,一路跌到虧損接近 50 % 才又爬升回來,所以採用這個策略得承受大盤大跌時可能會出現的 50% 跌幅。

不過也從圖上得知在大跌過後的 2009 年年初就把這 50% 的跌幅補回來,後面幾年的最大連續跌幅大概在 20~30% 左右,算是比較正常的跌幅。

而 0050 在經歷了 2008 年的跌幅後一直到 2015 年左右才補回來,可以說這個策略還算是不錯的。

 

年均報酬率並不穩定

雖然經過計算,這個策略平均每年有 45% 的年均報酬,但這個報酬一定會時高時低,以最近的一年為例:

近一年報酬

從去年 9/11 至今,這個策略有約 60% 的年化報酬率,並且有 4 個月是空手不持股,其他月份平均每個月持有 4 檔股票,可以看到這個策略的報酬比 0050 (灰色線) 要好得多。

60% 相較於整個策略平均下來的 45% 報酬是多滿多的,不過這也代表之前有年均報酬率少於 45% 的時候,整體的報酬並不穩定。

 

紀律的重要性

這是程式選股,不是程式化自動交易,所以我並沒有串接券商去自動下單,必須要靠人為手動操作下單。

但既然是人為,在下單或賣出之前我都會觀察一下股票的基本面、籌碼面、技術面、消息面是否該進行交易,這變成了程式選股中的變數。

例如在上一篇程式投資文中,有這麼兩檔股票達到了非常誇張的報酬率:

但事實上,我並沒有按照程式選股賣出的時間點進行賣出,因為我認為這兩檔股票還可以繼續放著,可能到 7、8 月除權息前還有機會上漲。

所以我就放著,直到兩支股票突然暴跌,我最終賺到的金額僅有 7000 左右,是原本預估損益的一半。

只說在股票市場真的必須要維持好紀律,不管是透過哪種方式選股,該出場就出場,該認賠就認賠。

 

選股數量時多時少

從選股數量圖可以得知每次選股的數量差距很大,有時選不到股,但最多卻一次選到 22 檔股票。

選股數量

這時就只能從這些選到的股票再挑幾隻出來購買,還好這個策略大部分的選股數量有壓到 5 隻以下。

 

歷史無法預測未來

這是程式投資最大的缺點,程式投資使用的是歷史資料,在瞬息萬變的股市市場上是無法透過歷史預測未來的。

因此程式策略一定會有不管用的時候,所以不能夠只使用一個策略也不能夠停止學習金融知識,因為程式過時就算了,不能讓腦袋也過時,否則當你失去了程式,那就等於失去投資方式及依據了。

 

實際報酬

這邊比較抱歉的是我沒辦法貼出對帳單,因為我的券商介面不是很好,沒辦法只顯示我開始使用程式投資的報酬。

不過我可以提一下大概,我的本金是 10 萬元,目前透過程式選股的損益是 1200 左右,雖然損益很低,但原因是我之前是使用網路上別人提供的策略。

這個新策略是我大概 7 月測試出來的,新的策略目前還沒有選到股票,所以我也沒辦法實做這個策略。

2019/08/16 更新

這個策略在 8/11 選中 5 檔股票,最後用自己的判斷選出其中三隻,以下是 8/12~16 五天的報酬 ↓

20190816 投資報酬

最上面那隻並非我的策略選中的股票而是金融定存股,這次的策略是下面三隻,投資約 250000,有 25000 的報酬,也就是在這 5 天內有著 10% 的報酬率,真的非常不錯。

 

學習資源分享

我大多的學習資源是透過「用 Python 理財:打造小資族選股策略」這個課程的社團資源以及老師的部落格,裡面有非常多的資料可以學習。

且老師也開了第二門課「用 Python 理財:打造自己的 AI 股票理專」,但這門課就比較著重在機器學習分析,如果是 Python 新手建議不要來上這門課,上面的小資族選股課程就很夠用了,等上完如果想朝數據分析邁進再考慮購買這門課程。

另外以上兩門都是以股票為投資標的,目前我也有購買期貨的程式投資課程,可以點此看課程介紹,且目前這個課程合購優惠還沒結束,算是滿超值的。

我近期也會開始研究期貨,畢竟對於程式策略而言,年均 45% 的報酬其實算少,想要更高的報酬率也許可以朝衍伸金融商品試試看。

如果想了解 Python 量化程式交易,可以到這篇文章,裡面有我整理的推薦學習資源 ↓

Python 程式量化投資學習資源總整理 (股票、期貨、基金)

 

總結

我認為程式投資可以解決「被動投資報酬較低的問題」,因為當你使用懶人投資法去購買 ETF、金融股等標的時是比較難有 10% 以上報酬率的,可能加上主動做價差可以到 15% 報酬率,但終究有著天花板存在。

程式交易可以讓自己被動的同時達到高報酬率的方式,甚至比較高明的作法可以透過更短線的交易 ( EX:當沖、隔日沖 ) 來放大報酬。

我也會開發出幾個更穩定且報酬率更高的策略來跟大家分享,並打算之後開始研究更多的金融商品,例如期貨以及美股,也請各位讀者可以多多提出自己的看法跟意見喔!

喜歡這篇文章歡迎在下方幫我按5個Like,讓我獲得一些回饋來支持我寫出更多好文章,如果有問題或是對文章有建議歡迎聯絡我喔 : )

訂閱我的文章

如果喜歡我的文章,歡迎留下信箱,發佈新文章時就會通知您!

This Post Has 2 Comments

  1. XIAO

    Scott大您好,我也是finlab的學生,謝謝你的分享,
    偶然看到您的文章,覺得有興趣實作,
    但我試出來從2015開始回測,都只能約做到17%的效果,
    (有使用創高營收方式,但沒有撰寫過熱保護),
    想跟您私下交流一下此策略的細節,謝謝!

    1. Scott

      同學你好!
      有些策略細節不能說太明白,畢竟台灣市場太小容易操盤。
      其實 17% 也算是不錯啦,不過可以再多做一些調整,只要再多琢磨月營收的參數應該可以更高。
      我的策略也算是月營收創高,也沒多做過熱保護,2015 至今的總報酬率是 2193%,年均報酬率在 65% 左右。
      201501-202104

      另外想聯絡我的話可以透過信箱 [email protected] 或是到聯繫我們這頁留言。

Scott 發表迴響 取消回覆