美國投資冠軍的著名著作《超級績效》你看過了嗎?其中到底有甚麼選股奧秘,要如何獲得超額報酬,我們一起來一探究竟。
這位投資冠軍是什麼人物
作者馬克.米奈爾維尼是1997年美國投資大賽的最終冠軍,那一年比賽較特別的是,有別於以往開始適用了新規定,也就是參賽者可以任意交易股票、選擇權、期貨或各種組合,所以聽起來,若沒有跟著運用槓桿,像作者這樣的純粹股票交易者勢必會在投資競賽中處於劣勢。不過,最後他在比賽中透過股票交易獲得的全年總報酬是155%,幾乎是第二名的兩倍。
大家也許會開始好奇他的背景,是不是金融相關領域出身、是不是早年就受到高人指點、或是天生擁有卓越交易天分等,但事實上,他只是個15歲就高中輟學的平凡小散戶,而在那個年代,他所擁有的工具、技術、資源肯定還比現在現在看到這篇文章的你還少,最初他自己開始交易時也只有幾千塊錢(美金)的資本,跟多數人一樣,也都會犯投資新手會犯的錯誤,也是經過多年的研究磨練,才找到如此創造超級績效的方法。
而作者寫這本書的宗旨正是要告訴大家如何發展出這方面的專業技巧,Finlab這次想選用這主題,也是想向大家分享散戶起家卻如此成功的案例與法門,並邀請使用者們繼續跟我們一起從中學習。
如果你是完全的投資新手、想開始學投資但不知道從哪裡下手的人、想嘗試做量化選股但不知道有什麼工具的人、或是有一定市場經驗但總是賺不到錢的人,那麼非常推薦你繼續看下去。
本文除了重點介紹書中精華,也將嘗試把書中選股邏輯程式化,首先驗證看看是否能單純用程式於美股複製出超級績效策略,並且帶大家一起將這套簡短程式應用於台股。我們究竟能不能也在台股中創造出同樣的超級績效策略呢?
論投資心態
在成功能夠發生在現實世界之前,首先必須發生在心靈上。
大家點進來這篇文章,也許會想急著問,所以到底要買什麼股票、還是有什麼特殊秘訣才能賺錢?或是其實也已經對超級績效不陌生,知道要找技術成長線型、知道VCP,但想重新看看還有什麼專業知識點是自己漏掉的。不過我認為,超級績效選股法大解密的重點不會是在選股法,而是在作者建立起這套超級績效過程的心態效仿。
投資理論看來看去就是這些,很多可用來賺錢的資訊、資源、技術也是公開的、大家都可取得的,但能實際做得到的人有多少呢,差別還是在我們自身的心態與思考模式上,畢竟我們也知道思維方式影響行為,行為影響習慣,習慣決定性格,性格決定命運,也就是關乎我們到底會不會賺到錢。
作者在書中一開始就花了一定篇幅講述投資心態,這邊也為大家整理也許已經聽到爛的精神雞湯,但希望能為大家再次建立更為健全的交易心態。
如果你自認為累積了很多交易知識,卻也一直尚未實際獲利,那也不妨回頭檢視自己在交易心態上是否有調整空間。
自我認識 / 自我管理
首先要投資自己—有準備,才有機會
多數人都曾經對於交易產生過興趣,但很少有人會真正許下承諾。「產生興趣」與「許下承諾」之間的差別,在於堅持的意志力。當你對於某件事許下真正的承諾,除了成功之外,將別無其他選擇。
股票市場的賺錢機會可能會突然出現。如果想要有效掌握這些機會,你就必須要有所準備,隨時讓自己能夠付諸行動。
揮灑你的熱情
以我個人來說,當我決定忘卻金錢,而把注意力完全集中在如何讓自己成為頂尖交易者時,那就成為了我獲致成功的關鍵;至於錢財,他們自然會來找你。
最好的開始時機
只擁有知識、夢想和熱情是不夠的;如何實際發揮這一切,才是決定勝負的關鍵。即使不能成為富豪,熱情追求本身也起碼能夠讓你覺得快樂。從事自己喜歡的工作,投入自己所擁有的一切,這就是人生獲致成功的最佳機會。這種機會就開始於今天,最佳時機就是當下。
除非你實際採取行動,否則不會有任何成果。你如果要等待最佳時機,或等到所有的條件具備,你很可能永遠都不會開始。動手做些不完美的事情,往往勝過完美地無所作為。
你想要的是什麼-判斷正確?還是賺錢?
股票市場隨時會冒出機會或危機。交易者必須採取迅速而果斷行動,才能及時掌握機會,或排除危機。認賠一筆重大的失敗交易,最能考驗投資人的勇氣。我要的是裡子,不是面子。我要賺錢,沒必要強行維護自尊。
交易是一門事業
大多數投資人只是把交易當成一種嗜好,因為他們另有全職的工作。可是,你如果把交易當作事業經營,他就會提供經營事業的報酬。如果你只是把交易當作嗜好,那麼他也就只會像個嗜好來報答你,但嗜好是不會提供報酬的,它反而只會讓你付出代價。
在1980年代,作者剛開始從事交易時,沒有所謂的即時報價、沒有價格走勢圖,也沒有任何研究工具,甚至當時他也沒有網路可以使用、沒有線上交易,每天只能查閱報紙所刊載的收盤價,透過手工方式繪製股價走勢圖。但是,他依然每個禮拜投入七、八十個鐘頭學習,日以繼夜研究股價走勢與企業財報。
如果我們對於做交易一樣有如此堅定的意志力,搭配在現代唾手可得的各種技術資源,相信賺錢獲利只是個確定會發生的已知結果。
對於揮灑熱情、把注意力集中於手頭事項這個部分,我也非常認同。各個領域的成功人士,不論是像諾貝爾獎得主、企業家、歌手、演員、或是我們自身曾經取得任何印象深刻的突破時,幾乎都不會是因為我們一心想著要取得某個固定成就,而是單純投入於其中,在不知不覺間那長久的累積都會有它的回報。當專注在生活中每個當下,做有所熱情的事,豐盛自然會到來。
風險管理 / 永遠備妥計畫
風險來自於你不知道自己在幹嘛。 – 華倫巴菲特
如果想要避免發生重大虧損,唯一辦法就是在小損失累積為大虧損之前斷然認賠。
投機者如果想賺大錢,避免發生重大虧損是不二法門。我們不能控制股價漲跌,但通常可以控制虧損程度。
投機活動是預期某些即將發生的事態,然後等待事實證明所預期的事態是否發生。你備妥一份計畫,然後開始執行。交易完成之後,你評估結果,作出必要的修正,然後準備新的計畫。關鍵是你應該客觀看待真實的狀況,不會因為恐懼而把事態看得更糟,也不會因為貪婪而把狀況看得更好。
開頭提到作者在投資大賽中與其他期貨選擇權交易者的競爭中依然勝出甚多,作者在書中表示,這是因為他並沒有因此而過分冒險或過分交易,當他發現自己成績大幅落後時,也沒有因此而慌張,更沒有因此修改自己的規則,而是單純更專注於自己的交易計畫,還有兩個致勝關鍵:一致性與風險管理。
一般投資人經常在完成部位建立之後,開始陷入猶豫及迷惘的階段,不知道接下來應該如何處理。如果沒有備妥計畫,所有的交易者不免會擺盪於猶豫與懊悔兩種情緒之間。像是猶豫:是否應該買進、是否應該賣出、是否應該持續持有,或是懊悔:我原本應該買進、我原本應該賣出、我原本應該繼續持有。
制定計畫、擁有一套具一致性的交易法則是作者強調的重點。而我想在這邊,程式交易也正是能有效幫助我們達成此目標的必要工具。
透過把選股邏輯程式化,對於是否該進場該出場,馬上能有個精準確定的依據,而根據回測系統的結果展示,也能清楚知道各個選股邏輯是否真正有效、還有哪裡可以修正。
本篇文章後半將會集合書中所提到的找成長股/市場領導股邏輯,寫成一支順勢策略,若大家已熟悉程式交易、自動/半自動下單等的操作,那也許多認識了這支擁有超額報酬的策略確實就能馬上實際運用賺到更多錢。
不過若是投資新手,不管是技術上因素或是心態上因素無法做到跟著策略訊號買賣,例如說出現買出訊號,但主觀上想等待更好時機反而錯過有效進場點;或是相對的,已經看到策略出現賣出訊號,卻可能對其中幾檔個股存有莫名信心、有感情,遲遲沒有實際賣出而導致超出預期的虧損;或甚至,在開始虧損後則馬上對策略失去信心而回到主觀、純手動、相對沒紀律的操作,這都是非常可惜但絕對可以從心態調整或透過技術提升避免的。
投資小白要從哪些面向切入研究呢?–特定進場點分析SEPA
特定進場點分析SEPA(Specific Entry Point Analysis)是作者自行發展出的一套選股原則,而這也是非常適合推薦給投資新手,當不知道從哪裡開始研究、或是不知道原本自有的交易策略要如何改善時的重點探討面相。
SEPA的五大要素分別是1.趨勢2.基本面 3.催化事件 4.進場點 5.出場點,結合了企業基本面與股價技術面行為的資訊。學投資做交易要認識的內容實在太多,不知道從哪裡下手就由這幾個面向切入吧,也可以用來檢視自己在實際交易時是否在這幾個面向的觀察運用上還有優化空間。以下也簡短節錄各項重點:
趨勢
每支超級強勢股的積極發展階段,幾乎都發生在明確的股價上升趨勢中。而且這些趨勢幾乎都可以在超級漲勢發動初期獲得辨識。
基本面
超級強勢發展階段的驅動力量,大多來自於盈餘、收益、毛利等因素的改善。
催化事件
價格曾經大漲的每支股票,其背後都有催化事件。這些催化事件乍看之下未必明顯,但只要針對公司資料稍作探索,就不難找到與超級潛能有關的線索。
進場點
拿捏進場時效很關鍵,如果進場時效拿捏不正確,可能就會遭遇不必要的停損。多頭行情發展過程中,正確拿捏進場時效,可以讓交易部位立即處於獲利狀態。
出場點
展現超級績效強勢股性質的股票,最後未必都能成功。對於這些潛力股,即使進場時機拿捏正確,同樣未必能夠賺錢。所以,為了保障交易資本,部位必須設定停損,迫使失敗部位認賠。
SEPA的目的,是運用所有重要資訊,針對高勝算交易,選定精確的進場點。目標是買進股票後,部位立即處於獲利狀態。
而作者也提到,他會綜合考慮所有相關的基本面、技術面、市場面等因素,讓整體支撐條件都彼此收斂。所以唯有當全部的考量因素(包括:公司基本面、股價、成交量活動,乃至於大盤市況)都彼此配合時,才會執行交易。
作者實際運用SEPA的篩選程序為:
1.股票必須符合「趨勢樣板」(下一段落即會提到,本文的範例策略也將用此作為技術面主要選股邏輯)的條件,才能視為是潛在的SEPA候選股。
2.符合「趨勢樣板」條件的股票,還需要經由一系列濾網(盈餘、銷貨、毛利成長、相對強度、價格波動程度等)做篩選。符合「趨勢樣板」條件的股票當中,大約有百分之九十五會在這個篩選程序被剔除。
3.將候選股票與「領導股輪廓側寫」比對。也就是評估特定候選股所具備的各項因素,並與過去超級強勢股所建構之歷史模型基本面和技術面條件相比對,觀察兩者之間的符合程度。
4.最後階段採用人工評估。濃縮候選清單中的每個標的,都會個別進行檢定,再根據「相對優先順序」評估程序打分數,而該評估程序包括:盈餘與銷貨數據、盈餘與銷貨意外事件的歷史、每股盈餘成長與加速狀況、收益成長與加速狀況、專業分析師盈餘估計修正、毛利率、產業與市場地位、潛在催化事件、與相同類股中其他股票的績效比較、流動性風險等。
股票篩選程序
進行定量分析時,盡量保持單純,不要採用複雜的模型。每次篩選時,不要同時考慮太多篩選準則,否則可能就會不經意地剔除掉適當的候選股,只因為該股票不符合某單一篩選準則。比較好的辦法,是採用多層次篩選,但每次篩選不要納入太多準則。第一:針對相對強度和趨勢做篩選、第二:針對盈餘與銷貨等基本面因素做篩選。
如果想取得具有一致性的超級績效,我們就需要把袖子捲起來,做些傳統的人工分析。
由作者實際運用SEPA的篩選程序與他整體的股票篩選大方向,可以看出他會運用到大量人工(不論是用人力看大量技術線型圖表或是閱讀財報、找產業相關書面資訊、分析師報告等),並且有多層次的篩選。不過像本篇文章開頭提到的,除了帶大家理解相關知識點之外,我們正是也想驗證看看,這套超級績效選股是否能完全透過程式複製出來,所以我們將直接篩選使用其中部分邏輯,寫進程式策略。
但不管回測績效如何,我們也不該摒棄原本的人工篩選方法,我們依然可以從中找到能用來輔助並加強程式的關鍵邏輯。
順勢交易—成長股怎麼找
在眾多類型的交易策略中,最純粹也最好理解的概念就是找到成長飆股做順勢交易,買低賣高,進場出場,就這麼簡單,而在超級績效中運用的核心邏輯,其實就也就只是這樣,身為投資新手的你一定也能完全理解。
不過實際上是透過哪些面向鎖定成長股的特徵,我們繼續由SEPA中所提到的趨勢、基本面、進場點、出場點等因素中探討下去。
趨勢—成長型股票生命週期
一支股票的基本面如果發生了狀況,在問題明朗化之前,價格行為經常會先出現重大變化,提前透露出訊息。即使我們完全看不出市場人氣發生變化的理由,但對於這類變化務必要予以尊重。
法人機構龐大買盤所創造的長期趨勢,才是乘風破浪所需要的順風,你必須想辦法讓自己跟這股龐大力量配合。指買進上升趨勢明確的股票,才更有機會掌握真正的超級強勢股。
有些投資者也許秉持著純基本面派的精神,不過作者的看法是,價格除非經過市場確認,否則對於特定企業的基本面看法,從來不敢保有太大信心。因為一家公司的管理與產品真的很棒,這方面基本面條件就遲早該反應在股價行為上。強勁的基本面條件,如果不能獲得股價行為的確認,未來展望看起來恐怕就沒那麼光明。唯有當機構買盤大舉進場,推升股價顯著走高,再考慮進場。如果要達到這個目的,在進場之前,我們就必須先確定這類的資金流入已經發生。
依據股價價格行為,可以將四個階段劃分為:
第一階段—忽略階段:整理
第二階段—上升階段:承接
第三階段—做頭階段:出貨
第四階段—下降階段:投降
股票價格生命週期四階段
其中持上升趨勢的第二階段,正是我們順勢策略中想找來做多的成長股階段。在這個階段,隨著由盈餘動能的累積,大型金融機構的買盤會開始積極進場。股價將呈現階梯狀上升,波段高點與回檔低點會持續墊高。公司如果能夠繼續提供好表現,成長狀況就能夠吸引投資大眾,而買盤也就仍然會源源不斷。
也許有的選股方式是想要逢低承接、逆勢找低點操作,所以選擇在第一階段提早進場,或是等到第四階段試著抄底,不過作者的思路是,如果資本想要加速複利,就必須找到最有搞頭的場所,我們絕對禁不起讓資金被套住,只為了等待另一個我們認為的基本面偉大故事慢慢醞釀成形、慢慢獲得世界其他人的認同。所以作者也表示,他寧願把股價走勢的第一隻腳拱手讓人,藉以換取確認,顯示股票已經蓄積足夠動能而明確邁入了第二階段,畢竟我們的目標不是買進最低價,而是要在最短時間內,賺取最大的報酬。
重要基本面要素—超級強勢股的驅動力量
股票市場不太關心過去,包括企業過去所累積的地位在內。股票市場真正關心的是未來,也就是成長。
超級強勢股會透過盈餘、銷貨、營運利潤的成長和提升,展現其力量。這些強勢企業每季所公布的營運績效,總是優於華爾街的預期,然後藉由這類利多意外,驅動股價走高。千萬不要只因為「名氣」而愛上那些價格大跌的股票。很多真正的贏家,可能是你從來沒聽過名字的股票。它們的光榮日子出現在未來,而不在過去。股票市場存在著許多基本面條件傑出的企業;一家公司不論規模、地位、聲譽如何傲人,投資人都沒有理由去接受較差的績效紀錄。
在「趨勢」的分析中我們已經知道要尋找處於價格成長週期第二階段的股票,而一支股票處在第二階段的時間長短,將會取決於企業基本面條件,也就是強勁的盈餘成長型態能夠維持多久。
作者觀察出,價格表現最傑出的股票,其最近一季盈餘都會較去年同期呈現顯著成長。我們想要看到的,不只是最近一季顯著增加,也希望先前兩、三季有顯著成長。
因此,我們將運用財報中的盈餘、銷貨收入(營業收入)、營運利潤(或營業毛利),篩選出近季有所成長的標的。
鎖定進場點—VCP(價格波動收縮型態, Volatility contraction pattern)
我們只能挑選那些法人機構介入明顯的股票。我們絕對不想成為第一個進場的先知先覺;反之,我們要尋找行情動能點火待升、失敗風險相對偏低的機會。
走勢圖所呈現的價格型態,必須放在較長期趨勢內做評估。進場如果過早,股價可能重新恢復下降趨勢;進場過晚,則可能碰上最後階段的底部,既有上升趨勢太明顯而隨時可能結束。
身為使用停損單的交易者,你就是弱勢持股者。重點是要成為最後的弱勢持股者;你希望在自己買進之前,所有其他弱勢持股者都已經出場。
找到價格位於成長階段且基本面過關的股票後,我們需要決定較佳的進場點位置。VCP,價格波動收縮型態,是作者所觀察出來具有效力的精準進場點,他所進行的每筆交易,幾乎都符合這個概念。
作者表示,凡是具有建設性意義的價格結構(股票處於承接狀態),其底部結構的某個區域,幾乎一定會出現價格波動收縮的現象,而且成交量也會顯著收縮,因此才稱它為「價格波動收縮型態」。
若市場籌碼不再浮動,成交量會顯著萎縮,價格波動也會明顯趨於緩和。設定這種條件,可以避免誤入擁擠的交易,鎖定的股票也不致於成為公眾追逐的焦點,如此可以提高勝算。
關於VCP的介紹,網路上也已有其他更為詳細的文章及影片教學分享,可以自行參考。
出場警訊—交易如果沒有按照計畫發展
任何計劃都需要考慮到負面發展,實際操作中,進行的交易可能有一大部分不會按照預期發展,即使篩選出的股票完美符合事先設定的條件,但有可能進場時機就是不對,也許應該等待更好的架構,但在已經持有部位的情況下,如果實際發展不符預期,或者股價走勢不對勁,我們都必須知道。
以下是作者採用的某些「違反條件」,我們可以考慮將這些判斷當作出場依據。
1. 突破之後,留意二十天移動平均
2. 低價夾量連續三天創新低
3. 小量上漲、大量拉回,代表警訊
類型、產業類別與催化事件
將公司做歸類,能夠有效協助我整理思緒與看法。這種程序可以幫助我決定一支股票所屬的市場類型,並藉此評估該股票處在成熟化循環或發展曲線上的位置。任何公司都不會永遠停留在發展曲線上的相同位置,有些股票會花更長時間待在循環的某個階段;可是,幾乎所有企業都會展現自然的成熟化程序。
作者考慮買進某支股票時,會判斷自己所處理的情況屬於哪種類型。對於相關公司營運所屬產業的性質,必須能夠知道如何預期盈餘成長,而且也了解市場對這方面展望的普遍看法,並觀察目前股價是否已經反應相關資訊。
他將股票劃分為六大類型:1.市場領導股2.頂級競爭股3.機構青睞股4.轉機股5.景氣循環股6.過氣領導股與落後股
本文所寫出的順勢策略主要希望選到市場領導股類型的股票,這也是讓作者賺到最多錢的股票類型。在此先不過多探討,但大家可另行觀察核對。
關於市場領導股:
這類企業會展現出最快速的盈餘成長。任何產業表現最傑出的企業,其銷貨、盈餘與市場佔有率的排名,通常都能保持在前三位。行情最初的上漲過程裡,市場領導股通常會有最大漲幅。它們會領均錢進,開疆闢土。
在成長相對遲緩的產業哩,一家企業如果能夠持續擴張市占率,同樣可以展現出很好的盈餘成長。關鍵重點是:公司必須賺大錢。財務狀況健全、獲利成長、淨值報酬率高、債務結構合理,這些都是企業管理健全的現象。
市場領導股在高速成長階段,有可能創造出驚人的價格漲勢。一般來說,它們的盈餘成長能夠保持在百分之二十或更高的程度。在表現最傑出的五年或十年期間裡,很多市場領導股能夠保持平均百分之三十五~四十五的盈餘成長。在成長最快速的時間裡,某些市場領導股甚至能夠創下三位數的成長。
成長股重點邏輯整理
綜合以上,本篇文章的示範策略將會透過以下條件,試著寫出擁有超級績效的策略。
技術面(趨勢):
找位於股票生命週期第二階段,也就是符合趨勢樣板(其中部分參數使用作者於他的付費課程中所揭露)的個股
1. 股價高於150日與200日移動平均
2. 150日移動平均高於200日移動平均
3. 200日移動平均至少有一個月期間處於上升狀態
4. 50日移動平均同時高於150日與200日移動平均
5. 股價超出52週低點25%
6. 股價距離52週高點不超過25%
7. 相對強度評等(RS Ranking)不低於70,最好是80多或90多
8. 股價高於50日移動平均
基本面:營收連兩月成長、盈餘大於零且連兩季成長、營業毛利連兩季成長
VCP型態確認:量縮、盤整
出場:簡單運用跌破20日均線作為出場依據
其中,趨勢樣板中的相對強度評等這項數據,作者是直接使用付費資料源,大部分的人想自行寫出這項條件可能容易卡關,不過透過運用python與finlab package,我們就能輕鬆計算出來。
而VCP是多數人早想透過程式模擬的技術型態,不過也是難於清楚定義,在這邊我們把他簡單分為1.量縮與2.盤整兩個部分。量縮可以輕易透過成交量變化寫出,而盤整的概念則較為模糊,但從「價格收縮」的角度出發,我們可以試著單純運用價格波動(標準差的運用)變化來達到。
在下一段落,馬上就能來看看如何實際寫成程式。
台股實作回測(美股績效大公開)
選股條件
技術面:符合趨勢模板(也是位於成長型股票生命週期第二階段)的股票
基本面:營收、盈餘、營業毛利近季有成長趨勢
濾網:VCP型態確認 -量縮、盤整
出場:跌破20日均線
美股回測績效展示
開始動手前先來看看實作在美股的回測績效。
除了使用原始技術面+基本面條件,我們也加入其他濾網。
1.原條件滿足三天再實際進場:等待型態更為正確,降低一進場則被洗盤的現象。(作者表示很多專業玩家非常擅長於引發散戶的停損,他們會設法讓股價跌破明顯支撐區,清出手中的浮動籌碼。)
2.VCP型態確認:尋找滿足作者所說的價格噴發前夕現象,量縮盤整時,當需求一放大、買盤出現則將加速價格向上帶動。
3.排除金融股:金融類股較不常有大幅價格波動,較不符合我們想找的位於價格成長階段的飆股特徵。
4.以乖離率排序,只持有前15名:集中持有與均線乖離大的個股,若是上方乖離大則預期他具有更大動能,若是在下方乖離大則也預期該個股能有個由低處拉回彈升的現象。
5.出場條件拿掉(不滿足原進場條件則出場):確保持有個股都依然維持強勢狀態,即使還沒跌破均線,但若已經開始表現疲乏則立馬換掉。
可以看到在美股的表現,年化報酬已超過50%,最大下跌甚至下降到20%左右,可以說是非常優秀。
將超級績效選股法搭配程式交易,在美股確實是可行的。而實作於台股的話呢?我們一起寫寫看。
台股實作
import 模組及抓取價量、財報資料。
from finlab import data
from finlab.backtest import sim
# 抓取資料
close = data.get('price:收盤價')
low = data.get('price:最低價')
high = data.get('price:最高價')
revenue = data.get('monthly_revenue:當月營收')
eps = data.get('financial_statement:每股盈餘')
grossprofit = data.get('financial_statement:營業毛利')
volume = data.get('price:成交股數')
接下來就是選股條件的撰寫了,在趨勢樣板中,其實主要只用到了移動平均及一些高低點的比較,很簡單吧。
唯一要說明的是第七項相對強度(Relative Strength, RS)評等,他並不是我們常見的RSI相對強弱指標,而是表達一個個股在整個大盤群體裡的強度的數值。作者在使用上是抓取investor網站的數值,而我們可以運用計算過去一年個股漲跌幅,搭配FinlabDataFrame的強大語法糖quantile_row()
抓取百分位數,輕鬆優雅地寫出來。
這篇文章把我們運用在這的相對強度邏輯解釋地非常清楚,可另行參考。
# 技術面選股(趨勢樣板)
cond1 = ((close > close.average(200)) & (close > close.average(150)))
cond2 = (close.average(150) > close.average(200))
cond3 = close.average(200) > close.average(200).shift(25)
cond4 = ((close.average(50) > close.average(200)) & (close.average(50) > close.average(150)))
cond5 = close > low.rolling(250).min()*1.25
cond6 = close > high.rolling(250).max()*0.75
rs = close / close.shift(250)
cond7 = rs > rs.quantile_row(0.9)
cond8 = (close > close.average(50))
在基本面條件撰寫中,也主要是rise()
(上漲)搭配sustain()
(維持幾個資料單位)的連環運用。
# 基本面選股
revenue_cond = revenue.rise().sustain(2)
eps_cond = eps.rise().sustain(2) & (eps > 0)
grossprofit_cond = grossprofit.rise().sustain(2)
VCP的量縮與盤整條件,這邊隨意取了兩個時間段(10日均與60日均)的比較,並加入自設參數,大家可再自行調整。
# vcp條件 量縮+盤整(價格收縮)
volumereduce = volume.average(10) < (volume.average(60)*0.6)
pricecontract = close.rolling(10).std() < (close.rolling(60).std()*0.5)
vcp = volumereduce & pricecontract
# 進場條件取交集
buy = cond1 & cond2 & cond3 & cond4 & cond5 & cond6 & cond7 & cond8 & revenue_cond & eps_cond & grossprofit_cond & vcp
# 出場
exits = (close < close.average(20))
position = buy.hold_until(exits)
# 回測
report = sim(position, name='超級績效',fee_ratio=1.425/1000/3)
回測結果
可以看到,除了在多頭年2021有抓到超級強勢股,但在大盤空頭走勢中完全沒有防守能力,最大下跌甚至超過年化報酬的兩倍,可以說這支策略離可以正式上線使用、穩定獲利還有一段遙遠的距離,接下來我們就繼續分析與優化。
績效解說-為什麼會有落差?
1.產業組成不同
美國上市公司眾多(近上萬家)、且產業組成較為平均,很容易找到實際走出一個完整價格成長循環的案例;而台灣公司數量少,且除了主要的科技金融股,大多就為一般中小型企業,比較不容易看到我們策略邏輯中所想找的「市場領導股」類型股票。
2.市場大小、市值大小、投資人結構差異
美國市場大且公司市值大、投資人類型眾多且分散,股價走勢結果較為貼近市場實際供需;而台灣當沖散戶比例較高、且公司市值小,股價容易出現異常拉抬現象,技術線型參考性降低,因此使用程式選股的效率性相對運用於美股會更為低落。
3.台股具有10%漲跌幅限制
當成長飆股起漲時,也許他的潛力遠超過一日10%,但台股的漲跌幅限制卻局限住了成長空間。
4.手續費差異
若使用Firstrade網路交易美股能享有0元手續費優惠,是以目前在美股回測中手續費直接設定為0元(回測中也尚未考慮交易稅);而在台灣不管用哪家券商,即使有手續費打折還是會被固定收取一定比例手續費與交易稅。長年回測下來成交筆數多的狀態下,台股交易會有很大比例的手續費與稅的成本。
其他調整
如在美股我們從一開始主邏輯中另外加入各層條件濾網,績效是大幅提升,在台股我們也試著運用一些相應的條件。
1.排除金融股 -在抓取資料時限定範圍
df = data.get('security_categories')
# 排除金融股
category_range = [ind for ind in list(set(df['category'])) if '金融' not in ind]
with data.universe(market='TSE_OTC',category=category_range):
close = data.get('price:收盤價')
low = data.get('price:最低價')
high = data.get('price:最高價')
revenue = data.get('monthly_revenue:當月營收')
eps = data.get('financial_statement:每股盈餘')
grossprofit = data.get('financial_statement:營業毛利')
volume = data.get('price:成交股數')
2. 出場條件改為跌破25日均線
# 出場條件更動
exits = (close < close.average(25))
position = buy.hold_until(exits)
3. 增加排序條件:以與5日均線的乖離程度排序,乖離越大則排序越前面,選擇只持有前3名的個股。
# 以與均線的乖離程度排序個股
bias = abs((close - close.average(5)) / close.average(5))
exits = (close < close.average(25))
position = buy.hold_until(exits,nstocks_limit=3,rank=bias.rank(1,ascending=True))
很遺憾的,在台股實作我們初步的結論是:把超級績效找成長股的方式直接應用於台股,並無法得到與在美股相當的超額報酬。
不過,透過適當調整參數與增加其他濾網、或是排序,我們依然可以將此策略優化至一定水準,雖然目前在這示範的結果還不到特佳,但還有許多可能有用的條件還沒用上呢,相信大家還是可以以此為基底繼續嘗試。
結語-身為散戶要如何繼續精進?
由此策略進一步優化
如上一段所展示,一樣的策略由美股直接挪用來應用在台股並不能獲得一樣的超額報酬,即使稍微調整了還是會有落差,不過,不管是由技術面、或基本面的條件,大家都可以再試著找出較為適合的參數或寫法,像是基本面中,原本只使用連兩季上升的條件,可以改成連三季、或是運用移動平均的判斷、使用與去年同比的變動;VCP型態中,量縮或盤整的日期長度判斷區間也能再自行調整;而出場條件也能由跌破均線再加入其他作者提到的「違反條件」(低價夾量連續三天創新低、小量上漲大量拉回等)。
或是從其他層面優化,例如再增加相關濾網、自行定義新的資料變數來設定個股排序依據、集中持有固定檔數;另外,也能考慮加入大盤走勢數據,以大盤是否為多頭來當作濾網之一想必也能大幅增加此順勢策略防守能力。一個策略,永遠都存在優化空間。
買書來看-增加知識點
本篇文章所做出來的策略其實只運用了超級績效中有提到的部分內容,除非你已經能做到完全自動化程式交易(完全不受任何操作上的限制而達到逼近回測的績效),就算是固定使用這一套策略,要能實際長期獲利,絕對還有很多眉角要注意。如果你能持續精進、有一套自己的研究,除了複製程式碼,你甚至能在程式篩選出來一籃子股票中,也運用對於財報的理解,做到更細部的人工挑選,篩出其他人看不到但其實更為適合你的投資的個股。
而書中其他內容都可再衍生其他各種策略,例如運用價格下降週期做空個股、抓盈餘由負轉正找轉機股做多等。而除了策略主邏輯,另外像停損設置、判斷市場為多頭空頭來決定使用不同策略、或是多策略資金管理、策略加簡碼等,還有各種學問等著我們來發掘呢。所以也邀請大家自行靜下來閱讀書中內容,找出屬於自己的成功因子。
給懶惰的你-直接投美股吧!
如果懶得自己優化策略用於台股(誰知道參數要放什麼才對,其他選股條件?沒靈感啦),也不想買書來看(內容實在太多了太冗長了是吧),不想看其他推薦影片(生活太忙碌?耍廢時間都不夠了),怎麼辦呢?其實也沒關係,我們絕對理解,身為投資新手的你願意看到這也真是辛苦了(掌聲鼓勵鼓勵!),好消息是,看完這篇文章的同時你也已經擁有一個美股超級績效策略了(啊你如果沒認真吸收也沒思考其中程式碼在做什麼也不算數,快點把文章存起來多看幾次),你絕對可以運用本篇提到的邏輯,即日起開始操作美股買賣。