結合多個選股條件的綜合選股方法

By | 2019-03-05

昨天介紹的作法被朋友打槍,他說這太難,大部份的人選股沒那麼複雜,而且沒有必要把高勝率的腳本綜合一起看,符合其中一個就可以留意了,他是個作短線的人,覺得選股打不贏內線,應該是透過一些條件,挑出一些符合多個多頭股票會有的共同特徵的標的,然後再從盤中的表現來決定怎麼操作,他建議我列出轉強股會有的共同特徵,而且是大家都看得懂的,然後幫大家計算出那幾檔股票符合最多這些特徵,進出場的事情交給大家自己來處理。

雖然覺得他的講法沒有完全都對,但還是有一定的道理,所以我列了二十個一般投資人都看得懂的選股條件,包括價值分析,籌碼分析,技術分析等等面向,然後透過計數器,挑出符合一定數量條件的股票

我寫的綜合選股腳本如下

input:lowlimit(9,"符合條件數下限");
var:counts(0);//宣告計數器
counts=0;//每根bar計算前計數器要歸零
//條件一: 本益比小於12
value1=GetField("本益比","D");
if value1<=12 then counts=counts+1;
//條件二:股價淨值比小於2
value2=GetField("股價淨值比","D");
if value2<2 then counts=counts+1;
//條件三:殖利率大於4
value3=GetField("殖利率","D");
if value3>4 then counts=counts+1;
//條件四:開盤委買量創20日高點
value4=GetField("開盤委買","D");
if value4=highest(value4,20) 
then counts=counts+1;
//條件五:佔全市場成交量比創20日高點
value5=GetField("佔全市場成交量比","D");
if value5=highest(value5,20)
then counts=counts+1;
//條件六:月營收維持兩位數成長
value6=GetField("月營收年增率","M");
if value6>=10 then counts=counts+1;
//條件七:現金股利超過一元
value7=GetField("現金股利","Y");
if value7>=1 then counts=counts+1;
//條件八: 外資買超
value8=GetField("外資買賣超","D");
if value8>=300 then counts=counts+1;
//條件九: 投信買超
value9=GetField("投信買賣超","D");
if value9>=300 then counts=counts+1;
//條件十: 董監事持股高於一定比例
value10=GetField("董監持股佔股本比例","D");
if value10>=25 then counts=counts+1;
//條件十一:主力連三日買超
value11=GetField("主力買賣超張數","D");
if trueall(value11>300,3) then counts=counts+1;
//條件十二:近一週千張大戶比前一週多
if GetField("大戶持股人數","W",param := 1000)
>GetField("大戶持股人數","W",param := 1000)[1]
then counts=counts+1;
//條件十三:地緣券商買超
value12=GetField("地緣券商買賣超張數","D");
if value12>100 then counts=counts+1;
//條件十四:分公司淨賣超家數超過淨買超的兩倍
//代表籌碼被收集
value13=GetField("分公司淨買超金額家數","D");
value14=GetField("分公司淨賣超金額家數","D");
if value14>2*value13 then counts=counts+1;
//條件十五: 近三日動量指標有突破零
if barslast(Momentum(Close, 10) Crosses Above 0)<=3
then counts=counts+1;
//條件十六:近三日有RSI黃金交叉
if barslast(RSI(Close, 5) Crosses Above RSI(Close, 10))<=3
then counts=counts+1;
//條件十七:關鍵券商買超
value15=GetField("關鍵券商買賣超張數","D");
if value15>0 then counts=counts+1;
//條件十八: 股價突破兩倍的真實波動區間
value16=average(truerange,20);
value17=average(close,20)+2*value16;
if close crosses over value17 
then counts=counts+1;
//條件十九:上漲角度突破30度
value18=rateofchange(close,20);
value19=arctangent(value18/20*100);
if value19 crosses over 30
then counts=counts+1;
//條件二十: 出量
if volume >=average(volume,20)*1.3
then counts=counts+1;
if counts>=lowlimit then ret=1;
outputfield(1,counts,0,"符合條件數");

這個腳本前天跑出來的股票清單如下

2019030501

其中確實有些昨天表現還不錯

我試著回測,如果把符合條件下限定在9,回測的結果因為出來的股票太多,表現跟指數差不多,如果把下限定為11,停利訂為7%,停損訂為5%,回測報告如下

2019030502

可以創造很大的交易量,然後每年有穩定但不高的報酬,但表現比指數好,如果把下限定為12,勝率及總報酬都更好。

顯然我朋友大道至簡的說法,還是有他的道理

不過今天介紹這個方法的主要目的還是在說明計數器的用法,以及barslast的概念,大家不見得同意我這二十項條件的設法,透過計數器及barslast的語法,大家可以自行設計自己的綜合選股法。

 

你可能會有興趣的文章

回應